Change how wiki page settings and resources are presented from an wiki page in edit mode, update copyrights to 2023, remove short close tags, a=chris

Chris Pollett [2023-01-02 05:Jan:nd]
Change how wiki page settings and resources are presented from an wiki page in edit mode, update copyrights to 2023, remove short close tags, a=chris
Filename
index.php
src/advertise.php
src/blog.php
src/bot.php
src/configs/Config.php
src/configs/ConfigureTool.php
src/configs/Createdb.php
src/configs/CreditConfig.php
src/configs/ExportPublicHelpDb.php
src/configs/GroupWikiTool.php
src/configs/PublicHelpPages.php
src/configs/TokenTool.php
src/configs/default_crawl.ini
src/controllers/AdminController.php
src/controllers/ApiController.php
src/controllers/ArchiveController.php
src/controllers/ClassifierController.php
src/controllers/Controller.php
src/controllers/CrawlController.php
src/controllers/FetchController.php
src/controllers/GroupController.php
src/controllers/JobsController.php
src/controllers/MachineController.php
src/controllers/RegisterController.php
src/controllers/ResourceController.php
src/controllers/SearchController.php
src/controllers/StaticController.php
src/controllers/TestsController.php
src/controllers/components/AccountaccessComponent.php
src/controllers/components/ChatbotComponent.php
src/controllers/components/Component.php
src/controllers/components/CrawlComponent.php
src/controllers/components/SocialComponent.php
src/controllers/components/StoreComponent.php
src/controllers/components/SystemComponent.php
src/css/editor.css
src/css/messages.css
src/css/search.css
src/error.php
src/examples/QueryCacher.php
src/examples/SearchApi.php
src/examples/StockBot.php
src/examples/WeatherBot.php
src/executables/ArcTool.php
src/executables/ClassifierTool.php
src/executables/ClassifierTrainer.php
src/executables/CodeTool.php
src/executables/DictionaryUpdater.php
src/executables/Fetcher.php
src/executables/MediaUpdater.php
src/executables/Mirror.php
src/executables/QueryTool.php
src/executables/QueueServer.php
src/index.php
src/library/AnalyticsManager.php
src/library/BPlusTree.php
src/library/BloomFilterBundle.php
src/library/BloomFilterFile.php
src/library/Bzip2BlockIterator.php
src/library/ComputerVision.php
src/library/ContextTagger.php
src/library/CrawlConstants.php
src/library/CrawlDaemon.php
src/library/CrawlQueueBundle.php
src/library/DoubleIndexBundle.php
src/library/FeedArchiveBundle.php
src/library/FeedDocumentBundle.php
src/library/FetchGitRepositoryUrls.php
src/library/FetchUrl.php
src/library/FileCache.php
src/library/HashTable.php
src/library/IndexArchiveBundle.php
src/library/IndexDictionary.php
src/library/IndexDocumentBundle.php
src/library/IndexManager.php
src/library/IndexShard.php
src/library/JavascriptUnitTest.php
src/library/LRUCache.php
src/library/Library.php
src/library/LinearAlgebra.php
src/library/LinearHashTable.php
src/library/LocaleFunctions.php
src/library/MailServer.php
src/library/MediaConstants.php
src/library/NWordGrams.php
src/library/NamedEntityContextTagger.php
src/library/Notifier.php
src/library/PackedTableTools.php
src/library/PageRuleParser.php
src/library/PartOfSpeechContextTagger.php
src/library/PartialZipArchive.php
src/library/PartitionDocumentBundle.php
src/library/PersistentStructure.php
src/library/PhraseParser.php
src/library/PriorityQueue.php
src/library/ScraperManager.php
src/library/StochasticTermSegmenter.php
src/library/StringArray.php
src/library/SuffixTree.php
src/library/Trie.php
src/library/UnitTest.php
src/library/UpgradeFunctions.php
src/library/UrlParser.php
src/library/Utility.php
src/library/VersionFunctions.php
src/library/VersionManager.php
src/library/WebArchive.php
src/library/WebArchiveBundle.php
src/library/WebSite.php
src/library/WikiParser.php
src/library/archive_bundle_iterators/ArcArchiveBundleIterator.php
src/library/archive_bundle_iterators/ArchiveBundleIterator.php
src/library/archive_bundle_iterators/DatabaseBundleIterator.php
src/library/archive_bundle_iterators/MediaWikiArchiveBundleIterator.php
src/library/archive_bundle_iterators/MixArchiveBundleIterator.php
src/library/archive_bundle_iterators/OdpRdfArchiveBundleIterator.php
src/library/archive_bundle_iterators/TextArchiveBundleIterator.php
src/library/archive_bundle_iterators/WarcArchiveBundleIterator.php
src/library/archive_bundle_iterators/WebArchiveBundleIterator.php
src/library/classifiers/BinaryFeatures.php
src/library/classifiers/ChiSquaredFeatureSelection.php
src/library/classifiers/Classifier.php
src/library/classifiers/ClassifierAlgorithm.php
src/library/classifiers/FeatureSelection.php
src/library/classifiers/Features.php
src/library/classifiers/LassoRegression.php
src/library/classifiers/NaiveBayes.php
src/library/classifiers/SparseMatrix.php
src/library/classifiers/WeightedFeatures.php
src/library/compressors/Compressor.php
src/library/compressors/GzipCompressor.php
src/library/compressors/NonCompressor.php
src/library/index_bundle_iterators/DisjointIterator.php
src/library/index_bundle_iterators/DocIterator.php
src/library/index_bundle_iterators/GroupIterator.php
src/library/index_bundle_iterators/IndexBundleIterator.php
src/library/index_bundle_iterators/IntersectIterator.php
src/library/index_bundle_iterators/NegationIterator.php
src/library/index_bundle_iterators/NetworkIterator.php
src/library/index_bundle_iterators/UnionIterator.php
src/library/index_bundle_iterators/WordIterator.php
src/library/indexing_plugins/AddressesPlugin.php
src/library/indexing_plugins/WordfilterPlugin.php
src/library/media_jobs/AnalyticsJob.php
src/library/media_jobs/BulkEmailJob.php
src/library/media_jobs/DescriptionUpdateJob.php
src/library/media_jobs/FeedsUpdateJob.php
src/library/media_jobs/MediaJob.php
src/library/media_jobs/PodcastDownloadJob.php
src/library/media_jobs/RecommendationJob.php
src/library/media_jobs/TrendingHighlightsJob.php
src/library/media_jobs/VideoConvertJob.php
src/library/media_jobs/WikiThumbDetailJob.php
src/library/processors/BmpProcessor.php
src/library/processors/CompressedProcessor.php
src/library/processors/DocProcessor.php
src/library/processors/DocxProcessor.php
src/library/processors/EpubProcessor.php
src/library/processors/GifProcessor.php
src/library/processors/GitXmlProcessor.php
src/library/processors/GopherProcessor.php
src/library/processors/HtmlProcessor.php
src/library/processors/IconProcessor.php
src/library/processors/ImageProcessor.php
src/library/processors/JavaProcessor.php
src/library/processors/JpgProcessor.php
src/library/processors/PageProcessor.php
src/library/processors/PdfProcessor.php
src/library/processors/PngProcessor.php
src/library/processors/PptProcessor.php
src/library/processors/PptxProcessor.php
src/library/processors/PythonProcessor.php
src/library/processors/RobotProcessor.php
src/library/processors/RssProcessor.php
src/library/processors/RtfProcessor.php
src/library/processors/SitemapProcessor.php
src/library/processors/SvgProcessor.php
src/library/processors/TextProcessor.php
src/library/processors/VideoProcessor.php
src/library/processors/XlsxProcessor.php
src/library/processors/XmlProcessor.php
src/library/summarizers/CentroidSummarizer.php
src/library/summarizers/CentroidWeightedSummarizer.php
src/library/summarizers/GraphBasedSummarizer.php
src/library/summarizers/ScrapeSummarizer.php
src/library/summarizers/Summarizer.php
src/locale/ar/configure.ini
src/locale/ar/resources/Tokenizer.php
src/locale/ar/resources/locale.js
src/locale/bn/configure.ini
src/locale/bn/resources/Tokenizer.php
src/locale/bn/resources/locale.js
src/locale/de/configure.ini
src/locale/de/resources/Tokenizer.php
src/locale/de/resources/locale.js
src/locale/el_GR/configure.ini
src/locale/el_GR/resources/Tokenizer.php
src/locale/el_GR/resources/locale.js
src/locale/en_US/configure.ini
src/locale/en_US/resources/Tokenizer.php
src/locale/en_US/resources/locale.js
src/locale/es/configure.ini
src/locale/es/resources/Tokenizer.php
src/locale/es/resources/locale.js
src/locale/fa/configure.ini
src/locale/fa/resources/Tokenizer.php
src/locale/fa/resources/locale.js
src/locale/fr_FR/configure.ini
src/locale/fr_FR/resources/Tokenizer.php
src/locale/fr_FR/resources/locale.js
src/locale/he/configure.ini
src/locale/he/resources/Tokenizer.php
src/locale/he/resources/locale.js
src/locale/hi/configure.ini
src/locale/hi/resources/Tokenizer.php
src/locale/hi/resources/locale.js
src/locale/id/configure.ini
src/locale/id/resources/Tokenizer.php
src/locale/id/resources/locale.js
src/locale/it/configure.ini
src/locale/it/resources/Tokenizer.php
src/locale/it/resources/locale.js
src/locale/ja/configure.ini
src/locale/ja/resources/Tokenizer.php
src/locale/ja/resources/locale.js
src/locale/kn/configure.ini
src/locale/kn/resources/Tokenizer.php
src/locale/kn/resources/locale.js
src/locale/ko/configure.ini
src/locale/ko/resources/Tokenizer.php
src/locale/ko/resources/locale.js
src/locale/nl/configure.ini
src/locale/nl/resources/Tokenizer.php
src/locale/nl/resources/locale.js
src/locale/pl/configure.ini
src/locale/pl/resources/Tokenizer.php
src/locale/pl/resources/locale.js
src/locale/pt/configure.ini
src/locale/pt/resources/Tokenizer.php
src/locale/pt/resources/locale.js
src/locale/ru/configure.ini
src/locale/ru/resources/Tokenizer.php
src/locale/ru/resources/locale.js
src/locale/te/configure.ini
src/locale/te/resources/Tokenizer.php
src/locale/te/resources/locale.js
src/locale/th/configure.ini
src/locale/th/resources/Tokenizer.php
src/locale/th/resources/locale.js
src/locale/tl/configure.ini
src/locale/tl/resources/Tokenizer.php
src/locale/tl/resources/locale.js
src/locale/tr/configure.ini
src/locale/tr/resources/Tokenizer.php
src/locale/tr/resources/locale.js
src/locale/vi_VN/configure.ini
src/locale/vi_VN/resources/Tokenizer.php
src/locale/vi_VN/resources/locale.js
src/locale/zh_CN/configure.ini
src/locale/zh_CN/resources/Tokenizer.php
src/locale/zh_CN/resources/locale.js
src/models/ActivityModel.php
src/models/AdvertisementModel.php
src/models/BotModel.php
src/models/CaptchaModel.php
src/models/CrawlModel.php
src/models/CreditModel.php
src/models/CronModel.php
src/models/GroupModel.php
src/models/ImpressionModel.php
src/models/LocaleModel.php
src/models/MachineModel.php
src/models/Model.php
src/models/ParallelModel.php
src/models/PhraseModel.php
src/models/ProfileModel.php
src/models/RoleModel.php
src/models/ScraperModel.php
src/models/SearchverticalsModel.php
src/models/SigninModel.php
src/models/SourceModel.php
src/models/TrendingModel.php
src/models/UserModel.php
src/models/VisitorModel.php
src/models/datasources/DatasourceManager.php
src/models/datasources/MysqlManager.php
src/models/datasources/PdoManager.php
src/models/datasources/Sqlite3Manager.php
src/privacy.php
src/scripts/basic.js
src/scripts/big_int.js
src/scripts/chart.js
src/scripts/classifiers.js
src/scripts/hash_captcha.js
src/scripts/help.js
src/scripts/history.js
src/scripts/messages.js
src/scripts/mix.js
src/scripts/register_validator.js
src/scripts/sha1.js
src/scripts/slidy.js
src/scripts/spreadsheet.js
src/scripts/suggest.js
src/scripts/vr-util.js
src/scripts/wiki.js
src/terms.php
src/views/AdminView.php
src/views/ApiView.php
src/views/ComponentView.php
src/views/CrawlstatusView.php
src/views/FeedstatusView.php
src/views/FetchView.php
src/views/GroupView.php
src/views/MachinestatusView.php
src/views/MediadetailView.php
src/views/NocacheView.php
src/views/RecoverView.php
src/views/RegisterView.php
src/views/ResendEmailView.php
src/views/RssView.php
src/views/SearchView.php
src/views/SigninView.php
src/views/StaticView.php
src/views/SuggestView.php
src/views/TestsView.php
src/views/View.php
src/views/elements/AdminElement.php
src/views/elements/AdminbarElement.php
src/views/elements/AdminmenuElement.php
src/views/elements/ApiElement.php
src/views/elements/AppearanceElement.php
src/views/elements/BotstoryElement.php
src/views/elements/ConfigureElement.php
src/views/elements/CrawlcontrolsElement.php
src/views/elements/CrawloptionsElement.php
src/views/elements/DisplayadvertisementElement.php
src/views/elements/EditclassifierElement.php
src/views/elements/EditlocalesElement.php
src/views/elements/EditmixElement.php
src/views/elements/Element.php
src/views/elements/FooterElement.php
src/views/elements/GroupElement.php
src/views/elements/GroupbarElement.php
src/views/elements/GroupfeedElement.php
src/views/elements/GroupmenuElement.php
src/views/elements/HeaderElement.php
src/views/elements/HelpElement.php
src/views/elements/LanguageElement.php
src/views/elements/MachinelogElement.php
src/views/elements/ManageaccountElement.php
src/views/elements/ManageadvertisementsElement.php
src/views/elements/ManageclassifiersElement.php
src/views/elements/ManagecrawlsElement.php
src/views/elements/ManagecreditsElement.php
src/views/elements/ManagegroupsElement.php
src/views/elements/ManagelocalesElement.php
src/views/elements/ManagemachinesElement.php
src/views/elements/ManagerolesElement.php
src/views/elements/ManageusersElement.php
src/views/elements/MediajobsElement.php
src/views/elements/MixcrawlsElement.php
src/views/elements/PageoptionsElement.php
src/views/elements/PaginationElement.php
src/views/elements/QuerystatsElement.php
src/views/elements/ResultseditorElement.php
src/views/elements/ScrapersElement.php
src/views/elements/SearchElement.php
src/views/elements/SearchbarElement.php
src/views/elements/SearchcalloutElement.php
src/views/elements/SearchmenuElement.php
src/views/elements/SearchsourcesElement.php
src/views/elements/SecurityElement.php
src/views/elements/ServersettingsElement.php
src/views/elements/SideadvertisementElement.php
src/views/elements/SocialcontrolsElement.php
src/views/elements/StatisticsElement.php
src/views/elements/TopadvertisementElement.php
src/views/elements/TrendingElement.php
src/views/elements/UsermessagesElement.php
src/views/elements/WelcomemenuElement.php
src/views/elements/WikiElement.php
src/views/helpers/CloseHelper.php
src/views/helpers/EmojipickerHelper.php
src/views/helpers/FeedsHelper.php
src/views/helpers/FiletypeHelper.php
src/views/helpers/FileuploadHelper.php
src/views/helpers/GrouplistHelper.php
src/views/helpers/HamburgerHelper.php
src/views/helpers/HelpbuttonHelper.php
src/views/helpers/Helper.php
src/views/helpers/IconlinkHelper.php
src/views/helpers/ImagesHelper.php
src/views/helpers/OptionsHelper.php
src/views/helpers/PaginationHelper.php
src/views/helpers/PagingtableHelper.php
src/views/helpers/SearchformHelper.php
src/views/helpers/ToggleHelper.php
src/views/helpers/VideosHelper.php
src/views/helpers/VideourlHelper.php
src/views/layouts/ApiLayout.php
src/views/layouts/Layout.php
src/views/layouts/RssLayout.php
src/views/layouts/WebLayout.php
tests/BPlusTreeTest.php
tests/BloomFilterFileTest.php
tests/BmpProcessorTest.php
tests/CrawlQueueBundleTest.php
tests/DeTokenizerTest.php
tests/DocxProcessorTest.php
tests/ElTokenizerTest.php
tests/EnTokenizerTest.php
tests/EpubProcessorTest.php
tests/EsTokenizerTest.php
tests/FaTokenizerTest.php
tests/FetchUrlTest.php
tests/FrTokenizerTest.php
tests/HashTableTest.php
tests/HiTokenizerTest.php
tests/IconProcessorTest.php
tests/IndexDictionaryTest.php
tests/IndexDocumentBundleTest.php
tests/IndexManagerTest.php
tests/IndexShardTest.php
tests/ItTokenizerTest.php
tests/LinearHashTableTest.php
tests/ManyScrapersExperiment.php
tests/ManyUserExperiment.php
tests/NlTokenizerTest.php
tests/PackedTableToolsTest.php
tests/PdfProcessorTest.php
tests/PhraseParserTest.php
tests/PptxProcessorTest.php
tests/PriorityQueueTest.php
tests/PtTokenizerTest.php
tests/QueueServerTest.php
tests/RuTokenizerTest.php
tests/ScraperManagerTest.php
tests/Sha1JavascriptTest.php
tests/SocketExperiment.php
tests/StringArrayTest.php
tests/StringCatExperiment.php
tests/TrieTest.php
tests/UrlParserTest.php
tests/UtilityTest.php
tests/VersionManagerTest.php
tests/WebArchiveTest.php
tests/WikiParserTest.php
tests/WordIteratorTest.php
tests/XlsxProcessorTest.php
tests/ZhTokenizerTest.php
tests/test_files/VocabSampler.php
tests/test_files/scrapers/Drupal01.txt
tests/test_files/scrapers/Drupal02.txt
tests/test_files/scrapers/Drupal03.txt
tests/test_files/scrapers/Drupal04.txt
tests/test_files/scrapers/Wordpress01.txt
tests/test_files/scrapers/Wordpress02.txt
tests/test_files/scrapers/Wordpress03.txt
tests/test_files/scrapers/Wordpress04.txt
tests/test_files/scrapers/Yioop01.txt
tests/test_files/scrapers/vBulletin01.txt
tests/test_files/scrapers/vBulletin02.txt
work_directory/_placeholder.php
diff --git a/index.php b/index.php
index 4812af33a..554a8c758 100644
--- a/index.php
+++ b/index.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/advertise.php b/src/advertise.php
index 9325c6b0a..dd480397a 100644
--- a/src/advertise.php
+++ b/src/advertise.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/blog.php b/src/blog.php
index 2bb7b088a..3de352b21 100755
--- a/src/blog.php
+++ b/src/blog.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/bot.php b/src/bot.php
index ad5e3da58..642573a51 100644
--- a/src/bot.php
+++ b/src/bot.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/configs/Config.php b/src/configs/Config.php
index 7aa3ba2ba..160c98e86 100755
--- a/src/configs/Config.php
+++ b/src/configs/Config.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -34,7 +34,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\configs;
diff --git a/src/configs/ConfigureTool.php b/src/configs/ConfigureTool.php
index 71c1f4fc6..853d30d6a 100644
--- a/src/configs/ConfigureTool.php
+++ b/src/configs/ConfigureTool.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\configs;
@@ -128,7 +128,7 @@ class ConfigureTool
         $data = $this->callConfigure();
         e("Checking Yioop configuration...".
             "\n===============================\n");
-        $check_status = str_replace("<br />", "\n", $data["SYSTEM_CHECK"]);
+        $check_status = str_replace("<br>", "\n", $data["SYSTEM_CHECK"]);
         e($check_status."\n===============================\n");
         $items = ["workDirectory" => "Create/Set Work Directory",
             "quit" => "Exit program"];
diff --git a/src/configs/Createdb.php b/src/configs/Createdb.php
index 973e87af8..3e5e885ce 100755
--- a/src/configs/Createdb.php
+++ b/src/configs/Createdb.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -29,7 +29,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\configs;
diff --git a/src/configs/CreditConfig.php b/src/configs/CreditConfig.php
index 95e7d6157..c2c636dfc 100644
--- a/src/configs/CreditConfig.php
+++ b/src/configs/CreditConfig.php
@@ -2,7 +2,7 @@
 /**
  * SeekQuarry/Yioop -- Credit Card Configuration
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  * All rights reserved
  */
 namespace seekquarry\yioop\configs;
diff --git a/src/configs/ExportPublicHelpDb.php b/src/configs/ExportPublicHelpDb.php
index 252c0c523..b1123ce59 100644
--- a/src/configs/ExportPublicHelpDb.php
+++ b/src/configs/ExportPublicHelpDb.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -29,7 +29,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\configs;
@@ -73,7 +73,7 @@ $out .= <<< EOD
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -99,7 +99,7 @@ $out .= <<< EOD
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 EOD;
diff --git a/src/configs/GroupWikiTool.php b/src/configs/GroupWikiTool.php
index f0b0b4e1b..4dff1a775 100644
--- a/src/configs/GroupWikiTool.php
+++ b/src/configs/GroupWikiTool.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -31,7 +31,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */

diff --git a/src/configs/PublicHelpPages.php b/src/configs/PublicHelpPages.php
index a5b4715e3..5618767a1 100644
--- a/src/configs/PublicHelpPages.php
+++ b/src/configs/PublicHelpPages.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -29,7 +29,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\configs;
diff --git a/src/configs/TokenTool.php b/src/configs/TokenTool.php
index 342d52b45..829b1299e 100644
--- a/src/configs/TokenTool.php
+++ b/src/configs/TokenTool.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -31,7 +31,7 @@
  *     ngrams, added more functionality)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */

diff --git a/src/configs/default_crawl.ini b/src/configs/default_crawl.ini
index 9ee61be1b..816784bd0 100644
--- a/src/configs/default_crawl.ini
+++ b/src/configs/default_crawl.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
diff --git a/src/controllers/AdminController.php b/src/controllers/AdminController.php
index 7ddaa6b52..e5b4a725f 100755
--- a/src/controllers/AdminController.php
+++ b/src/controllers/AdminController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/ApiController.php b/src/controllers/ApiController.php
index 3848ab8df..fb774d3ab 100644
--- a/src/controllers/ApiController.php
+++ b/src/controllers/ApiController.php
@@ -3,7 +3,7 @@
  *  SeekQuarry/Yioop --
  *  Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- *  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ *  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  *  LICENSE:
  *
@@ -25,7 +25,7 @@
  *  @author Eswara Rajesh Pinapala epinapala@live.com
  *  @license https://www.gnu.org/licenses/ GPL3
  *  @link https://www.seekquarry.com/
- *  @copyright 2009 - 2022
+ *  @copyright 2009 - 2023
  *  @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/ArchiveController.php b/src/controllers/ArchiveController.php
index 6335770eb..819138794 100755
--- a/src/controllers/ArchiveController.php
+++ b/src/controllers/ArchiveController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/ClassifierController.php b/src/controllers/ClassifierController.php
index fcd118638..1340b4ec1 100644
--- a/src/controllers/ClassifierController.php
+++ b/src/controllers/ClassifierController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/Controller.php b/src/controllers/Controller.php
index e06fff80e..86074c052 100755
--- a/src/controllers/Controller.php
+++ b/src/controllers/Controller.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/CrawlController.php b/src/controllers/CrawlController.php
index d3c3f4f72..7fa562cf8 100644
--- a/src/controllers/CrawlController.php
+++ b/src/controllers/CrawlController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/FetchController.php b/src/controllers/FetchController.php
index 943bae57d..4d9957b56 100755
--- a/src/controllers/FetchController.php
+++ b/src/controllers/FetchController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/GroupController.php b/src/controllers/GroupController.php
index 040c09ab1..fef96642c 100644
--- a/src/controllers/GroupController.php
+++ b/src/controllers/GroupController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/JobsController.php b/src/controllers/JobsController.php
index 56ba4f052..3981e844d 100644
--- a/src/controllers/JobsController.php
+++ b/src/controllers/JobsController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/MachineController.php b/src/controllers/MachineController.php
index da0f96743..4891e6ef4 100644
--- a/src/controllers/MachineController.php
+++ b/src/controllers/MachineController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/RegisterController.php b/src/controllers/RegisterController.php
index 6e8e34128..27571510c 100755
--- a/src/controllers/RegisterController.php
+++ b/src/controllers/RegisterController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/ResourceController.php b/src/controllers/ResourceController.php
index f2a399b41..4260b5bb8 100644
--- a/src/controllers/ResourceController.php
+++ b/src/controllers/ResourceController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/SearchController.php b/src/controllers/SearchController.php
index 776228582..08d160eb2 100755
--- a/src/controllers/SearchController.php
+++ b/src/controllers/SearchController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
@@ -2169,10 +2169,10 @@ EOD;
             tl('search_controller_site_cache') . "</title></head>".
             "<body><object onclick=\"document.location='$loc_url'\"".
             " data='data:$type;base64,".
-            base64_encode($cache_file)."' type='$type' />";
+            base64_encode($cache_file)."' type='$type' >";
         if ($loc_url != $url) {
             $cache_file .= "<p>".tl('search_controller_original_page').
-                "<br /><a href='$loc_url'>$loc_url</a></p>";
+                "<br><a href='$loc_url'>$loc_url</a></p>";
         }
         $cache_file .= "</body></html>";
         return $cache_file;
diff --git a/src/controllers/StaticController.php b/src/controllers/StaticController.php
index ff90729ec..38b230da4 100644
--- a/src/controllers/StaticController.php
+++ b/src/controllers/StaticController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/TestsController.php b/src/controllers/TestsController.php
index 4a64f8975..4881f1a78 100644
--- a/src/controllers/TestsController.php
+++ b/src/controllers/TestsController.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers;
diff --git a/src/controllers/components/AccountaccessComponent.php b/src/controllers/components/AccountaccessComponent.php
index d19834b7e..86d5cc816 100644
--- a/src/controllers/components/AccountaccessComponent.php
+++ b/src/controllers/components/AccountaccessComponent.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers\components;
diff --git a/src/controllers/components/ChatbotComponent.php b/src/controllers/components/ChatbotComponent.php
index 7592772da..0a6e40915 100644
--- a/src/controllers/components/ChatbotComponent.php
+++ b/src/controllers/components/ChatbotComponent.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers\components;
diff --git a/src/controllers/components/Component.php b/src/controllers/components/Component.php
index d3706dc4d..5aeb3d78a 100644
--- a/src/controllers/components/Component.php
+++ b/src/controllers/components/Component.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers\components;
diff --git a/src/controllers/components/CrawlComponent.php b/src/controllers/components/CrawlComponent.php
index f1943ecf7..fad0a629e 100644
--- a/src/controllers/components/CrawlComponent.php
+++ b/src/controllers/components/CrawlComponent.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers\components;
@@ -1133,7 +1133,7 @@ class CrawlComponent extends Component implements CrawlConstants
                 if ($inject_urls != [] &&
                     $crawl_model->injectUrlsCurrentCrawl(
                         $timestamp, $inject_urls, $machine_urls)) {
-                    $add_message = "<br />".
+                    $add_message = "<br>".
                         tl('crawl_component_urls_injected');
                     if (isset($_REQUEST['use_suggest']) &&
                         $_REQUEST['use_suggest']) {
diff --git a/src/controllers/components/SocialComponent.php b/src/controllers/components/SocialComponent.php
index 7e0306d1f..6cf4a7cab 100644
--- a/src/controllers/components/SocialComponent.php
+++ b/src/controllers/components/SocialComponent.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers\components;
@@ -3404,6 +3404,8 @@ class SocialComponent extends Component implements CrawlConstants
                             "wiki.scrollTop = $scroll_top;";
                     }
                     $data["MODE"] = "source";
+                    $data["settings"] = (!empty($_REQUEST['settings']));
+                    $data["resources"] = (!empty($_REQUEST['resources']));
                     $page_info = $group_model->getPageInfoByName($group_id,
                         $page_name, $data['CURRENT_LOCALE_TAG'], 'resources');
                     /* if page not yet created than $page_info will be null
@@ -3499,7 +3501,6 @@ class SocialComponent extends Component implements CrawlConstants
                     $data['SCRIPT'] .= "initScrollPositionPreserver('".
                         $data['DETAIL_SCROLL_ID'] . "');";
                 }
-                $data['settings'] = "false";
                 if (!empty($data['RESOURCE_NAME'])) {
                     $name_parts = pathinfo($data['RESOURCE_NAME']);
                     if (!empty($name_parts['extension']) &&
@@ -3523,12 +3524,16 @@ class SocialComponent extends Component implements CrawlConstants
                         }
                     }
                 }
-                if (isset($_REQUEST['settings']) &&
-                     $_REQUEST['settings'] == 'true') {
-                    $data['settings'] = "true";
+                foreach (['settings', 'resources'] as $field) {
+                    $data[$field] = "false";
+                    if (isset($_REQUEST[$field]) &&
+                         $_REQUEST[$field] == 'true') {
+                        $data[$field] = "true";
+                    }
                 }
                 $data['current_page_type'] = $data["page_type"];
-                if ($data['current_page_type'] == 'url_shortener') {
+                if ($data['current_page_type'] == 'url_shortener'
+                    && $data['MODE'] == 'edit') {
                     $this->makeImpressionChart($data, C\WIKI_IMPRESSION,
                         C\ONE_DAY, $data['PAGE_ID'], "day_chart",
                         "day-chart");
@@ -3561,7 +3566,7 @@ class SocialComponent extends Component implements CrawlConstants
                         $tmp_page = preg_replace("/{{text\|(.+?)\|(.+?)}}/",
                             "<input type='text' class='narrow-field'" .
                             " name='page[$1]' placeholder='$2'" .
-                            " value='{{field|$1}}' />", $tmp_page);
+                            " value='{{field|$1}}' >", $tmp_page);
                         $tmp_page = preg_replace("/{{area\|(.+?)\|(.+?)}}/",
                             "<textarea class='short-text-area'" .
                             " name='page[$1]' placeholder='$2'>" .
@@ -3603,6 +3608,8 @@ class SocialComponent extends Component implements CrawlConstants
         return $data;
     }
     /**
+     * Used to process form data associated with a wiki page with a form on it.
+     * Such a form's data is stored in a CSV file
      *
      * @param array &$data associative array of values to be echoed by the view
      * @param int $user_id id of user requesting a wiki page
@@ -3620,10 +3627,11 @@ class SocialComponent extends Component implements CrawlConstants
         $default_folders = $group_model->getGroupPageResourcesFolders($group_id,
             $data['PAGE_ID']);
         $csv_filepath = $default_folders[0] . '/' . C\WIKI_FORM_CSV_FILE;
+        $preserve_fields =
+            ['arg', 'page_name', 'settings', 'caret', 'scroll_top', 'sf'];
         if (!$parent->checkCSRFToken($_POST[C\CSRF_TOKEN], $user_id, true)) {
             return $parent->redirectWithMessage(
-                tl('social_component_page_data_expired'),
-                ['arg', 'page_name', 'settings', 'caret', 'scroll_top', 'sf']);
+                tl('social_component_page_data_expired'), $preserve_fields);
         }
         $page = $data['PAGE'];
         $tmp_page = preg_replace("/\[{form\-hash(.+?)}\]/", "[{form-hash}]",
@@ -3632,21 +3640,18 @@ class SocialComponent extends Component implements CrawlConstants
             L\crawlHash($tmp_page));
         if ($csv_form_hash != $_POST['CSV_FORM_HASH']) {
             return $parent->redirectWithMessage(
-                tl('social_component_page_integrity_issue'),
-                ['arg', 'page_name', 'settings', 'caret', 'scroll_top', 'sf']);
+                tl('social_component_page_integrity_issue'), $preserve_fields);
         }
         $csv_headers = [];
         if (empty($_POST['CSVFORM']['user_captcha_text'])) {
             return $parent->redirectWithMessage(
-                tl('social_component_form_needs_captcha'),
-                ['arg', 'page_name', 'settings', 'caret', 'scroll_top', 'sf']);
+                tl('social_component_form_needs_captcha'), $preserve_fields);
         }
         $num_fields = count($_POST['CSVFORM'] ?? []) +
             count($_POST['RCSVFORM'] ?? []);
         if ($num_fields > C\MAX_WIKI_FORM_FIELDS) {
             return $parent->redirectWithMessage(
-                tl('social_component_too_many_fields_form'),
-                ['arg', 'page_name', 'settings', 'caret', 'scroll_top', 'sf']);
+                tl('social_component_too_many_fields_form'), $preserve_fields);
         }
         $csv_form_info = [$_POST['CSVFORM'] ?? [] , $_POST['RCSVFORM'] ??[]];
         foreach ($csv_form_info as $csv_form_fields) {
@@ -3664,8 +3669,7 @@ class SocialComponent extends Component implements CrawlConstants
         if (file_exists($csv_filepath)) {
             if (filesize($csv_filepath) > C\MAX_WIKI_FORM_CSV_SIZE) {
                 return $parent->redirectWithMessage(
-                    tl('social_component_csv_too_big'), ['arg', 'page_name',
-                    'settings', 'caret', 'scroll_top', 'sf']);
+                    tl('social_component_csv_too_big'), $preserve_fields);
             }
             $fh = fopen($csv_filepath, "a+");
         } else {
@@ -3678,8 +3682,7 @@ class SocialComponent extends Component implements CrawlConstants
             if ($is_required && empty($_POST[$csv_header])) {
                 return $parent->redirectWithMessage(
                     tl('social_component_fill_required_fields'), array_merge(
-                    ['arg', 'page_name', 'settings', 'caret', 'scroll_top',
-                    'sf'], $csv_headers));
+                    $preserve_fields, $csv_headers));
             }
             if ($csv_header == 'user_captcha_text' &&
                 (empty($_SESSION['captcha_text']) ||
@@ -3688,8 +3691,7 @@ class SocialComponent extends Component implements CrawlConstants
                     L\remoteAddress(), "captcha_time_out");
                 return $parent->redirectWithMessage(
                     tl('social_component_captcha_failed'), array_merge(
-                    ['arg', 'page_name', 'settings', 'caret', 'scroll_top',
-                    'sf'], $csv_headers));
+                    $preserve_fields, $csv_headers));
             }
             $header_type = $_POST['CSVFORM'][$csv_header] ?? "textfield";
             $clean_field = $parent->clean($_POST[$csv_header] ?? "", "string");
@@ -3711,8 +3713,7 @@ class SocialComponent extends Component implements CrawlConstants
         fputcsv($fh, $out_row);
         fclose($fh);
         return $parent->redirectWithMessage(
-            tl('social_component_choices_recorded'), ['arg', 'page_name',
-            'settings', 'caret', 'scroll_top', 'sf']);
+            tl('social_component_choices_recorded'), $preserve_fields);
     }
     /**
      * Sets up view variables for wiki pages when in read mode. If
@@ -4206,11 +4207,13 @@ EOD;
             $_REQUEST['arg'] = 'read';
         }
         $page_info = $group_model->getPageInfoByName($group_id,
-            $page_name, $data['CURRENT_LOCALE_TAG'], 'resources');
+            $page_name, $data['CURRENT_LOCALE_TAG'], 'edit');
         /* if page not yet created than $page_info will be null
            so in the below $page_info['ID'] won't be set.
          */
         $upload_allowed = true;
+        $preserve_fields = ['arg', 'page_name', 'resources', 'settings',
+            'caret', 'scroll_top', 'sf'];
         if ($missing_fields) {
             return $parent->redirectWithMessage(
                 tl("social_component_missing_fields"));
@@ -4246,26 +4249,32 @@ EOD;
                 $success = $group_model->setPageResource($file_name,
                     $_REQUEST['page'], $group_id, $page_info['ID'],
                     $sub_path);
+                $preserve_fields[] = 'n';
                 if ($success) {
+                    $preserve_fields[] = 'back_params';
                     return $parent->redirectWithMessage(
                         tl("social_component_resource_saved"),
-                        ['arg', 'page_name', 'settings',
-                        'caret', 'scroll_top','back_params', 'sf', "n"]);
+                        $preserve_fields);
                 } else {
                     return $parent->redirectWithMessage(
                         tl('social_component_resource_not_saved'),
-                        ['arg', 'page_name', 'settings',
-                        'caret', 'scroll_top', 'sf', "n"]);
+                        $preserve_fields);
                 }
             }
             $data['PAGE_ID'] = $page_info['ID'];
             $data['PAGE_NAME'] = $page_name;
             $data['RESOURCE_NAME'] = $file_name;
         } else {
-            $head_object = $parent->parsePageHeadVars(
-                $page_info['PAGE'] ?? "");
+            list($head_object, $page_data) = $parent->parsePageHeadVars(
+                $page_info['PAGE'] ?? "", true);
             $is_currently_template = (!empty($head_object["page_type"]) &&
                 $head_object["page_type"][0] == 't');
+            $is_settings = (isset($_REQUEST['settings']) &&
+                $_REQUEST['settings'] == 'true');
+            if ($is_settings && $page === null &&
+                $_SERVER['REQUEST_METHOD'] === 'POST') {
+                $page = $page_data;
+            }
             if (isset($page) || ($is_currently_template &&
                 !empty($_REQUEST['page_type']))
                 || isset($_REQUEST['default_sort'])) {
@@ -4402,11 +4411,11 @@ EOD;
                     tl('social_component_page_created', $page_name),
                     tl('social_component_page_discuss_here'),
                     $read_address, $additional_substitutions);
+                $preserve_fields[] = 'n';
                 if (empty($page_info['ID'])) {
                     return $parent->redirectWithMessage(
                         tl('social_component_page_not_saved'),
-                        ['arg', 'page_name', 'settings',
-                        'caret', 'scroll_top', 'sf', "n"]);
+                        $preserve_fields);
                 }
                 if ($set_path && !empty($page_info['ID'])) {
                     $tmp = $group_model->getGroupPageResourcesFolders(
@@ -4426,9 +4435,7 @@ EOD;
                 if (!isset($_FILES['page_resource']['name']) ||
                     $_FILES['page_resource']['name'] == "") {
                     return $parent->redirectWithMessage(
-                        tl("social_component_page_saved"),
-                        ['arg', 'page_name', 'settings',
-                        'caret', 'scroll_top','back_params', 'sf']);
+                        tl("social_component_page_saved"), $preserve_fields);
                 }
             }
         }
@@ -4437,27 +4444,21 @@ EOD;
             if ($group_model->emptyClipFolder($user_id)) {
                 return $parent->redirectWithMessage(
                     tl('social_component_clipboard_emptied'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             } else {
                 return $parent->redirectWithMessage(
                     tl('social_component_clipboard_not_emptied'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             }
         } else if (isset($_REQUEST['paste_all'])) {
             $upload_allowed = false;
             if ($group_model->pasteAllClipFolder($user_id, $group_id,
                 $page_info['ID'], $sub_path)) {
                 return $parent->redirectWithMessage(
-                    tl('social_component_paste_all_success'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    tl('social_component_paste_all_success'), $preserve_fields);
             } else {
                 return $parent->redirectWithMessage(
-                    tl('social_component_paste_all_failed'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    tl('social_component_paste_all_failed'), $preserve_fields);
             }
         } else if (isset($_REQUEST['paste'])) {
             $resource_name = $parent->clean($_REQUEST['paste'],
@@ -4467,14 +4468,10 @@ EOD;
                 $user_id, $resource_name, $group_id,
                 $page_info['ID'], $sub_path)) {
                 return $parent->redirectWithMessage(
-                    tl('social_component_paste_fail'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    tl('social_component_paste_fail'), $preserve_fields);
             }
             return $parent->redirectWithMessage(
-                tl('social_component_paste_success'),
-                ['arg', 'page_name', 'settings',
-                'caret', 'scroll_top', 'sf']);
+                tl('social_component_paste_success'), $preserve_fields);
         } else if (isset($_REQUEST['clip_copy'])) {
             $resource_name = $parent->clean($_REQUEST['clip_copy'],
                 "string");
@@ -4483,14 +4480,10 @@ EOD;
                 $user_id, $resource_name, $group_id,
                 $page_info['ID'], $sub_path)) {
                 return $parent->redirectWithMessage(
-                    tl('social_component_copy_fail'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    tl('social_component_copy_fail'), $preserve_fields);
             }
             return $parent->redirectWithMessage(
-                tl('social_component_copy_success'),
-                ['arg', 'page_name', 'settings',
-                'caret', 'scroll_top', 'sf']);
+                tl('social_component_copy_success'), $preserve_fields);
         } else if (isset($_REQUEST['clip_cut'])) {
             $upload_allowed = false;
             $resource_name = $parent->clean($_REQUEST['clip_cut'],
@@ -4499,17 +4492,14 @@ EOD;
                 $user_id, $resource_name, $group_id,
                 $page_info['ID'], $sub_path)) {
                 return $parent->redirectWithMessage(
-                    tl('social_component_clip_cut_fail'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    tl('social_component_clip_cut_fail'), $preserve_fields);
             }
             $group_model->versionGroupPage($user_id, $page_info['ID'],
                 tl('social_component_clip_cut_success'));
             $_REQUEST['reset_detail'] = "true";
             return $parent->redirectWithMessage(
-                tl('social_component_cut_success'),
-                ['arg', 'page_name', 'reset_detail', 'settings',
-                'caret', 'scroll_top', 'sf']);
+                tl('social_component_cut_success'), array_merge(
+                    ["reset_detail"], $preserve_fields));
         } else if (isset($_REQUEST['extract'])) {
             $resource_name = $parent->clean($_REQUEST['extract'],
                 "string");
@@ -4521,13 +4511,11 @@ EOD;
                     tl('social_component_resource_extracted'));
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_extracted'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             } else {
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_not_extracted'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             }
         } else if (!empty($_REQUEST['new_resource_name']) &&
             !empty($_REQUEST['old_resource_name'])) {
@@ -4544,13 +4532,11 @@ EOD;
                     tl('social_component_resource_renamed'));
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_renamed'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             } else {
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_not_renamed'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             }
         } else if (isset($_REQUEST['resource_description'])) {
             $resource_description = $parent->clean(
@@ -4559,8 +4545,7 @@ EOD;
                 "file_name"))) {
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_description_file_error'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             }
             $success = $group_model->setResourceDescription($resource_name,
                 $resource_description, $group_id, $page_info['ID'],
@@ -4568,13 +4553,11 @@ EOD;
             if ($success) {
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_description_saved'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             } else {
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_description_error'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             }
         } else if (isset($_REQUEST['resource_actions']) &&
             in_array($_REQUEST['resource_actions'],
@@ -4586,13 +4569,11 @@ EOD;
                     tl('social_component_resource_created'));
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_created'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             } else {
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_not_created'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             }
         }
         if ($upload_allowed && !empty($_FILES['page_resource']['name'])) {
@@ -4600,8 +4581,7 @@ EOD;
                 $_FILES = [];
                 return $parent->redirectWithMessage(
                     tl('social_component_resource_save_first'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    $preserve_fields);
             }
             $result = $this->handleResourceUploads(
                 $group_id, $page_info['ID'], $sub_path);
@@ -4617,14 +4597,10 @@ EOD;
                         $read_address, $additional_substitutions);
                 }
                 return $parent->redirectWithMessage(
-                    tl('social_component_resource_uploaded'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    tl('social_component_resource_uploaded'), $preserve_fields);
             } else {
                 return $parent->redirectWithMessage(
-                    tl('social_component_upload_error'),
-                    ['arg', 'page_name', 'settings',
-                    'caret', 'scroll_top', 'sf']);
+                    tl('social_component_upload_error'), $preserve_fields);
             }
         }
         if (isset($page_info['ID'])) {
@@ -4859,19 +4835,19 @@ EOD;
             $media_path = "$folder/$media_name";
             $pub_date = filemtime($media_path);
             $additional_metas =
-                "\n<meta property='og:type' content='video' />\n" .
-                "<meta property='og:url' content='$current_url' />\n" .
-                "<meta property='og:title' content='$media_name' />\n" .
+                "\n<meta property='og:type' content='video' >\n" .
+                "<meta property='og:url' content='$current_url' >\n" .
+                "<meta property='og:title' content='$media_name' >\n" .
                 "<meta property='video:release_date' content='" .
-                    date("c", $pub_date) . "' />\n";
+                    date("c", $pub_date) . "' >\n";
             if (!empty($thumb_url)) {
                 $additional_metas .=
-                    "<meta property='og:image' content='$thumb_url' />\n";
+                    "<meta property='og:image' content='$thumb_url' >\n";
             }
             if (C\nsdefined("SITE_NAME")) {
                 $additional_metas .=
                     "<meta property='og:site_name' content='". C\SITE_NAME .
-                    "' />\n";
+                    "' >\n";
             }
             if (C\nsdefined("FFMPEG")) {
                 $ffprobe = str_replace("ffmpeg", "ffprobe", C\FFMPEG);
@@ -4888,11 +4864,11 @@ EOD;
                         $d_matches);
                     $duration = $d_matches[1];
                     $additional_metas .=
-                        "<meta property='og:video:width' content='$width' />\n".
+                        "<meta property='og:video:width' content='$width' >\n".
                         "<meta property='og:video:height' ".
-                        "content='$height' />\n" .
+                        "content='$height' >\n" .
                         "<meta property='video:duration' " .
-                        "content='$duration' />";
+                        "content='$duration' >";
                 }
             }
             $description = $group_model->getResourceDescription(
@@ -4900,7 +4876,7 @@ EOD;
             if (!empty($description)) {
                 $description = htmlentities(strip_tags($description));
                 $additional_metas .= "\n<meta property='og:description' " .
-                    "content='$description' />\n";
+                    "content='$description' >\n";
             }
             $view->head_objects['additional_metas'] = $additional_metas;
         }
@@ -5035,9 +5011,9 @@ EOD;
         $search_form = <<<EOD
 <form method="get" action='$base_url' class="search-box $2-search-box" >
 <div class="search-box-inner"  tabindex="0">
-<input type='hidden' name="its" value='$1' />
+<input type='hidden' name="its" value='$1' >
 <input type='text'  name='q'  value="" placeholder='$3'
-    title='$3' class='search-input' />
+    title='$3' class='search-input' >
 EOD;
         $search_form .=
             $parent->view("group")->helper("iconlink")->renderFormButton(
@@ -5131,8 +5107,7 @@ EOD;
     private function initializeWikiPageToggle(&$data)
     {
         $init_toggle_settings = (empty($data['RESOURCE_NAME'])) ?
-            'setDisplay("toggle-settings", !is_page_alias &&
-                !is_share, "inline");': '';
+            'setDisplay("toggle-settings", true, "inline");': '';
         $toggle_settings_on = (empty($data['RESOURCE_NAME'])) ?
             'setDisplay("toggle-settings", true);': '';
         $toggle_settings_false = (empty($data['RESOURCE_NAME'])) ?
@@ -5174,7 +5149,7 @@ EOD;
             setDisplay("non-alias-type", !is_page_alias && !is_url_shortener &&
                 !is_share);
             setDisplay("alias-type", is_page_alias);
-            setDisplay("url-shortener", is_url_shortener);
+            setDisplay("shortener-container", is_url_shortener);
             setDisplay("short-url-label", is_url_shortener);
             setDisplay("page-resources", !is_page_alias && !is_url_shortener &&
                 !is_share);
@@ -5192,7 +5167,7 @@ EOD;
                     $toggle_settings_on
                     setDisplay("non-alias-type", true);
                     setDisplay("alias-type", false);
-                    setDisplay("url-shortener", false);
+                    setDisplay("shortener-container", false);
                     setDisplay("short-url-label", false);
                     setDisplay("share-container", false);
                     setDisplay("page-resources", true);
@@ -5204,7 +5179,7 @@ EOD;
                     setDisplay("page-container", false);
                     setDisplay("non-alias-type", false);
                     setDisplay("alias-type", true);
-                    setDisplay("url-shortener", false);
+                    setDisplay("shortener-container", false);
                     setDisplay("short-url-label", false);
                     setDisplay("share-container", false);
                     setDisplay("page-resources", false);
@@ -5213,7 +5188,7 @@ EOD;
                      setDisplay("page-container", false);
                      setDisplay("non-alias-type", false);
                      setDisplay("alias-type", false);
-                     setDisplay("url-shortener", true);
+                     setDisplay("shortener-container", true);
                      setDisplay("short-url-label", true);
                      setDisplay("share-container", false);
                      setDisplay("page-resources", false);
@@ -5223,7 +5198,7 @@ EOD;
                     setDisplay("page-container", false);
                     setDisplay("non-alias-type", false);
                     setDisplay("alias-type", false);
-                    setDisplay("url-shortener", false);
+                    setDisplay("shortener-container", false);
                     setDisplay("short-url-label", false);
                     setDisplay("share-container", true);
                     setDisplay("page-resources", false);
@@ -5233,7 +5208,7 @@ EOD;
                     $toggle_settings_inline
                     setDisplay("non-alias-type", true);
                     setDisplay("alias-type", false);
-                    setDisplay("url-shortener", false);
+                    setDisplay("shortener-container", false);
                     setDisplay("short-url-label", false);
                     setDisplay("share-container", false);
                     setDisplay("page-resources", true);
diff --git a/src/controllers/components/StoreComponent.php b/src/controllers/components/StoreComponent.php
index e665fc276..dd7fdd540 100644
--- a/src/controllers/components/StoreComponent.php
+++ b/src/controllers/components/StoreComponent.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Pushkar Umaranikar
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers\components;
diff --git a/src/controllers/components/SystemComponent.php b/src/controllers/components/SystemComponent.php
index fd1cc4e9a..889a7dd88 100755
--- a/src/controllers/components/SystemComponent.php
+++ b/src/controllers/components/SystemComponent.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\controllers\components;
@@ -1468,7 +1468,7 @@ EOD;
             }
             if ($check_flag) {
                 $missing_required .= $comma.$item["name"];
-                $comma = ",<br />";
+                $comma = ",<br>";
             }
         }
         if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 80008) {
@@ -1481,24 +1481,24 @@ EOD;

         if (!is_writable(C\BASE_DIR."/configs/Config.php")) {
             $out .= tl('system_component_no_write_config_php');
-            $br = "<br />";
+            $br = "<br>";
         }

         if (defined(C\WORK_DIRECTORY) && !is_writable(C\WORK_DIRECTORY)) {
             $out .= $br. tl('system_component_no_write_work_dir');
-            $br = "<br />";
+            $br = "<br>";
         }

         if (intval(ini_get("post_max_size")) < 2) {
             $out .= $br. tl('system_component_post_size_small');
-            $br = "<br />";
+            $br = "<br>";
         }

         if ($missing_required != "") {
             $out .= $br.
-                tl('system_component_missing_required'). "<br />".
+                tl('system_component_missing_required'). "<br>".
                 $missing_required;
-            $br = "<br />";
+            $br = "<br>";
         }

         $missing_optional = "";
@@ -1519,9 +1519,9 @@ EOD;
         }
         if ($missing_optional != "") {
             $out .= $br.
-                tl('system_component_missing_optional') . "<br />".
+                tl('system_component_missing_optional') . "<br>".
                 $missing_optional;
-            $br = "<br />";
+            $br = "<br>";
         }
         if ($out == "") {
             $out = tl('system_component_check_passed');
@@ -1529,7 +1529,7 @@ EOD;
             $out = "<span class='red'>$out</span>";
         }
         if (file_exists(C\BASE_DIR."/configs/LocalConfig.php")) {
-            $out .= "<br />".tl('system_component_using_local_config');
+            $out .= "<br>".tl('system_component_using_local_config');
         }
         return $out;
      }
diff --git a/src/css/editor.css b/src/css/editor.css
index d8dc6f119..48f424284 100755
--- a/src/css/editor.css
+++ b/src/css/editor.css
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Eswara Rajesh Pinapala
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/css/messages.css b/src/css/messages.css
index 72e9418a9..d00f195bb 100644
--- a/src/css/messages.css
+++ b/src/css/messages.css
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/css/search.css b/src/css/search.css
index 0fcd65a8c..0d6019c47 100755
--- a/src/css/search.css
+++ b/src/css/search.css
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
@@ -1164,22 +1164,29 @@ body.mobile
     min-width: unset;
     width: 65px;
 }
-.nav-bar h1
+.nav-bar .title-block
 {
     margin:0;
     min-width:9in;
     max-width:10in;
     padding:0;
-    text-align: center;
+    text-align:center;
+}
+.nav-bar h1
+{
+    display: inline;
 }
 .nav-bar h1 img
 {
     position:relative;
     top: 2px;
 }
-.nav-bar h1 > span
+.nav-bar .nav-span
 {
     display: inline-block;
+    font-family: Arial;
+    font-size: 32px;
+    font-weight: 700;
     height: 32pt;
     margin: 2px;
     max-width: 7in;
@@ -1188,11 +1195,11 @@ body.mobile
     top:-20px;
     white-space: nowrap;
 }
-.html-ltr .nav-bar h1 > span
+.html-ltr .nav-bar .nav-span
 {
     text-align:left;
 }
-.html-rtl .nav-bar h1 > span
+.html-rtl .nav-bar .nav-span
 {
     text-align: right;
 }
@@ -1243,7 +1250,7 @@ body.mobile
     min-width: unset;
     max-width: unset;
 }
-.mobile .nav-bar h1 > span
+.mobile .nav-bar .nav-span
 {
     max-width:250px;
 }
diff --git a/src/error.php b/src/error.php
index 9f89d7f7f..4c7f446f0 100755
--- a/src/error.php
+++ b/src/error.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/examples/QueryCacher.php b/src/examples/QueryCacher.php
index f8080300b..4b036ce95 100644
--- a/src/examples/QueryCacher.php
+++ b/src/examples/QueryCacher.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\examples;
diff --git a/src/examples/SearchApi.php b/src/examples/SearchApi.php
index f91541fbf..516f983f7 100644
--- a/src/examples/SearchApi.php
+++ b/src/examples/SearchApi.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\examples;
diff --git a/src/examples/StockBot.php b/src/examples/StockBot.php
index b38d04010..7ae58a5a2 100644
--- a/src/examples/StockBot.php
+++ b/src/examples/StockBot.php
@@ -3,7 +3,7 @@
  *  SeekQuarry/Yioop --
  *  Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- *  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ *  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  *  LICENSE:
  *
@@ -26,7 +26,7 @@
  *      (updated after yahoo stock quotes went dark, by Chris Pollett)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\examples\stockbot;
diff --git a/src/examples/WeatherBot.php b/src/examples/WeatherBot.php
index 806a4a9f6..5ae542001 100644
--- a/src/examples/WeatherBot.php
+++ b/src/examples/WeatherBot.php
@@ -3,7 +3,7 @@
  *  SeekQuarry/Yioop --
  *  Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- *  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ *  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  *  LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Harika Nukala harika.nukala@sjsu.edu
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\examples\weatherbot;
diff --git a/src/executables/ArcTool.php b/src/executables/ArcTool.php
index 3dace6686..7019271bb 100755
--- a/src/executables/ArcTool.php
+++ b/src/executables/ArcTool.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/ClassifierTool.php b/src/executables/ClassifierTool.php
index 5e5960848..7aa273a01 100755
--- a/src/executables/ClassifierTool.php
+++ b/src/executables/ClassifierTool.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/ClassifierTrainer.php b/src/executables/ClassifierTrainer.php
index fe3693429..16e9f51db 100755
--- a/src/executables/ClassifierTrainer.php
+++ b/src/executables/ClassifierTrainer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/CodeTool.php b/src/executables/CodeTool.php
index b93544ca3..009c537cc 100755
--- a/src/executables/CodeTool.php
+++ b/src/executables/CodeTool.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -29,7 +29,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/DictionaryUpdater.php b/src/executables/DictionaryUpdater.php
index 03beda29c..c5dcd6d0d 100644
--- a/src/executables/DictionaryUpdater.php
+++ b/src/executables/DictionaryUpdater.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/Fetcher.php b/src/executables/Fetcher.php
index c21fdd4e9..73ead6dc1 100755
--- a/src/executables/Fetcher.php
+++ b/src/executables/Fetcher.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/MediaUpdater.php b/src/executables/MediaUpdater.php
index 967c81571..54e78b8ff 100644
--- a/src/executables/MediaUpdater.php
+++ b/src/executables/MediaUpdater.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/Mirror.php b/src/executables/Mirror.php
index 2566f703c..1dc5c6682 100644
--- a/src/executables/Mirror.php
+++ b/src/executables/Mirror.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/QueryTool.php b/src/executables/QueryTool.php
index 1ab1f7a9f..fa0aec820 100755
--- a/src/executables/QueryTool.php
+++ b/src/executables/QueryTool.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/executables/QueueServer.php b/src/executables/QueueServer.php
index 23c3002e5..a5476c125 100644
--- a/src/executables/QueueServer.php
+++ b/src/executables/QueueServer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\executables;
diff --git a/src/index.php b/src/index.php
index 307f054cf..02773095b 100644
--- a/src/index.php
+++ b/src/index.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -30,7 +30,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/library/AnalyticsManager.php b/src/library/AnalyticsManager.php
index 939e4dbb9..626838f49 100644
--- a/src/library/AnalyticsManager.php
+++ b/src/library/AnalyticsManager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/BPlusTree.php b/src/library/BPlusTree.php
index 62ee11a71..86beb53f5 100644
--- a/src/library/BPlusTree.php
+++ b/src/library/BPlusTree.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/BloomFilterBundle.php b/src/library/BloomFilterBundle.php
index d020034dd..4074f0c10 100644
--- a/src/library/BloomFilterBundle.php
+++ b/src/library/BloomFilterBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/BloomFilterFile.php b/src/library/BloomFilterFile.php
index 45b560b73..7544bbb77 100755
--- a/src/library/BloomFilterFile.php
+++ b/src/library/BloomFilterFile.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/Bzip2BlockIterator.php b/src/library/Bzip2BlockIterator.php
index 97db53169..1f0facc2d 100644
--- a/src/library/Bzip2BlockIterator.php
+++ b/src/library/Bzip2BlockIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Shawn Tice, (docs added by Chris Pollett chris@pollett.org)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/ComputerVision.php b/src/library/ComputerVision.php
index 3a097aef6..75c54b2fd 100644
--- a/src/library/ComputerVision.php
+++ b/src/library/ComputerVision.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/ContextTagger.php b/src/library/ContextTagger.php
index aeaec0bfb..b1b0dd463 100644
--- a/src/library/ContextTagger.php
+++ b/src/library/ContextTagger.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */

diff --git a/src/library/CrawlConstants.php b/src/library/CrawlConstants.php
index 21d62518f..b1a78d3b0 100755
--- a/src/library/CrawlConstants.php
+++ b/src/library/CrawlConstants.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/CrawlDaemon.php b/src/library/CrawlDaemon.php
index 46277965e..da7408e5c 100644
--- a/src/library/CrawlDaemon.php
+++ b/src/library/CrawlDaemon.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/CrawlQueueBundle.php b/src/library/CrawlQueueBundle.php
index eb6ad0fff..e124de087 100644
--- a/src/library/CrawlQueueBundle.php
+++ b/src/library/CrawlQueueBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/DoubleIndexBundle.php b/src/library/DoubleIndexBundle.php
index 736495f23..9944578c2 100644
--- a/src/library/DoubleIndexBundle.php
+++ b/src/library/DoubleIndexBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/FeedArchiveBundle.php b/src/library/FeedArchiveBundle.php
index 7fb7bb42b..076461da3 100644
--- a/src/library/FeedArchiveBundle.php
+++ b/src/library/FeedArchiveBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/FeedDocumentBundle.php b/src/library/FeedDocumentBundle.php
index 365be0155..4efa364e7 100644
--- a/src/library/FeedDocumentBundle.php
+++ b/src/library/FeedDocumentBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/FetchGitRepositoryUrls.php b/src/library/FetchGitRepositoryUrls.php
index 519b728c8..0780ddafe 100755
--- a/src/library/FetchGitRepositoryUrls.php
+++ b/src/library/FetchGitRepositoryUrls.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Snigdha Rao Parvatneni
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/FetchUrl.php b/src/library/FetchUrl.php
index 0b09e3ea2..efe3544ef 100755
--- a/src/library/FetchUrl.php
+++ b/src/library/FetchUrl.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/FileCache.php b/src/library/FileCache.php
index d375e1037..8665a0ec9 100644
--- a/src/library/FileCache.php
+++ b/src/library/FileCache.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/HashTable.php b/src/library/HashTable.php
index 479c5c8e9..186a55bcc 100755
--- a/src/library/HashTable.php
+++ b/src/library/HashTable.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/IndexArchiveBundle.php b/src/library/IndexArchiveBundle.php
index 36c8d5f10..ce41a2ce5 100644
--- a/src/library/IndexArchiveBundle.php
+++ b/src/library/IndexArchiveBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/IndexDictionary.php b/src/library/IndexDictionary.php
index 598d36032..9cf2b7b3f 100644
--- a/src/library/IndexDictionary.php
+++ b/src/library/IndexDictionary.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/IndexDocumentBundle.php b/src/library/IndexDocumentBundle.php
index 5c441a721..eda412b45 100644
--- a/src/library/IndexDocumentBundle.php
+++ b/src/library/IndexDocumentBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/IndexManager.php b/src/library/IndexManager.php
index 085cabfe4..0e58d2f25 100644
--- a/src/library/IndexManager.php
+++ b/src/library/IndexManager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/IndexShard.php b/src/library/IndexShard.php
index bc6e37ae6..d2def0053 100644
--- a/src/library/IndexShard.php
+++ b/src/library/IndexShard.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/JavascriptUnitTest.php b/src/library/JavascriptUnitTest.php
index 2205afb50..b6426ceb1 100644
--- a/src/library/JavascriptUnitTest.php
+++ b/src/library/JavascriptUnitTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/LRUCache.php b/src/library/LRUCache.php
index 10a42c281..e6fa33800 100644
--- a/src/library/LRUCache.php
+++ b/src/library/LRUCache.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Parth Patel
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/Library.php b/src/library/Library.php
index 8873eb3b1..b547a3a76 100644
--- a/src/library/Library.php
+++ b/src/library/Library.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/LinearAlgebra.php b/src/library/LinearAlgebra.php
index 6aafddb33..460609ddd 100644
--- a/src/library/LinearAlgebra.php
+++ b/src/library/LinearAlgebra.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/LinearHashTable.php b/src/library/LinearHashTable.php
index 2f7c80a41..85d85f222 100644
--- a/src/library/LinearHashTable.php
+++ b/src/library/LinearHashTable.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/LocaleFunctions.php b/src/library/LocaleFunctions.php
index 7769e102a..c4bdf9512 100755
--- a/src/library/LocaleFunctions.php
+++ b/src/library/LocaleFunctions.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/MailServer.php b/src/library/MailServer.php
index 4a24f9ea9..24a123a97 100644
--- a/src/library/MailServer.php
+++ b/src/library/MailServer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/MediaConstants.php b/src/library/MediaConstants.php
index f8da98e37..d5fb91ec1 100644
--- a/src/library/MediaConstants.php
+++ b/src/library/MediaConstants.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/NWordGrams.php b/src/library/NWordGrams.php
index 527323752..92327d1f1 100644
--- a/src/library/NWordGrams.php
+++ b/src/library/NWordGrams.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Ravi Dhillon ravi.dhillon@yahoo.com, Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/NamedEntityContextTagger.php b/src/library/NamedEntityContextTagger.php
index 70908cd3c..e46d229aa 100644
--- a/src/library/NamedEntityContextTagger.php
+++ b/src/library/NamedEntityContextTagger.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Xianghong Sun sxh19911230@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/Notifier.php b/src/library/Notifier.php
index fc497cb2a..6d860580e 100755
--- a/src/library/Notifier.php
+++ b/src/library/Notifier.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PackedTableTools.php b/src/library/PackedTableTools.php
index 018dcf023..c80e1b8de 100644
--- a/src/library/PackedTableTools.php
+++ b/src/library/PackedTableTools.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PageRuleParser.php b/src/library/PageRuleParser.php
index 8c0483477..d2591f722 100644
--- a/src/library/PageRuleParser.php
+++ b/src/library/PageRuleParser.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PartOfSpeechContextTagger.php b/src/library/PartOfSpeechContextTagger.php
index 08716ada7..6c6c80b2e 100644
--- a/src/library/PartOfSpeechContextTagger.php
+++ b/src/library/PartOfSpeechContextTagger.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Xianghong Sun sxh19911230@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PartialZipArchive.php b/src/library/PartialZipArchive.php
index 056d09de2..5eb06dc9e 100644
--- a/src/library/PartialZipArchive.php
+++ b/src/library/PartialZipArchive.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PartitionDocumentBundle.php b/src/library/PartitionDocumentBundle.php
index e48ff2829..5f8a13306 100644
--- a/src/library/PartitionDocumentBundle.php
+++ b/src/library/PartitionDocumentBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PersistentStructure.php b/src/library/PersistentStructure.php
index fe7173526..1ea5dde88 100755
--- a/src/library/PersistentStructure.php
+++ b/src/library/PersistentStructure.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PhraseParser.php b/src/library/PhraseParser.php
index 3c7adabb8..3334baf7a 100755
--- a/src/library/PhraseParser.php
+++ b/src/library/PhraseParser.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/PriorityQueue.php b/src/library/PriorityQueue.php
index c7ec0f8a5..4363875a3 100755
--- a/src/library/PriorityQueue.php
+++ b/src/library/PriorityQueue.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/ScraperManager.php b/src/library/ScraperManager.php
index 61da2c916..d5e1657f7 100644
--- a/src/library/ScraperManager.php
+++ b/src/library/ScraperManager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Charles Bocage (charles.bocage@sjsu.edu)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/StochasticTermSegmenter.php b/src/library/StochasticTermSegmenter.php
index e42de4434..4a76e681d 100644
--- a/src/library/StochasticTermSegmenter.php
+++ b/src/library/StochasticTermSegmenter.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Xianghong Sun sxh19911230@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/StringArray.php b/src/library/StringArray.php
index b5752855f..80c7e093a 100755
--- a/src/library/StringArray.php
+++ b/src/library/StringArray.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/SuffixTree.php b/src/library/SuffixTree.php
index afa9579e7..b615d9f09 100644
--- a/src/library/SuffixTree.php
+++ b/src/library/SuffixTree.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/Trie.php b/src/library/Trie.php
index 8d0e7ece7..14e69fde2 100644
--- a/src/library/Trie.php
+++ b/src/library/Trie.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *     code into a separate file and cleaned up)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/UnitTest.php b/src/library/UnitTest.php
index 837a045e9..5385c7fdc 100644
--- a/src/library/UnitTest.php
+++ b/src/library/UnitTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/UpgradeFunctions.php b/src/library/UpgradeFunctions.php
index dd267f513..cd7b16934 100644
--- a/src/library/UpgradeFunctions.php
+++ b/src/library/UpgradeFunctions.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -30,7 +30,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/UrlParser.php b/src/library/UrlParser.php
index acad91469..699d32d8f 100755
--- a/src/library/UrlParser.php
+++ b/src/library/UrlParser.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/Utility.php b/src/library/Utility.php
index 478c80688..eba14be0c 100755
--- a/src/library/Utility.php
+++ b/src/library/Utility.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/VersionFunctions.php b/src/library/VersionFunctions.php
index c66ef3531..5d9e2132d 100644
--- a/src/library/VersionFunctions.php
+++ b/src/library/VersionFunctions.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
@@ -582,14 +582,14 @@ function upgradeDatabaseVersion20(&$db)
             <html lang='en-US'>
             <head>
             <title>Yioop Upgrade Detected</title>
-            <meta name="ROBOTS" content="NOINDEX,NOFOLLOW" />
-            <meta name="Author" content="Christopher Pollett" />
-            <meta charset="utf-8" />
+            <meta name="ROBOTS" content="NOINDEX,NOFOLLOW" >
+            <meta name="Author" content="Christopher Pollett" >
+            <meta charset="utf-8" >
             <?php if ($_SERVER["MOBILE"]) {?>
             <meta name="viewport" content="width=device-width,initial-scale=1">
             <?php } ?>
             <link rel="stylesheet" type="text/css"
-                 href="<?= C\SHORT_BASE_URL ?>/css/search.css" />
+                 href="<?= C\SHORT_BASE_URL ?>/css/search.css" >
             </head>
             <body class="html-ltr <?php if ($_SERVER["MOBILE"]) {e('mobile'); }
             ?>" >
@@ -629,12 +629,12 @@ function upgradeDatabaseVersion20(&$db)
             both your existing database and work directory.</p>
             <form method="post" action="?">
             <p><label for="upgrade-code">
-            <b>In the field below enter the string found in the file:<br />
+            <b>In the field below enter the string found in the file:<br>
             <span class="green"><?= C\WORK_DIRECTORY."/v20check.txt"?></span>
             </b></label></p>
             <input id='upgrade-code' class="extra-wide-field"
-                name="upgrade_code" type="text" />
-            <input type="hidden" name="v20step" value="2" />
+                name="upgrade_code" type="text" >
+            <input type="hidden" name="v20step" value="2" >
             <button class="button-box" type="submit">Upgrade</button>
             </form>
             <?php
diff --git a/src/library/VersionManager.php b/src/library/VersionManager.php
index cd245a538..9e195f114 100644
--- a/src/library/VersionManager.php
+++ b/src/library/VersionManager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/WebArchive.php b/src/library/WebArchive.php
index afd017bb1..68cef2e62 100755
--- a/src/library/WebArchive.php
+++ b/src/library/WebArchive.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/WebArchiveBundle.php b/src/library/WebArchiveBundle.php
index 0c3728089..430bfe06c 100755
--- a/src/library/WebArchiveBundle.php
+++ b/src/library/WebArchiveBundle.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
diff --git a/src/library/WebSite.php b/src/library/WebSite.php
index 968ed8e3d..0102f7cb0 100644
--- a/src/library/WebSite.php
+++ b/src/library/WebSite.php
@@ -366,7 +366,7 @@ class WebSite
             return false;
         }
         if (in_array($method . " " . $route, $_SERVER['RECURSION']) ) {
-            echo "<br />\nError: Recursion detected for $method $route.\n";
+            echo "<br>\nError: Recursion detected for $method $route.\n";
             return true;
         }
         $method_routes = $this->routes[$method];
diff --git a/src/library/WikiParser.php b/src/library/WikiParser.php
index 3b244d265..5838bb197 100644
--- a/src/library/WikiParser.php
+++ b/src/library/WikiParser.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library;
@@ -130,7 +130,7 @@ class WikiParser implements CrawlConstants
             ["/&lt;sub&gt;(.+?)&lt;\/sub&gt;/s", "<sub>$1</sub>\t"],
             ["/&lt;sup&gt;(.+?)&lt;\/sup&gt;/s", "<sup>$1</sup>\t"],
             ["/&lt;math&gt;(.+?)&lt;\/math&gt;/s", "`$1`"],
-            ["/&lt;br(\s*\/)?&gt;/", "<br />"],
+            ["/&lt;br(\s*\/)?&gt;/", "<br>"],
             ["/&amp;(\#?[a-zA-Z0-9_]+);/", '&$1;'],
             ['/(\A|\n)\*(.+)(\n(\*|\n\s*|\Z|<|[\t\n\r]+\n)|\Z)/sU',
                 "\n<li>$2</li>\n$4"],
@@ -187,104 +187,104 @@ class WikiParser implements CrawlConstants
                 "<span class='smaller-font'>$1</span>\t"],
             ["/{{fraction\|(.+?)\|(.+?)}}/si",
                 "<span class='smaller-font'>$1/$2</span>\t"],
-            ['/(\A|\n)----/', "$1<hr />"],
+            ['/(\A|\n)----/', "$1<hr >"],
             ['/\r/', ""],
         ];
         $braces_substitutions = [
             ["/{{timestamp}}/si",
-                "<input type='hidden' name='timestamp' value='" .time()."' />".
+                "<input type='hidden' name='timestamp' value='" .time()."' >".
                 "<input type='hidden' name='CSVFORM[timestamp]' ".
-                "value='textfield' />"],
+                "value='textfield' >"],
             ["/{{timestamp\|(.+?)}}/si",
-                "<input type='hidden' name='$1' value='" .time()."' />".
-                "<input type='hidden' name='CSVFORM[$1]' value='textfield' />"],
+                "<input type='hidden' name='$1' value='" .time()."' >".
+                "<input type='hidden' name='CSVFORM[$1]' value='textfield' >"],
             ["/{{date}}/si",
-                "<input type='hidden' name='date' value='" .date('r'). "' />".
+                "<input type='hidden' name='date' value='" .date('r'). "' >".
                 "<input type='hidden' name='CSVFORM[date]' ".
-                "value='textfield' />"],
+                "value='textfield' >"],
             ["/{{date\|(.+?)}}/si",
-                "<input type='hidden' name='$1' value='" .date('r'). "' />".
-                "<input type='hidden' name='CSVFORM[$1]' value='textfield' />"],
+                "<input type='hidden' name='$1' value='" .date('r'). "' >".
+                "<input type='hidden' name='CSVFORM[$1]' value='textfield' >"],
             ["/{{username}}/si",
-                "<input type='hidden' name='username' value='[{username}]' />".
+                "<input type='hidden' name='username' value='[{username}]' >".
                 "<input type='hidden' name='CSVFORM[username]' ".
-                "value='textfield' />"],
+                "value='textfield' >"],
             ["/{{username\|(.+?)}}/si",
-                "<input type='hidden' name='$1' value='[{username}]' />".
-                "<input type='hidden' name='CSVFORM[$1]' value='textfield' />"],
+                "<input type='hidden' name='$1' value='[{username}]' >".
+                "<input type='hidden' name='CSVFORM[$1]' value='textfield' >"],
             ["/{{image-captcha\|(.+?)}}/si", "<div class='csv-captcha'>".
-                "[{image-captcha}]<br /><input id='captcha-id' ".
+                "[{image-captcha}]<br><input id='captcha-id' ".
                 "type='text' name='user_captcha_text' placeholder='$1'/>".
                 "<span class='csv-star'>*</span></div><input type='hidden' ".
                 "name='CSVFORM[user_captcha_text]'.
-                value='textfield' />"],
+                value='textfield' >"],
             ["/{{textfield\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><label for='$2-id'>$1</label>" .
                 "<input id='$2-id' type='text' name='$2' value='[{csv-$2}]'>" .
-                "<input type='hidden' name='CSVFORM[$2]' value='textfield' />" .
+                "<input type='hidden' name='CSVFORM[$2]' value='textfield' >" .
                 "</div>"],
             ["/{{r(?:equired)?-textfield\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><label for='$2-id'>$1</label>".
                 "<input id='$2-id' type='text' name='$2' value='[{csv-$2}]'>".
                 "<input type='hidden' name='CSVFORM[$2]' ".
-                "value='textfield' /><span class='csv-star'>*</span></div>"],
+                "value='textfield' ><span class='csv-star'>*</span></div>"],
             ["/{{textarea\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><label for='$2-id'>$1</label>".
-                "<br /><textarea id='$2-id' name='$2' ".
+                "<br><textarea id='$2-id' name='$2' ".
                 "class='short-text-area'>[{csv-$2}]</textarea>" .
-                "<input type='hidden' name='CSVFORM[$2]' value='textarea' />".
+                "<input type='hidden' name='CSVFORM[$2]' value='textarea' >".
                 "</div>"],
             ['/{{r(?:equired)?-textarea\|(.+?)\|(.+?)}}/si',
                 "<div class='csv-form-field'><label for='$2-id'>$1</label>".
                 "<textarea id='$2-id' name='$2' ".
                 "class='short-text-area'>[{csv-$2}]</textarea>" .
-                "<input type='hidden' name='RCSVFORM[$2]' value='textarea' />".
+                "<input type='hidden' name='RCSVFORM[$2]' value='textarea' >".
                 "<span class='csv-star'>*</span></div>"],
             ["/{{checkbox\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><label for='$2-id'>$1</label>".
                 "<input id='$2-id' type='checkbox' name='$2' ".
-                "[{csv-checked-$2}] /><input type='hidden' ".
-                "name='CSVFORM[$2]' value='checkbox' /></div>"],
+                "[{csv-checked-$2}] ><input type='hidden' ".
+                "name='CSVFORM[$2]' value='checkbox' ></div>"],
             ["/{{lcheckbox\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><input id='$2-id' ".
-                "type='checkbox' name='$2' [{csv-checked-$2}] />".
+                "type='checkbox' name='$2' [{csv-checked-$2}] >".
                 "<label for='$2-id'>$1</label><input type='hidden' ".
-                "name='CSVFORM[$2]' value='checkbox' /></div>"],
+                "name='CSVFORM[$2]' value='checkbox' ></div>"],
             ["/{{r(?:equired)?-checkbox\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><label for='$2-id'>$1</label>" .
                 "<input id='$2-id' type='checkbox' name='$2' " .
-                "[{csv-checked-$2}] /><input type='hidden' ".
-                "name='RCSVFORM[$2]' value='checkbox' /></div>"],
+                "[{csv-checked-$2}] ><input type='hidden' ".
+                "name='RCSVFORM[$2]' value='checkbox' ></div>"],
             ["/{{r(?:equired)?-lcheckbox\|(.+?)\|(.+?)}}/si",
                 "<input id='$2-id' type='checkbox' name='$2' ".
-                "[{csv-checked-$2}] /><label for='$2-id'>$1</label> ".
-                "<input type='hidden' name='RCSVFORM[$2]' value='checkbox' />"],
+                "[{csv-checked-$2}] ><label for='$2-id'>$1</label> ".
+                "<input type='hidden' name='RCSVFORM[$2]' value='checkbox' >"],
             ["/{{radio\|(.+?)\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><label for='$2-$3-id'>$1</label>".
                 "<input id='$2-$3-id' type='radio' name='$2' value='$3' ".
-                "[{csv-checked-$2}] /><input type='hidden' name='CSVFORM[$2]' ".
-                "value='radio' /></div>"],
+                "[{csv-checked-$2}] ><input type='hidden' name='CSVFORM[$2]' ".
+                "value='radio' ></div>"],
             ["/{{lradio\|(.+?)\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><input id='$2-$3-id' ".
-                "type='radio' name='$2' value='$3' [{csv-checked-$2}] />".
+                "type='radio' name='$2' value='$3' [{csv-checked-$2}] >".
                 "<label for='$2-$3-id'>$1</label><input type='hidden' ".
-                "name='CSVFORM[$2]' value='radio' /></div>"],
+                "name='CSVFORM[$2]' value='radio' ></div>"],
             ["/{{r(?:equired)?-radio\|(.+?)\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><label for='$2-$3-id'>$1</label>".
                 "<input id='$2-$3-id' type='radio' name='$2' value='$3' ".
-                "[{csv-checked-$2}] /><input type='hidden' ".
-                "name='RCSVFORM[$2]' value='radio' /><span ".
+                "[{csv-checked-$2}] ><input type='hidden' ".
+                "name='RCSVFORM[$2]' value='radio' ><span ".
                 "class='csv-star'>*</span></div>"],
             ["/{{r(?:equired)?-lradio\|(.+?)\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><input id='$2-$3-id' ".
-                "type='radio' name='$2' value='$3' [{csv-checked-$2}] />".
+                "type='radio' name='$2' value='$3' [{csv-checked-$2}] >".
                 "<label for='$2-$3-id'>$1</label><input type='hidden' ".
-                "name='RCSVFORM[$2]' value='radio' /><span ".
+                "name='RCSVFORM[$2]' value='radio' ><span ".
                 "class='csv-star'>*</span></div>"],
             ["/{{submit\|(.+?)\|(.+?)}}/si",
                 "<div class='csv-form-field'><input id='$2-id' type='submit' ".
                 "name='$1' value='$2' ><input type='hidden' ".
-                "name='CSVFORM[$2]' value='submit' /></div>"],
+                "name='CSVFORM[$2]' value='submit' ></div>"],
             ['/'.$not_paragraph.'{{\s*class\s*\=\s*'.
                 "&quot;([$class_or_id]+)&quot;\s+(".$not_braces .")}}/",
                 "$esc<span class=\"$1\" >\t\n$2$esc</span>\t"],
diff --git a/src/library/archive_bundle_iterators/ArcArchiveBundleIterator.php b/src/library/archive_bundle_iterators/ArcArchiveBundleIterator.php
index 142a7372f..70cf02925 100644
--- a/src/library/archive_bundle_iterators/ArcArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/ArcArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/ArchiveBundleIterator.php b/src/library/archive_bundle_iterators/ArchiveBundleIterator.php
index 7553accf9..15e32dd5e 100644
--- a/src/library/archive_bundle_iterators/ArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/ArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/DatabaseBundleIterator.php b/src/library/archive_bundle_iterators/DatabaseBundleIterator.php
index f11d89db8..00923f6ee 100644
--- a/src/library/archive_bundle_iterators/DatabaseBundleIterator.php
+++ b/src/library/archive_bundle_iterators/DatabaseBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/MediaWikiArchiveBundleIterator.php b/src/library/archive_bundle_iterators/MediaWikiArchiveBundleIterator.php
index e4b10c174..fc816b5b9 100644
--- a/src/library/archive_bundle_iterators/MediaWikiArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/MediaWikiArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/MixArchiveBundleIterator.php b/src/library/archive_bundle_iterators/MixArchiveBundleIterator.php
index 79da2c5b7..c51df8a70 100644
--- a/src/library/archive_bundle_iterators/MixArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/MixArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/OdpRdfArchiveBundleIterator.php b/src/library/archive_bundle_iterators/OdpRdfArchiveBundleIterator.php
index 8c1aa5bff..16b78ce55 100644
--- a/src/library/archive_bundle_iterators/OdpRdfArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/OdpRdfArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/TextArchiveBundleIterator.php b/src/library/archive_bundle_iterators/TextArchiveBundleIterator.php
index cdb858cb6..404f7a572 100644
--- a/src/library/archive_bundle_iterators/TextArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/TextArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/WarcArchiveBundleIterator.php b/src/library/archive_bundle_iterators/WarcArchiveBundleIterator.php
index 40a9a74ab..ceec392cf 100644
--- a/src/library/archive_bundle_iterators/WarcArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/WarcArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/archive_bundle_iterators/WebArchiveBundleIterator.php b/src/library/archive_bundle_iterators/WebArchiveBundleIterator.php
index 6d2aa2ee9..688653cd0 100644
--- a/src/library/archive_bundle_iterators/WebArchiveBundleIterator.php
+++ b/src/library/archive_bundle_iterators/WebArchiveBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\archive_bundle_iterators;
diff --git a/src/library/classifiers/BinaryFeatures.php b/src/library/classifiers/BinaryFeatures.php
index d56e73b10..a21f03a73 100644
--- a/src/library/classifiers/BinaryFeatures.php
+++ b/src/library/classifiers/BinaryFeatures.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/ChiSquaredFeatureSelection.php b/src/library/classifiers/ChiSquaredFeatureSelection.php
index eef40d447..a309f3f94 100644
--- a/src/library/classifiers/ChiSquaredFeatureSelection.php
+++ b/src/library/classifiers/ChiSquaredFeatureSelection.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/Classifier.php b/src/library/classifiers/Classifier.php
index 83876b2f7..7cf62dc3a 100644
--- a/src/library/classifiers/Classifier.php
+++ b/src/library/classifiers/Classifier.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/ClassifierAlgorithm.php b/src/library/classifiers/ClassifierAlgorithm.php
index 9f970db1c..ecf91bda2 100644
--- a/src/library/classifiers/ClassifierAlgorithm.php
+++ b/src/library/classifiers/ClassifierAlgorithm.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/FeatureSelection.php b/src/library/classifiers/FeatureSelection.php
index 989ff4b94..1c076efdc 100644
--- a/src/library/classifiers/FeatureSelection.php
+++ b/src/library/classifiers/FeatureSelection.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/Features.php b/src/library/classifiers/Features.php
index 2dfb3da0e..13eca03db 100644
--- a/src/library/classifiers/Features.php
+++ b/src/library/classifiers/Features.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/LassoRegression.php b/src/library/classifiers/LassoRegression.php
index b08f8162c..d3d22ee84 100644
--- a/src/library/classifiers/LassoRegression.php
+++ b/src/library/classifiers/LassoRegression.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/NaiveBayes.php b/src/library/classifiers/NaiveBayes.php
index f19f8cc05..67d14f947 100644
--- a/src/library/classifiers/NaiveBayes.php
+++ b/src/library/classifiers/NaiveBayes.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/SparseMatrix.php b/src/library/classifiers/SparseMatrix.php
index 2ce9d1b9b..8b913e24b 100644
--- a/src/library/classifiers/SparseMatrix.php
+++ b/src/library/classifiers/SparseMatrix.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/classifiers/WeightedFeatures.php b/src/library/classifiers/WeightedFeatures.php
index bad901d33..edef63131 100644
--- a/src/library/classifiers/WeightedFeatures.php
+++ b/src/library/classifiers/WeightedFeatures.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\classifiers;
diff --git a/src/library/compressors/Compressor.php b/src/library/compressors/Compressor.php
index ac43bc512..a70410152 100755
--- a/src/library/compressors/Compressor.php
+++ b/src/library/compressors/Compressor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\compressors;
diff --git a/src/library/compressors/GzipCompressor.php b/src/library/compressors/GzipCompressor.php
index e2f6622a8..868ce9f0f 100755
--- a/src/library/compressors/GzipCompressor.php
+++ b/src/library/compressors/GzipCompressor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\compressors;
diff --git a/src/library/compressors/NonCompressor.php b/src/library/compressors/NonCompressor.php
index fc9273616..c25118420 100755
--- a/src/library/compressors/NonCompressor.php
+++ b/src/library/compressors/NonCompressor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\compressors;
diff --git a/src/library/index_bundle_iterators/DisjointIterator.php b/src/library/index_bundle_iterators/DisjointIterator.php
index a8f96fc41..83bdebab6 100644
--- a/src/library/index_bundle_iterators/DisjointIterator.php
+++ b/src/library/index_bundle_iterators/DisjointIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/index_bundle_iterators/DocIterator.php b/src/library/index_bundle_iterators/DocIterator.php
index 7f0384c45..b6225cac1 100755
--- a/src/library/index_bundle_iterators/DocIterator.php
+++ b/src/library/index_bundle_iterators/DocIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/index_bundle_iterators/GroupIterator.php b/src/library/index_bundle_iterators/GroupIterator.php
index bc49c6dfb..dcfdc5e29 100644
--- a/src/library/index_bundle_iterators/GroupIterator.php
+++ b/src/library/index_bundle_iterators/GroupIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/index_bundle_iterators/IndexBundleIterator.php b/src/library/index_bundle_iterators/IndexBundleIterator.php
index 7dd2dd453..3ccade5d9 100644
--- a/src/library/index_bundle_iterators/IndexBundleIterator.php
+++ b/src/library/index_bundle_iterators/IndexBundleIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/index_bundle_iterators/IntersectIterator.php b/src/library/index_bundle_iterators/IntersectIterator.php
index d0692f3db..ae0b56320 100644
--- a/src/library/index_bundle_iterators/IntersectIterator.php
+++ b/src/library/index_bundle_iterators/IntersectIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/index_bundle_iterators/NegationIterator.php b/src/library/index_bundle_iterators/NegationIterator.php
index 5391fa39d..7e1348132 100644
--- a/src/library/index_bundle_iterators/NegationIterator.php
+++ b/src/library/index_bundle_iterators/NegationIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/index_bundle_iterators/NetworkIterator.php b/src/library/index_bundle_iterators/NetworkIterator.php
index 0b94aaa67..7e22f128d 100644
--- a/src/library/index_bundle_iterators/NetworkIterator.php
+++ b/src/library/index_bundle_iterators/NetworkIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
@@ -240,7 +240,7 @@ class NetworkIterator extends IndexBundleIterator
         $this->num_downloaded = 0;
         $in4 = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
         $machine_times = AnalyticsManager::get("MACHINE_TIMES");
-        $indent = ($machine_times) ? "<br />$in4" : $in4;
+        $indent = ($machine_times) ? "<br>$in4" : $in4;
         $machine_times = ($machine_times) ? $machine_times: "";
         $max_machine_times = AnalyticsManager::get("MAX_MACHINE_TIMES");
         $max_machine_times = ($max_machine_times) ? $max_machine_times : 0;
@@ -282,12 +282,12 @@ class NetworkIterator extends IndexBundleIterator
                 $max_time = max($max_time, $pre_result['TOTAL_TIME'] ?? 0);
                 $machine_times .= $in4 . $lookup_link . " ".
                     number_format($pre_result['ELAPSED_TIME'] ?? 0, 6) . "/" .
-                    number_format($pre_result['TOTAL_TIME'] ?? 0, 6) . "<br />";
+                    number_format($pre_result['TOTAL_TIME'] ?? 0, 6) . "<br>";
             } else {
-                $machine_times .= $in4 . $lookup_link . " No Results<br />";
+                $machine_times .= $in4 . $lookup_link . " No Results<br>";
             }
         }
-        $machine_times = substr( $machine_times, 0, -strlen("<br />"));
+        $machine_times = substr( $machine_times, 0, -strlen("<br>"));
         if (isset($pre_result["HARD_QUERY"])) {
             $this->hard_query  = $pre_result["HARD_QUERY"];
         }
diff --git a/src/library/index_bundle_iterators/UnionIterator.php b/src/library/index_bundle_iterators/UnionIterator.php
index 2aac08cce..80d51d14d 100644
--- a/src/library/index_bundle_iterators/UnionIterator.php
+++ b/src/library/index_bundle_iterators/UnionIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/index_bundle_iterators/WordIterator.php b/src/library/index_bundle_iterators/WordIterator.php
index d53a38db9..a34b487a1 100644
--- a/src/library/index_bundle_iterators/WordIterator.php
+++ b/src/library/index_bundle_iterators/WordIterator.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\index_bundle_iterators;
diff --git a/src/library/indexing_plugins/AddressesPlugin.php b/src/library/indexing_plugins/AddressesPlugin.php
index aac9cb618..826988d72 100644
--- a/src/library/indexing_plugins/AddressesPlugin.php
+++ b/src/library/indexing_plugins/AddressesPlugin.php
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\indexing_plugins;
diff --git a/src/library/indexing_plugins/WordfilterPlugin.php b/src/library/indexing_plugins/WordfilterPlugin.php
index e1b3cb151..79384349f 100644
--- a/src/library/indexing_plugins/WordfilterPlugin.php
+++ b/src/library/indexing_plugins/WordfilterPlugin.php
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\indexing_plugins;
@@ -504,12 +504,12 @@ EOD;
             ?>&amp;word_filter=restore"><?=
             L\tl('wordfilter_plugin_factory_settings') ?></a>]</h2>
         <form  method="post" action='?'>
-        <input type="hidden" name="c" value="admin" />
-        <input type="hidden" name="a" value="pageOptions" />
+        <input type="hidden" name="c" value="admin" >
+        <input type="hidden" name="a" value="pageOptions" >
         <input type="hidden" name="option_type"
-            value="crawl_time" />
+            value="crawl_time" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
+            $data[C\CSRF_TOKEN] ?>" >
         <textarea class="tall-text-area" name="filter_rules" ><?=
             $data["filter_rules"]?></textarea>
         <div class="center slight-pad">
diff --git a/src/library/media_jobs/AnalyticsJob.php b/src/library/media_jobs/AnalyticsJob.php
index 3d13793f5..13237a232 100644
--- a/src/library/media_jobs/AnalyticsJob.php
+++ b/src/library/media_jobs/AnalyticsJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/BulkEmailJob.php b/src/library/media_jobs/BulkEmailJob.php
index 4652a9c4d..227ead30b 100644
--- a/src/library/media_jobs/BulkEmailJob.php
+++ b/src/library/media_jobs/BulkEmailJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *      and subclasses based on work of Pooja Mishra for her master's)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/DescriptionUpdateJob.php b/src/library/media_jobs/DescriptionUpdateJob.php
index 16eb810ed..dd10ce6a2 100644
--- a/src/library/media_jobs/DescriptionUpdateJob.php
+++ b/src/library/media_jobs/DescriptionUpdateJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Parth Patel (modfied to better use xpaths Chris Pollett)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/FeedsUpdateJob.php b/src/library/media_jobs/FeedsUpdateJob.php
index 52b904455..949375d4c 100644
--- a/src/library/media_jobs/FeedsUpdateJob.php
+++ b/src/library/media_jobs/FeedsUpdateJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *      and subclasses based on work of Pooja Mishra for her master's)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
@@ -503,7 +503,7 @@ class FeedsUpdateJob extends MediaJob
                 "items in {$feed['NAME']}.", "h3");
             if ($test_mode) {
                 $log_function("----...Found following items...", "h3");
-                $log_function("<hr />");
+                $log_function("<hr >");
             }
             $num_added = 0;
             $num_seen = 0;
@@ -640,7 +640,7 @@ class FeedsUpdateJob extends MediaJob
                                 "$field_value</div>");
                         }
                     }
-                    $log_function("<hr />");
+                    $log_function("<hr >");
                     $did_add = true;
                 } else {
                     $did_add = $this->addFeedItemIfNew($item, $feed['NAME'],
diff --git a/src/library/media_jobs/MediaJob.php b/src/library/media_jobs/MediaJob.php
index ae0828c85..1ea1aa133 100644
--- a/src/library/media_jobs/MediaJob.php
+++ b/src/library/media_jobs/MediaJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *      and subclasses based on work of Pooja Mishra for her master's)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/PodcastDownloadJob.php b/src/library/media_jobs/PodcastDownloadJob.php
index 8778e2381..45844a606 100644
--- a/src/library/media_jobs/PodcastDownloadJob.php
+++ b/src/library/media_jobs/PodcastDownloadJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *      and subclasses based on work of Pooja Mishra for her master's)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/RecommendationJob.php b/src/library/media_jobs/RecommendationJob.php
index b05f15118..21719b2a5 100644
--- a/src/library/media_jobs/RecommendationJob.php
+++ b/src/library/media_jobs/RecommendationJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  * (Reworked so could scale for yioop.com by Chris Pollett)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/TrendingHighlightsJob.php b/src/library/media_jobs/TrendingHighlightsJob.php
index fcc3540fa..9492747d9 100644
--- a/src/library/media_jobs/TrendingHighlightsJob.php
+++ b/src/library/media_jobs/TrendingHighlightsJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *      and subclasses based on work of Pooja Mishra for her master's)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/VideoConvertJob.php b/src/library/media_jobs/VideoConvertJob.php
index d91c1db9b..df412f2d0 100644
--- a/src/library/media_jobs/VideoConvertJob.php
+++ b/src/library/media_jobs/VideoConvertJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *      and subclasses based on work of Pooja Mishra for her master's)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/media_jobs/WikiThumbDetailJob.php b/src/library/media_jobs/WikiThumbDetailJob.php
index ac46d2782..64380a283 100644
--- a/src/library/media_jobs/WikiThumbDetailJob.php
+++ b/src/library/media_jobs/WikiThumbDetailJob.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *      and subclasses based on work of Pooja Mishra for her master's)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\media_jobs;
diff --git a/src/library/processors/BmpProcessor.php b/src/library/processors/BmpProcessor.php
index 5befb5c7e..188591446 100644
--- a/src/library/processors/BmpProcessor.php
+++ b/src/library/processors/BmpProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
@@ -119,7 +119,7 @@ class BmpProcessor extends ImageProcessor
             $summary[self::PAGE] =
                 "<html><body><div><img src='data:image/bmp;base64," .
                 base64_encode($page)."' alt='".$summary[self::DESCRIPTION].
-                "' /></div></body></html>";
+                "' ></div></body></html>";
             if ($image) {
                 $summary[self::WIDTH] = imagesx($image);
                 $summary[self::HEIGHT] = imagesy($image);
diff --git a/src/library/processors/CompressedProcessor.php b/src/library/processors/CompressedProcessor.php
index 9068b1fae..f266406b8 100644
--- a/src/library/processors/CompressedProcessor.php
+++ b/src/library/processors/CompressedProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/DocProcessor.php b/src/library/processors/DocProcessor.php
index b01394595..93ad5ad98 100755
--- a/src/library/processors/DocProcessor.php
+++ b/src/library/processors/DocProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/DocxProcessor.php b/src/library/processors/DocxProcessor.php
index cab433902..e584e55ba 100644
--- a/src/library/processors/DocxProcessor.php
+++ b/src/library/processors/DocxProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/EpubProcessor.php b/src/library/processors/EpubProcessor.php
index fc9d30588..b8af40940 100644
--- a/src/library/processors/EpubProcessor.php
+++ b/src/library/processors/EpubProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Vijeth Patil vijeth.patil@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/GifProcessor.php b/src/library/processors/GifProcessor.php
index 3f6e8f331..9a42c4457 100755
--- a/src/library/processors/GifProcessor.php
+++ b/src/library/processors/GifProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
@@ -114,7 +114,7 @@ class GifProcessor extends ImageProcessor
                 "<html><body><div><img src='data:image/gif;base64,".
                 base64_encode($page) .
                 "' alt='" . $summary[self::DESCRIPTION].
-                "' /></div></body></html>";
+                "' ></div></body></html>";
             if ($image) {
                 $summary[self::WIDTH] = imagesx($image);
                 $summary[self::HEIGHT] = imagesy($image);
diff --git a/src/library/processors/GitXmlProcessor.php b/src/library/processors/GitXmlProcessor.php
index 90ac4d655..c3dba8e45 100755
--- a/src/library/processors/GitXmlProcessor.php
+++ b/src/library/processors/GitXmlProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Snigdha Rao Parvatneni
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/GopherProcessor.php b/src/library/processors/GopherProcessor.php
index f80082575..bb743c7fe 100644
--- a/src/library/processors/GopherProcessor.php
+++ b/src/library/processors/GopherProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/HtmlProcessor.php b/src/library/processors/HtmlProcessor.php
index bda6ff06b..091ab94cf 100755
--- a/src/library/processors/HtmlProcessor.php
+++ b/src/library/processors/HtmlProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/IconProcessor.php b/src/library/processors/IconProcessor.php
index fefbc787d..88348789a 100644
--- a/src/library/processors/IconProcessor.php
+++ b/src/library/processors/IconProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
@@ -104,7 +104,7 @@ class IconProcessor extends ImageProcessor
             $summary[self::PAGE] =
                 "<html><body><div><img src='" . $summary[self::THUMB] .
                 "' alt='" . $summary[self::DESCRIPTION] .
-                "' /></div></body></html>";
+                "' ></div></body></html>";
         }
         return $summary;
     }
diff --git a/src/library/processors/ImageProcessor.php b/src/library/processors/ImageProcessor.php
index e3bf43d28..d2291019b 100755
--- a/src/library/processors/ImageProcessor.php
+++ b/src/library/processors/ImageProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/JavaProcessor.php b/src/library/processors/JavaProcessor.php
index 3982c3959..98ba940a7 100755
--- a/src/library/processors/JavaProcessor.php
+++ b/src/library/processors/JavaProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Snigdha Rao Parvatneni
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/JpgProcessor.php b/src/library/processors/JpgProcessor.php
index f16791ba9..7400a2d1e 100755
--- a/src/library/processors/JpgProcessor.php
+++ b/src/library/processors/JpgProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
@@ -123,7 +123,7 @@ class JpgProcessor extends ImageProcessor
             $summary[self::PAGE] =
                 "<html><body><div><img src='data:image/jpeg;base64," .
                 base64_encode($page)."' alt='". $file_name .
-                "' /></div></body></html>";
+                "' ></div></body></html>";
             if ($image) {
                 $summary[self::WIDTH] = imagesx($image);
                 $summary[self::HEIGHT] = imagesy($image);
diff --git a/src/library/processors/PageProcessor.php b/src/library/processors/PageProcessor.php
index e3cd8fa8e..16bd20974 100644
--- a/src/library/processors/PageProcessor.php
+++ b/src/library/processors/PageProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/PdfProcessor.php b/src/library/processors/PdfProcessor.php
index b5838e0aa..843fa39df 100755
--- a/src/library/processors/PdfProcessor.php
+++ b/src/library/processors/PdfProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/PngProcessor.php b/src/library/processors/PngProcessor.php
index a5ce3b9ea..9e39c7dc6 100755
--- a/src/library/processors/PngProcessor.php
+++ b/src/library/processors/PngProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
@@ -114,7 +114,7 @@ class PngProcessor extends ImageProcessor
                 "<html><body><div><img src='data:image/png;base64,".
                 base64_encode($page).
                 "' alt='".$summary[self::DESCRIPTION].
-                "' /></div></body></html>";
+                "' ></div></body></html>";
             if ($image) {
                 $summary[self::WIDTH] = imagesx($image);
                 $summary[self::HEIGHT] = imagesy($image);
diff --git a/src/library/processors/PptProcessor.php b/src/library/processors/PptProcessor.php
index 9cbce9f7c..3994160d0 100755
--- a/src/library/processors/PptProcessor.php
+++ b/src/library/processors/PptProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/PptxProcessor.php b/src/library/processors/PptxProcessor.php
index c7a284a68..08faa99a6 100644
--- a/src/library/processors/PptxProcessor.php
+++ b/src/library/processors/PptxProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Nakul Natu nakul.natu@gmail.com
  * @license https://www.gnu.org/licenses/ GPLv3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/PythonProcessor.php b/src/library/processors/PythonProcessor.php
index 6cacd1d00..0498699af 100755
--- a/src/library/processors/PythonProcessor.php
+++ b/src/library/processors/PythonProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Snigdha Rao Parvatneni
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/RobotProcessor.php b/src/library/processors/RobotProcessor.php
index 34105f4f9..e4d4c453e 100644
--- a/src/library/processors/RobotProcessor.php
+++ b/src/library/processors/RobotProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/RssProcessor.php b/src/library/processors/RssProcessor.php
index dfd408a79..74454dda4 100644
--- a/src/library/processors/RssProcessor.php
+++ b/src/library/processors/RssProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/RtfProcessor.php b/src/library/processors/RtfProcessor.php
index 6cf033013..8270d62ce 100755
--- a/src/library/processors/RtfProcessor.php
+++ b/src/library/processors/RtfProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/SitemapProcessor.php b/src/library/processors/SitemapProcessor.php
index e32fcfdee..477cc3a41 100644
--- a/src/library/processors/SitemapProcessor.php
+++ b/src/library/processors/SitemapProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/SvgProcessor.php b/src/library/processors/SvgProcessor.php
index 609cac5e3..bb1aafb23 100644
--- a/src/library/processors/SvgProcessor.php
+++ b/src/library/processors/SvgProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
@@ -109,7 +109,7 @@ class SvgProcessor extends TextProcessor
                 $summary[self::PAGE] = "<!DOCTYPE html>" .
                     "<html><body><div><img src='data:image/svg+xml;base64," .
                     base64_encode($page)."' alt='".$summary[self::DESCRIPTION].
-                    "' /></div></body></html>";
+                    "' ></div></body></html>";
                 if (strlen($page) < C\PAGE_RANGE_REQUEST) {
                     $thumb_string = self::createSvgThumb($dom, $page);
                     $summary[self::THUMB] = 'data:image/svg+xml;base64,'.
diff --git a/src/library/processors/TextProcessor.php b/src/library/processors/TextProcessor.php
index a3b0b3c03..fcbbffe82 100755
--- a/src/library/processors/TextProcessor.php
+++ b/src/library/processors/TextProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/VideoProcessor.php b/src/library/processors/VideoProcessor.php
index 974ec8a33..38aada535 100644
--- a/src/library/processors/VideoProcessor.php
+++ b/src/library/processors/VideoProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/XlsxProcessor.php b/src/library/processors/XlsxProcessor.php
index 6b489446d..b90b5fd68 100644
--- a/src/library/processors/XlsxProcessor.php
+++ b/src/library/processors/XlsxProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Tarun Ramaswamy tarun.pepira@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/processors/XmlProcessor.php b/src/library/processors/XmlProcessor.php
index 7704f1dda..1e89f843d 100644
--- a/src/library/processors/XmlProcessor.php
+++ b/src/library/processors/XmlProcessor.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\processors;
diff --git a/src/library/summarizers/CentroidSummarizer.php b/src/library/summarizers/CentroidSummarizer.php
index b5ab953c9..b0112a965 100644
--- a/src/library/summarizers/CentroidSummarizer.php
+++ b/src/library/summarizers/CentroidSummarizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Mangesh Dahale mangeshadahale@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\summarizers;
diff --git a/src/library/summarizers/CentroidWeightedSummarizer.php b/src/library/summarizers/CentroidWeightedSummarizer.php
index fe02e1e03..e90273102 100644
--- a/src/library/summarizers/CentroidWeightedSummarizer.php
+++ b/src/library/summarizers/CentroidWeightedSummarizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett (chris@pollett.org)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\summarizers;
diff --git a/src/library/summarizers/GraphBasedSummarizer.php b/src/library/summarizers/GraphBasedSummarizer.php
index 75c530ca6..94fb0aab1 100644
--- a/src/library/summarizers/GraphBasedSummarizer.php
+++ b/src/library/summarizers/GraphBasedSummarizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Charles Bocage charles.bocage@sjsu.edu
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\summarizers;
diff --git a/src/library/summarizers/ScrapeSummarizer.php b/src/library/summarizers/ScrapeSummarizer.php
index b701730e6..95049fe2a 100644
--- a/src/library/summarizers/ScrapeSummarizer.php
+++ b/src/library/summarizers/ScrapeSummarizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Charles Bocage charles.bocage@sjsu.edu
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\summarizers;
diff --git a/src/library/summarizers/Summarizer.php b/src/library/summarizers/Summarizer.php
index a0182c6bf..7a16a625a 100644
--- a/src/library/summarizers/Summarizer.php
+++ b/src/library/summarizers/Summarizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Charles Bocage charles.bocage@sjsu.edu
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\library\summarizers;
diff --git a/src/locale/ar/configure.ini b/src/locale/ar/configure.ini
index dc3faa402..481a327b0 100755
--- a/src/locale/ar/configure.ini
+++ b/src/locale/ar/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "المزيد من المجموعات..."
 manageaccount_element_recommendations = "التوصيات"
 manageaccount_element_rec_threads = "المواضيع:"
 manageaccount_element_rec_groups = "المجموعات:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "تفاصيل الحساب"
 manageaccount_element_username = "اسم المستخدم"
 manageaccount_element_firstname = "الاسم الأول"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "أي الموارد التي تم حفظها إلى
 wiki_element_video = "فيديو"
 wiki_element_audio = "الصوت"
 wiki_element_rename = "إعادة تسمية"
-wiki_element_add_to_page = "إضافة إلى الصفحة"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "استخراج"
 wiki_element_clip_copy = "مقطع نسخ"
 wiki_element_clip_cut = "مقطع قص"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "هل أنت متأكد من أنك تريد إ
 iconlink_helper_group_play = "لعب"
 iconlink_helper_query_stats = "إحصائيات الاستعلام"
 iconlink_helper_reset = "إعادة تعيين"
+iconlink_helper_resources = ""
 iconlink_helper_search = "البحث"
 iconlink_helper_settings = "الإعدادات"
 iconlink_helper_statistics = "الإحصاءات"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "التخلف من جديد!"
 wordfilter_plugin_preferences = "كلمة مرشح تفضيلات"
 wordfilter_plugin_factory_settings = "إعدادات المصنع"
 wordfilter_plugin_save = "حفظ"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/ar/resources/Tokenizer.php b/src/locale/ar/resources/Tokenizer.php
index f9fbf3685..8fb375390 100755
--- a/src/locale/ar/resources/Tokenizer.php
+++ b/src/locale/ar/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\ar\resources;
diff --git a/src/locale/ar/resources/locale.js b/src/locale/ar/resources/locale.js
index 39c4dd99c..a7adef0eb 100755
--- a/src/locale/ar/resources/locale.js
+++ b/src/locale/ar/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */

diff --git a/src/locale/bn/configure.ini b/src/locale/bn/configure.ini
index b5720ac4d..98b6bb66f 100755
--- a/src/locale/bn/configure.ini
+++ b/src/locale/bn/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "আরো গ্রুপ..."
 manageaccount_element_recommendations = "সুপারিশ"
 manageaccount_element_rec_threads = "টপিক:"
 manageaccount_element_rec_groups = "গ্রুপ:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "অ্যাকাউন্টের বিশদ বিবরণ"
 manageaccount_element_username = "ব্যবহারকারীর নাম"
 manageaccount_element_firstname = "প্রথম নাম"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "কোন সম্পদ সংরক্ষণ ক
 wiki_element_video = "ভিডিও"
 wiki_element_audio = "অডিও"
 wiki_element_rename = "নামান্তর"
-wiki_element_add_to_page = "যোগ করা পৃষ্ঠা"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "সার"
 wiki_element_clip_copy = "ক্লিপ কপি"
 wiki_element_clip_cut = "কাটা হ্রাস করা হবে"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "আপনি কি নিশ্চিত য
 iconlink_helper_group_play = "খেলা"
 iconlink_helper_query_stats = "প্রশ্নের পরিসংখ্যান"
 iconlink_helper_reset = "রিসেট"
+iconlink_helper_resources = ""
 iconlink_helper_search = "অনুসন্ধান"
 iconlink_helper_settings = "সেটিংস"
 iconlink_helper_statistics = "পরিসংখ্যান"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "ডিফল্ট পুনরুদ্
 wordfilter_plugin_preferences = "শব্দ ফিল্টার পছন্দ"
 wordfilter_plugin_factory_settings = "কারখানা সেটিংস"
 wordfilter_plugin_save = "সংরক্ষণ করুন"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/bn/resources/Tokenizer.php b/src/locale/bn/resources/Tokenizer.php
index 0a164d811..71ca33478 100755
--- a/src/locale/bn/resources/Tokenizer.php
+++ b/src/locale/bn/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Snigdha Rao Parvatneni
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\bn\resources;
diff --git a/src/locale/bn/resources/locale.js b/src/locale/bn/resources/locale.js
index 91d3d31d2..70f1db31a 100755
--- a/src/locale/bn/resources/locale.js
+++ b/src/locale/bn/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Snigdha Rao Parvatneni
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */

diff --git a/src/locale/de/configure.ini b/src/locale/de/configure.ini
index 1c8a09888..ce692a9e2 100755
--- a/src/locale/de/configure.ini
+++ b/src/locale/de/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Mehr Gruppen..."
 manageaccount_element_recommendations = "Empfehlungen"
 manageaccount_element_rec_threads = "Threads:"
 manageaccount_element_rec_groups = "Gruppen:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Konto-Details"
 manageaccount_element_username = "Benutzername"
 manageaccount_element_firstname = "Vorname"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Keine Ressourcen gespeichert wurden, um diese Seite
 wiki_element_video = "Video"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Umbenennen"
-wiki_element_add_to_page = "Hinzuf&uuml;gen Seite"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Extrakt"
 wiki_element_clip_copy = "Clip Kopieren"
 wiki_element_clip_cut = "Clip Geschnitten"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Sind Sie sicher, dass Sie die Anfrage stornier
 iconlink_helper_group_play = "Spielen"
 iconlink_helper_query_stats = "Statistiken abfragen"
 iconlink_helper_reset = "Zurücksetzen"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Suche"
 iconlink_helper_settings = "Einstellung"
 iconlink_helper_statistics = "Statistik"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Standardwerte wiederhergestellt werden!"
 wordfilter_plugin_preferences = "Word Filter-Einstellungen"
 wordfilter_plugin_factory_settings = "Werkseinstellungen"
 wordfilter_plugin_save = "Speichern"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/de/resources/Tokenizer.php b/src/locale/de/resources/Tokenizer.php
index cc91c241b..9bb7ee788 100755
--- a/src/locale/de/resources/Tokenizer.php
+++ b/src/locale/de/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\de\resources;
diff --git a/src/locale/de/resources/locale.js b/src/locale/de/resources/locale.js
index ba8b95578..1a0658fb6 100755
--- a/src/locale/de/resources/locale.js
+++ b/src/locale/de/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */

diff --git a/src/locale/el_GR/configure.ini b/src/locale/el_GR/configure.ini
index 2782554ab..12123475e 100644
--- a/src/locale/el_GR/configure.ini
+++ b/src/locale/el_GR/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Περισσότερες ομάδες..."
 manageaccount_element_recommendations = "συστάσεις"
 manageaccount_element_rec_threads = "Νήματα:"
 manageaccount_element_rec_groups = "Ομάδες:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "λεπτομέρειες λογαριασμού"
 manageaccount_element_username = "Όνομα χρήστη"
 manageaccount_element_firstname = "Όνομα"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Δεν έχουν αποθηκευτεί ακόμα
 wiki_element_video = "Βίντεο"
 wiki_element_audio = "Ήχος"
 wiki_element_rename = "Μετονομασία"
-wiki_element_add_to_page = "Προσθήκη στη Σελίδα"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Εξαγωγή"
 wiki_element_clip_copy = "Αντιγραφή κλιπ"
 wiki_element_clip_cut = "Κοπή κλιπ"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Είστε βέβαιοι ότι θέλετε
 iconlink_helper_group_play = "Αναπαραγωγή"
 iconlink_helper_query_stats = "Στατιστικά Ερωτήματος"
 iconlink_helper_reset = "Επαναφορά"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Αναζήτηση"
 iconlink_helper_settings = "Ρυθμίσεων"
 iconlink_helper_statistics = "Στατιστική"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Οι προεπιλογές αποκατ
 wordfilter_plugin_preferences = "Προτιμήσεις φίλτρων λέξεων"
 wordfilter_plugin_factory_settings = "Εργοστασιακές ρυθμίσεις"
 wordfilter_plugin_save = "Αποθήκευση"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/el_GR/resources/Tokenizer.php b/src/locale/el_GR/resources/Tokenizer.php
index 1807bbcbf..ac60413c7 100644
--- a/src/locale/el_GR/resources/Tokenizer.php
+++ b/src/locale/el_GR/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\el_GR\resources;
diff --git a/src/locale/el_GR/resources/locale.js b/src/locale/el_GR/resources/locale.js
index 769bacfe0..df307f7d4 100644
--- a/src/locale/el_GR/resources/locale.js
+++ b/src/locale/el_GR/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/en_US/configure.ini b/src/locale/en_US/configure.ini
index 4392a44bd..8c9113fad 100644
--- a/src/locale/en_US/configure.ini
+++ b/src/locale/en_US/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1237,7 +1237,8 @@ wiki_element_no_resources = "No resources have been saved to this page yet."
 wiki_element_video = "Video"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Rename"
-wiki_element_add_to_page = "Add to Page"
+wiki_element_resource_description = "Resource description  for %s"
+wiki_element_wiki_code = "Wiki Code"
 wiki_element_extract = "Extract"
 wiki_element_clip_copy = "Clip Copy"
 wiki_element_clip_cut = "Clip Cut"
@@ -5569,6 +5570,7 @@ iconlink_helper_cancel_request = "Are you sure you want to cancel request?"
 iconlink_helper_group_play = "Play"
 iconlink_helper_query_stats = "Query Statistics"
 iconlink_helper_reset = "Reset"
+iconlink_helper_resources = "Resources"
 iconlink_helper_search = "Search"
 iconlink_helper_settings = "Settings"
 iconlink_helper_statistics = "Statistics"
@@ -5628,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Defaults restored!"
 wordfilter_plugin_preferences = "Word Filter Preferences"
 wordfilter_plugin_factory_settings = "Factory Settings"
 wordfilter_plugin_save = "Save"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = "No description found by search sources."
diff --git a/src/locale/en_US/resources/Tokenizer.php b/src/locale/en_US/resources/Tokenizer.php
index 39f1796a2..35c7eb5fa 100755
--- a/src/locale/en_US/resources/Tokenizer.php
+++ b/src/locale/en_US/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\en_US\resources;
diff --git a/src/locale/en_US/resources/locale.js b/src/locale/en_US/resources/locale.js
index d7b744c5e..6fddcaf26 100755
--- a/src/locale/en_US/resources/locale.js
+++ b/src/locale/en_US/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Sandhya Vissapragada
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */

diff --git a/src/locale/es/configure.ini b/src/locale/es/configure.ini
index e650afe82..20fdf4e8b 100755
--- a/src/locale/es/configure.ini
+++ b/src/locale/es/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Más grupos..."
 manageaccount_element_recommendations = "Recomendaciones"
 manageaccount_element_rec_threads = "Hilos:"
 manageaccount_element_rec_groups = "Grupos:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Detalles De La Cuenta"
 manageaccount_element_username = "Nombre de usuario"
 manageaccount_element_firstname = "Primer Nombre"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "No hay recursos han sido salvados a esta p&aacute;g
 wiki_element_video = "Video"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Cambiar el nombre de"
-wiki_element_add_to_page = "Agregar a la P&aacute;gina"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Extracto de"
 wiki_element_clip_copy = "Clip De Copia"
 wiki_element_clip_cut = "Corte de Clip"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "¿Está seguro de que desea cancelar la solici
 iconlink_helper_group_play = "Jugar"
 iconlink_helper_query_stats = "Estadísticas de Consulta"
 iconlink_helper_reset = "Restablecer"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Búsqueda"
 iconlink_helper_settings = "Configuración"
 iconlink_helper_statistics = "Estadísticas"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Los valores predeterminados restaurar."
 wordfilter_plugin_preferences = "Filtro De Palabras Preferencias"
 wordfilter_plugin_factory_settings = "La Configuraci&oacute;n De F&aacute;brica"
 wordfilter_plugin_save = "Guardar"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/es/resources/Tokenizer.php b/src/locale/es/resources/Tokenizer.php
index 857cb5141..d8d199ba7 100755
--- a/src/locale/es/resources/Tokenizer.php
+++ b/src/locale/es/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\es\resources;
diff --git a/src/locale/es/resources/locale.js b/src/locale/es/resources/locale.js
index 73595888d..cceab2c3f 100755
--- a/src/locale/es/resources/locale.js
+++ b/src/locale/es/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/fa/configure.ini b/src/locale/fa/configure.ini
index 0b9847141..5f32a37e8 100755
--- a/src/locale/fa/configure.ini
+++ b/src/locale/fa/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "گروه های بیشتر..."
 manageaccount_element_recommendations = "توصیه های"
 manageaccount_element_rec_threads = "موضوعات:"
 manageaccount_element_rec_groups = "گروه:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "جزئیات حساب"
 manageaccount_element_username = "نام کاربری"
 manageaccount_element_firstname = "نام"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "هیچ منابع ذخیره شده اند به ا
 wiki_element_video = "تصویری"
 wiki_element_audio = "صوتی"
 wiki_element_rename = "تغییر نام"
-wiki_element_add_to_page = "اضافه کردن به صفحه"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "عصاره"
 wiki_element_clip_copy = "کلیپ کپی"
 wiki_element_clip_cut = "برش کلیپ"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "حتما می خواهید درخواست را
 iconlink_helper_group_play = "بازی"
 iconlink_helper_query_stats = "پرسش و پاسخ"
 iconlink_helper_reset = "بازنشانی"
+iconlink_helper_resources = ""
 iconlink_helper_search = "جستجو"
 iconlink_helper_settings = "تنظیمات"
 iconlink_helper_statistics = "اطلاعیه ها"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "پیش فرض ترمیم!"
 wordfilter_plugin_preferences = "کلمه فیلتر تنظیمات"
 wordfilter_plugin_factory_settings = "تنظیمات کارخانه"
 wordfilter_plugin_save = "صرفه جویی در"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/fa/resources/Tokenizer.php b/src/locale/fa/resources/Tokenizer.php
index 34542169d..6aaa16c79 100755
--- a/src/locale/fa/resources/Tokenizer.php
+++ b/src/locale/fa/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\fa\resources;
diff --git a/src/locale/fa/resources/locale.js b/src/locale/fa/resources/locale.js
index 08066ea44..27bdf109a 100755
--- a/src/locale/fa/resources/locale.js
+++ b/src/locale/fa/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/fr_FR/configure.ini b/src/locale/fr_FR/configure.ini
index 4d2cd913b..447108413 100755
--- a/src/locale/fr_FR/configure.ini
+++ b/src/locale/fr_FR/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Plus de groupes..."
 manageaccount_element_recommendations = "Recommandations"
 manageaccount_element_rec_threads = "Fils:"
 manageaccount_element_rec_groups = "Groupes:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "D&eacute;tails du compte"
 manageaccount_element_username = "Nom d&#039;utilisateur"
 manageaccount_element_firstname = "Pr&eacute;nom"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Aucune ressource n&#039;a &eacute;t&eacute; enregis
 wiki_element_video = "Vid&eacute;o"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Renommer"
-wiki_element_add_to_page = "Ajouter &agrave; la page"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Extrait"
 wiki_element_clip_copy = "Copier au dossier de clip"
 wiki_element_clip_cut = "Coupe Clip"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Voulez-vous vraiment annuler la demande ?"
 iconlink_helper_group_play = "Jouer"
 iconlink_helper_query_stats = "Statistiques de Requête"
 iconlink_helper_reset = "Réinitialiser"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Rechercher"
 iconlink_helper_settings = "Paramètre"
 iconlink_helper_statistics = "Statistique"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Par d&eacute;faut restaur&eacute;s!"
 wordfilter_plugin_preferences = "Mot pr&eacute;f&eacute;rences de filtre"
 wordfilter_plugin_factory_settings = "Les param&egrave;tres originaux"
 wordfilter_plugin_save = "Enregistrer"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/fr_FR/resources/Tokenizer.php b/src/locale/fr_FR/resources/Tokenizer.php
index 8eec906a0..5b3d6db83 100755
--- a/src/locale/fr_FR/resources/Tokenizer.php
+++ b/src/locale/fr_FR/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\fr_FR\resources;
diff --git a/src/locale/fr_FR/resources/locale.js b/src/locale/fr_FR/resources/locale.js
index 4e64c372b..c7ff9e6df 100755
--- a/src/locale/fr_FR/resources/locale.js
+++ b/src/locale/fr_FR/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/he/configure.ini b/src/locale/he/configure.ini
index 044cc50b1..17f178510 100755
--- a/src/locale/he/configure.ini
+++ b/src/locale/he/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "קבוצות נוספות..."
 manageaccount_element_recommendations = "המלצות"
 manageaccount_element_rec_threads = "נושאים:"
 manageaccount_element_rec_groups = "קבוצות:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "פרטי חשבון"
 manageaccount_element_username = "שם משתמש"
 manageaccount_element_firstname = "שם פרטי"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "לא משאבים נשמרו לדף זה עדיין
 wiki_element_video = "וידאו"
 wiki_element_audio = "אודיו"
 wiki_element_rename = "שינוי שם"
-wiki_element_add_to_page = "הוסף לדף"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "תמצית"
 wiki_element_clip_copy = "קליפ להעתיק"
 wiki_element_clip_cut = "חיתוך קליפ"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "האם אתה בטוח שאתה רוצה לב
 iconlink_helper_group_play = "לשחק"
 iconlink_helper_query_stats = "סטטיסטיקות שאילתה"
 iconlink_helper_reset = "איפוס"
+iconlink_helper_resources = ""
 iconlink_helper_search = "חיפוש"
 iconlink_helper_settings = "הגדרות"
 iconlink_helper_statistics = "סטטיסטיקה"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "ברירות מחדל משוחזר!"
 wordfilter_plugin_preferences = "המילה העדפות סינון"
 wordfilter_plugin_factory_settings = "הגדרות יצרן"
 wordfilter_plugin_save = "להציל"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/he/resources/Tokenizer.php b/src/locale/he/resources/Tokenizer.php
index 9409f1587..f932c0ce4 100755
--- a/src/locale/he/resources/Tokenizer.php
+++ b/src/locale/he/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\he\resources;
diff --git a/src/locale/he/resources/locale.js b/src/locale/he/resources/locale.js
index c99fe0618..cdb972a34 100755
--- a/src/locale/he/resources/locale.js
+++ b/src/locale/he/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/hi/configure.ini b/src/locale/hi/configure.ini
index 5e5fda98a..a6ebd018b 100755
--- a/src/locale/hi/configure.ini
+++ b/src/locale/hi/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "अधिक समूहों..."
 manageaccount_element_recommendations = "सिफारिशों"
 manageaccount_element_rec_threads = "धागे:"
 manageaccount_element_rec_groups = "समूहों:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "खाते का विवरण"
 manageaccount_element_username = "उपयोगकर्ता नाम"
 manageaccount_element_firstname = "पहला नाम"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "कोई संसाधनों को बचा
 wiki_element_video = "वीडियो"
 wiki_element_audio = "ऑडियो"
 wiki_element_rename = "नाम बदलें"
-wiki_element_add_to_page = "जोड़ने के लिए पृष्ठ"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "निकालें"
 wiki_element_clip_copy = "क्लिप की नकल"
 wiki_element_clip_cut = "क्लिप कट"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "क्या आप वाकई अनुर
 iconlink_helper_group_play = "प्ले"
 iconlink_helper_query_stats = "क्वेरी आँकड़े"
 iconlink_helper_reset = "रीसेट करें"
+iconlink_helper_resources = ""
 iconlink_helper_search = "खोज"
 iconlink_helper_settings = "सेटिंग्स"
 iconlink_helper_statistics = "सांख्यिकी"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "चूक बहाल!"
 wordfilter_plugin_preferences = "शब्द फिल्टर वरीयताओं"
 wordfilter_plugin_factory_settings = "कारखाना सेटिंग्स"
 wordfilter_plugin_save = "बचाने के लिए"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/hi/resources/Tokenizer.php b/src/locale/hi/resources/Tokenizer.php
index ea2456390..db26df50e 100755
--- a/src/locale/hi/resources/Tokenizer.php
+++ b/src/locale/hi/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\hi\resources;
diff --git a/src/locale/hi/resources/locale.js b/src/locale/hi/resources/locale.js
index bf18eb166..40c0667fd 100755
--- a/src/locale/hi/resources/locale.js
+++ b/src/locale/hi/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Mallika Perepa
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */

diff --git a/src/locale/id/configure.ini b/src/locale/id/configure.ini
index be91c15f6..7c41fa3f6 100755
--- a/src/locale/id/configure.ini
+++ b/src/locale/id/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Lebih banyak grup..."
 manageaccount_element_recommendations = "Rekomendasi"
 manageaccount_element_rec_threads = "Thread:"
 manageaccount_element_rec_groups = "Kelompok:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Rincian Rekening"
 manageaccount_element_username = "Username"
 manageaccount_element_firstname = "Nama"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Tidak ada sumber daya yang telah disimpan ke halama
 wiki_element_video = "Video"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Ganti nama"
-wiki_element_add_to_page = "Tambahkan ke Halaman"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Ekstrak"
 wiki_element_clip_copy = "Klip Copy"
 wiki_element_clip_cut = "Potong Klip"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Apakah Anda yakin ingin membatalkan permintaan
 iconlink_helper_group_play = "Bermain"
 iconlink_helper_query_stats = "Statistik Kueri"
 iconlink_helper_reset = "Reset"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Cari"
 iconlink_helper_settings = "Pengaturan"
 iconlink_helper_statistics = "Statistik"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Default dipulihkan!"
 wordfilter_plugin_preferences = "Kata Preferensi Filter"
 wordfilter_plugin_factory_settings = "Pengaturan Pabrik"
 wordfilter_plugin_save = "Simpan"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/id/resources/Tokenizer.php b/src/locale/id/resources/Tokenizer.php
index bf0948ad2..aa10788b7 100755
--- a/src/locale/id/resources/Tokenizer.php
+++ b/src/locale/id/resources/Tokenizer.php
@@ -4,7 +4,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\id\resources;
diff --git a/src/locale/id/resources/locale.js b/src/locale/id/resources/locale.js
index c13236000..3944bf844 100755
--- a/src/locale/id/resources/locale.js
+++ b/src/locale/id/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/it/configure.ini b/src/locale/it/configure.ini
index e65d5c235..591a4d8cc 100755
--- a/src/locale/it/configure.ini
+++ b/src/locale/it/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Altri gruppi..."
 manageaccount_element_recommendations = "Raccomandazioni"
 manageaccount_element_rec_threads = "Thread:"
 manageaccount_element_rec_groups = "Gruppi:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "I Dettagli Dell&#039;Account"
 manageaccount_element_username = "Nome utente"
 manageaccount_element_firstname = "Nome"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Senza risorse non sono state salvate questa pagina
 wiki_element_video = "Video"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Rinominare"
-wiki_element_add_to_page = "Aggiungere alla Pagina"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Estratto"
 wiki_element_clip_copy = "Copia Della Clip"
 wiki_element_clip_cut = "Taglio a clip"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Annullare veramente la richiesta?"
 iconlink_helper_group_play = "Giocare"
 iconlink_helper_query_stats = "Statistiche query"
 iconlink_helper_reset = "Reset"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Ricerca"
 iconlink_helper_settings = "Impostazioni"
 iconlink_helper_statistics = "Statistica"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Predefinito!"
 wordfilter_plugin_preferences = "Filtro Parola Preferenze"
 wordfilter_plugin_factory_settings = "Impostazioni Di Fabbrica"
 wordfilter_plugin_save = "Salva"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/it/resources/Tokenizer.php b/src/locale/it/resources/Tokenizer.php
index c02586b7d..304a8b6f0 100755
--- a/src/locale/it/resources/Tokenizer.php
+++ b/src/locale/it/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\it\resources;
diff --git a/src/locale/it/resources/locale.js b/src/locale/it/resources/locale.js
index 92757a987..482e3ff53 100755
--- a/src/locale/it/resources/locale.js
+++ b/src/locale/it/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/ja/configure.ini b/src/locale/ja/configure.ini
index ea90f9742..e3c1b25df 100755
--- a/src/locale/ja/configure.ini
+++ b/src/locale/ja/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "より多くのグループ。.."
 manageaccount_element_recommendations = "提言"
 manageaccount_element_rec_threads = "スレッド:"
 manageaccount_element_rec_groups = "グループ"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "アカウント詳細"
 manageaccount_element_username = "ユーザー名"
 manageaccount_element_firstname = "名前"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "資源保存されていて、まさにこのペー
 wiki_element_video = "ビデオ"
 wiki_element_audio = "オーディオ"
 wiki_element_rename = "名前の変更"
-wiki_element_add_to_page = "追加ページ"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "エキス"
 wiki_element_clip_copy = "クリップコピー"
 wiki_element_clip_cut = "クリップカット"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "リクエストをキャンセルしてもよ
 iconlink_helper_group_play = "プレイ"
 iconlink_helper_query_stats = "クエリ統計"
 iconlink_helper_reset = "リセット"
+iconlink_helper_resources = ""
 iconlink_helper_search = "検索"
 iconlink_helper_settings = "設定"
 iconlink_helper_statistics = "統計"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "デフォルトに戻!"
 wordfilter_plugin_preferences = "Wordフィルタの設定"
 wordfilter_plugin_factory_settings = "工場出荷時の設定"
 wordfilter_plugin_save = "保存"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/ja/resources/Tokenizer.php b/src/locale/ja/resources/Tokenizer.php
index 4c5aa6491..39446cabd 100755
--- a/src/locale/ja/resources/Tokenizer.php
+++ b/src/locale/ja/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\ja\resources;
diff --git a/src/locale/ja/resources/locale.js b/src/locale/ja/resources/locale.js
index 14d7bf3db..ed4482c79 100755
--- a/src/locale/ja/resources/locale.js
+++ b/src/locale/ja/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/locale/kn/configure.ini b/src/locale/kn/configure.ini
index 83a5a9fcc..eae150621 100755
--- a/src/locale/kn/configure.ini
+++ b/src/locale/kn/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "ಹೆಚ್ಚು ಗುಂಪುಗಳು
 manageaccount_element_recommendations = "ಶಿಫಾರಸುಗಳು"
 manageaccount_element_rec_threads = "ಥ್ರೆಡ್ಸ್:"
 manageaccount_element_rec_groups = "ಗುಂಪುಗಳು:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "ಖಾತೆ ವಿವರಗಳು"
 manageaccount_element_username = "ಬಳಕೆದಾರ ಹೆಸರು"
 manageaccount_element_firstname = "ಮೊದಲ ಹೆಸರು"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "ಯಾವುದೇ ಸಂಪನ್ಮೂಲಗಳ
 wiki_element_video = "ವೀಡಿಯೊ"
 wiki_element_audio = "ಆಡಿಯೋ"
 wiki_element_rename = "ಮರುಹೆಸರಿಸು"
-wiki_element_add_to_page = "ಸೇರಿಸಿ ಪುಟ"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "ಸಾರ"
 wiki_element_clip_copy = "ಕ್ಲಿಪ್ ಪ್ರತಿಯನ್ನು"
 wiki_element_clip_cut = "ಕ್ಲಿಪ್ ಕತ್ತರಿಸಿ"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "ನೀವು ವಿನಂತಿಯನ್ನು
 iconlink_helper_group_play = "ಪ್ಲೇ"
 iconlink_helper_query_stats = "ಪ್ರಶ್ನೆ ಅಂಕಿಅಂಶಗಳು"
 iconlink_helper_reset = "ಮರುಹೊಂದಿಸಿ"
+iconlink_helper_resources = ""
 iconlink_helper_search = "ಹುಡುಕು"
 iconlink_helper_settings = "ಸಂಯೋಜನೆಗಳು"
 iconlink_helper_statistics = "ಅಂಕಿಅಂಶಗಳು"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "ಡಿಫಾಲ್ಟ್ ಪುನಃಸ
 wordfilter_plugin_preferences = "ಪದ ಫಿಲ್ಟರ್ ಆಯ್ಕೆಗಳು"
 wordfilter_plugin_factory_settings = "ಕಾರ್ಖಾನೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು"
 wordfilter_plugin_save = "ಉಳಿಸಲು"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/kn/resources/Tokenizer.php b/src/locale/kn/resources/Tokenizer.php
index 2ce135a44..3dae222bc 100755
--- a/src/locale/kn/resources/Tokenizer.php
+++ b/src/locale/kn/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\kn\resources;
diff --git a/src/locale/kn/resources/locale.js b/src/locale/kn/resources/locale.js
index 5d15f93bc..b564af9b9 100755
--- a/src/locale/kn/resources/locale.js
+++ b/src/locale/kn/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/ko/configure.ini b/src/locale/ko/configure.ini
index 1bd613a3a..f0685bb5a 100755
--- a/src/locale/ko/configure.ini
+++ b/src/locale/ko/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "더 많은 그룹..."
 manageaccount_element_recommendations = "권장 사항"
 manageaccount_element_rec_threads = "스레드:"
 manageaccount_element_rec_groups = "그룹:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "계정 정보"
 manageaccount_element_username = "사용자 이름"
 manageaccount_element_firstname = "이름"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "리소스 저장되었습니다 이 페이지는
 wiki_element_video = "동영상"
 wiki_element_audio = "오디오"
 wiki_element_rename = "이름 바꾸기"
-wiki_element_add_to_page = "추가 페이지"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "추출물"
 wiki_element_clip_copy = "클립 복사"
 wiki_element_clip_cut = "클립 컷"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "당신은 당신이 요청을 취소 하시겠
 iconlink_helper_group_play = "놀이"
 iconlink_helper_query_stats = "쿼리 통계"
 iconlink_helper_reset = "재설정"
+iconlink_helper_resources = ""
 iconlink_helper_search = "검색"
 iconlink_helper_settings = "설정"
 iconlink_helper_statistics = "통계"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "기본값으로 복원!"
 wordfilter_plugin_preferences = "단어는 필터링 환경설정"
 wordfilter_plugin_factory_settings = "공장 설정"
 wordfilter_plugin_save = "저장"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/ko/resources/Tokenizer.php b/src/locale/ko/resources/Tokenizer.php
index fa75ea783..dc1b10b53 100755
--- a/src/locale/ko/resources/Tokenizer.php
+++ b/src/locale/ko/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\ko\resources;
diff --git a/src/locale/ko/resources/locale.js b/src/locale/ko/resources/locale.js
index 6fb296fd3..97bd5a8ce 100755
--- a/src/locale/ko/resources/locale.js
+++ b/src/locale/ko/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Sandhya Vissapragada
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/nl/configure.ini b/src/locale/nl/configure.ini
index c3c1834ce..e4fba7d16 100644
--- a/src/locale/nl/configure.ini
+++ b/src/locale/nl/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Meer groepen..."
 manageaccount_element_recommendations = "Aanbevelingen"
 manageaccount_element_rec_threads = "Threads:"
 manageaccount_element_rec_groups = "Groepen:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "account Details"
 manageaccount_element_username = "Gebruikersnaam"
 manageaccount_element_firstname = "Voornaam"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Geen middelen zijn nog naar deze pagina opgeslagen.
 wiki_element_video = "Video"
 wiki_element_audio = "Audio"
 wiki_element_rename = "andere naam geven"
-wiki_element_add_to_page = "Toevoegen aan pagina"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Extract"
 wiki_element_clip_copy = "Clip Kopi&euml;ren"
 wiki_element_clip_cut = "Clip Cut"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Weet u zeker dat u het verzoek wilt annuleren
 iconlink_helper_group_play = "Spelen"
 iconlink_helper_query_stats = "Query-Statistieken"
 iconlink_helper_reset = "Reset"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Zoeken"
 iconlink_helper_settings = "Instelling"
 iconlink_helper_statistics = "Statistiek"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Standaardinstellingen hersteld!"
 wordfilter_plugin_preferences = "Voorkeur woord Filter"
 wordfilter_plugin_factory_settings = "fabrieksinstellingen"
 wordfilter_plugin_save = "Opslaan"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/nl/resources/Tokenizer.php b/src/locale/nl/resources/Tokenizer.php
index d5aab1b3b..018e7b971 100755
--- a/src/locale/nl/resources/Tokenizer.php
+++ b/src/locale/nl/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\nl\resources;
diff --git a/src/locale/nl/resources/locale.js b/src/locale/nl/resources/locale.js
index 5a7241d7b..89a79b710 100755
--- a/src/locale/nl/resources/locale.js
+++ b/src/locale/nl/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Sandhya Vissapragada
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/pl/configure.ini b/src/locale/pl/configure.ini
index 35cd4fed4..63da85613 100755
--- a/src/locale/pl/configure.ini
+++ b/src/locale/pl/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Więcej grup..."
 manageaccount_element_recommendations = "Zalecenia"
 manageaccount_element_rec_threads = "Tematy:"
 manageaccount_element_rec_groups = "Grupy:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Szczeg&oacute;ły "
 manageaccount_element_username = "Nazwa użytkownika"
 manageaccount_element_firstname = "Nazwa"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Żadne środki zostały zapisane na tę stronę jes
 wiki_element_video = "Wideo"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Zmień nazwę"
-wiki_element_add_to_page = "Dodać na stronę"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Wyciąg"
 wiki_element_clip_copy = "Klip Kopia"
 wiki_element_clip_cut = "Clip Cut"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Czy na pewno chcesz anulować żądanie ?"
 iconlink_helper_group_play = "Graj"
 iconlink_helper_query_stats = "Statystyki Zapytań"
 iconlink_helper_reset = "Reset"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Szukaj"
 iconlink_helper_settings = "Ustawienia"
 iconlink_helper_statistics = "Statystyki"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Domyślnie przywr&oacute;cone!"
 wordfilter_plugin_preferences = "Słowo Ustawienia Filtra "
 wordfilter_plugin_factory_settings = "Ustawienia Fabryczne "
 wordfilter_plugin_save = "Zapisz"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/pl/resources/Tokenizer.php b/src/locale/pl/resources/Tokenizer.php
index db38ff8c5..0ae6398f1 100755
--- a/src/locale/pl/resources/Tokenizer.php
+++ b/src/locale/pl/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\pl\resources;
diff --git a/src/locale/pl/resources/locale.js b/src/locale/pl/resources/locale.js
index ca6d1e752..2dfa35e62 100755
--- a/src/locale/pl/resources/locale.js
+++ b/src/locale/pl/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/pt/configure.ini b/src/locale/pt/configure.ini
index 5053fe25a..9597ce1c3 100755
--- a/src/locale/pt/configure.ini
+++ b/src/locale/pt/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Mais grupos..."
 manageaccount_element_recommendations = "Recomenda&ccedil;&otilde;es"
 manageaccount_element_rec_threads = "Threads:"
 manageaccount_element_rec_groups = "Grupos:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Detalhes Da Conta"
 manageaccount_element_username = "Nome de usu&aacute;rio"
 manageaccount_element_firstname = "Primeiro Nome"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "N&atilde;o h&aacute; recursos t&ecirc;m sido guarda
 wiki_element_video = "V&iacute;deo"
 wiki_element_audio = "&Aacute;udio"
 wiki_element_rename = "Mudar o nome"
-wiki_element_add_to_page = "Adicionar a P&aacute;gina"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Extrato de"
 wiki_element_clip_copy = "Clip De C&oacute;pia"
 wiki_element_clip_cut = "Corte Clip"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Tem certeza de que deseja cancelar a solicita
 iconlink_helper_group_play = "Jogar"
 iconlink_helper_query_stats = "Estatísticas De Consulta"
 iconlink_helper_reset = "Redefinir"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Pesquisa"
 iconlink_helper_settings = "Definicao"
 iconlink_helper_statistics = "Estatistica"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Padr&otilde;es restaurado!"
 wordfilter_plugin_preferences = "Filtro De Palavras Prefer&ecirc;ncias"
 wordfilter_plugin_factory_settings = "As Configura&ccedil;&otilde;es De F&aacute;brica"
 wordfilter_plugin_save = "Salvar"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/pt/resources/Tokenizer.php b/src/locale/pt/resources/Tokenizer.php
index da735c337..4da7a87f7 100755
--- a/src/locale/pt/resources/Tokenizer.php
+++ b/src/locale/pt/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Niravkumar Patel niravkumar.patel1989@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\pt\resources;
diff --git a/src/locale/pt/resources/locale.js b/src/locale/pt/resources/locale.js
index 92757a987..482e3ff53 100755
--- a/src/locale/pt/resources/locale.js
+++ b/src/locale/pt/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/ru/configure.ini b/src/locale/ru/configure.ini
index 24bad71ac..4db6dac95 100755
--- a/src/locale/ru/configure.ini
+++ b/src/locale/ru/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Больше групп..."
 manageaccount_element_recommendations = "Рекомендации"
 manageaccount_element_rec_threads = "Темы:"
 manageaccount_element_rec_groups = "Группы:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Реквизиты "
 manageaccount_element_username = "Имя пользователя"
 manageaccount_element_firstname = "Имя"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Никакие ресурсы были сохран
 wiki_element_video = "Видео"
 wiki_element_audio = "Аудио"
 wiki_element_rename = "Переименовать"
-wiki_element_add_to_page = "Добавить на страницу"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Экстракт"
 wiki_element_clip_copy = "Клип Копия"
 wiki_element_clip_cut = "Обрезка Клипа"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Вы уверены, что хотите от
 iconlink_helper_group_play = "Играть"
 iconlink_helper_query_stats = "Статистика запросов"
 iconlink_helper_reset = "Сброс"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Поиск"
 iconlink_helper_settings = "Настройки"
 iconlink_helper_statistics = "Статистика"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "По умолчанию восстано
 wordfilter_plugin_preferences = "Слово Настройки Фильтра "
 wordfilter_plugin_factory_settings = "Заводские Настройки "
 wordfilter_plugin_save = "Сохранить"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/ru/resources/Tokenizer.php b/src/locale/ru/resources/Tokenizer.php
index 4f01f11a0..dcac6cc90 100755
--- a/src/locale/ru/resources/Tokenizer.php
+++ b/src/locale/ru/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\ru\resources;
diff --git a/src/locale/ru/resources/locale.js b/src/locale/ru/resources/locale.js
index 397f0545f..be242cf6d 100755
--- a/src/locale/ru/resources/locale.js
+++ b/src/locale/ru/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/locale/te/configure.ini b/src/locale/te/configure.ini
index 014382f0d..65e827091 100644
--- a/src/locale/te/configure.ini
+++ b/src/locale/te/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "మరిన్ని గుంపులు
 manageaccount_element_recommendations = "సిఫార్సులు"
 manageaccount_element_rec_threads = "థ్రెడ్లు:"
 manageaccount_element_rec_groups = "Groups:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "ఖాతా వివరాలు"
 manageaccount_element_username = "యూజర్ పేరు"
 manageaccount_element_firstname = "మొదటి పేరు"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "వనరులు సేవ్ చేయబడ్
 wiki_element_video = "వీడియో"
 wiki_element_audio = "ఆడియో"
 wiki_element_rename = "పేరుమార్చండి"
-wiki_element_add_to_page = "పేజీకి జోడించండి"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "సారం"
 wiki_element_clip_copy = "క్లిప్ కాపీ"
 wiki_element_clip_cut = "క్లిప్ కట్"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "మీరు అభ్యర్థనను
 iconlink_helper_group_play = "ప్లే"
 iconlink_helper_query_stats = "ప్రశ్న గణాంకాలు"
 iconlink_helper_reset = "తిరిగిఅమర్చు"
+iconlink_helper_resources = ""
 iconlink_helper_search = "శోధన"
 iconlink_helper_settings = "అమరికలు"
 iconlink_helper_statistics = "గణాంకాలు"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "డీఫాల్ట్స్ పున
 wordfilter_plugin_preferences = "వర్డ్ ఫిల్టర్ ప్రాధాన్యతలు "
 wordfilter_plugin_factory_settings = "ఫ్యాక్టరీ సెట్టింగులు "
 wordfilter_plugin_save = "సేవ్ చేయి"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/te/resources/Tokenizer.php b/src/locale/te/resources/Tokenizer.php
index c1e790eeb..3b31b1268 100755
--- a/src/locale/te/resources/Tokenizer.php
+++ b/src/locale/te/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\te\resources;
diff --git a/src/locale/te/resources/locale.js b/src/locale/te/resources/locale.js
index 5e2003a7e..8286a7790 100755
--- a/src/locale/te/resources/locale.js
+++ b/src/locale/te/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Sandhya Vissapragada
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/locale/th/configure.ini b/src/locale/th/configure.ini
index 6e722a2c9..380ddb74b 100755
--- a/src/locale/th/configure.ini
+++ b/src/locale/th/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "กลุ่มมากขึ้น.."
 manageaccount_element_recommendations = "รายการแนะนำ"
 manageaccount_element_rec_threads = "เธรด:"
 manageaccount_element_rec_groups = "กลุ่ม:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "บัญชีรายละเอียด"
 manageaccount_element_username = "ชื่อผู้ใช้"
 manageaccount_element_firstname = "ชื่อแรก"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "ไม่มีทรัพยากรได้ถ
 wiki_element_video = "วิดีโอ"
 wiki_element_audio = "ระบบเสียง"
 wiki_element_rename = "เปลี่ยนชื่อ"
-wiki_element_add_to_page = "เพิ่มไปยังหน้า"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "คลายแฟ้ม"
 wiki_element_clip_copy = "ตัคัดลอก"
 wiki_element_clip_cut = "ตัดตัด"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "คุณแน่ใจหรือไม่
 iconlink_helper_group_play = "เล่น"
 iconlink_helper_query_stats = "สถิติการสืบค้น"
 iconlink_helper_reset = "รีเซ็ต"
+iconlink_helper_resources = ""
 iconlink_helper_search = "ค้นหา"
 iconlink_helper_settings = "ตั้งค่า"
 iconlink_helper_statistics = "สถิติ"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "ถูกเรียกคืนค่
 wordfilter_plugin_preferences = "คำปรับแต่งค่าตัวกรอง"
 wordfilter_plugin_factory_settings = "โรงงานการตั้งค่า"
 wordfilter_plugin_save = "บันทึก"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/th/resources/Tokenizer.php b/src/locale/th/resources/Tokenizer.php
index 81ffa19bc..ad54023a8 100755
--- a/src/locale/th/resources/Tokenizer.php
+++ b/src/locale/th/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\th\resources;
diff --git a/src/locale/th/resources/locale.js b/src/locale/th/resources/locale.js
index 27e7ee131..f8cd18c04 100755
--- a/src/locale/th/resources/locale.js
+++ b/src/locale/th/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/locale/tl/configure.ini b/src/locale/tl/configure.ini
index c55e4b2da..8759509e0 100644
--- a/src/locale/tl/configure.ini
+++ b/src/locale/tl/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Higit pang mga grupo..."
 manageaccount_element_recommendations = "Mga rekomendasyon"
 manageaccount_element_rec_threads = "Thread:"
 manageaccount_element_rec_groups = "Mga grupo:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Mga Detalye Ng Account"
 manageaccount_element_username = "Username"
 manageaccount_element_firstname = "Unang Pangalan"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Walang mga mapagkukunan ay nai-save sa pahinang ito
 wiki_element_video = "Video"
 wiki_element_audio = "Audio"
 wiki_element_rename = "Palitan ang pangalan ng"
-wiki_element_add_to_page = "Idagdag sa mga Pahina"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "I-Extract"
 wiki_element_clip_copy = "Clip Kopyahin"
 wiki_element_clip_cut = "Gupitin Ang Clip"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Sigurado ka bang nais mong kanselahin ang kahi
 iconlink_helper_group_play = "Maglaro"
 iconlink_helper_query_stats = "Mga Istatistika Ng Query"
 iconlink_helper_reset = "I-Reset ang"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Paghahanap"
 iconlink_helper_settings = "Mga setting"
 iconlink_helper_statistics = "Mga istatistika"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Default naibalik!"
 wordfilter_plugin_preferences = "Salita Filter Sa Mga Kagustuhan"
 wordfilter_plugin_factory_settings = "Mga Setting Ng Factory"
 wordfilter_plugin_save = "I-Save ang"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/tl/resources/Tokenizer.php b/src/locale/tl/resources/Tokenizer.php
index 5a38a21c0..210ccfab1 100644
--- a/src/locale/tl/resources/Tokenizer.php
+++ b/src/locale/tl/resources/Tokenizer.php
@@ -4,7 +4,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\tl\resources;
diff --git a/src/locale/tl/resources/locale.js b/src/locale/tl/resources/locale.js
index 27e7ee131..f8cd18c04 100644
--- a/src/locale/tl/resources/locale.js
+++ b/src/locale/tl/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/locale/tr/configure.ini b/src/locale/tr/configure.ini
index 64cf6801d..03f1f14fd 100755
--- a/src/locale/tr/configure.ini
+++ b/src/locale/tr/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Daha fazla grup..."
 manageaccount_element_recommendations = "&Ouml;neriler"
 manageaccount_element_rec_threads = "Konular:"
 manageaccount_element_rec_groups = "Gruplar:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "Hesap Ayrıntıları"
 manageaccount_element_username = "Kullanıcı adı"
 manageaccount_element_firstname = "İlk Adı"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Hi&ccedil;bir kaynak Bu sayfa hen&uuml;z kaydedildi
 wiki_element_video = "Video"
 wiki_element_audio = "Ses"
 wiki_element_rename = "Yeniden Adlandır"
-wiki_element_add_to_page = "Sayfa Ekle "
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "&Ouml;z&uuml;"
 wiki_element_clip_copy = "Klip Kopyası"
 wiki_element_clip_cut = "Klip Kesim"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "İsteği iptal etmek istediğinizden emin misi
 iconlink_helper_group_play = "Oyna"
 iconlink_helper_query_stats = "Sorgu İstatistikleri"
 iconlink_helper_reset = "Sıfırlamak"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Aramak"
 iconlink_helper_settings = "Ayarlar"
 iconlink_helper_statistics = "İstatistik"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Varsayılanları geri!"
 wordfilter_plugin_preferences = "Kelime Filtresi Tercihleri"
 wordfilter_plugin_factory_settings = "Fabrika Ayarları"
 wordfilter_plugin_save = "Kaydet"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/tr/resources/Tokenizer.php b/src/locale/tr/resources/Tokenizer.php
index 218c6dd31..b8be522b7 100755
--- a/src/locale/tr/resources/Tokenizer.php
+++ b/src/locale/tr/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  *
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\tr\resources;
diff --git a/src/locale/tr/resources/locale.js b/src/locale/tr/resources/locale.js
index 62d04e6bd..2d54c153c 100755
--- a/src/locale/tr/resources/locale.js
+++ b/src/locale/tr/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */

diff --git a/src/locale/vi_VN/configure.ini b/src/locale/vi_VN/configure.ini
index 86ac6721e..ebe896ceb 100755
--- a/src/locale/vi_VN/configure.ini
+++ b/src/locale/vi_VN/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "Nhiều nhóm..."
 manageaccount_element_recommendations = "Đề nghị"
 manageaccount_element_rec_threads = "Chủ đề:"
 manageaccount_element_rec_groups = "Nh&oacute;m:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "T&agrave;i Khoản Chi Tiết"
 manageaccount_element_username = "T&ecirc;n"
 manageaccount_element_firstname = "T&ecirc;n Đầu Ti&ecirc;n"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "Kh&ocirc;ng c&oacute; nguồn lực đ&atilde; đư
 wiki_element_video = "Video"
 wiki_element_audio = "&Acirc;m thanh"
 wiki_element_rename = "Đổi t&ecirc;n"
-wiki_element_add_to_page = "Th&ecirc;m v&agrave;o Trang"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "Tr&iacute;ch"
 wiki_element_clip_copy = "Clip Sao Ch&eacute;p"
 wiki_element_clip_cut = "Đoạn Cắt"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "Bạn có chắc chắn muốn hủy yêu cầ
 iconlink_helper_group_play = "Chơi"
 iconlink_helper_query_stats = "Vấn Thống Kê"
 iconlink_helper_reset = "Thiết lập lại"
+iconlink_helper_resources = ""
 iconlink_helper_search = "Tìm kiếm"
 iconlink_helper_settings = "Cài đặt"
 iconlink_helper_statistics = "Số liệu thống kê"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Mặc định phục hồi!"
 wordfilter_plugin_preferences = "Bộ Lọc Từ Sở Thích"
 wordfilter_plugin_factory_settings = "Thiết Lập Nhà Máy"
 wordfilter_plugin_save = "Tiết kiệm"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/vi_VN/resources/Tokenizer.php b/src/locale/vi_VN/resources/Tokenizer.php
index 5d892089c..9fba21875 100755
--- a/src/locale/vi_VN/resources/Tokenizer.php
+++ b/src/locale/vi_VN/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\vi_VN\resources;
diff --git a/src/locale/vi_VN/resources/locale.js b/src/locale/vi_VN/resources/locale.js
index 83ed6f727..d35bab095 100755
--- a/src/locale/vi_VN/resources/locale.js
+++ b/src/locale/vi_VN/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */

diff --git a/src/locale/zh_CN/configure.ini b/src/locale/zh_CN/configure.ini
index 104717925..929959961 100755
--- a/src/locale/zh_CN/configure.ini
+++ b/src/locale/zh_CN/configure.ini
@@ -1,6 +1,6 @@
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1073,6 +1073,7 @@ manageaccount_element_more_groups = "更多的群体。.."
 manageaccount_element_recommendations = "建议"
 manageaccount_element_rec_threads = "主题:"
 manageaccount_element_rec_groups = "组:"
+manageaccount_element_rec_resources = ""
 manageaccount_element_account_details = "帐户的详细信息"
 manageaccount_element_username = "用户名"
 manageaccount_element_firstname = "第一名"
@@ -1236,7 +1237,8 @@ wiki_element_no_resources = "没有资源已经被保存到这个网页。"
 wiki_element_video = "视频"
 wiki_element_audio = "音频"
 wiki_element_rename = "重命名"
-wiki_element_add_to_page = "加页"
+wiki_element_resource_description = ""
+wiki_element_wiki_code = ""
 wiki_element_extract = "提取物"
 wiki_element_clip_copy = "剪辑复制"
 wiki_element_clip_cut = "剪辑剪切"
@@ -5568,6 +5570,7 @@ iconlink_helper_cancel_request = "您确定要取消请求?吗"
 iconlink_helper_group_play = "游戏"
 iconlink_helper_query_stats = "查询统计"
 iconlink_helper_reset = "重置"
+iconlink_helper_resources = ""
 iconlink_helper_search = "搜索"
 iconlink_helper_settings = "设置"
 iconlink_helper_statistics = "统计数字"
@@ -5627,8 +5630,3 @@ wordfilter_plugin_defaults_restored = "Defaults恢复!"
 wordfilter_plugin_preferences = "字滤波器的喜好"
 wordfilter_plugin_factory_settings = "工厂设置"
 wordfilter_plugin_save = "保存"
-;
-; /src/library/media_jobs
-;
-; DescriptionUpdateJob.php
-descriptionupdate_no_description_found = ""
diff --git a/src/locale/zh_CN/resources/Tokenizer.php b/src/locale/zh_CN/resources/Tokenizer.php
index 95fc5e0a6..cb88ed0b0 100755
--- a/src/locale/zh_CN/resources/Tokenizer.php
+++ b/src/locale/zh_CN/resources/Tokenizer.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -23,7 +23,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\locale\zh_CN\resources;
diff --git a/src/locale/zh_CN/resources/locale.js b/src/locale/zh_CN/resources/locale.js
index 61ffc3c5b..61a4aba5c 100755
--- a/src/locale/zh_CN/resources/locale.js
+++ b/src/locale/zh_CN/resources/locale.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Sandhya Vissapragada
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */

diff --git a/src/models/ActivityModel.php b/src/models/ActivityModel.php
index 35a5a3233..a8b6d0178 100755
--- a/src/models/ActivityModel.php
+++ b/src/models/ActivityModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/AdvertisementModel.php b/src/models/AdvertisementModel.php
index 7bb5c93dc..526696f45 100644
--- a/src/models/AdvertisementModel.php
+++ b/src/models/AdvertisementModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Pushkar Umaranikar
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/BotModel.php b/src/models/BotModel.php
index ea02ce555..71fc4ed22 100644
--- a/src/models/BotModel.php
+++ b/src/models/BotModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/CaptchaModel.php b/src/models/CaptchaModel.php
index 9bfc2a05b..6ee978cc6 100755
--- a/src/models/CaptchaModel.php
+++ b/src/models/CaptchaModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/CrawlModel.php b/src/models/CrawlModel.php
index a115f7b1c..2491f7dd8 100755
--- a/src/models/CrawlModel.php
+++ b/src/models/CrawlModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
@@ -431,7 +431,7 @@ class CrawlModel extends ParallelModel
         $n[] = <<<EOT
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
@@ -1179,7 +1179,7 @@ EOT;
                 set_error_handler(C\NS_CONFIGS . "yioop_error_handler");
             } else {
                 $index_info = [];
-                $index_info['DESCRIPTION'] = "ERROR!! $dir<br />" .
+                $index_info['DESCRIPTION'] = "ERROR!! $dir<br>" .
                     print_r($info, true);
             }
             $crawl['DESCRIPTION'] = "";
diff --git a/src/models/CreditModel.php b/src/models/CreditModel.php
index 8ee1099ab..d9a1f81d8 100644
--- a/src/models/CreditModel.php
+++ b/src/models/CreditModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/CronModel.php b/src/models/CronModel.php
index 4df6a2c51..b33ef5759 100644
--- a/src/models/CronModel.php
+++ b/src/models/CronModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/GroupModel.php b/src/models/GroupModel.php
index 80ffbac28..04d51a89c 100644
--- a/src/models/GroupModel.php
+++ b/src/models/GroupModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Mallika Perepa, Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
@@ -1523,9 +1523,9 @@ class GroupModel extends Model implements MediaConstants
                 $end_head = "END_HEAD_VARS";
                 $parsed_page = str_replace($end_head, $end_head .
                     "\n<form method='post' >\n<input type='hidden' name='" .
-                    C\CSRF_TOKEN . "' value='[{just-token}]' />" .
+                    C\CSRF_TOKEN . "' value='[{just-token}]' >" .
                     "<input type='hidden' name='CSV_FORM_HASH' ".
-                    "value='[{form-hash}]' />", $parsed_page);
+                    "value='[{form-hash}]' >", $parsed_page);
                 $parsed_page .= "\n</form>\n";
                 $page_body = explode("END_HEAD_VARS", $parsed_page, 2)[1];
                 $parsed_page = preg_replace("/\[{form\-hash}\]/",
@@ -2501,13 +2501,13 @@ class GroupModel extends Model implements MediaConstants
             if ($thumb_resource) {
                 $replace_string = "<a class='image-list' ".
                     "href='$resource_url' ><img src='$resource_url' ".
-                    " loading='lazy' alt='$resource_description' /></a>";
+                    " loading='lazy' alt='$resource_description' ></a>";
             } else {
                 if ($is_360) {
                     $resource_id = L\crawlHash($resource_url);
                     $replace_string = <<<EOD
 <div class='photo-container'>
-    <canvas id='p$resource_id' class='canvas-360' />
+    <canvas id='p$resource_id' class='canvas-360' >
     <script>
     if (typeof yioop_post_scripts === 'undefined') {
         yioop_post_scripts = [];
@@ -2520,11 +2520,11 @@ class GroupModel extends Model implements MediaConstants
 EOD;
                 } else if ($nolink_resource) {
                     $replace_string = "<img src='$resource_url' loading='lazy'".
-                        " alt='$resource_description' class='photo' />";
+                        " alt='$resource_description' class='photo' >";
                 } else {
                     $replace_string = "<a href='$resource_url' ><img" .
                         " loading='lazy' src='$resource_url' ".
-                        " alt='$resource_description' class='photo' /></a>";
+                        " alt='$resource_description' class='photo' ></a>";
                 }
             }
             $parsed_page = preg_replace('/'. preg_quote($match_string,'/').'/u',
@@ -2569,7 +2569,7 @@ EOD;
                         $tag = $matches[1];
                         $replace_string .= "<track src='$resource_url' " .
                             "label='$tag' kind='subtitles' " .
-                            "srclang='$tag' $default />\n";
+                            "srclang='$tag' $default >\n";
                     }
                 }
             }
@@ -2590,7 +2590,7 @@ EOD;
                         $tag = $matches[1];
                         $replace_string .= "<track src='$resource_url' " .
                             "label='$tag' kind='captions' " .
-                            "srclang='$tag' $default />\n";
+                            "srclang='$tag' $default >\n";
                     }
                 }
             }
diff --git a/src/models/ImpressionModel.php b/src/models/ImpressionModel.php
index 8f25f4541..cd2a71f1b 100644
--- a/src/models/ImpressionModel.php
+++ b/src/models/ImpressionModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/LocaleModel.php b/src/models/LocaleModel.php
index cbaf4126d..e6ed50014 100755
--- a/src/models/LocaleModel.php
+++ b/src/models/LocaleModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
@@ -703,7 +703,7 @@ class LocaleModel extends Model
         $n[] = <<<EOT
 ; ***** BEGIN LICENSE BLOCK *****
 ;  SeekQuarry/Yioop Open Source Pure PHP Search Engine, Crawler, and Indexer
-;  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+;  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
 ;
 ;  This program is free software: you can redistribute it and/or modify
 ;  it under the terms of the GNU General Public License as published by
diff --git a/src/models/MachineModel.php b/src/models/MachineModel.php
index d1a4f2e0b..79bf2fd6d 100644
--- a/src/models/MachineModel.php
+++ b/src/models/MachineModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/Model.php b/src/models/Model.php
index 1491a1d31..40c57a45a 100755
--- a/src/models/Model.php
+++ b/src/models/Model.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */

diff --git a/src/models/ParallelModel.php b/src/models/ParallelModel.php
index 4ce56f3ad..96e269904 100755
--- a/src/models/ParallelModel.php
+++ b/src/models/ParallelModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/PhraseModel.php b/src/models/PhraseModel.php
index cba4ff216..c2e812b2b 100755
--- a/src/models/PhraseModel.php
+++ b/src/models/PhraseModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
@@ -221,7 +221,7 @@ class PhraseModel extends ParallelModel
             $dis_cnt = 0;
             $this->query_info = [];
             $this->query_info['QUERY'] =
-                "<b>PHRASE QUERY</b>: ".$input_phrase."<br />";
+                "<b>PHRASE QUERY</b>: ".$input_phrase."<br>";
             $start_time = microtime(true);
         }
         $results = null;
@@ -315,11 +315,11 @@ class PhraseModel extends ParallelModel
             $format_words = [];
             if (C\QUERY_STATISTICS) {
                 $this->query_info['QUERY'] .= $indent .
-                    "<b>Presentation $prs_cnt:</b><br />";
+                    "<b>Presentation $prs_cnt:</b><br>";
                 $this->query_info['QUERY'] .= "$in2<i>Low</i>:".
-                    $result_bounds[0][0]."<br />";
+                    $result_bounds[0][0]."<br>";
                 $this->query_info['QUERY'] .= $in2 .
-                    "<i>High</i>: " . $result_bounds[0][1] . "<br />";
+                    "<i>High</i>: " . $result_bounds[0][1] . "<br>";
                 $prs_cnt++;
             }
             $cache_results = false;
@@ -332,11 +332,11 @@ class PhraseModel extends ParallelModel
                 $cache_results = self::$cache->get($phrase . $this->index_name);
                 if (C\QUERY_STATISTICS) {
                     $this->query_info['QUERY'] .=
-                        "$in2<b>Parse done by Cache Lookup</b><br />";
+                        "$in2<b>Parse done by Cache Lookup</b><br>";
                     if (!empty(self::$cache->cache_file) ) {
                         $this->query_info['QUERY'] .=
                             "$in2<b>Cache File Used: </b>" .
-                            self::$cache->cache_file . "<br />";
+                            self::$cache->cache_file . "<br>";
                     }
                 }
             }
@@ -386,13 +386,13 @@ class PhraseModel extends ParallelModel
                         }
                 if (C\QUERY_STATISTICS) {
                     $this->query_info['QUERY'] .=
-                        "$in2<b>Guessed Semantics</b>:<br/>$in2$phrase<br />";
+                        "$in2<b>Guessed Semantics</b>:<br/>$in2$phrase<br>";
                 }
                 if (!$network) {
                     foreach ($disjunct_phrases as $disjunct) {
                         if (C\QUERY_STATISTICS) {
                             $this->query_info['QUERY']
-                                .="$in2<b>Disjunct $dis_cnt:" . "</b><br />";
+                                .="$in2<b>Disjunct $dis_cnt:" . "</b><br>";
                             $dis_cnt++;
                         }
                         list($word_struct, $format_words) =
@@ -418,7 +418,7 @@ class PhraseModel extends ParallelModel
             if (C\QUERY_STATISTICS) {
                 $this->query_info['QUERY'] .=
                     "$in2<b>Presentation Parse time</b>: " .
-                    L\changeInMicrotime($start_time)."<br />";
+                    L\changeInMicrotime($start_time)."<br>";
             }
             if ($orig_stimestamp > 0) {
                 $save_timestamp_name = "$orig_stimestamp-$qpart";
@@ -559,7 +559,7 @@ class PhraseModel extends ParallelModel
         }
         if (C\QUERY_STATISTICS) {
             $this->query_info['QUERY'] .= "<b>Format Time</b>: ".
-                L\changeInMicrotime($format_time)."<br />";
+                L\changeInMicrotime($format_time)."<br>";
             $this->query_info['ELAPSED_TIME'] =
                 L\changeInMicrotime($start_time);
             $this->db->total_time += $this->query_info['ELAPSED_TIME'];
@@ -668,19 +668,19 @@ class PhraseModel extends ParallelModel
                 $this->query_info['QUERY'] = "";
             }
             $this->query_info['QUERY'] .= "$in3<i>Index</i>: ".
-                $index_name."<br />";
+                $index_name."<br>";
             $this->query_info['QUERY'] .= "$in3<i>LocaleTag</i>: ".
-                $locale_tag ."<br />";
+                $locale_tag ."<br>";
             $this->query_info['QUERY'] .=
-                "$in3<i>Stemmed/Char-grammed Words</i>:<br />";
+                "$in3<i>Stemmed/Char-grammed Words</i>:<br>";
             foreach ($base_words as $word) {
-                $this->query_info['QUERY'] .= "$in4$word<br />";
+                $this->query_info['QUERY'] .= "$in4$word<br>";
             }
-            $this->query_info['QUERY'] .= "$in3<i>Meta Words</i>:<br />";
+            $this->query_info['QUERY'] .= "$in3<i>Meta Words</i>:<br>";
             foreach ($found_metas as $word) {
-                $this->query_info['QUERY'] .= "$in4$word<br />";
+                $this->query_info['QUERY'] .= "$in4$word<br>";
             }
-            $this->query_info['QUERY'] .= "$in3<i>Quoted Word Locs</i>:<br />";
+            $this->query_info['QUERY'] .= "$in3<i>Quoted Word Locs</i>:<br>";
             foreach ($quote_positions as $quote_position) {
                 $this->query_info['QUERY'] .= "$in4(";
                 $comma = "";
@@ -688,7 +688,7 @@ class PhraseModel extends ParallelModel
                     $this->query_info['QUERY'] .= "$comma $pos => $len";
                     $comma = ",";
                 }
-                $this->query_info['QUERY'] .= ")<br />";
+                $this->query_info['QUERY'] .= ")<br>";
             }
         }
         $make_term_id = ($index_version < 3) ? C\NS_LIB . "crawlHashWord" :
@@ -717,7 +717,7 @@ class PhraseModel extends ParallelModel
                 count($disallow_phrases));
             if ($num_disallow_keys > 0 && C\QUERY_STATISTICS) {
                 $this->query_info['QUERY'] .= "$in3<i>Disallowed Words</i>:".
-                    "<br />";
+                    "<br>";
             }
             for ($i = 0; $i < $num_disallow_keys; $i++) {
                 // check if disallowed is a meta word and stem or not stem
@@ -730,7 +730,7 @@ class PhraseModel extends ParallelModel
                 }
                 if (C\QUERY_STATISTICS) {
                     $this->query_info['QUERY'] .= "$in4{$disallow_stem[0]}".
-                        "<br />";
+                        "<br>";
                 }
                 $disallow_keys[] = $make_term_id($disallow_stem[0]);
                 if ($index_version == 0) {
@@ -1267,11 +1267,11 @@ class PhraseModel extends ParallelModel
                 if (C\QUERY_STATISTICS) {
                     $this->query_info['QUERY'] .=
                         "$in2<b>Cache Lookup Time</b>: ".
-                        L\changeInMicrotime($lookup_time)."<br />";
+                        L\changeInMicrotime($lookup_time)."<br>";
                     if (!empty(self::$cache->cache_file) ) {
                         $this->query_info['QUERY'] .=
                             "$in2<b>Cache File Used:</b> " .
-                            self::$cache->cache_file . "<br />";
+                            self::$cache->cache_file . "<br>";
                     }
                 }
                 if ($results !== false) {
@@ -1399,27 +1399,27 @@ class PhraseModel extends ParallelModel
         }
         if (C\QUERY_STATISTICS) {
             $this->query_info['QUERY'] .= "$in2<b>Lookup Offsets Time</b>: ".
-                L\changeInMicrotime($lookup_time)."<br />";
+                L\changeInMicrotime($lookup_time)."<br>";
             $machine_times = AnalyticsManager::get("MACHINE_TIMES");
             if ($machine_times) {
                 $this->query_info['QUERY'] .=
-                "$in3<i>Machine Sub-Times</i> (query/total):<br />".
-                    $machine_times."<br />";
+                "$in3<i>Machine Sub-Times</i> (query/total):<br>".
+                    $machine_times."<br>";
             }
             $net_times = AnalyticsManager::get("NET_TIMES");
             $max_machine_times = AnalyticsManager::get("MAX_MACHINE_TIMES");
             if ($net_times && $max_machine_times) {
                 $this->query_info['QUERY'] .=
                 "$in3<i>Network Overhead Sub-Time</i>: ".
-                    ($net_times - $max_machine_times)."<br />";
+                    ($net_times - $max_machine_times)."<br>";
             }
             if ($sort_time) {
                 $this->query_info['QUERY'] .=
                     "$in3<i>Get Iterator Sub-Time</i>: " . $get_query_time .
-                    "<br />$in3<i>Retrieve Postings Sub-Time</i>: " .
-                    $retrieve_postings_time . "<br />" .
+                    "<br>$in3<i>Retrieve Postings Sub-Time</i>: " .
+                    $retrieve_postings_time . "<br>" .
                     "$in3<i>Merge-Rank Sub-Time</i>: " .
-                    $sort_time."<br />";
+                    $sort_time."<br>";
             }
             if ($query_iterator) {
                 $this->query_info['PLAN'] = $query_iterator->plan();
@@ -1482,7 +1482,7 @@ class PhraseModel extends ParallelModel
             if ($summary_times_string) {
                 $round_summary_times = unserialize($summary_times_string);
                 $summary_delta_time = L\changeInMicrotime($summaries_time);
-                $summary_time_info = "$summary_delta_time<br /> $in4";
+                $summary_time_info = "$summary_delta_time<br> $in4";
                 $sum_max_time = 0;
                 foreach ($round_summary_times as $summary_times) {
                     $i = 0;
@@ -1494,18 +1494,18 @@ class PhraseModel extends ParallelModel
                             $summary_time : $max_time;
                         $i++;
                     }
-                    $summary_time_info .= "<br />\n$in4";
+                    $summary_time_info .= "<br>\n$in4";
                     $sum_max_time += $max_time;
                 }
                 $net_overhead =  $summary_delta_time - $sum_max_time;
                 $summary_time_info .=
-                    "<br />$in3<i>Network Overhead Sub-Time</i>: ".
+                    "<br>$in3<i>Network Overhead Sub-Time</i>: ".
                     $net_overhead;
             } else {
                 $summary_time_info = L\changeInMicrotime($summaries_time);
             }
             $this->query_info['QUERY'] .= "$in2<b>Get Summaries Time</b>: ".
-                $summary_time_info."<br />";
+                $summary_time_info."<br>";
         }
         $results['PAGES'] = $out_pages;
         $results['TIME'] = time();
diff --git a/src/models/ProfileModel.php b/src/models/ProfileModel.php
index bceef3883..64eaf9b65 100755
--- a/src/models/ProfileModel.php
+++ b/src/models/ProfileModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/RoleModel.php b/src/models/RoleModel.php
index 73c20088c..fa32765b4 100644
--- a/src/models/RoleModel.php
+++ b/src/models/RoleModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/ScraperModel.php b/src/models/ScraperModel.php
index 4edd72e17..693b11ffd 100644
--- a/src/models/ScraperModel.php
+++ b/src/models/ScraperModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.orgs
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/SearchverticalsModel.php b/src/models/SearchverticalsModel.php
index 6f15b21e2..3ee57b55c 100644
--- a/src/models/SearchverticalsModel.php
+++ b/src/models/SearchverticalsModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/SigninModel.php b/src/models/SigninModel.php
index e42a1328b..cf10d61a5 100755
--- a/src/models/SigninModel.php
+++ b/src/models/SigninModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.orgs
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/SourceModel.php b/src/models/SourceModel.php
index 4047c5b7d..32d942f91 100644
--- a/src/models/SourceModel.php
+++ b/src/models/SourceModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.orgs
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/TrendingModel.php b/src/models/TrendingModel.php
index c9516736b..2ed2618ea 100644
--- a/src/models/TrendingModel.php
+++ b/src/models/TrendingModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Timothy Chow
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/UserModel.php b/src/models/UserModel.php
index 934b4a0b6..289c27c4a 100755
--- a/src/models/UserModel.php
+++ b/src/models/UserModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/VisitorModel.php b/src/models/VisitorModel.php
index 8bd0c83c9..348f70b22 100644
--- a/src/models/VisitorModel.php
+++ b/src/models/VisitorModel.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models;
diff --git a/src/models/datasources/DatasourceManager.php b/src/models/datasources/DatasourceManager.php
index 308ed510a..2c1d31a96 100755
--- a/src/models/datasources/DatasourceManager.php
+++ b/src/models/datasources/DatasourceManager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models\datasources;
@@ -157,7 +157,7 @@ abstract class DatasourceManager
             $query_info = [];
             $query_info['QUERY'] = $sql;
             if ($params != []) {
-                $query_info['QUERY'] .= "<br />" . print_r($params, true);
+                $query_info['QUERY'] .= "<br>" . print_r($params, true);
             }
             $start_time = microtime(true);
         }
diff --git a/src/models/datasources/MysqlManager.php b/src/models/datasources/MysqlManager.php
index ab03e5493..2ac585886 100755
--- a/src/models/datasources/MysqlManager.php
+++ b/src/models/datasources/MysqlManager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models\datasources;
diff --git a/src/models/datasources/PdoManager.php b/src/models/datasources/PdoManager.php
index bfe8150ed..94ddb8ec2 100644
--- a/src/models/datasources/PdoManager.php
+++ b/src/models/datasources/PdoManager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models\datasources;
diff --git a/src/models/datasources/Sqlite3Manager.php b/src/models/datasources/Sqlite3Manager.php
index cae3eafad..f90b11e7e 100644
--- a/src/models/datasources/Sqlite3Manager.php
+++ b/src/models/datasources/Sqlite3Manager.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\models\datasources;
diff --git a/src/privacy.php b/src/privacy.php
index b71b2f0ae..7ad79e6d3 100755
--- a/src/privacy.php
+++ b/src/privacy.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/scripts/basic.js b/src/scripts/basic.js
index 6b8c33484..a1e688aa0 100755
--- a/src/scripts/basic.js
+++ b/src/scripts/basic.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
@@ -283,7 +283,9 @@ function initNextResultsPage(limit, total_results, results_per_page,
          scroll_obj = document.getElementById(container_id);
          scroll_body = scroll_obj;
     }
-    scroll_obj.scrollTo(0, 0);
+    if (scroll_obj) {
+        scroll_obj.scrollTo(0, 0);
+    }
     if (results_id === undefined) {
         results_id = "search-results";
     }
@@ -344,14 +346,16 @@ function initNextResultsPage(limit, total_results, results_per_page,
             }
         }
     }
-    scroll_obj.addEventListener("scroll", function() {
-        if ((scroll_obj.scrollTop !== undefined && scroll_obj.scrollTop >=
-            scroll_body.scrollHeight - scroll_obj.clientHeight) ||
-            (scroll_obj.scrollY  !== undefined && scroll_obj.scrollY >=
-                scroll_body.scrollHeight - scroll_obj.innerHeight)) {
-            nextPage();
-        }
-    });
+    if (scroll_obj) {
+        scroll_obj.addEventListener("scroll", function() {
+            if ((scroll_obj.scrollTop !== undefined && scroll_obj.scrollTop >=
+                scroll_body.scrollHeight - scroll_obj.clientHeight) ||
+                (scroll_obj.scrollY  !== undefined && scroll_obj.scrollY >=
+                    scroll_body.scrollHeight - scroll_obj.innerHeight)) {
+                nextPage();
+            }
+        });
+    }
     return nextPage;
 }
 /*
@@ -704,7 +708,7 @@ function initializeFileHandler(drop_id, file_id, max_size, drop_kind, types,
                 drop_elt.innerHTML = "";
             }
             for (var i = 0; i < files.length; i++) {
-                var br = (drop_elt.innerHTML == "") ? "" : "<br />";
+                var br = (drop_elt.innerHTML == "") ? "" : "<br>";
                 drop_elt.innerHTML += br + files[i].name;
             }
         } else if (drop_kind == "immediate") {
@@ -862,6 +866,9 @@ function getPageWithMessage(url)
 function initScrollPositionPreserver(scroll_container_id)
 {
     let scroll_container = document.getElementById(scroll_container_id);
+    if (!scroll_container) {
+        return;
+    }
     window.onbeforeunload = function () {
         let scroll_position = scroll_container.scrollTop;
         sessionStorage.setItem(scroll_container_id + "Y",
diff --git a/src/scripts/big_int.js b/src/scripts/big_int.js
index 8b30e1c6d..e29b6ac00 100644
--- a/src/scripts/big_int.js
+++ b/src/scripts/big_int.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022    Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023    Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  *     Ideas adapted Leemon Baird's bigint.js
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/scripts/chart.js b/src/scripts/chart.js
index 5477db3d2..b2b42a143 100644
--- a/src/scripts/chart.js
+++ b/src/scripts/chart.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
diff --git a/src/scripts/classifiers.js b/src/scripts/classifiers.js
index 0a346a6dd..13a4740a8 100644
--- a/src/scripts/classifiers.js
+++ b/src/scripts/classifiers.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /**
@@ -528,7 +528,7 @@ var Classifier = (function() {
      */
     function tag(tagname, attributes)
     {
-        return makeOpenTag(tagname, attributes, ' />');
+        return makeOpenTag(tagname, attributes, ' >');
     }
     /*
      * A utility function to construct the opening tag of an HTML element, or a
diff --git a/src/scripts/hash_captcha.js b/src/scripts/hash_captcha.js
index eea9353b0..f1a69b6a9 100644
--- a/src/scripts/hash_captcha.js
+++ b/src/scripts/hash_captcha.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/scripts/help.js b/src/scripts/help.js
index f9da137a5..dfda32993 100644
--- a/src/scripts/help.js
+++ b/src/scripts/help.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Eswara Rajesh Pinapala epinapala@live.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 current_activity_closed = true;
@@ -145,7 +145,7 @@ function parseWikiContent(wiki_text, group_id, page_id, controller_name,
             if ((/\.(gif|jpg|jpeg|tiff|png|bmp|tif)$/i).test(contents)) {
                 return '<img src="' + "?c=resource&a=get&f=resources&g=" +
                 group_id + "&p=" + page_id + "&n=" + contents +
-                '" alt="' + desc + '" class="wiki-resource-image"/>';
+                '" alt="' + desc + '" class="wiki-resource-image" >';
             } else if ((/\.(avi|m4v|flv|wmv|mp4|webm|ogg|mov|mpg)$/i)
                     .test(contents)) {
                 return '<video style="width:100%" controls="controls">' +
@@ -155,13 +155,13 @@ function parseWikiContent(wiki_text, group_id, page_id, controller_name,
             } else {
                 return '<a href="' + "?c=resource&a=get&f=resources&g=" +
                 group_id + "&p=" + page_id + "&n=" + contents +
-                '" alt="' + desc + '"/>' + desc + '</a>';
+                '" alt="' + desc + '" >' + desc + '</a>';
             }
         });
     //Regex replace for HR
     html = html.replace(/----(.*?)/g, function (match, contents)
     {
-        return contents + '<hr />';
+        return contents + '<hr >';
     });
     //Regex replace for def list
     html = html.replace
diff --git a/src/scripts/history.js b/src/scripts/history.js
index 13e7818c7..163be348b 100644
--- a/src/scripts/history.js
+++ b/src/scripts/history.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Akshat Kukreti
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 if (typeof(elt) == "undefined") {
diff --git a/src/scripts/messages.js b/src/scripts/messages.js
index faafdf881..2e749a59a 100644
--- a/src/scripts/messages.js
+++ b/src/scripts/messages.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/scripts/mix.js b/src/scripts/mix.js
index 320ee61ea..66b1bb667 100644
--- a/src/scripts/mix.js
+++ b/src/scripts/mix.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
@@ -196,12 +196,12 @@ function drawCrawl(i, j, ts, name, weight, order, keywords)
         "<td>"+drawWeightSelect(i, j, weight)+"</td><td>"+name+
         "</td><td>"+drawOrderSelect(i, j, order)+
         "</td><td><input type='hidden' name= \"mix[FRAGMENTS]["+i+
-        "][COMPONENTS]["+j+"][CRAWL_TIMESTAMP]\"' value=\""+ts+"\" />"+
+        "][COMPONENTS]["+j+"][CRAWL_TIMESTAMP]\"' value=\""+ts+"\" >"+
         "<input title=\""+tl['social_component_add_query']+"\" "+
         "name=\"mix[FRAGMENTS]["+i+"][COMPONENTS]["+j+"][KEYWORDS]\" "+
         "value=\""+ keywords+"\" onchange=\"updateKeywords("+i+","+j+
         ", this.value)\""+
-        "class=\"widefield\"/></td><td><a href=\""+
+        "class=\"widefield\" ></td><td><a href=\""+
         "javascript:removeCrawl("+i+", "+j+");\"><span aria-label=\""+
         tl['social_component_delete']+"\" role=\"img\">🗑️</span></a></td>";
 }
diff --git a/src/scripts/register_validator.js b/src/scripts/register_validator.js
index e1d8db548..f535d9633 100644
--- a/src/scripts/register_validator.js
+++ b/src/scripts/register_validator.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Sarika Padmashali (tweaks cpollett)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/scripts/sha1.js b/src/scripts/sha1.js
index 24098166c..f9be96b86 100644
--- a/src/scripts/sha1.js
+++ b/src/scripts/sha1.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 /*
diff --git a/src/scripts/slidy.js b/src/scripts/slidy.js
index 1dd536b34..36ccd9611 100644
--- a/src/scripts/slidy.js
+++ b/src/scripts/slidy.js
@@ -523,7 +523,7 @@ var w3c_slidy = {
         }
         return 1;
     },
-    // <meta name="duration" content="20" />  for 20 minutes
+    // <meta name="duration" content="20" >  for 20 minutes
     find_duration: function () {
         var name, content, offset;
         var meta = document.getElementsByTagName("meta");
@@ -1319,7 +1319,7 @@ var w3c_slidy = {
                 w3c_slidy.size_index = 0;
             }
             // add in font size adjustment from meta element e.g.
-            // <meta name="font-size-adjustment" content="-2" />
+            // <meta name="font-size-adjustment" content="-2" >
             // useful when slides have too much content ;-)
             if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment &&
                 w3c_slidy.size_index + w3c_slidy.size_adjustment <
diff --git a/src/scripts/spreadsheet.js b/src/scripts/spreadsheet.js
index 7ec668402..fd966aa25 100644
--- a/src/scripts/spreadsheet.js
+++ b/src/scripts/spreadsheet.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -115,7 +115,7 @@ function Spreadsheet(spreadsheet_id, supplied_data)
         if (self.mode == 'write') {
             table += "<input id='" + self.data_id + "' type='hidden' " +
                 "name='" + self.data_name + "' value='" + JSON.stringify(
-                data)+ "' />";
+                data)+ "' >";
             add_button = "<button>+</button>";
             pre_delete_button = "<button>-</button>";
         } else {
diff --git a/src/scripts/suggest.js b/src/scripts/suggest.js
index 921bc06a5..ba88af168 100644
--- a/src/scripts/suggest.js
+++ b/src/scripts/suggest.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Sandhya Vissapragada, Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022s
+ * @copyright 2009 - 2023s
  * @filesource
  */
 /*
diff --git a/src/scripts/vr-util.js b/src/scripts/vr-util.js
index 6fd8cadaa..db1a48d11 100755
--- a/src/scripts/vr-util.js
+++ b/src/scripts/vr-util.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -24,7 +24,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 function draw360(id_360, image_360)
@@ -282,7 +282,7 @@ function draw360(id_360, image_360)
         });
         button_elt.align = "center";
         if (icon) {
-            button_elt.innerHTML = "<img src='" + icon + "'/><br />" +
+            button_elt.innerHTML = "<img src='" + icon + "'/><br>" +
                 message;
         } else {
             button_elt.innerHTML = message;
@@ -384,7 +384,7 @@ function draw360(id_360, image_360)
         }, function (err) {
             var errMsg = "requestPresent failed.";
             if (err && err.message) {
-                errMsg += "<br />" + err.message
+                errMsg += "<br>" + err.message
             }
             console.log(errMsg);
         });
diff --git a/src/scripts/wiki.js b/src/scripts/wiki.js
index 186d642bd..c71a346c6 100755
--- a/src/scripts/wiki.js
+++ b/src/scripts/wiki.js
@@ -2,7 +2,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -159,7 +159,7 @@ function editorize(id)
         translate_prop = tl['wiki_js_add_wiki_table'];
         editor_toolbar += '<input type="button" class="wikibtn-table" ' +
             ' title="' + translate_prop + '" "' +
-            ' onclick="addWikiTable(\''+ id +'\');" />';
+            ' onclick="addWikiTable(\''+ id +'\');" >';
     }
     /*
      check if search was desired and render if was.
@@ -169,7 +169,7 @@ function editorize(id)
         editor_toolbar += '<input type="button" ' +
             ' title="' + translate_prop + '" "' +
             ' class="wikibtn-search-widget" ' +
-            ' onclick="addWikiSearch(\''+ id +'\');" />';
+            ' onclick="addWikiSearch(\''+ id +'\');" >';
     }
     editor_toolbar += '</div>';
     /*
@@ -377,9 +377,10 @@ function wikifySelection(name, id)
 }

 /*
- * This is the main function that takes  prefix and suffix characters for
- * wikifying selected text. Selected text will be obtained using
- * the getSelection();
+ * This creates a wiki string from wiki_prefix, wiki_suffix, task_name or
+ * currently selected text and then replaces the currently selected text in the
+ * DOM element id with this string. Currently, selected text is computed using
+ * getSelection(id).
  *
  * @param String wiki_prefix prefix to be added to wikify the selected text.
  * @param String wiki_suffix suffix to be added to wikify the selected text.
@@ -409,9 +410,8 @@ function wikify(wiki_prefix, wiki_suffix, task_name, id)
         }
         wiki_popup_prompt.appendChild(createHyperlinkForm(id));
         editor_buffer = obj;
-        toggleDisplay('wiki-popup-prompt-'+id);
+        toggleDisplay('wiki-popup-prompt-' + id);
     }
-
     if (!selection && wiki_prefix !== '[[') {
         br = '\n';
         selection = tl[task_name.replace('wikibtn-', 'wiki_js_')];
diff --git a/src/terms.php b/src/terms.php
index 878c5364d..0c3e4bc37 100755
--- a/src/terms.php
+++ b/src/terms.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/src/views/AdminView.php b/src/views/AdminView.php
index fca26a618..a3d385494 100755
--- a/src/views/AdminView.php
+++ b/src/views/AdminView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/ApiView.php b/src/views/ApiView.php
index d633f8339..c425c2c2e 100644
--- a/src/views/ApiView.php
+++ b/src/views/ApiView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Eswara Rajesh Pinapala epinapala@live.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/ComponentView.php b/src/views/ComponentView.php
index a55901405..bd09d5d19 100755
--- a/src/views/ComponentView.php
+++ b/src/views/ComponentView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/CrawlstatusView.php b/src/views/CrawlstatusView.php
index d82c2d041..d912f76e0 100755
--- a/src/views/CrawlstatusView.php
+++ b/src/views/CrawlstatusView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -116,7 +116,7 @@ class CrawlstatusView extends View
             foreach ($data['RECENT_CRAWLS'] as $crawl) {
                 $description = ($_SERVER["MOBILE"]) ?
                     wordwrap($crawl['DESCRIPTION'],
-                    10, "<br />\n", true) :
+                    10, "<br>\n", true) :
                     $crawl['DESCRIPTION']; ?>
                 <tr><td><b><?php e($description); ?></b>
                     <div class='media-buttons-container'>
@@ -127,7 +127,7 @@ class CrawlstatusView extends View
                     </td><?php
                     if (!$_SERVER["MOBILE"]) { ?>
                     <td><?php
-                        e("<b>{$crawl['CRAWL_TIME']}</b><br />");
+                        e("<b>{$crawl['CRAWL_TIME']}</b><br>");
                         e("<span class='smaller-font'>" .
                             date("r", $crawl['CRAWL_TIME']) . "</span>");
                             ?></td><?php
@@ -237,7 +237,7 @@ class CrawlstatusView extends View
                     $draw_button = true;
             } ?></b><?php
             if (!empty($data["STALLED"][$channel])) {?>
-                <br />
+                <br>
                 <b class="red"><?=e(tl('crawlstatus_view_low_activity')); ?></b>
                 <?php
             }
@@ -385,11 +385,11 @@ class CrawlstatusView extends View
         <h2><?= tl('managecrawls_element_new_crawl') ?><?=
         "&nbsp;" . $new_crawl_help ?></h2>
         <form id="crawlStartForm" method="get" <?=$target?> >
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageCrawls" />
-        <input type="hidden" name="arg" value="start" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageCrawls" >
+        <input type="hidden" name="arg" value="start" >
         <p><label for="description-name"><?=
             tl('crawlstatus_view_description') ?></label>
             <input type="text" id="description-name"
@@ -397,7 +397,7 @@ class CrawlstatusView extends View
                 value="<?php
                 if (isset($data['DESCRIPTION'])) {
                     e($data['DESCRIPTION']);
-                } ?>" maxlength="<?=C\TITLE_LEN ?>" class="wide-field" />
+                } ?>" maxlength="<?=C\TITLE_LEN ?>" class="wide-field" >
             <button class="button-box" type="submit"><?=
                 tl('crawlstatus_view_start') ?></button>

diff --git a/src/views/FeedstatusView.php b/src/views/FeedstatusView.php
index ae2c68bc3..103789e53 100644
--- a/src/views/FeedstatusView.php
+++ b/src/views/FeedstatusView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/FetchView.php b/src/views/FetchView.php
index 7ad6c2ac6..33c9143f4 100755
--- a/src/views/FetchView.php
+++ b/src/views/FetchView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/GroupView.php b/src/views/GroupView.php
index 3fb6d874a..ef6b53e87 100644
--- a/src/views/GroupView.php
+++ b/src/views/GroupView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/MachinestatusView.php b/src/views/MachinestatusView.php
index 58aa78874..bd7b235b5 100644
--- a/src/views/MachinestatusView.php
+++ b/src/views/MachinestatusView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -100,11 +100,11 @@ class MachinestatusView extends View
         <div class="box">
         <h3 class="no-margin"><?=tl('machinestatus_view_nameserver') ?></h3>
         <form id="media-form" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageMachines" />
-        <input type="hidden" name="arg" value="mediamode" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageMachines" >
+        <input type="hidden" name="arg" value="mediamode" >
         <table class="machine-table"><tr>
         <th><?= tl('machinestatus_view_media_updater') ?></th>
         <td>[<a <?=$target?> href="<?= $log_url ?>"><?=
@@ -140,21 +140,21 @@ class MachinestatusView extends View
         <h2><?= tl('machinestatus_view_add_machine') . "&nbsp;" .
             $manage_machines_help ?></h2>
         <form <?=$target ?> id="name-form" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageMachines" />
-        <input type="hidden" name="arg" value="addmachine" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageMachines" >
+        <input type="hidden" name="arg" value="addmachine" >
         <table class="name-table">
         <tr><th><label for="machine-name"><?=
             tl('machinestatus_view_machine_name') ?></label></th>
             <td><input type="text" id="machine-name" name="name"
-                maxlength="<?= C\NAME_LEN ?>" class="wide-field" /></td>
+                maxlength="<?= C\NAME_LEN ?>" class="wide-field" ></td>
         </tr>
         <tr><th><label for="machine-url"><?=
             tl('machinestatus_view_machineurl')?></label></th>
             <td><input type="url" id="machine-url" name="url"
-                maxlength="<?=C\MAX_URL_LEN ?>" class="wide-field" /></td></tr>
+                maxlength="<?=C\MAX_URL_LEN ?>" class="wide-field" ></td></tr>
         <tr><th><label for="channel-type"><?=
             tl('machinestatus_view_machine_channel_type')?></label></th>
             <td><?= $this->helper("options")->render("channel-type",
@@ -245,7 +245,7 @@ class MachinestatusView extends View
                         $on_mirror, $off_mirror, $caution);
                 ?></td></tr></table></td></tr>
                 </table>
-                </div><br /><?php
+                </div><br><?php
                 continue;
             }
             if (isset($m['CHANNEL']) && intval($m['CHANNEL']) >= 0) {
@@ -348,7 +348,7 @@ class MachinestatusView extends View
                 }
                 ?></tr><?php
             }
-        ?></table></div><br /><?php
+        ?></table></div><br><?php
         }
     }
 }
diff --git a/src/views/MediadetailView.php b/src/views/MediadetailView.php
index fb2d8fe60..4c2acd35f 100644
--- a/src/views/MediadetailView.php
+++ b/src/views/MediadetailView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -194,7 +194,7 @@ class MediadetailView extends View implements CrawlConstants
         <div>
         <div class="media-container center">
         <a href="<?=$img_url ?>" target="_parent" ><img class="photo"
-            src="<?= $current_thumb ?>" <?=$animated_thumb_info ?> /></a>
+            src="<?= $current_thumb ?>" <?=$animated_thumb_info ?> ></a>
         </div>
         <?php
         if ($read_mode) {?>
@@ -206,7 +206,7 @@ class MediadetailView extends View implements CrawlConstants
                 "id='resource-media' aria-label='".
                 tl('mediadetail_view_name')."' ".
                 "value='" . str_replace("'", "&#39;", $name).
-                "' $disabled /><br />");
+                "' $disabled ><br>");
             if (!$disabled) {
                 ?><button onclick='parent.renameResource("<?=
                 urlencode($name);?>",
@@ -283,13 +283,13 @@ class MediadetailView extends View implements CrawlConstants
             ?>
             <form target="_parent">
             <input type="hidden" name='<?=C\CSRF_TOKEN?>'
-                value='<?=$data[C\CSRF_TOKEN]?>' />
-            <input type="hidden" name='arg' value='<?=$arg ?>' />
-            <input type="hidden" name='a' value='<?=$a ?>' />
-            <input type="hidden" name='c' value='<?=$data['CONTROLLER'] ?>' />
-            <input type="hidden" name='n' value='<?=$name ?>' />
+                value='<?=$data[C\CSRF_TOKEN]?>' >
+            <input type="hidden" name='arg' value='<?=$arg ?>' >
+            <input type="hidden" name='a' value='<?=$a ?>' >
+            <input type="hidden" name='c' value='<?=$data['CONTROLLER'] ?>' >
+            <input type="hidden" name='n' value='<?=$name ?>' >
             <input type="hidden" name='<?= $page_name ?>'
-                value='<?=$data['PAGE_NAME']?>' />
+                value='<?=$data['PAGE_NAME']?>' >
             <?php
             if (!empty($data['SUB_PATH'])) {
                 $sub_path = $data['SUB_PATH'];
@@ -300,7 +300,7 @@ class MediadetailView extends View implements CrawlConstants
                 }
                 ?>
                 <input type="hidden" name='sf'
-                    value='<?=$sub_path; ?>' />
+                    value='<?=$sub_path; ?>' >
                 <?php
             }
             ?>
diff --git a/src/views/NocacheView.php b/src/views/NocacheView.php
index d7f022de8..4c90a8643 100755
--- a/src/views/NocacheView.php
+++ b/src/views/NocacheView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -62,7 +62,7 @@ class NocacheView extends View
             <h1><?= tl('nocache_view_no_cache') ?></h1><?php
             if (!empty($url)) { ?>
                 <p>
-                <a href="<?= $data['URL'] ?>"><?= $data['URL'] ?></a>.<br />
+                <a href="<?= $data['URL'] ?>"><?= $data['URL'] ?></a>.<br>
                 </p><?php
             }
         }
diff --git a/src/views/RecoverView.php b/src/views/RecoverView.php
index 9c4a22e7a..ac5efd6a4 100644
--- a/src/views/RecoverView.php
+++ b/src/views/RecoverView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -69,34 +69,34 @@ class RecoverView extends View
             <h1 class="logo"><a href="<?=C\SHORT_BASE_URL ?>?<?=
                 C\CSRF_TOKEN."=".$data[C\CSRF_TOKEN] ?>"><img
                 src="<?= C\SHORT_BASE_URL . $logo ?>" alt="<?=
-                $this->logo_alt_text ?>"/></a><span> - <?=
+                $this->logo_alt_text ?>" ></a><span> - <?=
                 tl('recover_view_recover_password') ?></span></h1>
             <form method="post">
-            <input type="hidden" name="c" value="register" />
-            <input type="hidden" name="a" value="<?= $activity ?>" />
-            <input type="hidden" name="cookieconsent" value="true" />
+            <input type="hidden" name="c" value="register" >
+            <input type="hidden" name="a" value="<?= $activity ?>" >
+            <input type="hidden" name="cookieconsent" value="true" >
             <?php if (isset($_SESSION["random_string"])) { ?>
             <input type='hidden' name='nonce_for_string'
-                id='nonce_for_string' />
+                id='nonce_for_string' >
             <input type='hidden' name='random_string' id='random_string'
-                value='<?= $_SESSION["random_string"] ?>' />
+                value='<?= $_SESSION["random_string"] ?>' >
             <input type='hidden' name='time1' id='time1'
-                value='<?= $_SESSION["request_time"] ?>' />
+                value='<?= $_SESSION["request_time"] ?>' >
             <input type='hidden' name='level' id='level'
-                value='<?= $_SESSION["level"] ?>' />
+                value='<?= $_SESSION["level"] ?>' >
             <input type='hidden' name='time' id='time' value='<?=
                 (isset($data["RECOVER_COMPLETE"])) ? $data['time']: time() ?>'/>
             <?php
                 $time_done = true;
             }
             if (isset($data["RECOVER_COMPLETE"])) { ?>
-                <input type="hidden" name="user" value="<?=$data['user'] ?>" />
+                <input type="hidden" name="user" value="<?=$data['user'] ?>" >
                 <?php if (empty($time_done)) { ?>
                     <input type="hidden" name="time"
-                        value="<?=$data['time'] ?>" />
+                        value="<?=$data['time'] ?>" >
                 <?php } ?>
                 <input type="hidden" name="finish_hash" value="<?=
-                    $data['finish_hash'] ?>" />
+                    $data['finish_hash'] ?>" >
             <?php
             }
             ?>
@@ -115,7 +115,7 @@ class RecoverView extends View
                                 <input id="password" type="password"
                                     class="narrow-field" maxlength="<?=
                                 C\LONG_NAME_LEN?>"
-                                    name="password" value="" /></td>
+                                    name="password" value="" ></td>
                         </tr>
                         <tr>
                             <th class="table-label">
@@ -127,7 +127,7 @@ class RecoverView extends View
                                 <input id="repassword" type="password"
                                     class="narrow-field" maxlength="<?=
                                 C\LONG_NAME_LEN?>"
-                                    name="repassword" value="" /></td>
+                                    name="repassword" value="" ></td>
                         </tr>
                         <?php
                     } else {
@@ -142,7 +142,7 @@ class RecoverView extends View
                                 class="narrow-field" maxlength="<?=
                                 C\NAME_LEN ?>"
                                 name="user" autocomplete="off"
-                                value = "<?= $data['USER'] ?>"/>
+                                value = "<?= $data['USER'] ?>" >
                             <?= in_array("user", $missing)
                                 ?'<span class="red">*</span>':''?></td>
                         </tr>
@@ -193,7 +193,7 @@ class RecoverView extends View
                             </td></tr><tr><td>
                             <input type="text" maxlength="<?=C\CAPTCHA_LEN ?>"
                             id="user-captcha-text" class="narrow-field"
-                            name="user_captcha_text"/></td></tr>
+                            name="user_captcha_text" ></td></tr>
                         <?php
                     }
                     $border_top = "";
@@ -221,7 +221,7 @@ class RecoverView extends View
                         <td class="table-input border-top">
                             <input type="hidden"
                                 name="<?= C\CSRF_TOKEN ?>"
-                                value="<?= $data[C\CSRF_TOKEN] ?>"/>
+                                value="<?= $data[C\CSRF_TOKEN] ?>" >
                             <button  type="submit"><?=
                                 tl('recover_view_recover_password')
                             ?></button>
diff --git a/src/views/RegisterView.php b/src/views/RegisterView.php
index 490d097d2..e1a3c8b49 100755
--- a/src/views/RegisterView.php
+++ b/src/views/RegisterView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -120,23 +120,23 @@ class RegisterView extends View
         <div class="small-top">
             <h1 class="logo"><a href="<?=C\SHORT_BASE_URL ?>?<?=
                 $append_url ?>"><img src="<?= C\SHORT_BASE_URL .
-                $logo ?>" alt="<?= $this->logo_alt_text ?>" /></a><span> - <?=
+                $logo ?>" alt="<?= $this->logo_alt_text ?>" ></a><span> - <?=
                 tl('register_view_create_account') ?></span></h1>
             <form method="post">
-            <input type="hidden" name="c" value="register" />
-            <input type="hidden" name="a" value="processAccountData" />
-            <input type="hidden" name="cookieconsent" value="true" />
+            <input type="hidden" name="c" value="register" >
+            <input type="hidden" name="a" value="processAccountData" >
+            <input type="hidden" name="cookieconsent" value="true" >
             <?php
             if (isset($_SESSION["random_string"])) {
             ?>
                 <input type='hidden' name='nonce_for_string'
-                    id='nonce_for_string' />
+                    id='nonce_for_string' >
                 <input type='hidden' name='random_string' id='random_string'
-                    value='<?= $_SESSION["random_string"] ?>' />
+                    value='<?= $_SESSION["random_string"] ?>' >
                 <input type='hidden' name='time' id='time'
-                    value='<?= $_SESSION["request_time"] ?>' />
+                    value='<?= $_SESSION["request_time"] ?>' >
                 <input type='hidden' name='level' id='level'
-                    value='<?= $_SESSION["level"] ?>' />
+                    value='<?= $_SESSION["level"] ?>' >
                 <?php
             } ?>
             <div class="register">
@@ -152,7 +152,7 @@ class RegisterView extends View
                                 class="narrow-field" maxlength="<?=
                                 C\NAME_LEN ?>"
                                 name="first" autocomplete="off"
-                                value = "<?= $data['FIRST'] ?>"/>
+                                value = "<?= $data['FIRST'] ?>" >
                             <span id="first-error"></span></td>
                     </tr>
                     <tr>
@@ -166,7 +166,7 @@ class RegisterView extends View
                                 class="narrow-field" maxlength="<?=
                                 C\NAME_LEN ?>"
                                 name="last" autocomplete="off"
-                                value = "<?= $data['LAST']  ?>"/>
+                                value = "<?= $data['LAST']  ?>" >
                             <span id="last-error"></span></td>
                     </tr>
                     <tr>
@@ -178,7 +178,7 @@ class RegisterView extends View
                                 class="narrow-field" maxlength="<?=
                                 C\NAME_LEN ?>"
                                 name="user" autocomplete="off"
-                                value = "<?= $data['USER'] ?>"/>
+                                value = "<?= $data['USER'] ?>" >
                             <span id="user-error"></span></td>
                     </tr>
                     <tr>
@@ -190,7 +190,7 @@ class RegisterView extends View
                                 class="narrow-field" maxlength="<?=
                                 C\LONG_NAME_LEN ?>"
                                 name="email" autocomplete="off"
-                                value = "<?= $data['EMAIL'] ?>"/>
+                                value = "<?= $data['EMAIL'] ?>" >
                             <span id="email-error"></span></td>
                     </tr>
                     <tr>
@@ -204,7 +204,7 @@ class RegisterView extends View
                                 class="narrow-field" maxlength="<?=
                                 C\LONG_NAME_LEN?>"
                                 name="password" value="<?=
-                                $data['PASSWORD'] ?>" />
+                                $data['PASSWORD'] ?>" >
                             <span id="password-error"></span></td>
                     </tr>
                     <tr>
@@ -218,7 +218,7 @@ class RegisterView extends View
                                 class="narrow-field" maxlength="<?=
                                 C\LONG_NAME_LEN ?>"
                                 name="repassword" value="<?=
-                                $data['REPASSWORD'] ?>" />
+                                $data['REPASSWORD'] ?>" >
                             <span id="pass-match"></span></td>
                     </tr>
                     <?php
@@ -274,7 +274,7 @@ class RegisterView extends View
                             <input type="text" maxlength="<?=
                                 C\CAPTCHA_LEN ?>"
                             id="user-captcha-text" class="narrow-field"
-                            name="user_captcha_text"/></td></tr>
+                            name="user_captcha_text" ></td></tr>
                         <?php
                     }
                     ?>
@@ -296,7 +296,7 @@ class RegisterView extends View
                         <td class="table-input border-top">
                         <input type="hidden"
                             name="<?php e(C\CSRF_TOKEN);?>"
-                            value="<?php e($data[C\CSRF_TOKEN]); ?>"/>
+                            value="<?php e($data[C\CSRF_TOKEN]); ?>" >
                             <button id="submit" type="submit"><?=
                             tl('register_view_create_account')
                             ?></button>
diff --git a/src/views/ResendEmailView.php b/src/views/ResendEmailView.php
index 4eb864091..1700613f9 100644
--- a/src/views/ResendEmailView.php
+++ b/src/views/ResendEmailView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -67,21 +67,21 @@ class ResendEmailView extends View
             <h1 class="logo"><a href="<?=C\SHORT_BASE_URL ?>?<?=
                 C\CSRF_TOKEN."=".$data[C\CSRF_TOKEN] ?>"><img
                 src="<?= C\SHORT_BASE_URL . $logo ?>" alt="<?=
-                $this->logo_alt_text ?>"/></a><span> - <?=
+                $this->logo_alt_text ?>" ></a><span> - <?=
                 tl('resendemail_view_resend_activation') ?></span></h1>
             <form method="post">
-            <input type="hidden" name="c" value="register" />
-            <input type="hidden" name="a" value="resendComplete" />
-            <input type="hidden" name="cookieconsent" value="true" />
+            <input type="hidden" name="c" value="register" >
+            <input type="hidden" name="a" value="resendComplete" >
+            <input type="hidden" name="cookieconsent" value="true" >
             <?php if (isset($_SESSION["random_string"])) { ?>
             <input type='hidden' name='nonce_for_string'
-                id='nonce_for_string' />
+                id='nonce_for_string' >
             <input type='hidden' name='random_string' id='random_string'
-                value='<?= $_SESSION["random_string"] ?>' />
+                value='<?= $_SESSION["random_string"] ?>' >
             <input type='hidden' name='time1' id='time1'
-                value='<?= $_SESSION["request_time"] ?>' />
+                value='<?= $_SESSION["request_time"] ?>' >
             <input type='hidden' name='level' id='level'
-                value='<?= $_SESSION["level"] ?>' />
+                value='<?= $_SESSION["level"] ?>' >
             <input type='hidden' name='time' id='time' value='<?= time() ?>'/>
             <?php
             }
@@ -98,7 +98,7 @@ class ResendEmailView extends View
                             class="narrow-field" maxlength="<?=
                             C\NAME_LEN ?>"
                             name="user" autocomplete="off"
-                            value = "<?= $data['USER'] ?>"/>
+                            value = "<?= $data['USER'] ?>" >
                         <?= in_array("user", $missing)
                             ?'<span class="red">*</span>':''?></td>
                     </tr>
@@ -113,7 +113,7 @@ class ResendEmailView extends View
                             </td></tr><tr><td>
                             <input type="text" maxlength="<?=C\CAPTCHA_LEN ?>"
                             id="user-captcha-text" class="narrow-field"
-                            name="user_captcha_text"/></td></tr>
+                            name="user_captcha_text" ></td></tr>
                         <?php
                     }
                     $border_top = "";
@@ -141,7 +141,7 @@ class ResendEmailView extends View
                         <td class="table-input border-top">
                             <input type="hidden"
                                 name="<?= C\CSRF_TOKEN ?>"
-                                value="<?= $data[C\CSRF_TOKEN] ?>"/>
+                                value="<?= $data[C\CSRF_TOKEN] ?>" >
                             <button  type="submit"><?=
                                 tl('resendemail_view_resend_email')
                             ?></button>
diff --git a/src/views/RssView.php b/src/views/RssView.php
index b8dfb8ceb..138cf4e01 100644
--- a/src/views/RssView.php
+++ b/src/views/RssView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -80,7 +80,7 @@ class RssView extends View implements CrawlConstants
                 if (isset($page[self::THUMB]) && $page[self::THUMB] != 'null'
                     && $page[self::THUMB] != 'NULL') {
                     $img = "<img src='{$page[self::THUMB]}' ".
-                        "alt='Image' />";
+                        "alt='Image' >";
                     e(htmlentities($img));
                 }
                 ?></description></item>
diff --git a/src/views/SearchView.php b/src/views/SearchView.php
index 3703fb991..7a18191ba 100755
--- a/src/views/SearchView.php
+++ b/src/views/SearchView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/SigninView.php b/src/views/SigninView.php
index 61d4cc600..2917709c0 100755
--- a/src/views/SigninView.php
+++ b/src/views/SigninView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -66,7 +66,7 @@ class SigninView extends View
                 e('?' . C\CSRF_TOKEN . "=" . $data[C\CSRF_TOKEN]);
             }?>"><img src="<?=C\SHORT_BASE_URL .
             $logo ?>" alt="<?= $this->logo_alt_text
-            ?>" /></a><span> - <?=tl('signin_view_signin') ?></span></h1>
+            ?>" ></a><span> - <?=tl('signin_view_signin') ?></span></h1>
         <form method="post">
         <div class="login">
             <table>
@@ -76,18 +76,18 @@ class SigninView extends View
                     class="table-input"><input id="username" type="text"
                     class="narrow-field" maxlength="<?= C\NAME_LEN
                     ?>" name="u" <?=$user_value ?>
-                    autocorrect="off" autocapitalize="none" />
+                    autocorrect="off" autocapitalize="none" >
             </td><td></td></tr>
             <tr>
             <td class="table-label" ><b><label for="password"><?=
                 tl('signin_view_password') ?></label>:</b></td><td
                 class="table-input"><input id="password" type="password"
                 class="narrow-field" maxlength="<?= C\LONG_NAME_LEN
-                ?>" name="p" /></td>
+                ?>" name="p" ></td>
             <td><input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-                    id="CSRF-TOKEN" value="<?= $data[C\CSRF_TOKEN] ?>" />
-                <input type="hidden" name="c" value="admin" />
-                <input type="hidden" name="cookieconsent" value="true" />
+                    id="CSRF-TOKEN" value="<?= $data[C\CSRF_TOKEN] ?>" >
+                <input type="hidden" name="c" value="admin" >
+                <input type="hidden" name="cookieconsent" value="true" >
             </td>
             </tr><?php
             $border_top = "";
diff --git a/src/views/StaticView.php b/src/views/StaticView.php
index dd04b1c3f..34e4ff39b 100644
--- a/src/views/StaticView.php
+++ b/src/views/StaticView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -68,7 +68,7 @@ class StaticView extends View
             <div class="current-activity-header center">
             <h1 class="logo"><a href="<?= C\SHORT_BASE_URL . '?'.
                 $token_string ?>"><img src="<?= C\SHORT_BASE_URL . $logo ?>"
-                alt="<?= tl('static_view_title') ?>" /></a><span><?=
+                alt="<?= tl('static_view_title') ?>" ></a><span><?=
                 $data['subtitle']?></span></h1>
             </div><?php
         }
diff --git a/src/views/SuggestView.php b/src/views/SuggestView.php
index 36b94e0df..26d80eacf 100644
--- a/src/views/SuggestView.php
+++ b/src/views/SuggestView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -68,27 +68,27 @@ class SuggestView extends View
             <h1 class="logo"><a href="<?= C\SHORT_BASE_URL . $append_url
                 ?>"><img src="<?= C\SHORT_BASE_URL . $logo
                 ?>" alt="<?= $this->logo_alt_text
-                ?>"/></a><span> - <?=tl('suggest_view_suggest_url')
+                ?>" ></a><span> - <?=tl('suggest_view_suggest_url')
                 ?></span></h1>
             <p class="center"><?= tl('suggest_view_instructions') ?></p>
             <form method="post">
             <?php  if (isset($_SESSION["random_string"])) { ?>
             <input type='hidden' name='nonce_for_string'
-            id='nonce_for_string' />
+            id='nonce_for_string' >
             <input type='hidden' name='random_string' id='random_string'
-                value='<?= $_SESSION["random_string"] ?>' />
+                value='<?= $_SESSION["random_string"] ?>' >
             <input type='hidden' name='time1' id='time1'
-                value='<?= $_SESSION["request_time"] ?>' />
+                value='<?= $_SESSION["request_time"] ?>' >
             <input type='hidden' name='level' id='level'
-                value='<?= $_SESSION["level"]?>' />
+                value='<?= $_SESSION["level"]?>' >
             <?php } ?>
             <input type='hidden' name='time' id='time'
                 value='<?= time() ?>'/>
-            <input type="hidden" name="c" value="register" />
-            <input type="hidden" name="a" value="suggestUrl" />
-            <input type="hidden" name="arg" value="save" />
+            <input type="hidden" name="c" value="register" >
+            <input type="hidden" name="a" value="suggestUrl" >
+            <input type="hidden" name="arg" value="save" >
             <input type="hidden" name="build_time" value="<?=
-                $data['build_time'] ?>" />
+                $data['build_time'] ?>" >
                 <div class="register">
                     <table>
                         <tr>
@@ -100,7 +100,7 @@ class SuggestView extends View
                                 <input id="url" type="text"
                                     class="narrow-field" maxlength="<?=
                                     C\SHORT_TITLE_LEN ?>"
-                                    name="url" value = "<?=$data['url'] ?>"/><?=
+                                    name="url" value = "<?=$data['url'] ?>" ><?=
                                     in_array("url", $missing) ?
                                     '<span class="red">*</span>':'' ?></td>
                         </tr>
@@ -148,7 +148,7 @@ class SuggestView extends View
                                 </td></tr><tr><td>
                                 <input type="text" maxlength="<?=C\CAPTCHA_LEN
                                 ?>" id="user-captcha-text" class="narrow-field"
-                                name="user_captcha_text"/></td></tr>
+                                name="user_captcha_text" ></td></tr>
                             <?php
                         }
                         ?>
@@ -161,7 +161,7 @@ class SuggestView extends View
                             <?php }?>
                                <input type="hidden"
                                 name="<?= C\CSRF_TOKEN ?>"
-                                value="<?= $data[C\CSRF_TOKEN] ?>"/>
+                                value="<?= $data[C\CSRF_TOKEN] ?>" >
                                 <button class="sides-margin" type="submit">
                                 <?= tl('suggest_view_submit_url') ?>
                                 </button>
diff --git a/src/views/TestsView.php b/src/views/TestsView.php
index b45fc8bf6..0f167a71c 100644
--- a/src/views/TestsView.php
+++ b/src/views/TestsView.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
@@ -67,7 +67,7 @@ class TestsView extends View
         <div class="group-heading logo"><div class="test">
         <h1 class="logo"><a href="<?=C\SHORT_BASE_URL .
             $token_string ?>"><img src="<?=C\SHORT_BASE_URL .
-        $logo ?>" alt="<?=$this->logo_alt_text ?>" /></a><span> - <?=
+        $logo ?>" alt="<?=$this->logo_alt_text ?>" ></a><span> - <?=
             tl('tests_view_tests') ?></span>
         </h1>
         </div>
@@ -169,7 +169,7 @@ class TestsView extends View
                     "href='$current_test_url&method=$test_case_name'>".
                     "$test_case_name</a>" : $test_case_name;
                 ?><tr><th style='text-align:right'><?= $test_header .
-                 "<br /><span class='small-font'>(".
+                 "<br><span class='small-font'>(".
                     tl('tests_view_elasped_time') . " " .
                     sprintf("%.5e", $time_data) . "s)" ?></span></th><?php
                 $passed = 0;
@@ -189,10 +189,10 @@ class TestsView extends View
                     $color = "back-red";
                 }
                 ?><td class='<?=$color?>'><?=$passed?>/<?=$count?> <?=
-                    tl('tests_view_tests_passed')?><br /><?php
+                    tl('tests_view_tests_passed')?><br><?php
                 if (count($failed_items) > 0) {
                     foreach ($failed_items as $item) {
-                        echo "  FAILED: ".$item['NAME']."<br />";
+                        echo "  FAILED: ".$item['NAME']."<br>";
                     }
                 }
                 ?></td></tr><?php
diff --git a/src/views/View.php b/src/views/View.php
index d44943cdc..5fa08b652 100644
--- a/src/views/View.php
+++ b/src/views/View.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views;
diff --git a/src/views/elements/AdminElement.php b/src/views/elements/AdminElement.php
index 681a39bd9..8741ab19c 100644
--- a/src/views/elements/AdminElement.php
+++ b/src/views/elements/AdminElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/AdminbarElement.php b/src/views/elements/AdminbarElement.php
index d19b36887..9f9e00a73 100644
--- a/src/views/elements/AdminbarElement.php
+++ b/src/views/elements/AdminbarElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -66,11 +66,12 @@ class AdminbarElement extends Element
         ?>]</a></div><div id='nav-bar' class="nav-bar">
             <div class='inner-bar'>
             <?php $this->view->helper("hamburger")->render($logged_in); ?>
+            <div class="title-block">
             <h1>
             <a href="<?= C\SHORT_BASE_URL . "?" .
                 C\CSRF_TOKEN . "=" . $data[C\CSRF_TOKEN] ?>"><img
             src="<?= $logo ?>" alt="<?= $this->view->logo_alt_text
-                ?>" /></a><span> - <?php
+                ?>" ></a></h1><div class='nav-span'> - <?php
             $is_account = ($data['ACTIVITY_METHOD'] ?? "") == 'manageAccount';
             $css_classes = ($is_account) ? "disabled" : "";
             $this->view->helper("iconlink")->renderButton(
@@ -82,7 +83,8 @@ class AdminbarElement extends Element
             } else {
                 e(" " . tl('adminbar_element_account'));
             }
-            ?></span></h1>
+            ?></div>
+        </div>
         </div>
         </div>
         <?php
diff --git a/src/views/elements/AdminmenuElement.php b/src/views/elements/AdminmenuElement.php
index 3fbcad2d6..3d3876ee9 100644
--- a/src/views/elements/AdminmenuElement.php
+++ b/src/views/elements/AdminmenuElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/ApiElement.php b/src/views/elements/ApiElement.php
index af042cbbb..568b760f8 100644
--- a/src/views/elements/ApiElement.php
+++ b/src/views/elements/ApiElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Eswara Rajesh Pinapala epinapala@live.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/AppearanceElement.php b/src/views/elements/AppearanceElement.php
index b81ae948d..f0048e7d5 100644
--- a/src/views/elements/AppearanceElement.php
+++ b/src/views/elements/AppearanceElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -77,13 +77,13 @@ class AppearanceElement extends Element
                         auxiliary_css.scrollTop : 0;
                     }" <?php
             } ?> >
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="appearance" />
-        <input type="hidden" name="arg" value="profile" />
-        <input type="hidden" name="caret" id="caret-pos"/>
-        <input type="hidden" name="scroll_top" id="scroll-top"/>
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="appearance" >
+        <input type="hidden" name="arg" value="profile" >
+        <input type="hidden" name="caret" id="caret-pos" >
+        <input type="hidden" name="scroll_top" id="scroll-top" >
         <div class="top-margin">
         <?php
         if (empty($data['USE_THEME_FORM'])) {
@@ -153,7 +153,7 @@ class AppearanceElement extends Element
             tl('appearance_element_background_color') ?></label>
         <input type="color" id="back-color"
             name="BACKGROUND_COLOR" class="narrow-field" value='<?=
-            $data["BACKGROUND_COLOR"] ?>' /></div>
+            $data["BACKGROUND_COLOR"] ?>' ></div>
         <div class="top-margin">
         <table><tr>
         <td><label for="back-image"><?=
@@ -164,7 +164,7 @@ class AppearanceElement extends Element
                 C\SHORT_BASE_URL."/resources/drag.png";
         ?><img id='current-back-image' class="user-icon"
             src="<?= $image ?>" alt="<?=
-            tl('appearance_element_background_image') ?>" /><?php
+            tl('appearance_element_background_image') ?>" ><?php
         $this->view->helper("fileupload")->render(
             'current-back-image',
             'BACKGROUND_IMAGE', 'back-image', C\THUMB_SIZE, 'image',
@@ -175,17 +175,17 @@ class AppearanceElement extends Element
             tl('appearance_element_foreground_color') ?></label>
         <input type="color" id="fore-color"
             name="FOREGROUND_COLOR" class="narrow-field" value='<?=
-            $data["FOREGROUND_COLOR"] ?>' /></div>
+            $data["FOREGROUND_COLOR"] ?>' ></div>
         <div class="top-margin"><label for="top-color"><?=
             tl('appearance_element_topbar_color') ?></label>
         <input type="color" id="top-color"
             name="TOPBAR_COLOR" class="narrow-field" value='<?=
-            $data["TOPBAR_COLOR"]?>' /></div>
+            $data["TOPBAR_COLOR"]?>' ></div>
         <div class="top-margin"><label for="side-color"><?=
             tl('appearance_element_sidebar_color') ?></label>
         <input type="color" id="side-color"
             name="SIDEBAR_COLOR" class="narrow-field" value='<?=
-            $data["SIDEBAR_COLOR"] ?>' /></div><?php
+            $data["SIDEBAR_COLOR"] ?>' ></div><?php
         foreach (['large' => tl('appearance_element_large_logo'),
             'medium' => tl('appearance_element_medium_logo'),
             'small' => tl('appearance_element_small_logo')] as
@@ -202,7 +202,7 @@ class AppearanceElement extends Element
                 $data[$logo_field]) ? $data[$logo_field] :
                     C\SHORT_BASE_URL . "/resources/drag.png";
             ?><img id='<?= $current_logo ?>' class="user-icon"
-                src="<?=$image ?>" alt="<?=$label_size ?>" /><?php
+                src="<?=$image ?>" alt="<?=$label_size ?>" ><?php
             $this->view->helper("fileupload")->render(
                 $current_logo,
                 $logo_field, $size_logo, C\THUMB_SIZE, 'image',
@@ -219,7 +219,7 @@ class AppearanceElement extends Element
                 C\SHORT_BASE_URL . "/resources/drag.png";
         ?><img id='current-favicon' class="user-icon"
             src="<?=$data['FAVICON'] ?>" alt="<?=
-            tl('appearance_element_favicon') ?>" /><?php
+            tl('appearance_element_favicon') ?>" ><?php
         $this->view->helper("fileupload")->render(
             'current-favicon',
             'FAVICON', 'favicon',  C\THUMB_SIZE, 'image',
@@ -253,11 +253,11 @@ class AppearanceElement extends Element
         $this->view->helper("close")->render($appearance_url);
         $icon_helper = $this->view->helper('iconlink');
         if ($data['LANDING_PAGE'] == true) {?>
-            <input type="hidden" name="LANDING_PAGE" value='true' /><?php
+            <input type="hidden" name="LANDING_PAGE" value='true' ><?php
         }
         ?>
         <div class="top-margin"><input type="hidden" name="edit_theme"
-            value="true" /><label for="auxiliary-css-name"><?=
+            value="true" ><label for="auxiliary-css-name"><?=
             tl('appearance_element_auxiliary_css_name') ?></label>
         <input type="text" name="AUXILIARY_CSS_NAME" maxlength="<?=C\NAME_LEN?>"
             placeholder="<?=tl('appearance_element_theme_name') ?>"
diff --git a/src/views/elements/BotstoryElement.php b/src/views/elements/BotstoryElement.php
index b6c052769..0f84b7766 100644
--- a/src/views/elements/BotstoryElement.php
+++ b/src/views/elements/BotstoryElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -96,13 +96,13 @@ class BotstoryElement extends Element
             <tr>
             <td><i><?=
                 tl('botstory_element_request') ?></i> <?=
-                $pattern['REQUEST'] ?><br />
+                $pattern['REQUEST'] ?><br>
             <i><?= tl('botstory_element_trigger_state') ?></i> <?=
-                $pattern['TRIGGER_STATE'] ?><br />
+                $pattern['TRIGGER_STATE'] ?><br>
             <i><?= tl('botstory_element_remote_message') ?></i> <?=
-                $pattern['REMOTE_MESSAGE'] ?><br />
+                $pattern['REMOTE_MESSAGE'] ?><br>
             <i><?= tl('botstory_element_result_state') ?></i> <?=
-                $pattern['RESULT_STATE'] ?><br />
+                $pattern['RESULT_STATE'] ?><br>
             <i><?= tl('botstory_element_response') ?></i> <?=
                 $pattern['RESPONSE'] ?>
             </td>
@@ -141,45 +141,45 @@ class BotstoryElement extends Element
         }
         ?>
         <form id="admin-form" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="botStory" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="botStory" >
         <input type="hidden" name="arg" value="<?=
-            $data['FORM_TYPE'] ?>" />
+            $data['FORM_TYPE'] ?>" >
         <?php
         if (!empty($data['CURRENT_PATTERN']['pattern_id'])) { ?>
             <input type="hidden" name="pattern_id" value="<?=
-                $data['CURRENT_PATTERN']['pattern_id'] ?>" /><?php
+                $data['CURRENT_PATTERN']['pattern_id'] ?>" ><?php
         } ?>
         <table class="name-table">
         <tr><th><?=tl('botstory_element_request') ?></th><td><input
             type="text" name="request"
             maxlength="<?= C\MAX_DESCRIPTION_LEN ?>"
             value="<?= $data['CURRENT_PATTERN']['request'] ?>"
-            class="wide-field" /></td>
+            class="wide-field" ></td>
         </tr>
         <tr><th><?=tl('botstory_element_trigger_state') ?></th><td><input
             type="text" name="trigger_state"  maxlength="<?= C\NAME_LEN  ?>"
             value="<?= $data['CURRENT_PATTERN']['trigger_state'] ?>"
-            class="narrow-field" /></td>
+            class="narrow-field" ></td>
         </tr>
         <tr><th><?=tl('botstory_element_remote_message') ?></th><td><input
             type="text" name="remote_message"  maxlength="<?=
             C\MAX_DESCRIPTION_LEN  ?>" value="<?=
             $data['CURRENT_PATTERN']['remote_message'] ?>"
-            class="wide-field" />
+            class="wide-field" >
             </td>
         </tr>
         <tr><th><?=tl('botstory_element_result_state') ?></th><td><input
             type="text" name="result_state"  maxlength="<?= C\NAME_LEN  ?>"
             value="<?= $data['CURRENT_PATTERN']['result_state'] ?>"
-            class="narrow-field" /></td>
+            class="narrow-field" ></td>
         </tr>
         <tr><th><?=tl('botstory_element_response') ?></th><td><input
             type="text" name="response"  maxlength="<?=
             C\MAX_DESCRIPTION_LEN  ?>" value="<?=
-            $data['CURRENT_PATTERN']['response'] ?>" class="wide-field" />
+            $data['CURRENT_PATTERN']['response'] ?>" class="wide-field" >
             </td>
         </tr>
         <tr><td></td><td class="center"><button class="button-box" <?php
diff --git a/src/views/elements/ConfigureElement.php b/src/views/elements/ConfigureElement.php
index 669439594..2c2746809 100644
--- a/src/views/elements/ConfigureElement.php
+++ b/src/views/elements/ConfigureElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -66,16 +66,16 @@ class ConfigureElement extends Element
             action='<?=$configure_url ?>' >
         <?php
         if (isset($data['lang'])) { ?>
-            <input type="hidden" name="lang" value="<?=$data['lang'] ?>" />
+            <input type="hidden" name="lang" value="<?=$data['lang'] ?>" >
         <?php
         } ?>
-        <input type="hidden" name="arg" value="directory" />
+        <input type="hidden" name="arg" value="directory" >
         <h2><label for="directory-path"><?=
             tl('configure_element_work_directory') ?></label></h2>
         <div class="top-margin"><input type="text" id="directory-path"
             name="WORK_DIRECTORY"
             class="extra-wide-field adjacent-button-field" value='<?=
-            $data["WORK_DIRECTORY"] ?>' /><button class="button-box"
+            $data["WORK_DIRECTORY"] ?>' ><button class="button-box"
             type="submit"><?= tl('configure_element_load_or_create') ?></button>
             <?= $this->view->helper("helpbutton")->render(
                 "Work Directory", $data[C\CSRF_TOKEN]) ?>
@@ -85,13 +85,13 @@ class ConfigureElement extends Element
             enctype='multipart/form-data'>
         <?php if (isset($data['WORK_DIRECTORY'])) { ?>
             <input type="hidden" name="WORK_DIRECTORY" value="<?=
-                $data['WORK_DIRECTORY'] ?>" />
+                $data['WORK_DIRECTORY'] ?>" >
         <?php }?>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="configure" />
-        <input type="hidden" name="arg" value="profile" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="configure" >
+        <input type="hidden" name="arg" value="profile" >
         <h2><?= tl('configure_element_component_check') ?></h2>
         <div  class="top-margin">
         <?= $data['SYSTEM_CHECK'] ?>
@@ -116,7 +116,7 @@ class ConfigureElement extends Element
                     <?php if (($data['DEBUG_LEVEL'] & C\ERROR_INFO) ==
                         C\ERROR_INFO ){
                         e("checked='checked'");}?>
-                    /><?= tl('configure_element_error_info') ?></label>
+                    ><?= tl('configure_element_error_info') ?></label>
                 <label for="query-info"><input id='query-info' type="checkbox"
                     name="QUERY_INFO" value="<?= C\QUERY_INFO ?>"
                     <?php if (($data['DEBUG_LEVEL'] & C\QUERY_INFO) ==
@@ -128,14 +128,14 @@ class ConfigureElement extends Element
                     ?>
                     <label for="test-info"><input id='test-info' type="checkbox"
                         name="TEST_INFO" value="<?= C\TEST_INFO ?>"
-                        checked='checked' /><a href="<?=
+                        checked='checked' ><a href="<?=
                         B\directURL('tests', true)  .
                         C\CSRF_TOKEN."=".$data[C\CSRF_TOKEN]; ?>"><?=
                     tl('configure_element_test_info') ?></a></label><?php
                 } else {
                     ?>
                     <label for="test-info"><input id='test-info' type="checkbox"
-                        name="TEST_INFO" value="<?= C\TEST_INFO ?>" /><?=
+                        name="TEST_INFO" value="<?= C\TEST_INFO ?>" ><?=
                     tl('configure_element_test_info') ?></label><?php
                 }?>
             </fieldset>
@@ -149,7 +149,7 @@ class ConfigureElement extends Element
                     name="WEB_ACCESS" value="true"
                     <?php if ( $data['WEB_ACCESS']==true) {
                         e("checked='checked'");}?>
-                    /><?= tl('configure_element_web_access') ?></label>
+                    ><?= tl('configure_element_web_access') ?></label>
                 <label for="rss-access"><input id='rss-access' type="checkbox"
                     name="RSS_ACCESS" value="true"
                     <?php if ($data['RSS_ACCESS'] == true) {
@@ -171,14 +171,14 @@ class ConfigureElement extends Element
                     <input type="text" id="crawl-robot-name"
                         name="USER_AGENT_SHORT"
                         value="<?=$data['USER_AGENT_SHORT'] ?>"
-                        class="extra-wide-field" />
+                        class="extra-wide-field" >
                 </div>
                 <div class="top-margin"><b><label
                     for="crawl-robot-instance"><?=
                     tl('configure_element_robot_instance')?></label></b>
                     <input type="text" id="crawl-robot-instance"
                         name="ROBOT_INSTANCE" value="<?=
-                        $data['ROBOT_INSTANCE'] ?>" class="extra-wide-field" />
+                        $data['ROBOT_INSTANCE'] ?>" class="extra-wide-field" >
                 </div>
                 <div class="top-margin"><label for="robot-description"><b><?=
                     tl('configure_element_robot_description')
diff --git a/src/views/elements/CrawlcontrolsElement.php b/src/views/elements/CrawlcontrolsElement.php
index 5d624951f..7e2869274 100644
--- a/src/views/elements/CrawlcontrolsElement.php
+++ b/src/views/elements/CrawlcontrolsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/CrawloptionsElement.php b/src/views/elements/CrawloptionsElement.php
index 9e74436cd..0edb70f38 100644
--- a/src/views/elements/CrawloptionsElement.php
+++ b/src/views/elements/CrawloptionsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -66,17 +66,17 @@ class CrawloptionsElement extends Element
             ?></h2><?php
         } ?>
         <form id="crawloptionsForm" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageCrawls" />
-        <input type="hidden" name="arg" value="options" />
-        <input type="hidden" name="posted" value="posted" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageCrawls" >
+        <input type="hidden" name="arg" value="options" >
+        <input type="hidden" name="posted" value="posted" >
         <input type="hidden" id='crawl-type' name="crawl_type" value="<?=
-            $data['crawl_type'] ?>" />
+            $data['crawl_type'] ?>" >
         <?php if (isset($data['ts'])) { ?>
             <input type="hidden" name="ts" value="<?=
-                $data['ts'] ?>" />
+                $data['ts'] ?>" >
         <?php } ?>
         <ul class='tab-menu-list'>
         <?php if (!isset($data['ts']) ||
@@ -153,7 +153,7 @@ class CrawloptionsElement extends Element
         <label for="sleep_start"><?=tl('crawloptions_element_sleep_start')
         ?></label><input type="time" name="sleep_start" id="sleep-start"
             placeholder="HH:MM" value="<?=$data['sleep_start']?>"
-            style="width:140px;" />
+            style="width:140px;" >
         <label for="sleep_start"><?=tl('crawloptions_element_sleep_duration')
         ?></label><?php
         $this->view->helper("options")->render("sleep-duration",
@@ -177,7 +177,7 @@ class CrawloptionsElement extends Element
                     class="restrict-sites-by-url"
                     name="restrict_sites_by_url" value="true"
                     onclick="setDisplay('toggle', this.checked)" <?=
-                    $data['TOGGLE_STATE'] ?> /></div>
+                    $data['TOGGLE_STATE'] ?> ></div>
         <div id="toggle">
             <div class="top-margin"><label for="allowed-sites"><b><?=
             tl('crawloptions_element_allowed_to_crawl') ?></b></label> <?=
@@ -222,7 +222,7 @@ class CrawloptionsElement extends Element
                 <?php
                 if ($data['INJECT_SITES'] != "") {
                     ?>
-                    <input type="hidden" name="use_suggest" value="true" />
+                    <input type="hidden" name="use_suggest" value="true" >
                     <?php
                 }
             }
@@ -251,7 +251,7 @@ class CrawloptionsElement extends Element
         <label for="asleep_start"><?=tl('crawloptions_element_sleep_start')
         ?></label><input type="time" name="asleep_start" id="asleep-start"
             placeholder="HH:MM" value="<?=$data['sleep_start']?>"
-            style="width:140px;" />
+            style="width:140px;" >
         <label for="sleep_start"><?=tl('crawloptions_element_sleep_duration')
         ?></label><?php
         $this->view->helper("options")->render("asleep-duration",
diff --git a/src/views/elements/DisplayadvertisementElement.php b/src/views/elements/DisplayadvertisementElement.php
index 2d9d0d936..eff20832e 100644
--- a/src/views/elements/DisplayadvertisementElement.php
+++ b/src/views/elements/DisplayadvertisementElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Pushkar Umaranikar
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -63,7 +63,7 @@ class DisplayadvertisementElement extends Element
             ?>
             <div class="display-ad">
             <p>
-                <img alt="" src="<?= C\SHORT_BASE_URL . C\AD_LOGO ?>" />
+                <img alt="" src="<?= C\SHORT_BASE_URL . C\AD_LOGO ?>" >
                 <a href="<?= $destination_url ?>"
                    onclick="recordClick();" <?php if ($data["OPEN_IN_TABS"]) {
                       ?>target="_blank" rel="noopener"<?php }?>>
diff --git a/src/views/elements/EditclassifierElement.php b/src/views/elements/EditclassifierElement.php
index 33f33e3fc..bcc686201 100644
--- a/src/views/elements/EditclassifierElement.php
+++ b/src/views/elements/EditclassifierElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -67,21 +67,21 @@ class EditclassifierElement extends Element
             $data[C\CSRF_TOKEN]); ?>
         <h2><?= tl('editclassifier_element_edit_classifier') ?></h2>
         <form id="classifierForm" method="get">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageClassifiers" />
-        <input type="hidden" name="arg" value="editclassifier" />
-        <input type="hidden" name="update" value="update" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageClassifiers" >
+        <input type="hidden" name="arg" value="editclassifier" >
+        <input type="hidden" name="update" value="update" >
         <input type="hidden" name="class_label"
-            value="<?= $data['class_label'] ?>" />
+            value="<?= $data['class_label'] ?>" >
         <div class="top-margin">
         <label for="rename-label"><?=
             tl('editclassifier_element_classifier_label') ?></label>
             <input type="text" id="rename-label" name="rename_label"
                 class="adjacent-button-field"
                 value="<?= $data['class_label'] ?>"
-                maxlength="<?= C\NAME_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\NAME_LEN ?>" class="wide-field" >
             <button class="button-box" type="submit"><?=
                 tl('editclassifier_element_change') ?></button> <?=
                 $this->view->helper("helpbutton")->render(
@@ -147,7 +147,7 @@ class EditclassifierElement extends Element
                     <input type="text" maxlength="<?=C\LONG_NAME_LEN
                         ?>" id="label-docs-keywords"
                         class="adjacent-button-field"
-                        name="label_docs_keywords" />
+                        name="label_docs_keywords" >
                     <button class="button-box" type="submit"><?=
                         tl('editclassifier_element_load') ?></button>
                     <button class="button-box back-dark-gray" type="button"
diff --git a/src/views/elements/EditlocalesElement.php b/src/views/elements/EditlocalesElement.php
index d5427a92e..0b1cc678d 100644
--- a/src/views/elements/EditlocalesElement.php
+++ b/src/views/elements/EditlocalesElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -72,13 +72,13 @@ class EditlocalesElement extends Element
             "Editing Locales", $data[C\CSRF_TOKEN]) ?>
         </h2>
         <form id="editLocaleForm" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageLocales" />
-        <input type="hidden" name="arg" value="editstrings" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageLocales" >
+        <input type="hidden" name="arg" value="editstrings" >
         <input type="hidden" name="selectlocale" value="<?=
-            $data['CURRENT_LOCALE_TAG'] ?>" />
+            $data['CURRENT_LOCALE_TAG'] ?>" >
         <div class="slight-pad">
         <label for="show-strings"><b><?= tl('editlocales_element_show')
         ?></b></label><?php $this->view->helper("options")->render(
@@ -90,7 +90,7 @@ class EditlocalesElement extends Element
         placeholder="<?=tl('editlocales_element_string_filter') ?>"
         value="<?= $data['filter'] ?>" maxlength="<?= C\LONG_NAME_LEN ?>"
         onchange="this.form.submit()"
-        class="narrow-field" />
+        class="narrow-field" >
         </div>
         <span class="top-space-px">
         <button class="button-box"
@@ -114,13 +114,13 @@ class EditlocalesElement extends Element
                     "</td>$mobile_tr<td><input type='text' title='".
                     $data['DEFAULT_STRINGS'][$msg_id].
                     "' id='$msg_id' name='STRINGS[$msg_id]' ".
-                    "value='$msg_string' /></td></tr>");
+                    "value='$msg_string' ></td></tr>");
             } else {
                 e("<tr><td><label for='$msg_id'>$out_id</label></td>".
                     "$mobile_tr<td><input class='highlight' type='text' ".
                     "title='".$data['DEFAULT_STRINGS'][$msg_id].
                     "' id='$msg_id' name='STRINGS[$msg_id]' ".
-                    "value='$msg_string' /></td></tr>");
+                    "value='$msg_string' ></td></tr>");
             }
         }
         ?>
diff --git a/src/views/elements/EditmixElement.php b/src/views/elements/EditmixElement.php
index cb8b2e957..d0c54e4aa 100644
--- a/src/views/elements/EditmixElement.php
+++ b/src/views/elements/EditmixElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -61,26 +61,26 @@ class EditmixElement extends Element
             $data[C\CSRF_TOKEN]); ?>
         <h2><?= tl('editmix_element_edit_mix')?></h2>
         <form id="mixForm" method="get">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="mixCrawls" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="mixCrawls" >
         <?php
             if ($context) { ?>
-                <input type="hidden" name="context" value="search" />
+                <input type="hidden" name="context" value="search" >
                 <?php
             }
         ?>
-        <input type="hidden" name="arg" value="editmix" />
-        <input type="hidden" name="update" value="update" />
+        <input type="hidden" name="arg" value="editmix" >
+        <input type="hidden" name="update" value="update" >
         <input type="hidden" name="mix[TIMESTAMP]"
-            value="<?= $data['MIX']['TIMESTAMP'] ?>" />
+            value="<?= $data['MIX']['TIMESTAMP'] ?>" >
         <div class="top-margin"><label for="mix-name"><?=
             tl('editmix_element_mix_name') ?></label>
             <input type="text" id="mix-name" name="mix[NAME]"
                 value="<?php if (isset($data['MIX']['NAME'])) {
                     e($data['MIX']['NAME']); } ?>" maxlength="<?=
-                    C\NAME_LEN ?>" class="wide-field"/>
+                    C\NAME_LEN ?>" class="wide-field" >
         </div>
         <h3><?= tl('editmix_element_mix_components')?>
         <?= $this->view->helper("helpbutton")->render(
diff --git a/src/views/elements/Element.php b/src/views/elements/Element.php
index 42f1da35d..dc362b60f 100755
--- a/src/views/elements/Element.php
+++ b/src/views/elements/Element.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/FooterElement.php b/src/views/elements/FooterElement.php
index 337ac8318..8e834e507 100755
--- a/src/views/elements/FooterElement.php
+++ b/src/views/elements/FooterElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -102,7 +102,7 @@ class FooterElement extends Element
             ?>
             - <a href="<?=B\directUrl('bot') ?>"><?=
             tl('footer_element_bot') ?></a> <?php if ($_SERVER["MOBILE"]) {
-                e('<br /> ');
+                e('<br> ');
             }
         }
         if (tl('footer_element_developed_seek_quarry') !=
diff --git a/src/views/elements/GroupElement.php b/src/views/elements/GroupElement.php
index 16cd7c7b8..02706bc0c 100644
--- a/src/views/elements/GroupElement.php
+++ b/src/views/elements/GroupElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/GroupbarElement.php b/src/views/elements/GroupbarElement.php
index 55f765e5c..94e266d50 100644
--- a/src/views/elements/GroupbarElement.php
+++ b/src/views/elements/GroupbarElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -79,13 +79,14 @@ class GroupbarElement extends Element
                 $this->renderWikiNavButtons($data);
             }
             ?>
+        <div class="title-block">
         <h1><a href="<?=C\SHORT_BASE_URL ?><?php
             if ($logged_in) {
                 e("?$token_string");
             }
             ?>"><img src="<?= C\SHORT_BASE_URL . $logo ?>" alt="<?=
-            $this->view->logo_alt_text ?? "" ?>" /></a><span> -
-            <?php
+            $this->view->logo_alt_text ?? "" ?>" ></a></h1>
+            <div class='nav-span'> - <?php
         if (!empty($data['ACTIVITY_METHOD']) &&
             $data['ACTIVITY_METHOD'] == 'wiki') {
             $group_url = $this->getGroupUrl($data['GROUP']['GROUP_NAME'],
@@ -131,11 +132,11 @@ class GroupbarElement extends Element
                 }
             }
         } else if (($data['SUBTITLE'] ?? "") == C\PERSONAL_GROUP_PREFIX) {?>
-            <span><?=
+                <?=
                 $this->view->helper("iconlink")->renderButton(
                 $admin_url . $token_string . "&amp;a=manageAccounts",
                 "account_home");?> <?=
-                tl('groupbar_element_messages') ?></span><?php
+                tl('groupbar_element_messages') ?><?php
         } else {
             $this->view->helper("iconlink")->renderButton(
                 $admin_url . $token_string .
@@ -193,8 +194,8 @@ class GroupbarElement extends Element
             } else {
                 e(tl('groupbar_element_my_groups'));
             }
-        }?></span>
-        </h1>
+        }?></div>
+        </div>
         </div>
         </div>
         <?php
diff --git a/src/views/elements/GroupfeedElement.php b/src/views/elements/GroupfeedElement.php
index 2c1658886..8dd495639 100644
--- a/src/views/elements/GroupfeedElement.php
+++ b/src/views/elements/GroupfeedElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -131,13 +131,13 @@ class GroupfeedElement extends Element implements CrawlConstants
             tl('groupfeed_element_sort_order') . "'>&#8645;</span>");
         ?>
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-            value="<?= $data[C\CSRF_TOKEN] ?>" />
+            value="<?= $data[C\CSRF_TOKEN] ?>" >
         <input type="hidden" name="group_sort"
-            value="<?= $data["GROUP_SORT"] ?>" />
+            value="<?= $data["GROUP_SORT"] ?>" >
         <div class="filter-container">
         <input type="search" class="narrow-field" name='group_filter'
             placeholder="<?=tl('groupfeed_element_group_filter') ?>"
-            id='group-filter' value="<?=$data['GROUP_FILTER']?>" />
+            id='group-filter' value="<?=$data['GROUP_FILTER']?>" >
         </div>
         <button type="submit" class="button-box" ><?=
             tl('groupfeed_element_go')?></button>
@@ -282,7 +282,7 @@ class GroupfeedElement extends Element implements CrawlConstants
             }
             ?>
             <div class='<?="$group_result"?>'>
-            <span class="none"><hr /></span>
+            <span class="none"><hr ></span>
             <?php
             $subsearch = (isset($data["SUBSEARCH"])) ? $data["SUBSEARCH"] : "";
             $edit_list = ($page['ID'] == $page['PARENT_ID']) ?
@@ -377,7 +377,7 @@ class GroupfeedElement extends Element implements CrawlConstants
             <div id='result-<?= $page['ID'] ?>' >
             <div class="float-same center feed-icon-container">
             <img class="small-feed-user-icon" src="<?=$page['USER_ICON'] ?>"
-                alt="<?=tl('groupfeed_element_usericon') ?>" /><br /><?php
+                alt="<?=tl('groupfeed_element_usericon') ?>" ><br><?php
             if (!empty($page['USER_NAME'])) {
                 $user_dropdown = [
                     "javascript:this.preventDefault;" => $page['USER_NAME'],
@@ -517,7 +517,7 @@ class GroupfeedElement extends Element implements CrawlConstants
             if (isset($data[$field])) {
                 $hidden_form .= "<input type=\"hidden\" " .
                     "name=\"$form_field\" value=\"{$data[$field]}\" ".
-                    "/>\n";
+                    " >\n";
             }
         }
         ?>
@@ -531,23 +531,23 @@ class GroupfeedElement extends Element implements CrawlConstants
         <h2><b><?= tl('groupfeed_element_start_thread') ?></b></h2>
         </noscript>
         <div id='start-thread' class="light-gray-box top-bottom-margin">
-            <br />
+            <br>
             <form method="post" action="<?=C\SHORT_BASE_URL?>" ><?=
                 $hidden_form ?>
             <input type="hidden" name="c" value="<?=
-                $data['CONTROLLER'] ?>" />
-            <input type="hidden" name="a" value="groupFeeds" />
-            <input type="hidden" name="arg" value="newthread" />
+                $data['CONTROLLER'] ?>" >
+            <input type="hidden" name="a" value="groupFeeds" >
+            <input type="hidden" name="arg" value="newthread" >
             <input type="hidden" name="group_id" value="<?=
-                $group_id ?>" />
+                $group_id ?>" >
             <input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-                value="<?= $data[C\CSRF_TOKEN] ?>" />
+                value="<?= $data[C\CSRF_TOKEN] ?>" >
             <p><b><label for="title-start-thread" ><?=
                 tl("groupfeed_element_subject")
             ?></label></b></p>
             <p><input type="text" id="title-start-thread"
                 name="title" value=""  maxlength="<? C\TITLE_LEN ?>"
-                class="wide-field"/></p>
+                class="wide-field" ></p>
             <p><b><label for="description-start-thread" ><?=
                 tl("groupfeed_element_post")
             ?></label></b></p>
@@ -558,7 +558,7 @@ class GroupfeedElement extends Element implements CrawlConstants
             <div class="upload-box">
             <input type="file" id="file-start-thread"
                 name="file_start-thread"
-                class="none" multiple="multiple" /><?=
+                class="none" multiple="multiple" ><?=
                 tl('groupfeed_element_drag_textarea'); ?>
             <a href="javascript:elt('file-start-thread').click()">
             <?= tl('groupfeed_element_click_textarea'); ?></a>
@@ -607,7 +607,7 @@ class GroupfeedElement extends Element implements CrawlConstants
         foreach ($just_fields as $field => $form_field) {
             if (isset($data[$field])) {
                 $hidden_form .= "<input type=\"hidden\" ".
-                    "name=\"$form_field\" value=\"{$data[$field]}\" />\n";
+                    "name=\"$form_field\" value=\"{$data[$field]}\" >\n";
             }
         } ?>
         <div class="button-group-result">
@@ -624,13 +624,13 @@ class GroupfeedElement extends Element implements CrawlConstants
         <div id="add-comment">
         <form method="post" action="<?=C\SHORT_BASE_URL?>"><?= $hidden_form ?>
         <input type="hidden" name="c" value="<?=
-            $data['CONTROLLER'] ?>" />
-        <input type="hidden" name="a" value="groupFeeds" />
-        <input type="hidden" name="arg" value="addcomment" />
-        <input type="hidden" name="parent_id" value="<?=$thread_id; ?>" />
-        <input type="hidden" name="group_id" value="<?= $group_id?>" />
+            $data['CONTROLLER'] ?>" >
+        <input type="hidden" name="a" value="groupFeeds" >
+        <input type="hidden" name="arg" value="addcomment" >
+        <input type="hidden" name="parent_id" value="<?=$thread_id; ?>" >
+        <input type="hidden" name="group_id" value="<?= $group_id?>" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-            value="<?= $data[C\CSRF_TOKEN] ?>" />
+            value="<?= $data[C\CSRF_TOKEN] ?>" >
         <textarea class="short-text-area"
             id="comment-add-comment" name="description"
             data-buttons="all,!wikibtn-search,!wikibtn-heading,
@@ -638,14 +638,14 @@ class GroupfeedElement extends Element implements CrawlConstants
         <script>
         document.write('<div class="upload-box">' +
             '<input type="file" id="file-add-comment" ' +
-            'name="file_add-comment" class="none" multiple="multiple" />' +
+            'name="file_add-comment" class="none" multiple="multiple" >' +
             '<?= tl('groupfeed_element_drag_textarea') ?>' +
             '<a href="javascript:elt(\'file-add-comment\').click()"><?=
             tl('groupfeed_element_click_textarea') ?></a></div>');
         </script>
         <button class="button-box float-opposite"
             type="submit"><?= tl("groupfeed_element_save") ?>
-        </button><div>&nbsp;<br /><br /></div>
+        </button><div>&nbsp;<br><br></div>
         </form>
         </div>
         <script>
@@ -787,7 +787,7 @@ class GroupfeedElement extends Element implements CrawlConstants
         foreach ($just_fields as $field => $form_field) {
             if (isset($data[$field])) {
                 $hidden_form .= "'<input type=\"hidden\" ".
-                    "name=\"$form_field\" value=\"{$data[$field]}\" />' +\n";
+                    "name=\"$form_field\" value=\"{$data[$field]}\" >' +\n";
             }
         }
         $this->view->helper("fileupload")->setupFileUploadParams();
@@ -814,15 +814,15 @@ class GroupfeedElement extends Element implements CrawlConstants
                     '<form method="post" action="<?=C\SHORT_BASE_URL?>">' +
                     <?= $hidden_form ?>
                     '<input type="hidden" name="c" value="<?=
-                        $data['CONTROLLER'] ?>" />' +
-                    '<input type="hidden" name="a" value="groupFeeds" />' +
-                    '<input type="hidden" name="arg" value="addcomment" />' +
+                        $data['CONTROLLER'] ?>" >' +
+                    '<input type="hidden" name="a" value="groupFeeds" >' +
+                    '<input type="hidden" name="arg" value="addcomment" >' +
                     '<input type="hidden" name="parent_id" value="' +
-                        parent_id + '" />' +
+                        parent_id + '" >' +
                     '<input type="hidden" name="group_id" value="' +
-                        group_id + '" />' +
+                        group_id + '" >' +
                     '<input type="hidden" name="<?= C\CSRF_TOKEN ?>" '+
-                    'value="<?= $data[C\CSRF_TOKEN] ?>" />' +
+                    'value="<?= $data[C\CSRF_TOKEN] ?>" >' +
                     '<h2><b><label for="comment-'+ id +'" ><?=
                         tl("groupfeed_element_comment")
                     ?></label></b></h2>'+
@@ -833,13 +833,13 @@ class GroupfeedElement extends Element implements CrawlConstants
                     '></textarea>' +
                     '<div class="upload-box">' +
                     '<input type="file" id="file-' + id + '" name="file_' + id +
-                    '"  class="none" multiple="multiple" />' +
+                    '"  class="none" multiple="multiple" >' +
                     '<?= $drag_above_text ?>' +
                     '<a href="javascript:elt(\'file-' + id + '\').click()">'+
                     '<?= $click_link_text ?></a></div>' +
                     '<button class="button-box float-opposite" ' +
                     'type="submit"><?= tl("groupfeed_element_save") ?>'+
-                    '</button><div>&nbsp;<br /><br /></div>' +
+                    '</button><div>&nbsp;<br><br></div>' +
                     '</form>';
                 let comment_id = 'comment-' + id;
                 initializeFileHandler(comment_id , "file-" + id,
@@ -877,13 +877,13 @@ class GroupfeedElement extends Element implements CrawlConstants
                     '<form method="post"  action="<?=C\SHORT_BASE_URL?>">' +
                     <?= $hidden_form ?>
                     '<input type="hidden" name="c" value="<?=
-                        $data['CONTROLLER'] ?>" />' +
-                    '<input type="hidden" name="a" value="groupFeeds" />' +
-                    '<input type="hidden" name="arg" value="updatepost" />' +
+                        $data['CONTROLLER'] ?>" >' +
+                    '<input type="hidden" name="a" value="groupFeeds" >' +
+                    '<input type="hidden" name="arg" value="updatepost" >' +
                     '<input type="hidden" name="post_id" value="' +
-                        id + '" />' +
+                        id + '" >' +
                     '<input type="hidden" name="<?= C\CSRF_TOKEN ?>" '+
-                    'value="<?= $data[C\CSRF_TOKEN] ?>" />';
+                    'value="<?= $data[C\CSRF_TOKEN] ?>" >';
                     if (title) {
                         tmp += '<h2><b><?=
                             tl("groupfeed_element_edit_post")
@@ -895,12 +895,12 @@ class GroupfeedElement extends Element implements CrawlConstants
                         ?>><input type="text" name="title" id="title-'+
                         id + '" value="'+title+'" '+
                         ' ' + title_disabled + ' maxlength="<?= C\TITLE_LEN
-                        ?>" class="wide-field"/></p>';
+                        ?>" class="wide-field" ></p>';
                     } else {
                         let hidden_title = elt('hidden-title' + id);
                         if (hidden_title) {
                             tmp += '<input type="hidden" name="title" '+
-                                'value="' + hidden_title.innerHtml + '" />';
+                                'value="' + hidden_title.innerHtml + '" >';
                         }
                     }
                     tmp += '<p><b><label for="description-'+ id +'" ><?=
@@ -912,14 +912,14 @@ class GroupfeedElement extends Element implements CrawlConstants
                     '!wikibtn-slide" >' + description + '</textarea>'+
                     '<div class="upload-box">' +
                     '<input type="file" id="file-' + id + '" name="file_' + id +
-                    '"  class="none" multiple="multiple" />' +
+                    '"  class="none" multiple="multiple" >' +
                     '<?= $drag_above_text?>' +
                     '<a href="javascript:elt(\'file-' + id + '\').click()">'+
                     '<?=$click_link_text ?></a></div>' +
                     '<button class="button-box float-opposite" ' +
                     'type="submit"><?= tl("groupfeed_element_save")
                     ?></button>' +
-                    '<div><br /><br /></div>'+
+                    '<div><br><br></div>'+
                     '</form>';
                 elt(id).innerHTML = tmp;
                 let description_id = 'description-' + id;
diff --git a/src/views/elements/GroupmenuElement.php b/src/views/elements/GroupmenuElement.php
index 441e6ebb5..5a172f8bf 100644
--- a/src/views/elements/GroupmenuElement.php
+++ b/src/views/elements/GroupmenuElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/HeaderElement.php b/src/views/elements/HeaderElement.php
index 39c5c47e9..538634783 100644
--- a/src/views/elements/HeaderElement.php
+++ b/src/views/elements/HeaderElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/HelpElement.php b/src/views/elements/HelpElement.php
index 3cb9e61d3..898e5e244 100644
--- a/src/views/elements/HelpElement.php
+++ b/src/views/elements/HelpElement.php
@@ -3,7 +3,7 @@
  *  SeekQuarry/Yioop --
  *  Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- *  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ *  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  *  LICENSE:
  *
@@ -25,7 +25,7 @@
  *  @author Eswara Rajesh Pinapala epinapala@live.com
  *  @license https://www.gnu.org/licenses/ GPL3
  *  @link https://www.seekquarry.com/
- *  @copyright 2009 - 2022
+ *  @copyright 2009 - 2023
  *  @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/LanguageElement.php b/src/views/elements/LanguageElement.php
index 5342f1dde..36cd800e7 100755
--- a/src/views/elements/LanguageElement.php
+++ b/src/views/elements/LanguageElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/MachinelogElement.php b/src/views/elements/MachinelogElement.php
index 037d7195e..5a9fd97d3 100644
--- a/src/views/elements/MachinelogElement.php
+++ b/src/views/elements/MachinelogElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -58,26 +58,26 @@ class MachinelogElement extends Element
                 <div class="clear top-space">
                 <div class="filter-container">
                 <input type="hidden" name="<?=C\CSRF_TOKEN ?>"
-                    value="<?=$data[C\CSRF_TOKEN] ?>" />
-                <input type="hidden" name="c" value="admin" />
-                <input type="hidden" name="a" value="manageMachines" />
-                <input type="hidden" name="arg" value="log" />
-                <input type="hidden" name="time" value="<?=$data['time'] ?>" />
+                    value="<?=$data[C\CSRF_TOKEN] ?>" >
+                <input type="hidden" name="c" value="admin" >
+                <input type="hidden" name="a" value="manageMachines" >
+                <input type="hidden" name="arg" value="log" >
+                <input type="hidden" name="time" value="<?=$data['time'] ?>" >
                 <input type="hidden" name="name" value="<?=
-                    $data['LOG_NAME'] ?>" />
+                    $data['LOG_NAME'] ?>" >
                 <input type="hidden" name="id" value="<?=
-                    $data['LOG_ID'] ?? "" ?>" />
+                    $data['LOG_ID'] ?? "" ?>" >
                 <input type="hidden" name="channel" value="<?=
-                    $data['LOG_CHANNEL'] ?? 0 ?>" />
+                    $data['LOG_CHANNEL'] ?? 0 ?>" >
                 <input type="hidden" name="type" value="<?=
-                    $data['LOG_MACHINE_TYPE'] ?>" />
+                    $data['LOG_MACHINE_TYPE'] ?>" >
                 <?php
                 if (!empty($data['NO_REFRESH'])) { ?>
-                    <input type="hidden" name="NO_REFRESH" value="true" /><?php
+                    <input type="hidden" name="NO_REFRESH" value="true" ><?php
                 }?>
                 <input type="search" class="narrow-field" name='f'
                     placeholder="<?=tl('machinelog_element_filter_log') ?>"
-                    id='set-filter' value="<?=$data['filter']?>" />
+                    id='set-filter' value="<?=$data['filter']?>" >
                 </div>
                 <span class="top-space-px">
                 <button type="submit" class="button-box" ><?=
diff --git a/src/views/elements/ManageaccountElement.php b/src/views/elements/ManageaccountElement.php
index 4a95f6382..b013e5cec 100755
--- a/src/views/elements/ManageaccountElement.php
+++ b/src/views/elements/ManageaccountElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -69,7 +69,7 @@ class ManageaccountElement extends Element
             <div class="account-info">
             <h2><img class='home-icon'
                 src="<?= $data['USER']['USER_ICON'] ?>" alt="<?=
-                    tl('manageaccount_element_icon') ?>" />
+                    tl('manageaccount_element_icon') ?>" >
                 <div><?= $data['USERNAME'] ?></div> <?=
                     $icon_helper->renderButton($edit_or_no_url,
                     'account_settings'); ?>
@@ -112,7 +112,7 @@ class ManageaccountElement extends Element
                         <?php
                     }?></ul><?php
                 }
-                ?><br /><?php
+                ?><br><?php
                 if (!empty($data['GROUP_RECOMMENDATIONS'])) {
                     ?><b><?=tl('manageaccount_element_rec_groups')
                     ?></b><ul><?php
@@ -124,7 +124,7 @@ class ManageaccountElement extends Element
                         <?php
                     }?></ul><?php
                 }
-                ?><br /><?php
+                ?><br><?php
                 if (!empty($data['RESOURCE_RECOMMENDATIONS'])) {
                     ?><b><?=tl('manageaccount_element_rec_resources')
                     ?></b><ul><?php
@@ -182,17 +182,17 @@ class ManageaccountElement extends Element
         if ($is_mobile) {
             $row_col_span = 'class="center" style="width:300px"';
         } ?>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageAccount" />
-        <input type="hidden" name="arg" value="updateuser" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageAccount" >
+        <input type="hidden" name="arg" value="updateuser" >
         <table class="name-table">
         <tr>
         <td <?=$row_col_span?> class="user-icon-td" ><img
         class='user-icon' id='current-icon'
         src="<?= $data['USER']['USER_ICON'] ?>" alt="<?=
-            tl('manageaccount_element_icon') ?>" /><?php
+            tl('manageaccount_element_icon') ?>" ><?php
         $this->view->helper("fileupload")->render('current-icon',
             'user_icon', 'user-icon',  C\THUMB_SIZE, 'image',
             ['image/png', 'image/gif', 'image/jpeg']);
@@ -207,27 +207,27 @@ class ManageaccountElement extends Element
         <td><input type="text" id="user-name"
             name="user_name"  maxlength="<?= C\NAME_LEN ?>"
             value="<?= $data['USER']['USER_NAME'] ?>"
-            class="narrow-field" disabled="disabled" /></td>
+            class="narrow-field" disabled="disabled" ></td>
             </tr>
         <tr><th class="table-label"><label for="first-name"><?php
             e(tl('manageaccount_element_firstname')); ?>:</label></th>
         <td><input type="text" id="first-name"
             name="FIRST_NAME"  maxlength="<?= C\NAME_LEN?>"
             value="<?php e($data['USER']['FIRST_NAME']); ?>"
-            class="narrow-field" <?php e($disabled);?> /></td></tr>
+            class="narrow-field" <?php e($disabled);?> ></td></tr>
         <tr><th class="table-label"><label for="last-name"><?php
             e(tl('manageaccount_element_lastname')); ?>:</label></th>
         <td><input type="text" id="last-name"
             name="LAST_NAME"  maxlength="<?= C\NAME_LEN ?>"
             value="<?php e($data['USER']['LAST_NAME']); ?>"
-            class="narrow-field" <?php e($disabled);?> /></td></tr>
+            class="narrow-field" <?php e($disabled);?> ></td></tr>
         <tr><th class="table-label"><label for="e-mail"><?php
             e(tl('manageaccount_element_email')); ?>:</label></th>
         <td><input type="email" id="e-mail"
             name="EMAIL"  maxlength="<?= C\LONG_NAME_LEN ?>"
             <?php e($disabled);?>
             value="<?php e($data['USER']['EMAIL']); ?>"
-            class="narrow-field"/></td></tr>
+            class="narrow-field" ></td></tr>
         <tr>
         <th class="table-label"><label for="locale"><b><?=
             tl('options_element_language_label')
@@ -247,7 +247,7 @@ class ManageaccountElement extends Element
                         && $data['USER']['IS_BOT_USER'] == true) {
                             e("checked='checked'");
                     } ?>
-                />
+                >
             </td></tr><?php
             if ($data['USER']['IS_BOT_USER'] == true) { ?>
                 <tr><th class="table-label">
@@ -257,7 +257,7 @@ class ManageaccountElement extends Element
                     <td><input type="text" id="bot-unique-token"
                         name="BOT_TOKEN" value="<?php
                         e($data['USER']['BOT_TOKEN']); ?>"
-                        class="narrow-field" />
+                        class="narrow-field" >
                     </td>
                 </tr>
                 <tr>
@@ -268,7 +268,7 @@ class ManageaccountElement extends Element
                     <td><input type="text" id="bot-callback-url"
                         name="BOT_CALLBACK_URL" value="<?php
                         e($data['USER']['CALLBACK_URL']); ?>"
-                        class="narrow-field"/>
+                        class="narrow-field" >
                     </td>
                 </tr>
                 <?php
@@ -279,21 +279,21 @@ class ManageaccountElement extends Element
         e(tl('manageaccount_element_password'))?></a></label></th>
         <td><input type="password" id="password"
             name="password"  maxlength="<?= C\LONG_NAME_LEN
-            ?>" class="narrow-field"/>
+            ?>" class="narrow-field" >
         </td></tr>
         <?php if (isset($data['EDIT_PASSWORD'])) { ?>
         <tr><th class="table-label"><label for="new-password"><?php
             e(tl('manageaccount_element_new_password'))?></label></th>
             <td><input type="password" id="new-password"
                 name="new_password"  maxlength="<?=
-                C\LONG_NAME_LEN?>" class="narrow-field"/>
+                C\LONG_NAME_LEN?>" class="narrow-field" >
             </td></tr>
         <tr><th class="table-label"><label for="retype-password"><?php
             e(tl('manageaccount_element_retype_password'));
             ?></label></th>
             <td><input type="password" id="retype-password"
                 name="retype_password"  maxlength="<?=
-                C\LONG_NAME_LEN?>" class="narrow-field" />
+                C\LONG_NAME_LEN?>" class="narrow-field" >
             </td></tr>
             <?php
             $question_sets = [];
diff --git a/src/views/elements/ManageadvertisementsElement.php b/src/views/elements/ManageadvertisementsElement.php
index 3eb7058d8..fe316fe46 100644
--- a/src/views/elements/ManageadvertisementsElement.php
+++ b/src/views/elements/ManageadvertisementsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Pushkar Umaranikar
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -260,14 +260,14 @@ class ManageadvertisementsElement extends Element
                 "Manage Advertisements", $data[C\CSRF_TOKEN]). "</h2>");
         } ?>
         <form id="admin-form"  method="post" >
-            <input type="hidden" name="c" value="admin" />
+            <input type="hidden" name="c" value="admin" >
             <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?=
-                $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="a" value="manageAdvertisements"/>
-            <input type="hidden" name="arg" value="<?=$data['FORM_TYPE']?>" />
+                $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="a" value="manageAdvertisements" >
+            <input type="hidden" name="arg" value="<?=$data['FORM_TYPE']?>" >
             <?php
             if (!empty($data['context']) && $data['context'] == 'search') { ?>
-                <input type="hidden" name="context" value="search" />
+                <input type="hidden" name="context" value="search" >
                 <?php
             }
             ?>
@@ -305,7 +305,7 @@ class ManageadvertisementsElement extends Element
                 <?php
                 if (isset($data['AD_MIN_BID'])) {
                     e(' readonly="readonly"');
-                } ?> /><span class="gray smaller-font"
+                } ?> ><span class="gray smaller-font"
                 id="ad-name-count" ></span>
             </td>
             </tr>
@@ -348,7 +348,7 @@ class ManageadvertisementsElement extends Element
                 if (isset($data['AD_MIN_BID'])) {
                     e(' readonly="readonly"');
                 }
-                ?> /> <span class="gray smaller-font"
+                ?> > <span class="gray smaller-font"
                 id="ad-dest-count" ></span>
             </td></tr>
             <tr><th class="table-label"><label for="ad-duration"><?=
@@ -362,7 +362,7 @@ class ManageadvertisementsElement extends Element
                     $attributes['disabled'] ="disabled";
                     ?>
                     <input type="hidden" name="DURATION" value="<?=
-                        $data["DURATION"] ?>" />
+                        $data["DURATION"] ?>" >
                     <?php
                 }
                 $this->view->helper('options')->render('ad-duration',
@@ -400,7 +400,7 @@ class ManageadvertisementsElement extends Element
                     <input type="text" id='ad-min-bid' name="AD_MIN_BID"
                     value="<?= isset($data['AD_MIN_BID']) ?
                     $data['AD_MIN_BID']: "" ?>"
-                    class="narrow-field" disabled="disabled"/></td></tr>
+                    class="narrow-field" disabled="disabled" ></td></tr>
                 <tr><th class="table-label"><label for="expensive-word"><?=
                     tl('manageadvertisements_element_expensive_word') ?>
                 </label></th>
@@ -409,7 +409,7 @@ class ManageadvertisementsElement extends Element
                     name="EXPENSIVE_WORD"
                     value="<?=isset($data['EXPENSIVE_KEYWORD']) ?
                      $data['EXPENSIVE_KEYWORD']: "" ?>"
-                    class="narrow-field" disabled="disabled"/>
+                    class="narrow-field" disabled="disabled" >
                 </td></tr>
                 <?php
             }
@@ -420,7 +420,7 @@ class ManageadvertisementsElement extends Element
                 <div class="narrow-field center">
                 <input class="button-box" name="CALCULATE" value="<?=
                     tl('manageadvertisements_element_calculate_bid') ?>"
-                    type="submit"/></div></td></tr>
+                    type="submit" ></div></td></tr>
                 <?php
             }
             if ($edit_advertisement) {
@@ -433,7 +433,7 @@ class ManageadvertisementsElement extends Element
                     ?>" <?php
                     if ($data['FORM_TYPE'] == 'editadvertisement') {
                         e("id='focus-button'");
-                    }?> type="submit" />
+                    }?> type="submit" >
                 </td>
                 </tr>
                 <?php
@@ -449,7 +449,7 @@ class ManageadvertisementsElement extends Element
                     $data['BUDGET']:"";?>" class="narrow-field"
                     <?php if ($edit_advertisement) {
                         e('disabled="disabled"');
-                    } ?> />
+                    } ?> >
                 </td></tr>
                 <tr>
                 <td></td>
@@ -470,11 +470,11 @@ class ManageadvertisementsElement extends Element
                     ?>" <?php
                     if ($data['FORM_TYPE'] == 'editadvertisement') {
                         e("id='focus-button'");
-                    }?> type="submit" />
+                    }?> type="submit" >
                 <input class="button-box" id="purchase"
                     name="PURCHASE" value="<?=
                     tl('manageadvertisements_element_purchase')
-                    ?>" type="submit" />
+                    ?>" type="submit" >
                 </td>
                 </tr>
                 <?php
@@ -493,7 +493,7 @@ class ManageadvertisementsElement extends Element
             <div class="ad-preview">
                 <p><b><?=tl('manageadvertisements_element_preview')
                 ?>:</b></p>
-                <p class='start-ad'><img alt="" src="<?= C\AD_LOGO ?>" />
+                <p class='start-ad'><img alt="" src="<?= C\AD_LOGO ?>" >
                     <a id="ad-name-preview" href="./" class="ad-preview-anchor"
                         target="_blank" rel="noopener">
                     </a>
diff --git a/src/views/elements/ManageclassifiersElement.php b/src/views/elements/ManageclassifiersElement.php
index 2726dee28..8903d3132 100644
--- a/src/views/elements/ManageclassifiersElement.php
+++ b/src/views/elements/ManageclassifiersElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -113,7 +113,7 @@ class ManageclassifiersElement extends Element
             <?php
             foreach ($data['classifiers'] as $label => $classifier) { ?>
             <tr>
-                <td><b><?= $label ?></b><br />
+                <td><b><?= $label ?></b><br>
                     <span class='smaller-font'><?= date("d M Y H:i:s",
                         $classifier->timestamp) ?></span>
                 </td>
@@ -180,11 +180,11 @@ class ManageclassifiersElement extends Element
         <h2><?=tl('manageclassifiers_element_add_classifier')?> <?=
             $this->view->helper("helpbutton")->render(
                 "Page Classifiers", $data[C\CSRF_TOKEN]) ?></h2>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageClassifiers" />
-        <input type="hidden" name="arg" value="addclassifier" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageClassifiers" >
+        <input type="hidden" name="arg" value="addclassifier" >
         <div class="top-margin">
             <table class='name-table'>
             <tr><th>
@@ -192,7 +192,7 @@ class ManageclassifiersElement extends Element
             tl('manageclassifiers_element_classifier_name') ?></label></th><td>
             <input type="text" id="class-label"
                 name="name" value="" maxlength="<?= C\NAME_LEN?>"
-                class="wide-field adjacent-button-field"/>
+                class="wide-field adjacent-button-field" >
             <button class="button-box"  type="submit"><?=
                 tl('manageclassifiers_element_create_button') ?></button>
         </td></tr>
diff --git a/src/views/elements/ManagecrawlsElement.php b/src/views/elements/ManagecrawlsElement.php
index 2e22dc98c..f3d0e30c0 100755
--- a/src/views/elements/ManagecrawlsElement.php
+++ b/src/views/elements/ManagecrawlsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/ManagecreditsElement.php b/src/views/elements/ManagecreditsElement.php
index 2ca362c50..cc2235433 100644
--- a/src/views/elements/ManagecreditsElement.php
+++ b/src/views/elements/ManagecreditsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -258,12 +258,12 @@ class ManagecreditsElement extends Element
         </li>
         </ul>
         <div class='tab-menu-content'>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageCredits"/>
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageCredits" >
         <input type="hidden" id="credits-option" name="arg" value="">
-        <input type="hidden" id="card-token" name="CARD_TOKEN" value="" />
+        <input type="hidden" id="card-token" name="CARD_TOKEN" value="" >
         <?php
         $this->renderPurchaseCreditsTab($data) ?>
         <noscript>
@@ -314,7 +314,7 @@ class ManagecreditsElement extends Element
                 $data['SCRIPT'] .=
                     e(C\CreditConfig::$get_submit_purchase_script());
             } else {?>
-                <br /><span class='red'><?=
+                <br><span class='red'><?=
                     tl('managecredits_element_script_failure') ;
                 ?></span><?php
             }
@@ -351,7 +351,7 @@ class ManagecreditsElement extends Element
                 C\CreditConfig::getAttribute('card-number','name')
                 ?>="<?=
                 C\CreditConfig::getAttribute('card-number','value')
-                ?>" />
+                ?>" >
         </td></tr>
         <tr><th class="table-label"><label for="purchase-cvc"><?=
             tl('managecredit_element_cvc') ?>:
@@ -360,7 +360,7 @@ class ManagecreditsElement extends Element
         <input class="narrow-field" id="purchase-cvc"
             type="text" size="4" <?=
                 C\CreditConfig::getAttribute('cvc','name')?>="<?=
-                C\CreditConfig::getAttribute('cvc','value') ?>" />
+                C\CreditConfig::getAttribute('cvc','value') ?>" >
         </td></tr>
         <tr><th class="table-label"><label for="purchase-exp-month"><?=
             tl('managecredit_element_expiration') ?>:
@@ -434,7 +434,7 @@ class ManagecreditsElement extends Element
                 C\CreditConfig::getAttribute('redeem-card-number','name')
                 ?>="<?=
                 C\CreditConfig::getAttribute('card-number','value')
-                ?>" />
+                ?>" >
             </td></tr>
             <tr><th class="table-label"><label for="redeem-cvc"><?=
                 tl('managecredit_element_cvc') ?>:</label></th>
@@ -442,7 +442,7 @@ class ManagecreditsElement extends Element
             <input class="narrow-field" id="redeem-cvc"
                 type="text" size="4" <?=
                     C\CreditConfig::getAttribute('redeem-cvc','name')?>="<?=
-                    C\CreditConfig::getAttribute('cvc','value') ?>" />
+                    C\CreditConfig::getAttribute('cvc','value') ?>" >
             </td></tr>
             <tr><th class="table-label"><label for="redeem-exp-month"><?=
                 tl('managecredit_element_expiration') ?>:</label></th>
diff --git a/src/views/elements/ManagegroupsElement.php b/src/views/elements/ManagegroupsElement.php
index f18c0f6a5..6309b374d 100755
--- a/src/views/elements/ManagegroupsElement.php
+++ b/src/views/elements/ManagegroupsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Mallika Perepa (Creator), Chris Pollett (rewrote)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -151,16 +151,16 @@ class ManagegroupsElement extends Element
             tl('groupfeed_element_sort_order') . "'>&#8645;</span>");
         ?>
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-            value="<?= $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageGroups" />
-        <input type="hidden" name="context" value="join_groups" />
-        <input type="hidden" name="browse" value="true" />
+            value="<?= $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageGroups" >
+        <input type="hidden" name="context" value="join_groups" >
+        <input type="hidden" name="browse" value="true" >
         <input type="hidden" name="group_sort"
-            value="<?= $data["GROUP_SORT"] ?>" />
+            value="<?= $data["GROUP_SORT"] ?>" >
         <div class="filter-container">
         <input type="search" class="narrow-field" name='group_filter'
             placeholder="<?=tl('groupfeed_element_group_filter') ?>"
-            id='group-filter' value="<?=$data['GROUP_FILTER']?>" />
+            id='group-filter' value="<?=$data['GROUP_FILTER']?>" >
         </div>
         <button type="submit" class="button-box" ><?=
             tl('groupfeed_element_go')?></button>
@@ -203,17 +203,17 @@ class ManagegroupsElement extends Element
             "Create Group", $data[C\CSRF_TOKEN]). "</h2>");
         }
         ?>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageGroups" />
-        <input type="hidden" name="add_refer" value="0" />
-        <input type="hidden" name="arg" value="<?=$form_type ?>" />
-        <input type="hidden" name="context" value="<?=$data['CONTEXT'] ?>" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageGroups" >
+        <input type="hidden" name="add_refer" value="0" >
+        <input type="hidden" name="arg" value="<?=$form_type ?>" >
+        <input type="hidden" name="context" value="<?=$data['CONTEXT'] ?>" >
         <input type="hidden" id="visible-users" name="visible_users"
-            value="<?= $data['visible_users'] ?>" />
+            value="<?= $data['visible_users'] ?>" >
         <input type="hidden" name="group_id" value="<?=
-            $data['CURRENT_GROUP']['id'] ?>" />
+            $data['CURRENT_GROUP']['id'] ?>" >
         <table class="name-table">
         <tr><th class="table-label"><label for="group-name"><?=
             tl('managegroups_element_groupname') ?></label>:</th>
@@ -224,7 +224,7 @@ class ManagegroupsElement extends Element
                 if (!empty($data['CURRENT_GROUP']['name'])) {
                     e(' disabled="disabled" ');
                 }
-                ?> /></td><?php
+                ?> ></td><?php
         ?></tr><?php
         if ($editgroup) {?>
             <tr><th class="table-label"><label for="owner-name"><?=
@@ -232,7 +232,7 @@ class ManagegroupsElement extends Element
                 <td><input type="text" id="owner-name"
                     name="owner"  maxlength="<?= C\SHORT_TITLE_LEN ?>"
                     value="<?= $data['CURRENT_GROUP']['owner'] ?>"
-                    class="narrow-field"/></td></tr><?php
+                    class="narrow-field" ></td></tr><?php
         }?>
         <tr><th class="table-label"><label for="register-type"><?=
             tl('managegroups_element_register')?></label>:</th>
@@ -276,7 +276,7 @@ class ManagegroupsElement extends Element
                     if (isset($data['CURRENT_GROUP']['encryption'])) {
                         e(' disabled="disabled" ');
                     }
-                ?> /></td><?php
+                ?> ></td><?php
             }
             if ($creategroup) { ?>
             <td><?php
@@ -425,7 +425,7 @@ class ManagegroupsElement extends Element
                             "' class='user-id'".
                             " name='" . $user_array['USER_ID']. "' ".
                             (($is_owner) ? "disabled='disabled'": "").
-                            " value= " . $user_array['USER_ID'] . " />");
+                            " value= " . $user_array['USER_ID'] . " >");
                         e("</td><td><b><label for='user-" .
                         $user_array['USER_ID'] . "'>". $out_name.
                         "</label></b></td>");
@@ -508,7 +508,7 @@ class ManagegroupsElement extends Element
                                         tl('managegroups_element_filter')?>"
                                     name="user_filter" type="text"
                                     maxlength="<?= C\NAME_LEN ?>"
-                                    value='<?= $data['USER_FILTER'] ?>' />
+                                    value='<?= $data['USER_FILTER'] ?>' >
                                 </td>
                             <td class="left"><?php
                             if ($data['NUM_USERS_GROUP'] > $limit +
@@ -589,7 +589,7 @@ class ManagegroupsElement extends Element
             <td><a href="<?=$user_feed
                 ?>"><img class="home-icon" src="<?=
                 $group['user_icon']?>" alt="<?=
-                tl('groupfeed_element_usericon') ?>" /><br />
+                tl('groupfeed_element_usericon') ?>" ><br>
                 <?=$group['owner'] ?></a></td></tr>
         <tr><th class="table-label"><?=
             tl('managegroups_element_register')?>:</th>
@@ -637,28 +637,28 @@ class ManagegroupsElement extends Element
         ?>
         <h2><?= tl('managegroups_element_invite_users_group') ?></h2>
         <form id="admin-form" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageGroups" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageGroups" >
         <input type="hidden" name="arg" value="<?=
-            $data['FORM_TYPE']?>" />
+            $data['FORM_TYPE']?>" >
         <?php
             if (!empty($data['context'])) {
                 ?>
-                <input type="hidden" name="context" value="search" />
+                <input type="hidden" name="context" value="search" >
                 <?php
             }
         ?>
         <input type="hidden" name="group_id" value="<?=
-            $data['CURRENT_GROUP']['id'] ?>" />
+            $data['CURRENT_GROUP']['id'] ?>" >
         <div>
         <b><label for="group-name"><?=
             tl('managegroups_element_groupname') ?></label>:</b>
             <input type="text" id="group-name"
                 name="name"  maxlength="<?= C\SHORT_TITLE_LEN ?>"
                 value="<?= $data['CURRENT_GROUP']['name'] ?>"
-                class="narrow-field" disabled="disabled" />
+                class="narrow-field" disabled="disabled" >
         </div>
         <div>
         <b><label for="users-names"><?=
@@ -701,14 +701,14 @@ class ManagegroupsElement extends Element
         <b><label for='title-filter'><?=
         tl('managegroups_element_filter')?></label></b>
         <input type="text" class="narrow-field" name='filter'
-            id='title-filter' value="<?=$data['FILTER']?>" />
+            id='title-filter' value="<?=$data['FILTER']?>" >
         <input type="hidden" name='<?=C\CSRF_TOKEN?>'
-            value='<?=$data[C\CSRF_TOKEN]?>' />
-        <input type="hidden" name='arg' value='statistics' />
+            value='<?=$data[C\CSRF_TOKEN]?>' >
+        <input type="hidden" name='arg' value='statistics' >
         <input type="hidden" name='group_id' value='<?=
-            $data['CURRENT_GROUP']['id'] ?>' />
-        <input type="hidden" name='a' value='manageGroups' />
-        <input type="hidden" name='c' value='admin' />
+            $data['CURRENT_GROUP']['id'] ?>' >
+        <input type="hidden" name='a' value='manageGroups' >
+        <input type="hidden" name='c' value='admin' >
         <button type='submit' name='filter_go' id='focus-button'
             class="button-box"><?=tl('managegroups_element_go') ?></button>
         </div></form>
diff --git a/src/views/elements/ManagelocalesElement.php b/src/views/elements/ManagelocalesElement.php
index 4e5a4b5b8..e2a6a2af2 100644
--- a/src/views/elements/ManagelocalesElement.php
+++ b/src/views/elements/ManagelocalesElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -176,16 +176,16 @@ class ManagelocalesElement extends Element
         e("&nbsp;" . $this->view->helper("helpbutton")->render(
             "Add Locale", $data[C\CSRF_TOKEN]));?>
         </h2>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageLocales" />
-        <input type="hidden" name="arg" value="<?= $data['FORM_TYPE'] ?>" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageLocales" >
+        <input type="hidden" name="arg" value="<?= $data['FORM_TYPE'] ?>" >
         <?php
         if ($editlocale) {
         ?>
             <input type="hidden" name="selectlocale" value="<?=
-            $data['CURRENT_LOCALE']['localetag'] ?>" /><?php
+            $data['CURRENT_LOCALE']['localetag'] ?>" ><?php
         }
         ?>
         <table class="name-table">
@@ -199,7 +199,7 @@ class ManagelocalesElement extends Element
                     if ($editlocale) {
                         e(' disabled="disabled" ');
                     }
-                    ?> />
+                    ?> >
                 </td>
             </tr>
             <tr><th><label for="locale-tag"><?=
@@ -212,7 +212,7 @@ class ManagelocalesElement extends Element
                     e(' disabled="disabled" ');
                 }
                 ?>
-                class="narrow-field"/></td>
+                class="narrow-field" ></td>
             </tr>
             <tr><th><?=tl('managelocales_element_writingmodelabel')?></th>
             <td><?php $this->view->helper("options")->render(
@@ -230,7 +230,7 @@ class ManagelocalesElement extends Element
                     if ($data['CURRENT_LOCALE']['active'] > 0) {
                         e("checked='checked'");
                     }
-                    ?> />
+                    ?> >
             </td>
             </tr>
             <tr><td></td><td class="center"><button class="button-box" <?php
diff --git a/src/views/elements/ManagemachinesElement.php b/src/views/elements/ManagemachinesElement.php
index 66aafab5d..41b95362e 100644
--- a/src/views/elements/ManagemachinesElement.php
+++ b/src/views/elements/ManagemachinesElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/ManagerolesElement.php b/src/views/elements/ManagerolesElement.php
index e3d9d4a3d..62a2be202 100644
--- a/src/views/elements/ManagerolesElement.php
+++ b/src/views/elements/ManagerolesElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -172,11 +172,11 @@ class ManagerolesElement extends Element
             e("<h2>" . tl('manageroles_element_add_role') . "</h2>");
         }
         ?>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageRoles" />
-        <input type="hidden" name="arg" value="<?= $data['FORM_TYPE'] ?>" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageRoles" >
+        <input type="hidden" name="arg" value="<?= $data['FORM_TYPE'] ?>" >
         <table class="name-table">
         <tr><th class="table-label"><label for="role-name"><?=
             tl('manageroles_element_rolename') ?></label>:</th>
@@ -188,7 +188,7 @@ class ManagerolesElement extends Element
                 if ($editrole) {
                     e(' disabled="disabled" ');
                 }
-                ?> /><?php
+                ?> ><?php
                 if (!$editrole) {
                     ?><button class="button-box"
                     type="submit"><?= tl('manageroles_element_save')
@@ -236,7 +236,7 @@ class ManagerolesElement extends Element
                             name="activities[<?=$activity_array['ACTIVITY_ID']
                             ?>]" value="<?=
                             $activity_array['ALLOWED_ARGUMENTS']
-                            ?>" /><?=tl('manageroles_element_admin_has_all');
+                            ?>" ><?=tl('manageroles_element_admin_has_all');
                             ?></td>
                         <td class='back-light-gray'><?=
                             $icon_helper->renderLink(
@@ -247,7 +247,7 @@ class ManagerolesElement extends Element
                             name="activities[<?=$activity_array['ACTIVITY_ID']
                             ?>]" value="<?=
                             $activity_array['ALLOWED_ARGUMENTS']
-                            ?>" /><?=tl('manageroles_element_no_modifiers');
+                            ?>" ><?=tl('manageroles_element_no_modifiers');
                             ?></td>
                         <td><?= $icon_helper->renderLink($admin_url .
                             "a=manageRoles&amp;arg=deleteactivity&amp;$context".
@@ -261,7 +261,7 @@ class ManagerolesElement extends Element
                             name="activities[<?=$activity_array['ACTIVITY_ID']
                             ?>]" value="<?=
                             $activity_array['ALLOWED_ARGUMENTS']
-                            ?>" /><?php
+                            ?>" ><?php
                             if (empty($allowed_modifiers)) {
                                 e(tl('manageroles_element_no_modifiers'));
                             } else {
diff --git a/src/views/elements/ManageusersElement.php b/src/views/elements/ManageusersElement.php
index af5307dd1..ae31781f9 100644
--- a/src/views/elements/ManageusersElement.php
+++ b/src/views/elements/ManageusersElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -206,16 +206,16 @@ class ManageusersElement extends Element
             e("<h2>".tl('manageusers_element_add_user'). "</h2>");
         }
         ?>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="manageUsers" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="manageUsers" >
         <input type="hidden" name="arg" value="<?=
-            $data['FORM_TYPE'] ?>" />
+            $data['FORM_TYPE'] ?>" >
         <input type="hidden" id="visible-roles" name="visible_roles"
-            value="<?= $data['visible_roles'] ?>" />
+            value="<?= $data['visible_roles'] ?>" >
         <input type="hidden" id="visible-groups" name="visible_groups"
-            value="<?= $data['visible_groups'] ?>" />
+            value="<?= $data['visible_groups'] ?>" >
         <table class="name-table">
         <tr><th class="table-label"><label for="user-name"><?=
             tl('manageusers_element_username')?>:</label></th>
@@ -226,25 +226,25 @@ class ManageusersElement extends Element
                 if ($edituser) {
                     e(' disabled="disabled" ');
                 }
-                ?> /></td></tr>
+                ?> ></td></tr>
         <tr><th class="table-label"><label for="first-name"><?=
             tl('manageusers_element_firstname') ?>:</label></th>
             <td><input type="text" id="first-name"
                 name="first_name"  maxlength="<?= C\NAME_LEN ?>"
                 value="<?= $data['CURRENT_USER']['first_name'] ?>"
-                class="narrow-field"/></td></tr>
+                class="narrow-field" ></td></tr>
         <tr><th class="table-label"><label for="last-name"><?=
             tl('manageusers_element_lastname') ?>:</label></th>
             <td><input type="text" id="last-name"
                 name="last_name"  maxlength="<?=C\NAME_LEN ?>"
                 value="<?= $data['CURRENT_USER']['last_name'] ?>"
-                class="narrow-field"/></td></tr>
+                class="narrow-field" ></td></tr>
         <tr><th class="table-label"><label for="e-mail"><?=
             tl('manageusers_element_email') ?>:</label></th>
             <td><input type="email" id="e-mail"
                 name="email"  maxlength="<?= C\LONG_NAME_LEN ?>"
                 value="<?= $data['CURRENT_USER']['email'] ?>"
-                class="narrow-field"/></td></tr>
+                class="narrow-field" ></td></tr>
         <tr><th class="table-label"><label
                 for="update-userstatus-currentuser"><?=
                 tl('manageusers_element_status') ?>:</label></th>
@@ -253,7 +253,7 @@ class ManageusersElement extends Element
                     e("<div class='light-gray-box'><span class='gray'>".
                         $data['STATUS_CODES'][$data['CURRENT_USER']['status']].
                         "</span></div><input type='hidden' name='status' ".
-                        "value='".$data['CURRENT_USER']['status']."' />");
+                        "value='".$data['CURRENT_USER']['status']."' >");
                 } else {
                     $this->view->helper("options")->render(
                         "update-userstatus-currentuser",
@@ -334,7 +334,7 @@ class ManageusersElement extends Element
                         e("<tr><td><input type='checkbox' class='role-id' " .
                             "id='role-" . $role_array['ROLE_ID'] . "' " .
                             "name='" . $role_array['ROLE_ID']. "' " .
-                            " value='" . $role_array['ROLE_ID'] . "' />");
+                            " value='" . $role_array['ROLE_ID'] . "' >");
                         e("</td><td><b><label for='role-".
                             $role_array['ROLE_ID'] ."'>".
                             $role_array['ROLE_NAME'].
@@ -382,7 +382,7 @@ class ManageusersElement extends Element
                             ?>
                         <input class="very-narrow-field center"
                             name="role_filter" type="text" maxlength="<?=
-                            C\NAME_LEN ?>" value='<?=$data['ROLE_FILTER'] ?>' />
+                            C\NAME_LEN ?>" value='<?=$data['ROLE_FILTER'] ?>' >
                             <?php
                             if ($data['NUM_USER_ROLES'] > $limit +
                                 C\NUM_RESULTS_PER_PAGE) {
@@ -393,18 +393,18 @@ class ManageusersElement extends Element
                                 >&gt;&gt;</a>
                             <?php
                             }
-                        ?><br />
+                        ?><br>
                         <button type="submit" name="change_filter"
                             value="role"><?=tl('manageusers_element_filter')
                             ?></button>
-                        <br />&nbsp;
+                        <br>&nbsp;
                     </div>
                     <?php
                     }
                     ?>
                     <div class="center" >
                     <input type="text" name="selectrole" id='select-role'
-                        class="very-narrow-field" />
+                        class="very-narrow-field" >
                     <button type="submit"
                         class="button-box">
                         <label for='select-role'><?=
@@ -486,7 +486,7 @@ class ManageusersElement extends Element
                         e("<tr><td><input type='checkbox' class='group-id' " .
                             "id='group-" . $group_array['GROUP_ID'] . "' " .
                             "name='" . $group_array['GROUP_ID'] . "' " .
-                            " value='" . $group_array['GROUP_ID'] . "' />");
+                            " value='" . $group_array['GROUP_ID'] . "' >");
                         e("<td><b><label for='group-" .
                             $group_array['GROUP_ID'] . "'>".
                             $group_array['GROUP_NAME'].
@@ -528,7 +528,7 @@ class ManageusersElement extends Element
                         <input class="very-narrow-field center"
                             name="group_filter" type="text" maxlength="<?=
                             C\SHORT_TITLE_LEN ?>" value='<?=
-                            $data['GROUP_FILTER'] ?>' />
+                            $data['GROUP_FILTER'] ?>' >
                         <?php
                         if ($data['NUM_USER_GROUPS'] > $limit +
                             C\NUM_RESULTS_PER_PAGE) {
@@ -539,17 +539,17 @@ class ManageusersElement extends Element
                             ?>'>&gt;&gt;</a>
                             <?php
                         }
-                        ?><br />
+                        ?><br>
                         <button type="submit" name="change_filter"
                             value="group"><?= tl('manageusers_element_filter')
-                        ?></button><br />&nbsp;
+                        ?></button><br>&nbsp;
                     </div>
                     <?php
                     }
                     ?>
                     <div class="center" >
                     <input type="text" name="selectgroup" id='select-group'
-                        class="very-narrow-field" />
+                        class="very-narrow-field" >
                     <button type="submit"
                         class="button-box">
                         <label for='select-group'><?=
@@ -571,14 +571,14 @@ class ManageusersElement extends Element
                 onclick='this.select();'
                 name="password" maxlength="<?= C\LONG_NAME_LEN?>"
                 value="<?= $data['CURRENT_USER']['password'] ?>"
-                class="narrow-field"/></td></tr>
+                class="narrow-field" ></td></tr>
         <tr><th class="table-label"><label for="retype-password"><?=
             tl('manageusers_element_retype_password') ?>:</label></th>
             <td><input type="password" id="retype-password"
                 onclick='this.select();'
                 name="retypepassword" maxlength="<?= C\LONG_NAME_LEN ?>"
                 value="<?= $data['CURRENT_USER']['password'] ?>"
-                class="narrow-field"/></td></tr>
+                class="narrow-field" ></td></tr>
         <tr><td></td><td class="center"><button
             class="button-box" <?php
             if ($data['FORM_TYPE'] == 'edituser') {
diff --git a/src/views/elements/MediajobsElement.php b/src/views/elements/MediajobsElement.php
index bc1a5d95a..687124b80 100644
--- a/src/views/elements/MediajobsElement.php
+++ b/src/views/elements/MediajobsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/MixcrawlsElement.php b/src/views/elements/MixcrawlsElement.php
index c229aa493..f32537317 100644
--- a/src/views/elements/MixcrawlsElement.php
+++ b/src/views/elements/MixcrawlsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -104,8 +104,8 @@ class MixcrawlsElement extends Element
         <th colspan="3"><?= tl('mixcrawls_view_actions') ?></th></tr>
         <?php
         foreach ($data['available_mixes'] as $mix) { ?>
-            <tr><td><b><?= $mix['NAME'] ?></b><br />
-                <?= $mix['TIMESTAMP'] ?><br /><span class='smaller-font'><?=
+            <tr><td><b><?= $mix['NAME'] ?></b><br>
+                <?= $mix['TIMESTAMP'] ?><br><span class='smaller-font'><?=
                     date("d M Y H:i:s", $mix['TIMESTAMP'])
                 ?></span></td>
             <?php
@@ -132,9 +132,9 @@ class MixcrawlsElement extends Element
                                 $data['available_crawls'][
                                 $crawl_timestamp]."[$order] + K:".
                                 $component['KEYWORDS'].")");
-                            $plus = "<br /> + ";
+                            $plus = "<br> + ";
                         }
-                        e("}<br />");
+                        e("}<br>");
                     }
                 } else {
                     e(tl('mixcrawls_view_no_components'));
@@ -178,11 +178,11 @@ class MixcrawlsElement extends Element
         <h2><?= tl('mixcrawls_element_make_mix') ?>
         <?= $this->view->helper("helpbutton")->render(
             "Crawl Mixes", $data[C\CSRF_TOKEN]) ?></h2>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="mixCrawls" />
-        <input type="hidden" name="arg" value="createmix" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="mixCrawls" >
+        <input type="hidden" name="arg" value="createmix" >
         <div class="top-margin">
             <table class="name-table">
             <tr><th>
@@ -191,7 +191,7 @@ class MixcrawlsElement extends Element
             <input type="text" id="mix-name"
                 class="adjacent-button-field" name="NAME"
                 value="" maxlength="<?= C\NAME_LEN ?>"
-                    class="wide-field"/>
+                    class="wide-field" >
             <button class="button-box"  type="submit"><?=
             tl('mixcrawls_element_create_button') ?></button>
         </td></tr>
diff --git a/src/views/elements/PageoptionsElement.php b/src/views/elements/PageoptionsElement.php
index c771603ba..abc33012b 100644
--- a/src/views/elements/PageoptionsElement.php
+++ b/src/views/elements/PageoptionsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -93,13 +93,13 @@ class PageOptionsElement extends Element
         </li>
         </ul>
         <div class='tab-menu-content'>
-        <input type="hidden" name="c" value="admin" />
-        <input type="hidden" name="posted" value="posted" />
+        <input type="hidden" name="c" value="admin" >
+        <input type="hidden" name="posted" value="posted" >
         <input id='option-type' type="hidden"  name="option_type" value="<?=
-            $data['option_type'] ?>" />
+            $data['option_type'] ?>" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="pageOptions" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="pageOptions" >
         <?php
         $this->renderCrawlTimeTab($data); ?>
         <noscript>
@@ -267,7 +267,7 @@ class PageOptionsElement extends Element
             <?php if (!empty($data['CACHE_PAGES'])) {
                 e("checked='checked'");
              }?>
-            />
+            >
         </div>
         <div class="top-margin"><b><label for="page-recrawl-frequency"><?=
             tl('pageoptions_element_allow_recrawl') ?></label></b>
@@ -291,7 +291,7 @@ class PageOptionsElement extends Element
             </label></td><td><input type="checkbox" <?= $checked ?>
                 name="filetype[<?=$filetype ?>]"
                 id="filetype-<?= $filetype ?>-id"
-                value="true" /></td>
+                value="true" ></td>
             </tr>
        <?php
                 $cnt++;
@@ -340,12 +340,12 @@ class PageOptionsElement extends Element
                     <?= $class_checked ?>
                     aria-label="classifier-<?= $label ?>"
                     name="classifier[<?=$label ?>]"
-                    id="classifier-<?= $label ?>-id" value="true" /></td>
+                    id="classifier-<?= $label ?>-id" value="true" ></td>
                     <td class="check"><input type="checkbox"
                     <?= $rank_checked ?>
                     aria-label="ranker-<?= $label ?>"
                     name="ranker[<?= $label ?>]"
-                    id="ranker-<?= $label ?>-id" value="true" /></td>
+                    id="ranker-<?= $label ?>-id" value="true" ></td>
                 </tr>
             <?php
             }
@@ -378,7 +378,7 @@ class PageOptionsElement extends Element
                     id="<?= $plugin. "Plugin" ?>"
                     value = "<?= $plugin ?>"
                     <?= $plugin_data['checked'] ?>
-                    /><?php
+                    ><?php
                     if ($plugin_data['configure']) { ?>
                         [<a href="javascript:setDisplay('plugin-<?=
                             $plugin ?>', true);" ><?=
@@ -426,7 +426,7 @@ class PageOptionsElement extends Element
             <?php if (isset($data['WORD_SUGGEST']) &&
                 $data['WORD_SUGGEST']) {
                 e("checked='checked'");}?>
-            /></td></tr>
+            ></td></tr>
         <tr><td><label for="subsearch-link"><?=
             tl('pageoptions_element_subsearch_link')?></label></td><td>
             <input id='subsearch-link'
@@ -434,7 +434,7 @@ class PageOptionsElement extends Element
             <?php if (isset($data['SUBSEARCH_LINK']) &&
                 $data['SUBSEARCH_LINK']){
                 e("checked='checked'");}?>
-            /></td>
+            ></td>
         </tr>
         <tr><td><label for="signin-link"><?=
             tl('pageoptions_element_signin_link') ?></label></td><td>
@@ -442,7 +442,7 @@ class PageOptionsElement extends Element
             name="SIGNIN_LINK" value="true"
             <?php if (isset($data['SIGNIN_LINK']) &&
                 $data['SIGNIN_LINK']){ e("checked='checked'");}?>
-            />
+            >
         </td></tr>
         <tr><td><label for="continuous-scroll"><?=
             tl('pageoptions_element_continuous_scroll') ?></label></td>
@@ -451,7 +451,7 @@ class PageOptionsElement extends Element
             <?php if (isset($data['DEFAULT_CONTINUOUS_SCROLL'])
                 && $data['DEFAULT_CONTINUOUS_SCROLL']){
                 e("checked='checked'");}?>
-            /></td>
+            ></td>
         </tr>
         <tr><td><label for="serp-favicons"><?=
             tl('pageoptions_element_serp_favicons') ?></label></td>
@@ -460,7 +460,7 @@ class PageOptionsElement extends Element
             <?php if (isset($data['SERP_FAVICONS'])
                 && $data['SERP_FAVICONS']){
                 e("checked='checked'");}?>
-            /></td>
+            ></td>
         </tr>
         <tr>
         <td><label for="more-result"><?=
@@ -470,7 +470,7 @@ class PageOptionsElement extends Element
             <?php if (isset($data['MORE_RESULT']) &&
                 $data['MORE_RESULT']) {
                 e("checked='checked'");}?>
-            /></td></tr>
+            ></td></tr>
         </table></td>
         <td><table class="search-page-table">
         <tr>
@@ -481,14 +481,14 @@ class PageOptionsElement extends Element
             <?php if (isset($data['WORD_CLOUD']) &&
                 $data['WORD_CLOUD']) {
                 e("checked='checked'");}?>
-            /></td></tr>
+            ></td></tr>
         <tr><td><label for="cache-link"><?=
             tl('pageoptions_element_cache_link') ?></label>
         </td><td><input id='cache-link' type="checkbox"
             name="CACHE_LINK" value="true"
             <?php if (isset($data['CACHE_LINK']) && $data['CACHE_LINK']){
                 e("checked='checked'");}?>
-            /></td></tr>
+            ></td></tr>
         <tr><td><label for="similar-link"><?=
             tl('pageoptions_element_similar_link') ?></label></td>
         <td><input id='similar-link'
@@ -496,7 +496,7 @@ class PageOptionsElement extends Element
             <?php if (isset($data['SIMILAR_LINK']) &&
                 $data['SIMILAR_LINK']){
                 e("checked='checked'");}?>
-            /></td>
+            ></td>
         </tr>
         <tr><td><label for="in-link"><?=
             tl('pageoptions_element_in_link') ?></label></td>
@@ -504,14 +504,14 @@ class PageOptionsElement extends Element
             name="IN_LINK" value="true"
             <?php if (isset($data['IN_LINK']) && $data['IN_LINK']){
                 e("checked='checked'");}?>
-            /></td></tr>
+            ></td></tr>
         <tr><td><label for="ip-link"><?=
             tl('pageoptions_element_ip_link') ?></label></td>
         <td><input id='ip-link' type="checkbox"
             name="IP_LINK" value="true"
             <?php if (isset($data['IP_LINK']) && $data['IP_LINK']){
                 e("checked='checked'");}?>
-            /></td>
+            ></td>
         </tr>
         <tr><td><label for="result-score"><?=
             tl('pageoptions_element_result_score') ?></label></td>
@@ -519,7 +519,7 @@ class PageOptionsElement extends Element
             name="RESULT_SCORE" value="true"
             <?php if (isset($data['RESULT_SCORE']) && $data['RESULT_SCORE']){
                 e("checked='checked'");}?>
-            /></td>
+            ></td>
         </tr>
         </table></td>
         </tr></table>
@@ -531,37 +531,37 @@ class PageOptionsElement extends Element
             tl('pageoptions_element_host_keyword_bonus') ?></label></th><td>
             <input type="text" id="host-keyword-bonus" class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="HOST_KEYWORD_BONUS"
-                value="<?= $data['HOST_KEYWORD_BONUS']  ?>" /></td></tr>
+                value="<?= $data['HOST_KEYWORD_BONUS']  ?>" ></td></tr>
         <tr><th><label for="title-bonus"><?=
             tl('pageoptions_element_title_bonus') ?></label></th><td>
             <input type="text" id="title-bonus" class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="TITLE_BONUS"
-                value="<?= $data['TITLE_BONUS']  ?>" /></td></tr>
+                value="<?= $data['TITLE_BONUS']  ?>" ></td></tr>
         <tr><th><label for="path-keyword-bonus"><?=
             tl('pageoptions_element_path_keyword_bonus') ?></label></th><td>
             <input type="text" id="path-keyword-bonus" class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="PATH_KEYWORD_BONUS"
-                value="<?= $data['PATH_KEYWORD_BONUS']  ?>" /></td></tr>
+                value="<?= $data['PATH_KEYWORD_BONUS']  ?>" ></td></tr>
         <tr><th><label for="proximity-bonus"><?=
             tl('pageoptions_element_proximity_bonus')?></label></th><td>
             <input type="text" id="proximity-bonus" class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="PROXIMITY_BONUS"
-                value="<?= $data['PROXIMITY_BONUS'] ?>" /></td></tr>
+                value="<?= $data['PROXIMITY_BONUS'] ?>" ></td></tr>
         <tr><th><label for="cld-url-bonus"><?=
             tl('pageoptions_element_cld_url_bonus')?></label></th><td>
             <input type="text" id="cld-url-bonus" class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="CLD_URL_BONUS"
-                value="<?= $data['CLD_URL_BONUS'] ?>" /></td></tr>
+                value="<?= $data['CLD_URL_BONUS'] ?>" ></td></tr>
         <tr><th><label for="host-url-bonus"><?=
             tl('pageoptions_element_host_url_bonus')?></label></th><td>
             <input type="text" id="host-url-bonus" class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="HOST_URL_BONUS"
-                value="<?= $data['HOST_URL_BONUS'] ?>" /></td></tr>
+                value="<?= $data['HOST_URL_BONUS'] ?>" ></td></tr>
         <tr><th><label for="user-rank-bonus"><?=
             tl('pageoptions_element_user_rank_bonus')?></label></th><td>
             <input type="text" id="user-rank-bonus" class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="USER_RANK_BONUS"
-                value="<?= $data['USER_RANK_BONUS'] ?>" /></td></tr>
+                value="<?= $data['USER_RANK_BONUS'] ?>" ></td></tr>
         </table>
         <h2><?= tl('pageoptions_element_results_grouping_options') ?>
         <?= $this->view->helper("helpbutton")->render(
@@ -572,7 +572,7 @@ class PageOptionsElement extends Element
             <input type="text" id="min-results-to-group"
                 class="very-narrow-field"
                 maxlength="<?= C\NUM_FIELD_LEN ?>" name="MIN_RESULTS_TO_GROUP"
-                value="<?= $data['MIN_RESULTS_TO_GROUP'] ?>" /></td></tr>
+                value="<?= $data['MIN_RESULTS_TO_GROUP'] ?>" ></td></tr>
         </table>
         </div><?php
     }
@@ -601,7 +601,7 @@ class PageOptionsElement extends Element
             <div class="top-margin"><b><label for="test-url"><?=
                 tl('pageoptions_element_uri')?></label></b>
                 <input id='test-url' name='test_uri' value='<?=
-                $data["test_uri"]; ?>' />
+                $data["test_uri"]; ?>' >
             </div>
         </div>
         <div id='test-file-upload'>
diff --git a/src/views/elements/PaginationElement.php b/src/views/elements/PaginationElement.php
index 85e0a72fb..cd28f32d2 100644
--- a/src/views/elements/PaginationElement.php
+++ b/src/views/elements/PaginationElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/QuerystatsElement.php b/src/views/elements/QuerystatsElement.php
index 0fcaefe69..91966494e 100644
--- a/src/views/elements/QuerystatsElement.php
+++ b/src/views/elements/QuerystatsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -66,12 +66,12 @@ class QuerystatsElement extends Element
         <b><label for='query-filter'><?=
         tl('querystats_element_filter')?></label></b>
         <input type="text" class="narrow-field" name='filter'
-            id='query-filter' value="<?=$data['FILTER']?>" />
+            id='query-filter' value="<?=$data['FILTER']?>" >
         <input type="hidden" name='<?=C\CSRF_TOKEN?>'
-            value='<?=$data[C\CSRF_TOKEN]?>' />
-        <input type="hidden" name='a' value='manageCrawls' />
-        <input type="hidden" name='arg' value='querystats' />
-        <input type="hidden" name='c' value='admin' />
+            value='<?=$data[C\CSRF_TOKEN]?>' >
+        <input type="hidden" name='a' value='manageCrawls' >
+        <input type="hidden" name='arg' value='querystats' >
+        <input type="hidden" name='c' value='admin' >
         <button type='submit'
             class="button-box"><?=tl('querystats_element_go') ?></button>
         </div></form>
diff --git a/src/views/elements/ResultseditorElement.php b/src/views/elements/ResultseditorElement.php
index d2d646722..fa911df83 100644
--- a/src/views/elements/ResultseditorElement.php
+++ b/src/views/elements/ResultseditorElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -102,13 +102,13 @@ class ResultsEditorElement extends Element
         "Edit Search Results", $data[C\CSRF_TOKEN]) ?></h2>
         <form id="urlUpdateForm" method="post" >
         <div  class="top-margin">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="resultsEditor" /><?php
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="resultsEditor" ><?php
         if (!empty($data['ID'])) { ?>
             <input type="hidden" name="ID" value="<?=
-                $data['ID'] ?>" /><?php
+                $data['ID'] ?>" ><?php
         }?>
         <b><label for="urlfield"><?=
             tl('resultseditor_element_page_url')?></label></b>
@@ -116,7 +116,7 @@ class ResultsEditorElement extends Element
             name="URL"  class="extra-wide-field adjacent-button-field <?=
             ($edit_url_mode) ? 'gray' : "" ?>" value='<?=$data["URL"] ?>'
             <?= ($edit_url_mode) ? 'readonly="readonly" ' : "" ?>
-            />
+            >
         <?php
         if (!$edit_url_mode) { ?>
             <button class="button-box" name='arg' value='loadurl'
@@ -135,7 +135,7 @@ class ResultsEditorElement extends Element
                 tl('resultseditor_element_page_title')?></label></b>
             <input type="text" id="titlefield"
                 name="TITLE"  class="extra-wide-field" value='<?=$data["TITLE"]
-                ?>' />
+                ?>' >
             </div>
             <div class="top-margin" id='description-div'><label
                 for="descriptionfield"><b><?=
@@ -163,12 +163,12 @@ class ResultsEditorElement extends Element
         <?=$this->view->helper("helpbutton")->render(
             "Query Result Mappings", $data[C\CSRF_TOKEN]) ?></h2>
         <form id="knowledgeForm" method="post" >
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="resultsEditor" />
-        <input type="hidden" name="arg" value="editquerymap" />
-        <input type="hidden" name="posted" value="posted" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="resultsEditor" >
+        <input type="hidden" name="arg" value="editquerymap" >
+        <input type="hidden" name="posted" value="posted" >
         <div class="top-margin">
         <b><label for="querymapfield"><?=
             tl('resultseditor_element_query')?></label></b>
@@ -213,19 +213,19 @@ class ResultsEditorElement extends Element
         <?=$this->view->helper("helpbutton")->render(
             "Knowledge Wiki Results", $data[C\CSRF_TOKEN]) ?></h2>
         <form id="knowledgeForm" method="post" >
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="resultsEditor" />
-        <input type="hidden" name="arg" value="editkwiki" />
-        <input type="hidden" name="posted" value="posted" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="resultsEditor" >
+        <input type="hidden" name="arg" value="editkwiki" >
+        <input type="hidden" name="posted" value="posted" >
         <div class="top-margin">
         <b><label for="queryfield"><?=
             tl('resultseditor_element_query')?></label></b>
         <input type="text" id="queryfield"
             name="QUERY"  class="extra-wide-field adjacent-button-field"
             value='<?=
-            (empty($data["QUERY"])) ? "" : $data["QUERY"];?>' /><?php
+            (empty($data["QUERY"])) ? "" : $data["QUERY"];?>' ><?php
         if (!$edit_kwiki_mode) { ?>
             <button class="button-box" name='arg' value='loadkwiki'
                 type="submit" ><?= tl('resultseditor_element_load_page')
diff --git a/src/views/elements/ScrapersElement.php b/src/views/elements/ScrapersElement.php
index cfe518f9a..9a3fda59e 100644
--- a/src/views/elements/ScrapersElement.php
+++ b/src/views/elements/ScrapersElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -97,7 +97,7 @@ class ScrapersElement extends Element
                 urlencode($scraper['NAME'])); ?>
             <tr>
                 <td>
-                <b><?= $scraper['NAME'] ?></b><br />
+                <b><?= $scraper['NAME'] ?></b><br>
                 <b><?=tl('scrapers_element_signature') ?></b>
                 <pre><?=$scraper['SIGNATURE'] ?></pre>
                 <b><?=tl('scrapers_element_priority') ?></b>
@@ -144,16 +144,16 @@ class ScrapersElement extends Element
         }
         ?>
         <form id="admin-form" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="scrapers" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="scrapers" >
         <input type="hidden" name="arg" value="<?=
-            $data['FORM_TYPE']?>" />
+            $data['FORM_TYPE']?>" >
         <?php
         if ($data['FORM_TYPE'] == "edit") {
             ?>
-            <input type="hidden" name="id" value="<?= $data['id']?>" />
+            <input type="hidden" name="id" value="<?= $data['id']?>" >
             <?php
         }
         $test_url = htmlentities(B\controllerUrl('admin', true)) .
@@ -175,7 +175,7 @@ class ScrapersElement extends Element
             <input type="text" id="scrapers-signature" name="signature"
                 value="<?=$data['CURRENT_SCRAPER']['signature'] ?>"
                 maxlength="<?=C\MAX_URL_LEN ?>"
-                class="wide-field" /></td></tr>
+                class="wide-field" ></td></tr>
         <tr><td><label for="scraper-priority"><b><?=
             tl('scrapers_element_priority')?></b></label></td><td>
             <?php $this->view->helper("options")->render("scraper-priority",
@@ -189,7 +189,7 @@ class ScrapersElement extends Element
                 value=
                 "<?=$data['CURRENT_SCRAPER']['text_path']?>"
                 maxlength="<?=C\MAX_URL_LEN ?>"
-                class="wide-field" /></td></tr>
+                class="wide-field" ></td></tr>
         <tr><td><label for="scrapers-delete-paths"><b><?=
             tl('scrapers_element_delete_paths')?></b></label></td><td>
             <textarea class="short-text-area" id="scrapers-delete-paths"
diff --git a/src/views/elements/SearchElement.php b/src/views/elements/SearchElement.php
index 7b8ee66df..b31a584be 100644
--- a/src/views/elements/SearchElement.php
+++ b/src/views/elements/SearchElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -139,7 +139,7 @@ class SearchElement extends Element implements CrawlConstants
             <div class="continuous-result-separator"><?=
                 $data['LIMIT'] ?></div>
             <hr id='limit-<?=$data['LIMIT'] ?>' data-total='<?=
-                $data['TOTAL_ROWS'] ?>' />
+                $data['TOTAL_ROWS'] ?>' >
             <?php
         }
         if (!empty($data['BEST_ANSWER'])) {
@@ -154,7 +154,7 @@ class SearchElement extends Element implements CrawlConstants
             <div class='no-search-results'>
             <?=tl('search_element_no_results') ?><?php
             if ($can_edit_results) {
-                e("<br />");
+                e("<br>");
                 $add_result = B\controllerUrl("admin", true) .
                     $token_string . "a=resultsEditor&amp;URL=no_result".
                     "&amp;MAP_QUERY=" . $data['QUERY'] .
@@ -240,7 +240,7 @@ class SearchElement extends Element implements CrawlConstants
                 !empty($page[self::FAVICON_URL])) {
                 ?><img class="result-fav" src="<?=B\serpIconUrl(
                     $page[self::FAVICON_URL], $page[self::CRAWL_TIME]);
-                ?>" /><?php
+                ?>" ><?php
             }?>
             <span class="echo-link" <?=$subtitle ?>><?=
                 UrlParser::simplifyUrl($url, 100);
@@ -352,7 +352,7 @@ class SearchElement extends Element implements CrawlConstants
                         }
                     }
                 }
-                if ($_SERVER["MOBILE"] && $aux_link_flag) {e("<br />");}
+                if ($_SERVER["MOBILE"] && $aux_link_flag) {e("<br>");}
                 if (!C\nsdefined("RESULT_SCORE") || C\RESULT_SCORE) {
                     if (!empty($page[self::SCORE])) {
                         ?><span title="<?php
@@ -405,7 +405,7 @@ class SearchElement extends Element implements CrawlConstants
                 && $page[self::THUMB] != 'NULL') {
                 if (empty($page[self::IS_VIDEO])) {
                     ?><img src="<?= $page[self::THUMB] ?>"
-                    loading="lazy" alt="<?=title ?>" /><?php
+                    loading="lazy" alt="<?=title ?>" ><?php
                     $is_video = false;
                     $is_image = true;
                 } else {
@@ -499,14 +499,14 @@ class SearchElement extends Element implements CrawlConstants
         <?php
         if (isset($data["SUBSEARCH"]) && $data["SUBSEARCH"] != "") {
             ?><input type="hidden" name="s" value="<?=
-            $data['SUBSEARCH'] ?>" /><?php
+            $data['SUBSEARCH'] ?>" ><?php
         }
         if ($logged_in) { ?>
             <input id="csrf-token" type="hidden" name="<?= C\CSRF_TOKEN ?>"
-                value="<?= $data[C\CSRF_TOKEN] ?>" /><?php
+                value="<?= $data[C\CSRF_TOKEN] ?>" ><?php
         } ?>
         <input id="its-value" type="hidden" name="its" value="<?=
-            $data['its'] ?>" />
+            $data['its'] ?>" >
         <input type="search" autocapitalize="none" autocorrect="off" <?php
             if (C\WORD_SUGGEST) { ?>
                 autocomplete="off"
@@ -515,7 +515,7 @@ class SearchElement extends Element implements CrawlConstants
             id="query-field" name="q" value="<?php
             if (isset($data['QUERY']) && !isset($data['NO_QUERY'])) {
                 e(urldecode($data['QUERY']));} ?>"
-            placeholder="<?= tl('search_element_input_placeholder') ?>"/>
+            placeholder="<?= tl('search_element_input_placeholder') ?>" >
         <?= $this->view->helper("iconlink")->renderFormButton("reset",
             "reset", false, "search-reset-button"); ?>
         <?= $this->view->helper("iconlink")->renderFormButton("submit",
diff --git a/src/views/elements/SearchbarElement.php b/src/views/elements/SearchbarElement.php
index 15a8521e6..bf3a74a4d 100644
--- a/src/views/elements/SearchbarElement.php
+++ b/src/views/elements/SearchbarElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -77,7 +77,7 @@ class SearchbarElement extends Element
             <a href="<?= C\SHORT_BASE_URL ?><?php if ($logged_in) {
                 e("?".http_build_query($query_parts));
                 } ?>"><img src="<?php e($logo); ?>"
-                    alt="<?=tl('searchbar_element_title')?>" /></a><?php
+                    alt="<?=tl('searchbar_element_title')?>" ></a><?php
             $subsearch_shift = "";
             if (!empty($data['SUBSEARCH'])) {
                 $key = array_search($data['SUBSEARCH'],
@@ -97,14 +97,14 @@ class SearchbarElement extends Element
             <span class="<?=$subsearch_shift?>">
             <?php if (isset($data["SUBSEARCH"]) && $data["SUBSEARCH"] != "") {
                 ?><input type="hidden" name="s" value="<?=
-                $data['SUBSEARCH'] ?>" /><?php
+                $data['SUBSEARCH'] ?>" ><?php
             }
             if ($logged_in) {
                 ?><input id="csrf-token" type="hidden" name="<?=
-                    C\CSRF_TOKEN ?>" value="<?= $data[C\CSRF_TOKEN] ?>" /><?php
+                    C\CSRF_TOKEN ?>" value="<?= $data[C\CSRF_TOKEN] ?>" ><?php
             } ?>
             <input id="its-value" type="hidden" name="its" value="<?=
-                $data['its'] ?>" />
+                $data['its'] ?>" >
             <input type="search" autocapitalize="none" autocorrect="off" <?php
                 if (C\WORD_SUGGEST) { ?>
                   autocomplete="off"
@@ -114,7 +114,7 @@ class SearchbarElement extends Element
                 if (isset($data['QUERY']) && !isset($data['NO_QUERY'])) {
                     e(urldecode($data['QUERY'])); } ?>"
                 placeholder="<?= tl('searchbar_element_input_placeholder')
-                ?>" />
+                ?>" >
             <?=$this->view->helper("iconlink")->renderFormButton("reset",
                 "reset", false, "search-reset-button"); ?>
             <?= $this->view->helper("iconlink")->renderFormButton("submit",
diff --git a/src/views/elements/SearchcalloutElement.php b/src/views/elements/SearchcalloutElement.php
index 4133760ae..998ca367a 100644
--- a/src/views/elements/SearchcalloutElement.php
+++ b/src/views/elements/SearchcalloutElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/SearchmenuElement.php b/src/views/elements/SearchmenuElement.php
index fc6a7e276..3611b598b 100644
--- a/src/views/elements/SearchmenuElement.php
+++ b/src/views/elements/SearchmenuElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -107,11 +107,11 @@ class SearchmenuElement extends Element
             tl('searchmenu_element_searchsettings')?></h2>
             <form id='settings-form' method="post"><?php
             if (!empty($data['QUERY'])) { ?>
-                <input type="hidden" name='q' value="<?=$data['QUERY'] ?>"/>
+                <input type="hidden" name='q' value="<?=$data['QUERY'] ?>" >
                 <?php
             }
             if (!empty($data['SUBSEARCH'])) { ?>
-                <input type="hidden" name='s' value="<?=$data['SUBSEARCH'] ?>"/>
+                <input type="hidden" name='s' value="<?=$data['SUBSEARCH'] ?>" >
                 <?php
             }
             ?>
@@ -186,14 +186,14 @@ class SearchmenuElement extends Element
                     name="open_in_tabs" value="true"
                     <?php  if (!empty($data['OPEN_IN_TABS'])) {
                         ?>checked='checked'<?php
-                    } ?> /></li>
+                    } ?> ></li>
             <li><label for="safe-search"><b><?=
                 tl('searchmenu_element_safe_search') ?></b></label>
                 <input type="checkbox" id="safe-search" name="safe_search"
                     value="true" <?php  if (isset($data['SAFE_SEARCH']) &&
                         $data['SAFE_SEARCH'] == 'true') {
                         ?>checked='checked'<?php
-                    } ?> /></li>
+                    } ?> ></li>
             <li class="center no-bullet"><button class="small-font"
                 type="submit"><?=tl('searchmenu_element_save') ?></button></li>
             </ul>
diff --git a/src/views/elements/SearchsourcesElement.php b/src/views/elements/SearchsourcesElement.php
index 41b1fef84..bf6491973 100644
--- a/src/views/elements/SearchsourcesElement.php
+++ b/src/views/elements/SearchsourcesElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -238,11 +238,11 @@ class SearchsourcesElement extends Element
                     <b><?= $source['NAME'] ?></b>
                     <?php
                 }
-                ?><br />
+                ?><br>
                     <b><?=tl('searchsources_element_sourcetype'); ?></b>
-                    <?= $data['SOURCE_TYPES'][$source['TYPE']] ?><br />
+                    <?= $data['SOURCE_TYPES'][$source['TYPE']] ?><br>
                     <b><?=tl('searchsources_element_locale_tag'); ?></b>
-                    <?= $source['LANGUAGE'] ?><br />
+                    <?= $source['LANGUAGE'] ?><br>
                     <b><?=($is_feed || $is_trending_value) ?
                         tl('searchsources_element_category') :
                             (($source['TYPE'] == "description_source") ?
@@ -254,13 +254,13 @@ class SearchsourcesElement extends Element
                         e($data['PODCAST_EXPIRES'][$source['CATEGORY']]);
                     } else {
                         e($source['CATEGORY']);
-                    }?><br />
+                    }?><br>
                     <b><?= tl('searchsources_element_url') ?></b>
                     <pre><?= htmlentities($source['SOURCE_URL'])
                     ?></pre><?php
                     foreach ($current_aux_fields as
                         $aux_name => $aux_index) {
-                        ?><b><?=$aux_name ?></b><br />
+                        ?><b><?=$aux_name ?></b><br>
                         <pre><?=
                         htmlentities($aux_info_parts[$aux_index] ?? "")
                         ?></pre><?php
@@ -360,7 +360,7 @@ class SearchsourcesElement extends Element
                         $trending_parts[2] ?? "");
                     $query_format = "<b>".
                         tl('searchsources_element_trend_sort') .
-                        "</b> " . $search_sort. "<br />" . $landing_priority;
+                        "</b> " . $search_sort. "<br>" . $landing_priority;
                 } else {
                     $search_identifier = $search['INDEX_IDENTIFIER'];
                     $search_name = $data["SEARCH_LISTS"]
@@ -368,12 +368,12 @@ class SearchsourcesElement extends Element
                     $search_per_page = $search['PER_PAGE'];
                     $query_format = "<b>".tl('searchsources_element_query') .
                         "</b> " . trim(preg_replace('/highlight:\w+(\b)/ui',
-                        '$1', $search['DEFAULT_QUERY'])) . "<br />" .
+                        '$1', $search['DEFAULT_QUERY'])) . "<br>" .
                         $landing_priority;
                 }
                 ?>
                 <tr><td><b><?=$search['FOLDER_NAME'] ?></b></td>
-                <td><?= "<b>$search_name</b><br />".
+                <td><?= "<b>$search_name</b><br>".
                     $search_identifier ?></td><?php
                 if (!$_SERVER["MOBILE"]) {
                     ?>
@@ -426,7 +426,7 @@ class SearchsourcesElement extends Element
                 'id="channel-path" name="channel_path" '+
                 'value="' + channel_string + '" ' +
                 'maxlength="<?= $sub_aux_len ?>" ' +
-                'class="wide-field" />' + channel_required;
+                'class="wide-field" >' + channel_required;
             aux_inner = '<textarea class="short-text-area" ' +
                 'id="channel-path" name="channel_path">' +
                 channel_string +'</textarea>' + channel_required;
@@ -598,16 +598,16 @@ class SearchsourcesElement extends Element
                 "Media Sources", $data[C\CSRF_TOKEN]) ?>
             </h2><?php
         }?>
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="searchSources" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="searchSources" >
         <input type="hidden" name="arg" value="<?=
-            $data['SOURCE_FORM_TYPE'] ?>" />
+            $data['SOURCE_FORM_TYPE'] ?>" >
         <?php
         if ($data['SOURCE_FORM_TYPE'] == "editsource") {
             ?>
-            <input type="hidden" name="ts" value="<?= $data['ts'] ?>" />
+            <input type="hidden" name="ts" value="<?= $data['ts'] ?>" >
             <?php
         }
         ?>
@@ -635,7 +635,7 @@ class SearchsourcesElement extends Element
             <input type="url" id="source-url" name="source_url"
                 value="<?=$data['CURRENT_SOURCE']['source_url'] ?>"
                 maxlength="<?=C\MAX_URL_LEN ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['source_url'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -658,7 +658,7 @@ class SearchsourcesElement extends Element
             <input type="text" id="source-category" name="category"
                 value="<?= (empty($data['CURRENT_SOURCE']['category'])) ?
                     "news" : $data['CURRENT_SOURCE']['category'] ?>"
-                maxlength="<?= $aux_info_len ?>" class="wide-field" /><?php
+                maxlength="<?= $aux_info_len ?>" class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['category'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -676,7 +676,7 @@ class SearchsourcesElement extends Element
                 value="<?= ($data["SOURCE_FORM_TYPE"] == "editsource") ?
                     $data['CURRENT_SOURCE']['category'] : "" ?>"
                 maxlength="<?= $sub_aux_len ?>"
-                class="wide-field" /></td></tr>
+                class="wide-field" ></td></tr>
         <tr><td colspan="2" class="instruct"><span id='instruct'><?=
             tl('searchsources_element_feed_instruct')
             ?></span><span id='instruct-regex'><?=
@@ -693,7 +693,7 @@ class SearchsourcesElement extends Element
                 id="channel-path" name="channel_path"
                 value="<?= $data['CURRENT_SOURCE']['channel_path'] ?>"
                 maxlength="<?= $sub_aux_len ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['channel_path'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -708,7 +708,7 @@ class SearchsourcesElement extends Element
             <input type="text" id="item-path" name="item_path"
                 value="<?=$data['CURRENT_SOURCE']['item_path'] ?>"
                 maxlength="<?= $sub_aux_len ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['item_path'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -721,7 +721,7 @@ class SearchsourcesElement extends Element
             <input type="text" id="title-path" name="title_path"
                 value="<?= $data['CURRENT_SOURCE']['title_path'] ?>"
                 maxlength="<?= $sub_aux_len ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['title_path'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -735,7 +735,7 @@ class SearchsourcesElement extends Element
             <input type="text" id="description-path" name="description_path"
                 value="<?= $data['CURRENT_SOURCE']['description_path'] ?>"
                 maxlength="<?= $sub_aux_len ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['description_path'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -750,7 +750,7 @@ class SearchsourcesElement extends Element
             <input type="text" id="link-path" name="link_path"
                 value="<?= $data['CURRENT_SOURCE']['link_path'] ?>"
                 maxlength="<?= $sub_aux_len ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['link_path'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -764,7 +764,7 @@ class SearchsourcesElement extends Element
             <input type="text" id="image-xpath" name="image_xpath"
                 value="<?= $data['CURRENT_SOURCE']['image_xpath'] ?>"
                 maxlength="<?=C\MAX_URL_LEN ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['image2wbmp_xpath'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -779,7 +779,7 @@ class SearchsourcesElement extends Element
                 name="trending_stop_regex"
                 value="<?= $data['CURRENT_SOURCE']['trending_stop_regex'] ?>"
                 maxlength="<?=C\MAX_URL_LEN ?>"
-                class="wide-field" /><?php
+                class="wide-field" ><?php
             if (!empty($data['MODIFY_ADD']['trending_stop_regex'])) {
                 ?><span class='red'>*</span><?php
             }
@@ -833,12 +833,12 @@ class SearchsourcesElement extends Element
         }
         ?>
         <form id="admin-form" method="post" >
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="searchSources" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="searchSources" >
         <input type="hidden" name="arg" value="<?= $data['SEARCH_FORM_TYPE']
-            ?>" />
+            ?>" >
         <table class="name-table" >
         <tr><td><label for="subsearch-folder-name"><b><?=
             tl('searchsources_element_foldername') ?></b></label></td><td>
@@ -849,7 +849,7 @@ class SearchsourcesElement extends Element
                     e("disabled='disabled'");
                 }
                 ?>
-                maxlength="80" class="wide-field" /></td></tr>
+                maxlength="80" class="wide-field" ></td></tr>
         <tr><td><label for="index-source"><b><?=
             tl('searchsources_element_source')?></b></label>
             </td><td>
@@ -877,7 +877,7 @@ class SearchsourcesElement extends Element
             <td>
             <input type="text" id="subsearch-default-query" name="default_query"
                 value="<?= $data['CURRENT_SUBSEARCH']['default_query'] ?>"
-                maxlength="80" class="wide-field" />
+                maxlength="80" class="wide-field" >
             </td></tr>

         <tr id='trend-category-row'>
diff --git a/src/views/elements/SecurityElement.php b/src/views/elements/SecurityElement.php
index 55e1843ed..2babf16f7 100755
--- a/src/views/elements/SecurityElement.php
+++ b/src/views/elements/SecurityElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Sreenidhi Muralidharan
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -58,11 +58,11 @@ class SecurityElement extends Element
         <div class = "current-activity">
         <h2><?= tl('security_element_session_captcha') ?></h2>
         <form class="top-margin" method="post">
-            <input type="hidden" name="c" value="admin" />
-            <input type="hidden" name="a" value="security"/>
+            <input type="hidden" name="c" value="admin" >
+            <input type="hidden" name="a" value="security" >
             <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-                $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="arg" value="updatetypes"/>
+                $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="arg" value="updatetypes" >
             <div class="top-margin">
             <fieldset>
                 <legend><b><?=
@@ -75,17 +75,17 @@ class SecurityElement extends Element
                     tl('security_element_site_timezone') ?></label></b>
                 <input type="text" id="timezone"
                     name="TIMEZONE" class="extra-wide-field" value='<?=
-                    $data["TIMEZONE"] ?>' /></div>
+                    $data["TIMEZONE"] ?>' ></div>
                 <div class="top-margin"><b><label for="token-name"><?=
                     tl('security_element_token_name') ?></label></b>
                 <input type="text" id="token-name"
                     name="CSRF_TOKEN" class="extra-wide-field" value='<?=
-                    $data["CSRF_TOKEN"] ?>' /></div>
+                    $data["CSRF_TOKEN"] ?>' ></div>
                 <div class="top-margin"><b><label for="cookie-name"><?=
                     tl('security_element_session_name') ?></label></b>
                 <input type="text" id="cookie-name"
                     name="SESSION_NAME" class="extra-wide-field" value='<?=
-                    $data["SESSION_NAME"] ?>' /></div>
+                    $data["SESSION_NAME"] ?>' ></div>
                 <div class="top-margin"><b><label for="autologout"><?=
                     tl('security_element_autologout')?></label></b>
                 <?php
diff --git a/src/views/elements/ServersettingsElement.php b/src/views/elements/ServersettingsElement.php
index d53aa8207..cb65c9ce5 100644
--- a/src/views/elements/ServersettingsElement.php
+++ b/src/views/elements/ServersettingsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022 Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -57,11 +57,11 @@ class ServersettingsElement extends Element
         ?>
         <div class="current-activity">
         <form id="serverSettingsForm" method="post">
-        <input type="hidden" name="c" value="admin" />
+        <input type="hidden" name="c" value="admin" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="serverSettings" />
-        <input type="hidden" name="arg" value="update" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="serverSettings" >
+        <input type="hidden" name="arg" value="update" >
         <h2><?= tl('serversettings_element_server_settings')?></h2>
         <div class="bold">
             <div class="top-margin">
@@ -80,14 +80,14 @@ class ServersettingsElement extends Element
                     ?></label></b>
                     <input type="text" id="queue-fetcher-salt" name="AUTH_KEY"
                         value="<?= $data['AUTH_KEY'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div class="top-margin"><b><label for="name-server-url"><?=
                     tl('serversettings_element_name_server_url')
                     ?></label></b>
                     <input type="url" id="name-server-url" name="NAME_SERVER"
                         value="<?= $data['NAME_SERVER'] ?>"
-                        class="extra-wide-field" />
+                        class="extra-wide-field" >
                 </div>
                 <div id="filecache">
                 <div class="top-margin"><label for="use-filecache"><b><?=
@@ -95,7 +95,7 @@ class ServersettingsElement extends Element
                     <input type="checkbox" id="use-filecache"
                         name="USE_FILECACHE" value="true" <?=
                         $data['USE_FILECACHE'] ? "checked='checked'" :
-                            "" ?> />
+                            "" ?> >
                     [<a href="<?= $base_url . '&amp;arg=clearCache'
                     ?>"><?=tl('serversettings_element_clear_cache')
                     ?></a>]
@@ -120,7 +120,7 @@ class ServersettingsElement extends Element
                     tl('serversettings_element_databasename') ?></label></b>
                     <input type="text" id="database-name" name="DB_NAME"
                         value="<?= $data['DB_NAME'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div id="login-dbms">
                     <div class="top-margin"><b><label for="database-host"><?=
@@ -128,14 +128,14 @@ class ServersettingsElement extends Element
                         ?></label></b>
                         <input type="text" id="database-host" name="DB_HOST"
                             value="<?= $data['DB_HOST'] ?>"
-                            class="wide-field" />
+                            class="wide-field" >
                     </div>
                     <div class="top-margin"><b><label for="database-user"><?=
                         tl('serversettings_element_databaseuser')
                         ?></label></b>
                         <input type="text" id="database-user" name="DB_USER"
                             value="<?= $data['DB_USER'] ?>"
-                            class="wide-field" />
+                            class="wide-field" >
                     </div>
                     <div class="top-margin"><b><label
                         for="database-password"><?=
@@ -143,7 +143,7 @@ class ServersettingsElement extends Element
                         ?></label></b>
                         <input type="password" id="database-password"
                             name="DB_PASSWORD" value="<?=
-                            $data['DB_PASSWORD'] ?>" class="wide-field" />
+                            $data['DB_PASSWORD'] ?>" class="wide-field" >
                     </div>
                 </div>
             </fieldset>
@@ -166,7 +166,7 @@ class ServersettingsElement extends Element
                     tl('serversettings_element_mail_sender')?></label></b>
                     <input type="email" id="mail-sender" name="MAIL_SENDER"
                         value="<?= $data['MAIL_SENDER'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div class="top-margin"><b><label for="send-media-updater"><?=
                     tl('serversettings_element_send_media_updater')
@@ -176,46 +176,46 @@ class ServersettingsElement extends Element
                         value="true" <?php if (
                             $data['SEND_MAIL_MEDIA_UPDATER'] == true) {
                             e("checked='checked'");
-                            }?> />
+                            }?> >
                 </div>
                 <div class="top-margin"><b><label for="use-php-mail"><?=
                     tl('serversettings_element_use_php_mail')?></label></b>
                     <input type="checkbox" id="use-php-mail" name="USE_MAIL_PHP"
                         value="true" <?php if ( $data['USE_MAIL_PHP'] == true) {
-                        e("checked='checked'");}?> />
+                        e("checked='checked'");}?> >
                 </div>
                 <div id="smtp-info">
                 <div class="top-margin"><b><label for="mail-server"><?=
                     tl('serversettings_element_mail_server')?></label></b>
                     <input type="text" id="mail-server" name="MAIL_SERVER"
                         value="<?=$data['MAIL_SERVER'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div class="top-margin"><b><label for="mail-port"><?=
                     tl('serversettings_element_mail_serverport')
                     ?></label></b>
                     <input type="text" id="mail-port" name="MAIL_SERVERPORT"
                         value="<?=$data['MAIL_SERVERPORT'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div class="top-margin"><b><label for="mail-username"><?=
                     tl('serversettings_element_mail_username')?></label></b>
                     <input type="text" id="mail-username" name="MAIL_USERNAME"
                         value="<?= $data['MAIL_USERNAME'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div class="top-margin"><b><label for="mail-password"><?=
                     tl('serversettings_element_mail_password')?></label></b>
                     <input type="password" id="mail-password"
                         name="MAIL_PASSWORD"
                         value="<?= $data['MAIL_PASSWORD'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div class="top-margin"><b><label for="mail-security"><?=
                     tl('serversettings_element_mail_security')?></label></b>
                     <input type="text" id="mail-security" name="MAIL_SECURITY"
                         value="<?= $data['MAIL_SECURITY'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 </div>
                 </div>
@@ -229,7 +229,7 @@ class ServersettingsElement extends Element
                     tl('serversettings_element_tor_proxy')?></label></b>
                     <input type="text" id="tor-proxies" name="TOR_PROXY"
                         value="<?=$data['TOR_PROXY'] ?>"
-                        class="wide-field" />
+                        class="wide-field" >
                 </div>
                 <div class="top-margin"><label for="use-proxy"><b><?=
                     tl('serversettings_element_use_proxy_servers')
@@ -237,7 +237,7 @@ class ServersettingsElement extends Element
                         <input type="checkbox" id="use-proxy"
                             name="USE_PROXY" value="true" <?=
                             $data['USE_PROXY'] ? "checked='checked'" :
-                            ""  ?> />
+                            ""  ?> >
                 </div>
                 <div id="proxy">
                     <div class="top-margin"><label for="proxy-servers" ><b><?=
@@ -266,8 +266,8 @@ class ServersettingsElement extends Element
             <div id="payment-processing">
             <?php
             if (!C\CreditConfig::isActive()) { ?>
-                <br /><b class="red"><?=
-                tl('serversettings_element_no_payment_processing') ?></b><br />
+                <br><b class="red"><?=
+                tl('serversettings_element_no_payment_processing') ?></b><br>
                 [<a href="https://www.seekquarry.com/adscript"><?=
                 tl('serversettings_element_purchase_processing')
                 ?></a>]
@@ -276,27 +276,27 @@ class ServersettingsElement extends Element
             ?>
             </div>
             <div id="ad-location-info">
-            <br /><b><?=tl('serversettings_element_ad_location') ?></b><br />
+            <br><b><?=tl('serversettings_element_ad_location') ?></b><br>
             <input id='ad-location-top' type='radio' name='AD_LOCATION'
                 value="top" onchange="showHideScriptdiv();" <?=
                 ($data['AD_LOCATION'] == 'top') ?'checked' : ''
-                ?> /><label for="ad-location-top"><?=
+                ?> ><label for="ad-location-top"><?=
                 tl('serversettings_element_top') ?></label>
             <input id='ad-location-side' type='radio' name='AD_LOCATION'
                 value="side" onclick="showHideScriptdiv();" <?=
                 ($data['AD_LOCATION'] == 'side') ?
-                    'checked' : '' ?> /><label for="ad-location-side"><?=
+                    'checked' : '' ?> ><label for="ad-location-side"><?=
                 tl('serversettings_element_side') ?></label>
             <input type='radio' id='ad-location-both'
                 name='AD_LOCATION' value="both"
                 onclick="showHideScriptdiv();" <?=
                 ($data['AD_LOCATION'] == 'both') ? 'checked'
-                    :'' ?> /><label for="ad-location-both"><?=
+                    :'' ?> ><label for="ad-location-both"><?=
                 tl('serversettings_element_both') ?></label>
             <input type='radio' id='ad-location-none' name='AD_LOCATION'
                 value="none" onclick="showHideScriptdiv();" <?=
                 ($data['AD_LOCATION'] == 'none') ?
-                    'checked' : '' ?> /><label for="ad-location-none"><?=
+                    'checked' : '' ?> ><label for="ad-location-none"><?=
                 tl('serversettings_element_none') ?></label>
             <div id="global-adscript-config">
             <label for="global-adscript"><b><?=
diff --git a/src/views/elements/SideadvertisementElement.php b/src/views/elements/SideadvertisementElement.php
index c5cab4832..7c8e64896 100644
--- a/src/views/elements/SideadvertisementElement.php
+++ b/src/views/elements/SideadvertisementElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/SocialcontrolsElement.php b/src/views/elements/SocialcontrolsElement.php
index cf7470aa5..4a4381f29 100644
--- a/src/views/elements/SocialcontrolsElement.php
+++ b/src/views/elements/SocialcontrolsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/StatisticsElement.php b/src/views/elements/StatisticsElement.php
index ee12eb3de..3bc9c552a 100644
--- a/src/views/elements/StatisticsElement.php
+++ b/src/views/elements/StatisticsElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/TopadvertisementElement.php b/src/views/elements/TopadvertisementElement.php
index 9e944781a..4d4125a39 100644
--- a/src/views/elements/TopadvertisementElement.php
+++ b/src/views/elements/TopadvertisementElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
diff --git a/src/views/elements/TrendingElement.php b/src/views/elements/TrendingElement.php
index 24bc45f99..38d1632dc 100644
--- a/src/views/elements/TrendingElement.php
+++ b/src/views/elements/TrendingElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -121,7 +121,7 @@ class TrendingElement extends Element
                     <form method="get" action="<?=C\SHORT_BASE_URL
                         ?>" onsubmit="return someChecked(this);">
                     <input type="hidden" name="q" value="<?=$base_chart_query .
-                        $query_dates[$period] ?>" />
+                        $query_dates[$period] ?>" >
                     <p><b><?=$date_map[$period]?></b>
                     <?php
                     if ($period !== C\ONE_HOUR) {?>
@@ -148,7 +148,7 @@ class TrendingElement extends Element
                             <input type='checkbox'
                                 name='term[<?=
                                 urlencode($item['TERM'])
-                                ?>]'  />
+                                ?>]'  >
                             <?php
                         }
                         if (empty($data['CATEGORY_TYPE']) ||
@@ -256,7 +256,7 @@ class TrendingElement extends Element
                                 [], 60));
                         }
                         ?><li><a href="<?=$item[CC::URL] ?>"><?=$title
-                            ?></a>&#8230;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                            ?></a>&#8230;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                             <a class="gray-link" rel='nofollow' href="<?=
                             $feed_url . $delim . $source_query ?>" ><?=
                             $item[CC::SOURCE_NAME] ?></a></li><?php
diff --git a/src/views/elements/UsermessagesElement.php b/src/views/elements/UsermessagesElement.php
index 7a2357cdd..5d9eabdd0 100644
--- a/src/views/elements/UsermessagesElement.php
+++ b/src/views/elements/UsermessagesElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -109,15 +109,15 @@ class UsermessagesElement extends Element implements CrawlConstants
         ?>
         <form class="center">
         <input type="hidden" name='<?=C\CSRF_TOKEN?>'
-            value='<?=$data[C\CSRF_TOKEN]?>' />
-        <input type="hidden" name='a' value='userMessages' />
-        <input type="hidden" name='c' value='<?=$data['CONTROLLER'] ?>' />
+            value='<?=$data[C\CSRF_TOKEN]?>' >
+        <input type="hidden" name='a' value='userMessages' >
+        <input type="hidden" name='c' value='<?=$data['CONTROLLER'] ?>' >
         <div class="contact-actions" tabindex="1">
         <input type="search" name='contact_name'
             class="narrow-field" autocomplete="off"
             placeholder="<?=tl('usermessages_element_contact_filter')?>"
             id='contact-filter' value="<?=$data['CONTACT_FILTER'] ?? '' ?>"
-            /><br />
+            ><br>
         <button type='submit' name='arg' value="search"
             class="button-box"><?=
             tl('usermessages_element_search') ?></button>
@@ -142,7 +142,7 @@ class UsermessagesElement extends Element implements CrawlConstants
             <div class="contact-detail-inner">
             <img class="message-icon" src="<?=
                 $contact_info["ICON_URL"]; ?>"
-                alt="<?=tl('usermessages_element_user_icon'); ?>" />
+                alt="<?=tl('usermessages_element_user_icon'); ?>" >
             <a id="contact-id-<?=$contact_id
                 ?>" href="<?=$this->formatHref(B\feedsUrl('user_messages',
                 $contact_id, true, $data['CONTROLLER']) .
@@ -167,7 +167,7 @@ class UsermessagesElement extends Element implements CrawlConstants
                 <div class="contact-detail-inner">
                 <img class="message-icon" src="<?=
                     $contact_info["ICON_URL"]; ?>"
-                    alt="<?=tl('usermessages_element_user_icon'); ?>" />
+                    alt="<?=tl('usermessages_element_user_icon'); ?>" >
                 <span><?= $contact_info["USER_NAME"]; ?></span>
                 </div>
                 </div>
@@ -219,7 +219,7 @@ class UsermessagesElement extends Element implements CrawlConstants
             <h2>
             <img class="message-icon" src="<?=
                 $data["CONTACT_ICON_URL"]; ?>"
-                alt="<?=tl('usermessages_element_user_icon'); ?>" />
+                alt="<?=tl('usermessages_element_user_icon'); ?>" >
             <span><?= $data['CONTACT_NAME'] ?></span>
             </h2>
             </div>
@@ -267,7 +267,7 @@ class UsermessagesElement extends Element implements CrawlConstants
                 <?php
                 if (!$is_user && ($pub_data_change || $user_change)) {
                     e('<img class="message-icon float-same" src="'.
-                        $message_info['USER_ICON'].'" />&nbsp;');
+                        $message_info['USER_ICON'].'" >&nbsp;');
                     $comma = ", ";
                     e($message_info['USER_NAME']);
                 }
@@ -300,15 +300,15 @@ class UsermessagesElement extends Element implements CrawlConstants
         <div class="new-message-container">
         <form  id="newmessageForm" method="post" action="<?=C\SHORT_BASE_URL?>"
             enctype='multipart/form-data' onsubmit="parseEmojiShortcuts()">
-        <input type="hidden" name="c" value="<?=$data['CONTROLLER'] ?>" />
-        <input type="hidden" name="a" value="userMessages" />
-        <input type="hidden" name="arg" value="newmessage" />
+        <input type="hidden" name="c" value="<?=$data['CONTROLLER'] ?>" >
+        <input type="hidden" name="a" value="userMessages" >
+        <input type="hidden" name="arg" value="newmessage" >
         <input type="hidden" name="contact_id" value="<?=
-            $data['CONTACT_ID']; ?>" />
+            $data['CONTACT_ID']; ?>" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-            value="<?= $data[C\CSRF_TOKEN] ?>" />
+            value="<?= $data[C\CSRF_TOKEN] ?>" >
         <input type="file" id="file-new-message"
-            name="file_new_message" class="none" multiple="multiple" />
+            name="file_new_message" class="none" multiple="multiple" >
         <a id="attach-new-file"
             href="javascript:elt('file-new-message').click()"
             >📎</a>
@@ -320,7 +320,7 @@ class UsermessagesElement extends Element implements CrawlConstants
                 <?=$this->emoji_helper->render();?>
             </div>
             <input type="text" id="new-message"  name="description"
-                placeholder="<?=tl('usermessages_element_new_message') ?>" />
+                placeholder="<?=tl('usermessages_element_new_message') ?>" >
         </span>
         <button type="submit" id="send-message" ><?=$arrow ?></button>
         </form>
diff --git a/src/views/elements/WelcomemenuElement.php b/src/views/elements/WelcomemenuElement.php
index 34dc88a45..a0e2d865e 100644
--- a/src/views/elements/WelcomemenuElement.php
+++ b/src/views/elements/WelcomemenuElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -67,7 +67,7 @@ class WelcomemenuElement extends Element
                 $logged_in, false); ?>
             <h2><a href="<?=C\SHORT_BASE_URL ?><?php
             ?>"><img src="<?= C\SHORT_BASE_URL . $logo ?>" alt="<?=
-            $this->view->logo_alt_text ?>" /></a></h2>
+            $this->view->logo_alt_text ?>" ></a></h2>
             <h2 class="menu-option-heading"><?=
                 tl('welcomehmenu_element_welcome') ?></h2>
                 <ul class='square-list'>
@@ -94,7 +94,7 @@ class WelcomemenuElement extends Element
                 e("?$token_string");
             }
             ?>"><img src="<?= C\SHORT_BASE_URL . $logo ?>" alt="<?=
-            $this->view->logo_alt_text ?>" /></a></h2>
+            $this->view->logo_alt_text ?>" ></a></h2>
             <?php
             $activities = array_shift($data['COMPONENT_ACTIVITIES']);
             if (empty($activities[0]['METHOD_NAME']) ||
diff --git a/src/views/elements/WikiElement.php b/src/views/elements/WikiElement.php
index edcf46d6e..ab5f23eb2 100644
--- a/src/views/elements/WikiElement.php
+++ b/src/views/elements/WikiElement.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\elements;
@@ -154,7 +154,7 @@ class WikiElement extends Element implements CrawlConstants
                     if ($is_api) {
                         $data['API'] = true;
                     } else {
-                        ?><hr /><?php
+                        ?><hr ><?php
                     }
                     $base_query = htmlentities(B\wikiUrl("", true,
                         $data['CONTROLLER'], $data["GROUP"]["GROUP_ID"]));
@@ -347,16 +347,16 @@ class WikiElement extends Element implements CrawlConstants
             <p><?= tl("wiki_element_use_form") ?></p>
             <form id="editpageForm" method="get" action="<?=C\SHORT_BASE_URL
             ?>" >
-            <input type="hidden" name="c" value="<?= $data['CONTROLLER']?>" />
+            <input type="hidden" name="c" value="<?= $data['CONTROLLER']?>" >
             <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-                $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="a" value="wiki" />
-            <input type="hidden" name="arg" value="edit" />
+                $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="a" value="wiki" >
+            <input type="hidden" name="arg" value="edit" >
             <input type="hidden" name="group_id" value="<?=
-                $data['GROUP']['GROUP_ID'] ?>" />
+                $data['GROUP']['GROUP_ID'] ?>" >
             <input aria-label="<?= tl("wiki_element_create_load_page"); ?>"
                 type="text" name="page_name" class="narrow-field"
-                value="<?=urldecode($data["PAGE_NAME"]) ?>" />
+                value="<?=urldecode($data["PAGE_NAME"]) ?>" >
             <button class="button-box" type="submit"><?=
                 tl('wiki_element_go') ?></button>
             </form>
@@ -401,12 +401,12 @@ class WikiElement extends Element implements CrawlConstants
         } ?>
         <form method="post">
         <input type="hidden" name="c" value="<?=$data['CONTROLLER']
-            ?>" />
-        <input type="hidden" name="a" value="wiki" />
-        <input type="hidden" name="arg" value="edit" />
+            ?>" >
+        <input type="hidden" name="a" value="wiki" >
+        <input type="hidden" name="arg" value="edit" >
         <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?=
             $data[C\CSRF_TOKEN];
-        ?>" />
+        ?>" >
         <div id="share-container">
         <h3 class="top-margin"><label for='share-wall'><?=
             tl("wiki_element_raw_content") ?></label></h3>
@@ -439,20 +439,52 @@ class WikiElement extends Element implements CrawlConstants
            $data['CONTROLLER'], $data['GROUP']['GROUP_ID']) .
            C\CSRF_TOKEN . '=' . $data[C\CSRF_TOKEN];
         $simple_current_url = $simple_view_url . "&arg=edit";
+        $is_settings_view = !empty($data['settings']) &&
+            $data['settings'] != "false";
+        $is_resources_view = !empty($data['resources']) &&
+            $data['resources'] != "false";
+        $is_media_list =
+            !empty($data['page_type']) && $data['page_type'] == 'media_list';
+        $is_page_alias =
+            !empty($data['page_type']) && $data['page_type'] == 'page_alias';
+        $is_share =
+            !empty($data['page_type']) && $data['page_type'] == 'share';
+        $is_shortener =
+            !empty($data['page_type']) && $data['page_type'] == 'url_shortener';
         if (!empty($data['SUB_PATH'])) {
             $simple_view_url .= "&sf=".urlencode($data['SUB_PATH']);
             $simple_current_url .= "&sf=".urlencode($data['SUB_PATH']);
         }
         $current_url = htmlentities($simple_current_url);
+        $new_settings = $is_settings_view ? "&amp;settings=false" :
+            "&amp;settings=true";
+        $new_resources = $is_resources_view ? "&amp;resources=false" :
+            "&amp;resources=true";
+        if ($is_resources_view) {
+            $simple_current_url .= "&resources=true";
+        }
+        $settings_toggle_url = $current_url . $new_settings;
+        $resources_toggle_url = $current_url . $new_resources;
         if (isset($data['OTHER_BACK_URL'])) {
             $append = $data['OTHER_BACK_URL'];
+        }
+        $icon_helper = $this->view->helper('iconlink');
+        if ($is_settings_view || $is_resources_view) {
+            $toggle_url = ($is_settings_view) ? $settings_toggle_url :
+                $resources_toggle_url;
+            ?>
+            <div class="float-opposite" ><?=
+            $this->view->helper('close')->render($toggle_url);
+            ?></div>
+            <?php
+        } else {?>
+            <div class="float-opposite wiki-history-discuss" >
+            <?=
+            $icon_helper->renderButton( $base_url . $append .
+                '&amp;arg=history&amp;page_id='.$data['PAGE_ID'], "history");
+            ?>
+            </div><?php
         }?>
-        <div class="float-opposite wiki-history-discuss" >
-        <?=
-        $icon_helper->renderButton( $base_url . $append .
-            '&amp;arg=history&amp;page_id='.$data['PAGE_ID'], "history");
-        ?>
-        </div>
         <form id="editpageForm" method="post"
             enctype="multipart/form-data"
             onsubmit="
@@ -467,15 +499,15 @@ class WikiElement extends Element implements CrawlConstants
                     wiki_page.scrollTop : 0;
                 }" >
             <input type="hidden" name="c" value="<?=$data['CONTROLLER']
-            ?>" />
+            ?>" >
             <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?=
-                $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="a" value="wiki" />
-            <input type="hidden" name="arg" value="edit" />
+                $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="a" value="wiki" >
+            <input type="hidden" name="arg" value="edit" >
             <?php
             if (isset($data['RESOURCE_NAME'])) { ?>
                 <input type="hidden" name="n" value="<?=
-                    urlencode($data['RESOURCE_NAME']) ?>" />
+                    urlencode($data['RESOURCE_NAME']) ?>" >
                 <?php
             }
             if (isset($data['BACK_PARAMS'])) {
@@ -485,51 +517,52 @@ class WikiElement extends Element implements CrawlConstants
                         . 'name="' . $back_param_key .
                         '" value="' .
                         $back_param_value
-                        . '" />');
+                        . '" >');
                 }
             }
-            $icon_helper = $this->view->helper('iconlink');
             ?>
             <input type="hidden" name="group_id" value="<?=
-                $data['GROUP']['GROUP_ID'] ?>" />
+                $data['GROUP']['GROUP_ID'] ?>" >
             <input type="hidden" name="page_name" value="<?=
-                $data['PAGE_NAME'] ?>" />
-            <input type="hidden" name="caret" id="caret-pos"/>
-            <input type="hidden" name="scroll_top" id="scroll-top"/>
+                $data['PAGE_NAME'] ?>" >
+            <input type="hidden" name="caret" id="caret-pos" >
+            <input type="hidden" name="scroll_top" id="scroll-top" >
             <input type="hidden" id="p-settings" name="settings" value="<?=
-                $data['settings'] ?>"/>
+                $data['settings'] ?>" >
+            <input type="hidden" id="p-resources" name="resources" value="<?=
+                $data['resources'] ?>" >
             <div class="top-margin">
                 <b><?=tl('wiki_element_locale_name',
-                    $data['CURRENT_LOCALE_TAG']) ?></b><br />
+                    $data['CURRENT_LOCALE_TAG']) ?></b><br>
                 <b><label for="wiki-page"><?php
                 $human_page_name = preg_replace("/\_/", " ",
                     urldecode($data['PAGE_NAME']));
                 e(tl('wiki_element_page', $human_page_name));
                 if (isset($data['RESOURCE_NAME'])) {
-                    e("<br />" .
+                    e("<br>" .
                         tl('wiki_element_resource_name',
                         $data['RESOURCE_NAME']));
                     ?></label></b><?php
                 } else {
-                    ?></label></b>
-                    <div id="toggle-settings">
-                    <script>
-                    <?php
-                    $new_settings = (empty($data['settings']) ||
-                        $data['settings'] == "false") ? "&amp;settings=true" :
-                        "&amp;settings=false";
-                    $toggle_settings_html =
+                    ?></label></b><?php
+                    if (!$is_settings_view && !$is_resources_view) { ?>
+                        <div id="toggle-settings">
+                        <?php
                         $icon_helper->renderButton(['settings-toggle-button',
-                            $current_url . $new_settings], 'settings', "",
-                            true);
-                        ?>
-                    document.write("<?=$toggle_settings_html ?>");
-                    </script><?php
-                    $icon_helper->renderButton(htmlentities(
-                        B\wikiUrl('Syntax', true, $data['CONTROLLER'],
-                        C\PUBLIC_GROUP_ID)) . C\CSRF_TOKEN .'=' .
-                        $data[C\CSRF_TOKEN] . '&amp;arg=read', 'wiki_syntax');?>
-                    </div><?php
+                            $settings_toggle_url], 'settings', "");
+                        if (!$is_media_list && !$is_page_alias && !$is_share &&
+                            !$is_shortener) {
+                            $icon_helper->renderButton(
+                                ['resources-toggle-button',
+                                $resources_toggle_url], 'resources', "");
+                        }
+                        $icon_helper->renderButton(htmlentities(
+                            B\wikiUrl('Syntax', true, $data['CONTROLLER'],
+                            C\PUBLIC_GROUP_ID)) . C\CSRF_TOKEN .'=' .
+                            $data[C\CSRF_TOKEN] . '&amp;arg=read',
+                            'wiki_syntax');?>
+                        </div><?php
+                    }
                 }
                 ?>
             </div>
@@ -537,8 +570,10 @@ class WikiElement extends Element implements CrawlConstants
             <div class="top-margin">
             <label for="page-type"><b><?=tl('wiki_element_page_type')
             ?></b></label><?php
+            $attributes = ($is_settings_view) ? [] : ['disabled' => 'disabled'];
             $this->view->helper("options")->render("page-type", "page_type",
-                $data['page_types'], $data['current_page_type'], true);
+                $data['page_types'], $data['current_page_type'], true,
+                $attributes);
             ?>
             </div>
             <div id='alias-type'>
@@ -546,7 +581,7 @@ class WikiElement extends Element implements CrawlConstants
             <label for="page-alias"><b><?=tl('wiki_element_page_alias')
             ?></b></label><input type="text" id='page-alias'
                 name="page_alias" value="<?= $data['page_alias']?>"
-                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             </div><?php
             $shortened_url = '';
@@ -554,12 +589,12 @@ class WikiElement extends Element implements CrawlConstants
                 $shortened_url = C\BASE_URL . "group/" . $_REQUEST['group_id'] .
                     "/" . $_REQUEST['page_name'];
             }?>
-            <div id='url-shortener'>
+            <div id='shortener-container'>
             <div class="top-margin">
             <label for="url-shortener"><b><?=tl('wiki_element_url_to_shorten')
             ?></b></label>
             <input type="text" id='url-shortener' name="url_shortener"
-                value="<?= $data['url_shortener']?>" class="wide-field"/>
+                value="<?= $data['url_shortener']?>" class="wide-field" >
             </div>
             </div>
             <div id='short-url-label'>
@@ -604,25 +639,25 @@ class WikiElement extends Element implements CrawlConstants
                     $checked = (isset($data['toc']) && $data['toc']) ?
                     'checked="checked"' : '';
                     e( $checked );
-                ?> id='page-toc' />
+                ?> id='page-toc' >
             </div>
             <div class="top-margin">
             <label for="page-title"><b><?=tl('wiki_element_title')
             ?></b></label><input type="text" id='page-title'
                 name="title" value="<?=$data['title'] ?>"
-                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="meta-author"><b><?=tl('wiki_element_meta_author')
             ?></b></label><input type="text" id='meta-author'
                 name="author" value="<?= $data['author']?>"
-                maxlength="<?= C\LONG_NAME_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\LONG_NAME_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="meta-robots"><b><?=tl('wiki_element_meta_robots')
             ?></b></label><input type="text" id='meta-robots'
                 name="robots" value="<?= $data['robots'] ?>"
-                maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field"/>
+                maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="meta-description"><b><?=
@@ -650,7 +685,7 @@ class WikiElement extends Element implements CrawlConstants
                     placeholder="<?=tl('wiki_element_empty_use_default')
                     ?>" name="alternative_path" value="<?=
                     $data['alternative_path'] ?>"
-                    maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field"/>
+                    maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field" >
                 </div>
                 <?php
             }
@@ -666,65 +701,63 @@ class WikiElement extends Element implements CrawlConstants
             <label for="page-header"><b><?=tl('wiki_element_page_header')
             ?></b></label><input type="text" id='page-header'
                 name="page_header" value="<?=$data['page_header']?>"
-                maxlength="<?=C\SHORT_TITLE_LEN ?>" class="wide-field"/>
+                maxlength="<?=C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="page-footer"><b><?=tl('wiki_element_page_footer')
             ?></b></label><input type="text" id='page-footer'
                 name="page_footer" value="<?=$data['page_footer'] ?>"
-                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             </div>
             </div>
-            <div id='page-container'>
             <?php
-            $show_resources = true;
-            if (substr($data['current_page_type'], 0, 1)
-                != 't' || !is_numeric(substr($data['current_page_type'], 1))
-                ) { ?>
-                <?php
-                if (empty($data['SPREADSHEET'])) {?>
-                    <textarea id="wiki-page"
-                        class="tall-text-area" name="page"
-                        <?php
-                        if ((!isset($data['page_type']) ||
-                                $data['page_type'] != 'presentation')) {
-                            $data_buttons = 'all,!wikibtn-slide';
-                        } else {
-                            $data_buttons = 'all';
-                        }?>
-                        data-buttons='<?=$data_buttons ?>' ><?=$data['PAGE']
-                    ?></textarea><?php
+            if (!$is_settings_view && !$is_resources_view) { ?>
+                <div id='page-container'><?php
+                if (substr($data['current_page_type'], 0, 1) != 't' ||
+                    !is_numeric(substr($data['current_page_type'], 1))) {
+                    if (empty($data['SPREADSHEET'])) {?>
+                        <textarea id="wiki-page"
+                            class="tall-text-area" name="page"
+                            <?php
+                            if ((!isset($data['page_type']) ||
+                                    $data['page_type'] != 'presentation')) {
+                                $data_buttons = 'all,!wikibtn-slide';
+                            } else {
+                                $data_buttons = 'all';
+                            }?>
+                            data-buttons='<?=$data_buttons ?>' ><?=
+                            $data['PAGE'] ?></textarea><?php
+                    } else {
+                        e("<div id='spreadsheet'>&nbsp;</div>");
+                    }
                 } else {
-                    e("<div id='spreadsheet'>&nbsp;</div>");
+                    e($data['PAGE']);
                 }
-            } else {
-                e($data['PAGE']);
-                $show_resources = false;
-            }
-            if ($show_resources && !isset($data['RESOURCE_NAME'])) {
-                ?>
-                <div class="green center"><?php
-                $this->view->helper("fileupload")->render(
-                    'wiki-page', 'page_resource', 'wiki-page-resource',
-                    min(L\metricToInt(ini_get('upload_max_filesize')),
-                    L\metricToInt(ini_get('post_max_size'))), 'textarea',
-                    null, true);
-                e(tl('wiki_element_archive_info'));
-                ?></div>
-                <div class="top-margin">
-                <label for="edit-reason"><b><?= tl('wiki_element_edit_reason')
-                ?></b></label><input type="text" id='edit-reason'
-                    name="edit_reason" value="" maxlength="<?=
-                    C\SHORT_TITLE_LEN ?>"
-                    class="wide-field"/>
-                </div><?php
-            }
-            ?>
-            </div>
+                if (!isset($data['RESOURCE_NAME'])) {
+                    ?>
+                    <div class="green center"><?php
+                    $this->view->helper("fileupload")->render(
+                        'wiki-page', 'page_resource', 'wiki-page-resource',
+                        min(L\metricToInt(ini_get('upload_max_filesize')),
+                        L\metricToInt(ini_get('post_max_size'))), 'textarea',
+                        null, true);
+                    e(tl('wiki_element_archive_info'));
+                    ?></div>
+                    <div class="top-margin">
+                    <label for="edit-reason"><b><?=
+                        tl('wiki_element_edit_reason')
+                        ?></b></label><input type="text" id='edit-reason'
+                        name="edit_reason" value="" maxlength="<?=
+                        C\SHORT_TITLE_LEN ?>"
+                        class="wide-field" >
+                    </div><?php
+                }
+                ?></div><?php
+            }?>
             <div id="save-container" class="top-margin center"><?php
             $resource_param = "";
-            if ($show_resources && isset($data['RESOURCE_NAME'])) { ?>
+            if (!$is_resources_view && isset($data['RESOURCE_NAME'])) { ?>
                 <button class="button-box"
                     onclick="window.location='<?=$current_url;
                     ?>'; return false;" ><?=
@@ -732,28 +765,29 @@ class WikiElement extends Element implements CrawlConstants
                 $resource_param = "&amp;arg=media&amp;n=" .
                     $data['RESOURCE_NAME'] . "&amp;page_id=" . $data['PAGE_ID'];
             }
-            ?>
-            <button class="button-box" type="submit"><?=
-                tl('wiki_element_savebutton') ?></button>
-            <a class="source-anchor-button" target="show"
-                style="position:relative; left:-.04in; right:-.04in;"
-                href='<?=$simple_view_url . $resource_param ?>'><?=
-                tl('wiki_element_show');?></a>
+            if (!$is_resources_view) { ?>
+                <button class="button-box" type="submit"><?=
+                    tl('wiki_element_savebutton') ?></button>
+                <a class="source-anchor-button" target="show"
+                    style="position:relative; left:-.04in; right:-.04in;"
+                    href='<?=$simple_view_url . $resource_param ?>'><?=
+                    tl('wiki_element_show');?></a><?php
+            }?>
             </div>
         </form>
         <?php
-        if ($show_resources) {
+        if ($is_resources_view || ($is_media_list && !$is_settings_view)) {
             ?><div id="page-resources">
             <h3><?= tl('wiki_element_page_resources')?></h3>
             <p><?= tl('wiki_element_resources_info') ?></p>
             <form id="resource-upload-form" method="post"
                 enctype="multipart/form-data">
             <input type="hidden" name="c" value="<?= $data['CONTROLLER']
-                ?>" />
+                ?>" >
             <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-                $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="a" value="wiki" />
-            <input type="hidden" name="arg" value="edit" />
+                $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="a" value="wiki" >
+            <input type="hidden" name="arg" value="edit" >
             <?php
                 if (isset($data['BACK_PARAMS'])) {
                     foreach ($data["BACK_PARAMS"] as
@@ -762,16 +796,18 @@ class WikiElement extends Element implements CrawlConstants
                             . 'name="' . $back_param_key .
                             '" value="' .
                             $back_param_value
-                            . '" />');
+                            . '" >');
                     }
                 }
             ?>
             <input type="hidden" name="group_id" value="<?=
-                $data['GROUP']['GROUP_ID'] ?>" />
+                $data['GROUP']['GROUP_ID'] ?>" >
             <input type="hidden" name="page_name" value="<?=
-                $data['PAGE_NAME'] ?>" />
+                $data['PAGE_NAME'] ?>" >
             <input type="hidden" id="r-settings" name="settings" value="<?=
-                $data['settings'] ?>" />
+                $data['settings'] ?>" >
+            <input type="hidden" id="r-resources" name="resources" value="<?=
+                $data['resources'] ?>" >
             <div class="center">
             <?php
             $this->view->helper("fileupload")->render(
@@ -832,16 +868,6 @@ class WikiElement extends Element implements CrawlConstants
                 }
                 return really_meant_it;
             }
-            function clipCut(resource_name)
-            {
-                if (localStorage) {
-                    let detail_name = 'detail<?=$detail_id ?>';
-                    localStorage.removeItem(detail_name);
-                }
-                let location = "<?=$simple_current_url?>" +
-                    "&clip_cut=" + resource_name.replace('&quot;','"');
-                window.location = location;
-            }
             </script>
             </div><?php
         }
@@ -850,8 +876,8 @@ class WikiElement extends Element implements CrawlConstants
      * Draws a list of media resources associated with a wiki page
      *
      * @param array $data fields RESOURCES_INFO contains info on resources
-     * @param string $read_mode whether the readering should be for a media
-     *      list in read mode (valye "read"), a source mode (value "source"),
+     * @param string $read_mode whether the rendering should be for a media
+     *      list in read mode (value "read"), a source mode (value "source"),
      *      or for use on the edit task of any wiki page (value "")
      * @param bool $logged_in whether the user is currently logged in or not
      * @param string $file_upload_id of form element to be set if can upload
@@ -879,6 +905,11 @@ class WikiElement extends Element implements CrawlConstants
             $folder_prefix = ($is_static) ? $base_url : $base_url . "&amp;";
             $folder_prefix .= "page_id=". $data["PAGE_ID"];
             $url_is_folder_prefix = false;
+            $settings_and_resources = "";
+            if (!empty($data['settings'])) {
+                $settings_and_resources =  "&amp;settings={$data['settings']}" .
+                "&amp;resources={$data['resources']}";
+            }
             if (!empty($read_mode)) {
                 $read_arg = ($read_mode == "source") ? "source" : "media";
                 $folder_prefix .= "&amp;arg=$read_arg";
@@ -888,11 +919,15 @@ class WikiElement extends Element implements CrawlConstants
                 $folder_prefix .= "&amp;arg=media";
                 $url_prefix = $folder_prefix;
                 $folder_prefix = $base_url . "&amp;arg=edit";
-                $base_url .= "&amp;settings=".$data['settings'];
+                $base_url .= $settings_and_resources;
                 $url_is_folder_prefix = true;
             } else {
                 $folder_prefix = $base_url . "&amp;arg=edit";
-                $base_url .= "&amp;settings=".$data['settings'];
+                $base_url .= $settings_and_resources;
+            }
+            if ($read_mode != "media") {
+                $data['resources'] ??= 'false';
+                $folder_prefix .= "&amp;resources={$data['resources']}";
             }
             ?>
             <form>
@@ -941,23 +976,25 @@ class WikiElement extends Element implements CrawlConstants
             $page_name = ($data['CONTROLLER'] == 'static') ? 'p' : 'page_name';
             ?>
             <input type="hidden" name='<?=C\CSRF_TOKEN?>'
-                value='<?=$data[C\CSRF_TOKEN]?>' />
-            <input type="hidden" name='arg' value='<?=$arg ?>' />
-            <input type="hidden" name='a' value='<?=$a ?>' />
-            <input type="hidden" name='c' value='<?=$data['CONTROLLER'] ?>' />
+                value='<?=$data[C\CSRF_TOKEN]?>' >
+            <input type="hidden" name='arg' value='<?=$arg ?>' >
+            <input type="hidden" name='a' value='<?=$a ?>' >
+            <input type="hidden" name='c' value='<?=$data['CONTROLLER'] ?>' >
+            <input type="hidden" name='resources' value='<?=$data["resources"]
+                ?? "false" ?>' >
             <input type="hidden" name='<?= $page_name?>'
-                value='<?=$data['PAGE_NAME']?>' />
+                value='<?=$data['PAGE_NAME']?>' >
             <?php
             if (!empty($data['SUB_PATH'])) { ?>
                 <input type="hidden" name='sf'
-                    value='<?=$data['SUB_PATH']; ?>' />
+                    value='<?=$data['SUB_PATH']; ?>' >
                 <?php
             }
             ?>
             <div class="filter-container">
             <input type="search" class="narrow-field" name='resource_filter'
                 placeholder="<?=tl('wiki_element_resource_filter')?>"
-                id='resource-filter' value="<?=$data['RESOURCE_FILTER']?>" />
+                id='resource-filter' value="<?=$data['RESOURCE_FILTER']?>" >
             </div>
             <button type='submit' name='filter_resources'
                 class="button-box media-filter-button"><?=
@@ -992,11 +1029,11 @@ class WikiElement extends Element implements CrawlConstants
                 '&amp;arg=edit&amp;paste_all=true'
                 ?>"><?=tl('wiki_element_paste_all')?></a>]
             [<a onclick='return emptyConfirm();'
-                href="<?=$base_url .$sub_path_var .
+                href="<?=$base_url . $sub_path_var .
                 '&amp;arg=edit&amp;empty_clip=true'
                 ?>"><?=tl('wiki_element_empty_clipboard')?></a>]
             </div>
-            <hr /><?php
+            <hr ><?php
             if (empty($data['CLIPBOARD_INFO'])) {?>
                 <div class='red'><?=tl('wiki_element_no_clipboard_items')
                 ?></div><?php
@@ -1409,7 +1446,7 @@ class WikiElement extends Element implements CrawlConstants
         e("<$td_img class='resource-thumb'>".
             "$num_files_indicator<a href='$current_url'  $dbl_click >");
         e("<img $style loading='lazy' $thumb_class src='" . $current_thumb .
-            "'  alt='$written_name'  $animated_thumb_info />");
+            "'  alt='$written_name'  $animated_thumb_info >");
         e("</a>$first_resource</$td>");
         if (!empty($read_mode)) {
             e("<$td><a href='$current_url'>".
@@ -1419,7 +1456,7 @@ class WikiElement extends Element implements CrawlConstants
             e("<$td class='resource-field' tabindex='0' ><input type='text' ".
                 "id='resource-$i' aria-label='".tl('wiki_element_name')."' ".
                 "value='".str_replace("'", "&#39;", $name).
-                "' $disabled /><br />");
+                "' $disabled ><br>");
             if (!$disabled) {
                 ?><script>
                 res = document.getElementById('resource-<?=$i?>');
@@ -1436,15 +1473,16 @@ class WikiElement extends Element implements CrawlConstants
             }
             if (!$disabled && empty($resource['is_dir'])
                 && (!isset($data['page_type']) ||
-                $data['page_type'] != 'media_list')) { ?>
+                $data['page_type'] != 'media_list')) {
+                $resource_sub_path = empty($data['SUB_PATH']) ?
+                    "" : $data['SUB_PATH'] . "|";
+                ?>
                 <script>
                 document.write(
-                "<button onclick='addToPage(" + '"<?=
-                urlencode($name);
-                ?>", "wiki-page"<?= (empty($data['SUB_PATH'])) ?
-                "" : ", \"{$data['SUB_PATH']}\""
-                ?>)' + "'><?=tl('wiki_element_add_to_page')
-                ?></button>");
+                "<button onclick='alert(\"((resource:<?=$resource_sub_path .
+                    urlencode($name) . "|" .
+                tl('wiki_element_resource_description', $name) ."))" ?>\")' ><?=
+                tl('wiki_element_wiki_code') ?></button>");
                 </script><?php
             }
             $append = "";
@@ -1473,8 +1511,7 @@ class WikiElement extends Element implements CrawlConstants
                 $cut_url = $base_url .
                     "&amp;arg=edit&amp;clip_cut=". urlencode($name) . $append;
                 if (!empty($data['SUB_PATH'])) {
-                    $cut_url .= "&amp;sf=".
-                        urlencode($data['SUB_PATH']);
+                    $cut_url .= "&amp;sf=" . urlencode($data['SUB_PATH']);
                 }?>
                 <a class="media-anchor-button"
                 href='<?=$cut_url
@@ -1640,13 +1677,13 @@ class WikiElement extends Element implements CrawlConstants
         ?></h2><?php
         ?>
         <form id="editpageForm" method="get" class="page-list-header-footer">
-        <input type="hidden" name="c" value="<?=$data['CONTROLLER'] ?>" />
+        <input type="hidden" name="c" value="<?=$data['CONTROLLER'] ?>" >
         <input type="hidden" name="<?= C\CSRF_TOKEN ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="wiki" />
-        <input type="hidden" name="arg" value="pages" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="wiki" >
+        <input type="hidden" name="arg" value="pages" >
         <input type="hidden" name="group_id" value="<?=
-            $data['GROUP']['GROUP_ID'] ?>" />
+            $data['GROUP']['GROUP_ID'] ?>" >
         <?php
         $this->view->helper("options")->renderLinkDropDown(
         "page-sort-fields", $data['sort_fields'] ?? "",
@@ -1658,7 +1695,7 @@ class WikiElement extends Element implements CrawlConstants
         <input type="search" name="filter" class="extra-wide-field"
             maxlength="<?= C\SHORT_TITLE_LEN ?>"
             placeholder="<?= tl("wiki_element_filter_or_create")
-            ?>" value="<?= $data['FILTER'] ?>" />
+            ?>" value="<?= $data['FILTER'] ?>" >
         </div>
         <button class="button-box"
             type="submit"><?=tl('wiki_element_go') ?></button>
@@ -1708,8 +1745,8 @@ class WikiElement extends Element implements CrawlConstants
                         'view_source', "", false, "float-opposite ".
                         "small-margin no-padding", "", false, $tab_target);
                 }
-                ?></br />
-                <?= $page["DESCRIPTION"] ?><br />
+                ?></br >
+                <?= $page["DESCRIPTION"] ?><br>
                 <span class="float-opposite gray"><?=
                     $this->view->helper("feeds")->getPubdateString(
                     $time, $page['LAST_MODIFIED']); ?></span>
@@ -1764,7 +1801,7 @@ class WikiElement extends Element implements CrawlConstants
         <tr><td class="<?=$rel_top ?> center">|</td></tr><?php
         //displaying the middle table - Current Page Name
         ?><tr><td><div class="rel-type-current"><b><a
-            href='<?=$url_main ?>' ><?=$page_name?></a></b><br /><?php
+            href='<?=$url_main ?>' ><?=$page_name?></a></b><br><?php
             if (empty($data["RELATIONSHIPS"])) {
                 e("<b class='small-font'>".tl('wiki_element_no_cur_rel').
                     "</b>");
@@ -1780,7 +1817,7 @@ class WikiElement extends Element implements CrawlConstants
                         $relationship_type = "<b>$relationship_type</b>";
                     }
                     e("<a class='small-font' href='$url'>".
-                        "$relationship_type</a><br />");
+                        "$relationship_type</a><br>");
                 }
             }
            ?></div></td></tr><?php
@@ -1825,21 +1862,21 @@ class WikiElement extends Element implements CrawlConstants
             <div>
             <form id="differenceForm" method="get">
             <input type="hidden" name="c" value="<?=$data['CONTROLLER']
-             ?>" />
+             ?>" >
             <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?=
-                $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="a" value="wiki" />
-            <input type="hidden" name="arg" value="history" />
+                $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="a" value="wiki" >
+            <input type="hidden" name="arg" value="history" >
             <input type="hidden" name="group_id" value="<?=
-                $data['GROUP']['GROUP_ID'] ?>" />
+                $data['GROUP']['GROUP_ID'] ?>" >
             <input type="hidden" name="page_id" value="<?=
-                $data["PAGE_ID"] ?>" />
-            <input type="hidden" name="diff" value="1" />
+                $data["PAGE_ID"] ?>" >
+            <input type="hidden" name="diff" value="1" >
             <b><?=tl('wiki_element_difference') ?></b>
             <input type="text" id="diff-1" name="diff1"
-                value="<?=$data['diff1'] ?>" /> -
+                value="<?=$data['diff1'] ?>" > -
             <input type="text" id="diff-2" name="diff2"
-                value="<?= $data['diff2'] ?>" />
+                value="<?= $data['diff2'] ?>" >
             <button class="button-box" type="submit"><?=
                 tl('wiki_element_go') ?></button>
             </form>
@@ -1920,19 +1957,59 @@ class WikiElement extends Element implements CrawlConstants
         $icon_helper = $this->view->helper('iconlink');
         $simple_base_url = B\wikiUrl("", true,
             $data['CONTROLLER'], $data['GROUP']['GROUP_ID']) .
-            C\CSRF_TOKEN.'='.$data[C\CSRF_TOKEN];
+            C\CSRF_TOKEN . '=' . $data[C\CSRF_TOKEN];
         $base_url = htmlentities($simple_base_url);
+        $simple_view_url = B\wikiUrl($data['PAGE_NAME'], true,
+           $data['CONTROLLER'], $data['GROUP']['GROUP_ID']) .
+           C\CSRF_TOKEN . '=' . $data[C\CSRF_TOKEN];
+        $simple_current_url = $simple_view_url . "&arg=source";
+        $is_settings_view = !empty($data['settings']) &&
+            $data['settings'] != "false";
+        $is_resources_view = !empty($data['resources']) &&
+            $data['resources'] != "false";
+        $is_media_list =
+            !empty($data['page_type']) && $data['page_type'] == 'media_list';
+        $is_page_alias =
+            !empty($data['page_type']) && $data['page_type'] == 'page_alias';
+        $is_shortener =
+            !empty($data['page_type']) && $data['page_type'] == 'url_shortener';
+        $is_share =
+            !empty($data['page_type']) && $data['page_type'] == 'share';
+        if (!empty($data['SUB_PATH'])) {
+            $simple_view_url .= "&sf=".urlencode($data['SUB_PATH']);
+            $simple_current_url .= "&sf=".urlencode($data['SUB_PATH']);
+        }
+        $current_url = htmlentities($simple_current_url);
+        $new_settings = $is_settings_view ? "&amp;settings=false" :
+            "&amp;settings=true";
+        $new_resources = $is_resources_view ? "&amp;resources=false" :
+            "&amp;resources=true";
+        $is_settings_view = !empty($data['settings']) &&
+            $data['settings'] != "false";
+        $is_resources_view = !empty($data['resources']) &&
+            $data['resources'] != "false";
+        $settings_toggle_url = $current_url . $new_settings;
+        $resources_toggle_url = $current_url . $new_resources;
         $append = "";
         if (isset($data['OTHER_BACK_URL'])) {
             $append = $data['OTHER_BACK_URL'];
         }
-        ?>
-        <div class="float-opposite wiki-history-discuss" >
-        <?=
-        $icon_helper->renderButton( $base_url . $append .
-            '&amp;arg=history&amp;page_id='.$data['PAGE_ID'], "history");
-        ?>
-        </div>
+        $icon_helper = $this->view->helper('iconlink');
+        if ($is_settings_view || $is_resources_view) {
+            $toggle_url = ($is_settings_view) ? $settings_toggle_url :
+                $resources_toggle_url;
+            ?>
+            <div class="float-opposite" ><?=
+            $this->view->helper('close')->render($toggle_url);
+            ?></div>
+            <?php
+        } else { ?>
+            <div class="float-opposite wiki-history-discuss" >
+            <?=
+            $icon_helper->renderButton( $base_url . $append .
+                '&amp;arg=history&amp;page_id='.$data['PAGE_ID'], "history");?>
+            </div><?php
+        } ?>
         <form id="editpageForm" onsubmit="
             var caret_pos = elt('caret-pos');
             var scroll_top = elt('scroll-top');
@@ -1945,11 +2022,11 @@ class WikiElement extends Element implements CrawlConstants
                 wiki_page.scrollTop : 0;
             }" >
             <input type="hidden" name="c" value="<?=$data['CONTROLLER']
-            ?>" />
+            ?>" >
             <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?=
-                $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="a" value="wiki" />
-            <input type="hidden" name="arg" value="source" />
+                $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="a" value="wiki" >
+            <input type="hidden" name="arg" value="source" >
             <?php
             if (isset($data['BACK_PARAMS'])) {
                 foreach ($data["BACK_PARAMS"] as
@@ -1958,37 +2035,39 @@ class WikiElement extends Element implements CrawlConstants
                         . 'name="' . $back_param_key .
                         '" value="' .
                         $back_param_value
-                        . '" />');
+                        . '" >');
                 }
             }
             ?>
             <input type="hidden" name="group_id" value="<?=
-                $data['GROUP']['GROUP_ID'] ?>" />
+                $data['GROUP']['GROUP_ID'] ?>" >
             <input type="hidden" name="page_name" value="<?=
-                $data['PAGE_NAME'] ?>" />
-            <input type="hidden" name="caret" id="caret-pos"/>
-            <input type="hidden" name="scroll_top" id="scroll-top"/>
+                $data['PAGE_NAME'] ?>" >
+            <input type="hidden" name="caret" id="caret-pos" >
+            <input type="hidden" name="scroll_top" id="scroll-top" >
             <input type="hidden" id="p-settings" name="settings" value="<?=
-                $data['settings'] ?>"/>
+                $data['settings'] ?>" >
             <div class="top-margin">
                 <b><?=tl('wiki_element_locale_name',
-                    $data['CURRENT_LOCALE_TAG']) ?></b><br />
+                    $data['CURRENT_LOCALE_TAG']) ?></b><br>
                 <b><label for="wiki-page"><?php
                 $human_page_name = preg_replace("/\_/", " ",
                     urldecode($data['PAGE_NAME']));
                 e(tl('wiki_element_page', $human_page_name));
-                ?></label></b> <div id="toggle-settings"
-                ><script>
-                <?php
-                $new_settings = (empty($data['settings']) ||
-                    $data['settings'] == "false") ? "&amp;settings=true" :
-                    "&amp;settings=false";
-                $toggle_settings_html =
+                ?></label></b><?php
+                if (!$is_settings_view && !$is_resources_view) { ?>
+                    <div id="toggle-settings">
+                    <?php
                     $icon_helper->renderButton(['settings-toggle-button',
-                        "javascript:toggleSettings()"], 'settings', "", true);
-                ?>
-                document.write("<?=$toggle_settings_html ?>");
-                </script></div>
+                        $settings_toggle_url], 'settings', "");
+                    if (!$is_media_list && !$is_page_alias && !$is_share &&
+                        !$is_shortener) {
+                        $icon_helper->renderButton(
+                            ['resources-toggle-button',
+                            $resources_toggle_url], 'resources', "");
+                    }?>
+                    </div><?php
+                } ?>
             </div>
             <div id='page-settings'>
             <div class="top-margin">
@@ -2004,7 +2083,7 @@ class WikiElement extends Element implements CrawlConstants
             <label for="page-alias"><b><?=tl('wiki_element_page_alias')
             ?></b></label><input type="text" id='page-alias' disabled="disabled"
                 name="page_alias" value="<?= $data['page_alias']?>"
-                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             </div>
             <div id='non-alias-type'>
@@ -2023,28 +2102,28 @@ class WikiElement extends Element implements CrawlConstants
                     $checked = (isset($data['toc']) && $data['toc']) ?
                     'checked="checked"' : '';
                     e( $checked );
-                ?> id='page-toc' disabled="disabled" />
+                ?> id='page-toc' disabled="disabled" >
             </div>
             <div class="top-margin">
             <label for="page-title"><b><?=tl('wiki_element_title')
             ?></b></label><input type="text" id='page-title'
                 disabled="disabled"
                 name="title" value="<?=$data['title'] ?>"
-                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="meta-author"><b><?=tl('wiki_element_meta_author')
             ?></b></label><input type="text" id='meta-author'
                 name="author" value="<?= $data['author']?>"
                 disabled="disabled"
-                maxlength="<?= C\LONG_NAME_LEN ?>" class="wide-field"/>
+                maxlength="<?= C\LONG_NAME_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="meta-robots"><b><?=tl('wiki_element_meta_robots')
             ?></b></label><input type="text" id='meta-robots'
                 disabled="disabled"
                 name="robots" value="<?= $data['robots'] ?>"
-                maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field"/>
+                maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="meta-description"><b><?=
@@ -2074,7 +2153,7 @@ class WikiElement extends Element implements CrawlConstants
                     ?>" name="alternative_path" value="<?=
                     $data['alternative_path'] ?>"
                     disabled="disabled"
-                    maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field"/>
+                    maxlength="<?=C\LONG_NAME_LEN ?>" class="wide-field" >
                 </div>
                 <?php
             }
@@ -2084,32 +2163,35 @@ class WikiElement extends Element implements CrawlConstants
             ?></b></label><input type="text" id='page-header'
                 name="page_header" value="<?=$data['page_header']?>"
                 disabled="disabled"
-                maxlength="<?=C\SHORT_TITLE_LEN ?>" class="wide-field"/>
+                maxlength="<?=C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             <div class="top-margin">
             <label for="page-footer"><b><?=tl('wiki_element_page_footer')
             ?></b></label><input type="text" id='page-footer'
                 name="page_footer" value="<?=$data['page_footer'] ?>"
                 disabled="disabled"
-                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field"/>
-            </div>
+                maxlength="<?= C\SHORT_TITLE_LEN ?>" class="wide-field" >
             </div>
             </div>
+        </div><?php
+        if (!$is_media_list && !$is_resources_view && !$is_settings_view) {?>
             <div id='page-container'><textarea id="wiki-page"
                 class="tall-text-area" name="page" data-buttons='none'
                 disabled="disabled"><?= $data['PAGE']
                 ?></textarea>
-            </div>
+            </div><?php
+        } ?>
         </form>
-        <div id="page-resources">
-        <h3><?= tl('wiki_element_page_resources')?></h3>
-        <p><?= tl('wiki_element_resources_info') ?></p>
-        </div>
         <?php
+        if (($is_media_list && !$is_settings_view )|| $is_resources_view) {?>
+            <div id="page-resources">
+            <h3><?= tl('wiki_element_page_resources')?></h3>
+            <p><?= tl('wiki_element_resources_info') ?></p>
+            </div><?php
             $this->renderResources($data, "source");
-        ?>
-        </div>
-        <?php
+            ?></div>
+            <?php
+        }
     }
     /**
      * The controller used to display a wiki page might vary (could be
@@ -2178,7 +2260,7 @@ class WikiElement extends Element implements CrawlConstants
         $pre_page = preg_replace('/\[{just\-token}\]/', $data[C\CSRF_TOKEN],
             $pre_page);
         $pre_page = preg_replace('/\[{image-captcha}\]/',
-            "<img src='". ($data["CAPTCHA_IMAGE"] ?? "") ."' alt='captcha' />",
+            "<img src='". ($data["CAPTCHA_IMAGE"] ?? "") ."' alt='captcha' >",
             $pre_page);
         $pre_page = preg_replace('/\[{username}\]/',
             $_SESSION['USER_NAME'] ?? "PUBLIC_USER", $pre_page);
diff --git a/src/views/helpers/CloseHelper.php b/src/views/helpers/CloseHelper.php
index 63350feee..5b290aab1 100644
--- a/src/views/helpers/CloseHelper.php
+++ b/src/views/helpers/CloseHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/EmojipickerHelper.php b/src/views/helpers/EmojipickerHelper.php
index f8b76e505..cc723bdf8 100644
--- a/src/views/helpers/EmojipickerHelper.php
+++ b/src/views/helpers/EmojipickerHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/FeedsHelper.php b/src/views/helpers/FeedsHelper.php
index bf9eb79ec..a2cdd225a 100644
--- a/src/views/helpers/FeedsHelper.php
+++ b/src/views/helpers/FeedsHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -158,7 +158,7 @@ class FeedsHelper extends Helper implements CrawlConstants
             $link_scheme = substr($page[self::IMAGE_LINK], 0, 7);
             if ($link_scheme == "data:im") {
                 $image_string = "<img class='float-same' ".
-                    "src='{$page[self::IMAGE_LINK]}' alt='' />";
+                    "src='{$page[self::IMAGE_LINK]}' alt='' >";
             } else if ($link_scheme == "feed://") {
                 $image_link_parts = explode("/", $page[self::IMAGE_LINK]);
                 if (!empty($image_link_parts[3])) {
@@ -183,7 +183,7 @@ class FeedsHelper extends Helper implements CrawlConstants
                         "&amp;t=feed&amp;sf=$sf" . "&amp;n=$image_hash";
                 }
                 $image_string = "<img class='float-same' ".
-                    "src='$image_url' alt='' />";
+                    "src='$image_url' alt='' >";
             }
         }
         ?>
diff --git a/src/views/helpers/FiletypeHelper.php b/src/views/helpers/FiletypeHelper.php
index 4a2742a06..eac510c26 100644
--- a/src/views/helpers/FiletypeHelper.php
+++ b/src/views/helpers/FiletypeHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/FileuploadHelper.php b/src/views/helpers/FileuploadHelper.php
index ced6d6d89..aa20f7954 100644
--- a/src/views/helpers/FileuploadHelper.php
+++ b/src/views/helpers/FileuploadHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -81,7 +81,7 @@ class FileUploadHelper extends Helper
         <?php
         if ($drop_kind == 'immediate') { ?>
             document.write('<input type="file" id="<?= $elt_id ?>" ' +
-            'name="<?= $form_name ?>" class="none" />');
+            'name="<?= $form_name ?>" class="none" >');
             <?php
         } else {?>
             document.write('<div class="upload-box">' +
@@ -92,7 +92,7 @@ class FileUploadHelper extends Helper
                     e(' accept="image/*" ');
                 } else if ($multiple) {
                     e(' multiple="multiple" ');
-                } ?> /> '+
+                } ?> > '+
                 '<?= $drag_above_text ?>' +
                 '<a href="javascript:elt(' + "'<?=
                 $elt_id ?>'" + ').click()"><?= $click_link_text ?></a> ' +
@@ -111,7 +111,7 @@ class FileUploadHelper extends Helper
         </script>
         <noscript>
         <input type="file" id="<?= $elt_id ?>" name="<?= $form_name
-            ?>" /><button type="submit"><?=
+            ?>" ><button type="submit"><?=
             tl('fileupload_helper_upload') ?></button>
         </noscript>
         <?php
diff --git a/src/views/helpers/GrouplistHelper.php b/src/views/helpers/GrouplistHelper.php
index fadf32ef7..496ff7fd7 100644
--- a/src/views/helpers/GrouplistHelper.php
+++ b/src/views/helpers/GrouplistHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -93,7 +93,7 @@ class GrouplistHelper extends Helper
             }
             $main_wiki_url = htmlentities(B\wikiUrl("", true,
                 $controller, $group['GROUP_ID'])) . $token;
-            $mobile_br = ($is_mobile) ? "<br />": "";
+            $mobile_br = ($is_mobile) ? "<br>": "";
             $desk_b = ($is_mobile) ? "": "<b>";
             $desk_bend = ($is_mobile) ? "": "</b>";
             if ($context === "join_groups" &&
diff --git a/src/views/helpers/HamburgerHelper.php b/src/views/helpers/HamburgerHelper.php
index ba2260891..5d545eeb9 100644
--- a/src/views/helpers/HamburgerHelper.php
+++ b/src/views/helpers/HamburgerHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/HelpbuttonHelper.php b/src/views/helpers/HelpbuttonHelper.php
index fbd2bd044..0f6d7c870 100644
--- a/src/views/helpers/HelpbuttonHelper.php
+++ b/src/views/helpers/HelpbuttonHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Eswara Rajesh Pinapala epinapala@live.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/Helper.php b/src/views/helpers/Helper.php
index ac1ae7210..05dd0c7b1 100755
--- a/src/views/helpers/Helper.php
+++ b/src/views/helpers/Helper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/IconlinkHelper.php b/src/views/helpers/IconlinkHelper.php
index a0e1f57c5..723e05d4b 100644
--- a/src/views/helpers/IconlinkHelper.php
+++ b/src/views/helpers/IconlinkHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -85,6 +85,7 @@ class IconlinkHelper extends Helper
             "play" => [tl('iconlink_helper_group_play'), '▶️'],
             "query_stats" => [ tl('iconlink_helper_query_stats'), '📈'],
             "reset" => [ tl('iconlink_helper_reset'), 'X'],
+            "resources" => [ tl('iconlink_helper_resources'), '🗄️'],
             "search" => [ tl('iconlink_helper_search'), '🔍'],
             "settings" => [ tl('iconlink_helper_settings'),
                 "<b class='black medium-font'>⚙</b>"],
@@ -201,7 +202,7 @@ class IconlinkHelper extends Helper
         if (is_array($url) && !empty($url[1]) && !empty($icon_info[2])) {
             list($url, $translate_aux,) = $url;
              $icon_info[2] = tl($icon_info[2], $translate_aux);
-             $icon = "<div class='inline align-opposite'>$icon<br />".
+             $icon = "<div class='inline align-opposite'>$icon<br>".
                 "<span class='tiny-font' style='position:relative; top: -8px;'".
                 ">$translate_aux</span></div>";
         }
diff --git a/src/views/helpers/ImagesHelper.php b/src/views/helpers/ImagesHelper.php
index 2275c7dad..864ddc586 100644
--- a/src/views/helpers/ImagesHelper.php
+++ b/src/views/helpers/ImagesHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -89,7 +89,7 @@ class ImagesHelper extends Helper implements CrawlConstants
             if ($open_in_tabs) { ?>
                 target="_blank" <?php
             }?>><img src="<?=
-            $page[self::THUMB] ?>" alt="<?= $title ?>" /></a><?php
+            $page[self::THUMB] ?>" alt="<?= $title ?>" ></a><?php
             if (!empty($page[self::WIDTH]) && !empty($page[self::HEIGHT])) {?>
                 <div class="image-dim"><?=
                 $page[self::WIDTH]?>x<?=$page[self::HEIGHT]?></div>
diff --git a/src/views/helpers/OptionsHelper.php b/src/views/helpers/OptionsHelper.php
index 5be8b3180..1c7fa5c9a 100755
--- a/src/views/helpers/OptionsHelper.php
+++ b/src/views/helpers/OptionsHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/PaginationHelper.php b/src/views/helpers/PaginationHelper.php
index 5e383cb3a..1cd2c0131 100755
--- a/src/views/helpers/PaginationHelper.php
+++ b/src/views/helpers/PaginationHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/PagingtableHelper.php b/src/views/helpers/PagingtableHelper.php
index 5a85e328d..0d94905df 100644
--- a/src/views/helpers/PagingtableHelper.php
+++ b/src/views/helpers/PagingtableHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -114,20 +114,20 @@ class PagingtableHelper extends Helper
             if ($name != "") {
                 $bound_url .= "&amp;name=" . $name;
             } ?>
-            <input type="hidden" name="c" value="admin" />
-            <input type="hidden" name="changeshow" value="true" />
+            <input type="hidden" name="c" value="admin" >
+            <input type="hidden" name="changeshow" value="true" >
             <input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-                value="<?php e($data[C\CSRF_TOKEN]); ?>" />
-            <input type="hidden" name="a" value="<?= $activity ?>" />
+                value="<?php e($data[C\CSRF_TOKEN]); ?>" >
+            <input type="hidden" name="a" value="<?= $activity ?>" >
             <?php
             if (!empty($data['context']) || $data[$d['FORM_TYPE']] == 'search'){
                 ?>
-                <input type="hidden" name="arg" value="<?=$search_arg ?>" />
+                <input type="hidden" name="arg" value="<?=$search_arg ?>" >
                 <?php
             }
             if (!empty($data['browse'])) {
                 ?>
-                <input type="hidden" name="browse" value="true" />
+                <input type="hidden" name="browse" value="true" >
                 <?php
             }
             e("<b><label for='{$var_prefix}num-show'>".
@@ -135,7 +135,7 @@ class PagingtableHelper extends Helper
             $data['VIEW']->helper("options")->render(
                 "{$var_prefix}num-show", "{$var_prefix}num_show",
                 $this->show_choices, $data[$d['NUM_SHOW']], true);
-            e("<br />");
+            e("<br>");
             if ($data[$d['START_ROW']] > 0) {
                 ?>
                 <a href="<?= $bound_url . "&amp;$start_row=".
@@ -242,20 +242,20 @@ class PagingtableHelper extends Helper
                 <?php
             }
             ?>
-            <input type="hidden" name="c" value="admin" />
-            <input type="hidden" name="changeshow" value="true" />
+            <input type="hidden" name="c" value="admin" >
+            <input type="hidden" name="changeshow" value="true" >
             <input type="hidden" name="<?= C\CSRF_TOKEN ?>"
-                value="<?= $data[C\CSRF_TOKEN] ?>" />
-            <input type="hidden" name="a" value="<?= $activity ?>" />
+                value="<?= $data[C\CSRF_TOKEN] ?>" >
+            <input type="hidden" name="a" value="<?= $activity ?>" >
             <?php
                 if (!empty($data['context']) || $data['FORM_TYPE'] == 'search'){
                     ?>
-                    <input type="hidden" name="arg" value="<?=$search_arg ?>" />
+                    <input type="hidden" name="arg" value="<?=$search_arg ?>" >
                     <?php
                 }
                 if (!empty($data['browse'])) {
                     ?>
-                    <input type="hidden" name="browse" value="true" />
+                    <input type="hidden" name="browse" value="true" >
                     <?php
                 }
                 e("<b><label for='{$var_prefix}num-show'>".
diff --git a/src/views/helpers/SearchformHelper.php b/src/views/helpers/SearchformHelper.php
index 0e54ef466..9c9be2ccb 100644
--- a/src/views/helpers/SearchformHelper.php
+++ b/src/views/helpers/SearchformHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -77,19 +77,19 @@ class SearchformHelper extends Helper
         }
         ?>
         <h2><?= $title . "&nbsp;" ?> </h2><?php
-        $item_sep = ($_SERVER["MOBILE"]) ? "<br />" : "</td><td>";
-        $item_sep_center = ($_SERVER["MOBILE"]) ? "<br />" :
+        $item_sep = ($_SERVER["MOBILE"]) ? "<br>" : "</td><td>";
+        $item_sep_center = ($_SERVER["MOBILE"]) ? "<br>" :
             "</td><td class='center'>";
         ?>
         <form id="search-form" method="get" autocomplete="off">
-        <input type="hidden" name="c" value="<?= $controller ?>" />
+        <input type="hidden" name="c" value="<?= $controller ?>" >
         <input type="hidden" name="<?=C\CSRF_TOKEN  ?>" value="<?=
-            $data[C\CSRF_TOKEN] ?>" />
-        <input type="hidden" name="a" value="<?= $activity ?>" />
-        <input type="hidden" name="arg" value="<?=$search_arg?>" />
+            $data[C\CSRF_TOKEN] ?>" >
+        <input type="hidden" name="a" value="<?= $activity ?>" >
+        <input type="hidden" name="arg" value="<?=$search_arg?>" >
         <?php
         if ($browse) { ?>
-            <input type="hidden" name="browse" value="true" />
+            <input type="hidden" name="browse" value="true" >
             <?php
         }
         ?>
@@ -122,21 +122,21 @@ class SearchformHelper extends Helper
                     $dropdowns[$name]. "' " .
                     "id='{$out_id_name}-id-low' name='".$out_name . "_low' ".
                     "value='" . $data[$out_name . "_low"] .
-                    "' class='narrow-field'  /> <hr /> ");
+                    "' class='narrow-field'  > <hr > ");
                 e("<input type='". $dropdowns[$name]. "' " .
                     "id='{$out_id_name}-id-high' name='" . $out_name .
                     "_high' value='" . $data[$out_name . "_high"] .
-                    "' class='narrow-field'  /></div>");
+                    "' class='narrow-field'  ></div>");
             } else if (isset($dropdowns[$name]) && in_array($dropdowns[$name],
                 ['range'])) {
                 e("<div class='range-field' ><input type='number' " .
                     "id='{$out_id_name}-id-low' name='".$out_name."_low' ".
                     "value='" . $data[$out_name . "_low"].
-                    "' class='narrow-field'  /> <hr /> ");
+                    "' class='narrow-field'  > <hr > ");
                 e("<input type='number' " .
                     "id='{$out_id_name}-id-high' name='" . $out_name."_high' ".
                     "value='" . $data[$out_name . "_high"] .
-                    "' class='narrow-field'  /></div>");
+                    "' class='narrow-field'  ></div>");
             } else if (isset($dropdowns[$name])) {
                 $dropdowns[$name] =
                     ['-1' => tl('searchform_helper_any')] +
@@ -152,7 +152,7 @@ class SearchformHelper extends Helper
                 e("<input type='text' id='{$out_id_name}-id' name='$out_name' ".
                     "maxlength='". C\LONG_NAME_LEN. "' ".
                     "value='{$data[$out_name]}' ".
-                    "class='narrow-field'  />");
+                    "class='narrow-field'  >");
             }
             e($item_sep);
             $view->helper("options")->render("{$out_id_name}-sort",
diff --git a/src/views/helpers/ToggleHelper.php b/src/views/helpers/ToggleHelper.php
index 89a5bd9ca..a61055309 100644
--- a/src/views/helpers/ToggleHelper.php
+++ b/src/views/helpers/ToggleHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
diff --git a/src/views/helpers/VideosHelper.php b/src/views/helpers/VideosHelper.php
index c54ad606a..404f99363 100644
--- a/src/views/helpers/VideosHelper.php
+++ b/src/views/helpers/VideosHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -141,7 +141,7 @@ class VideosHelper extends Helper implements CrawlConstants
                 ?>" rel="noopener nofollow noreferer" ><img class="video-thumb"
                 <?= $open_in_tabs ?> src="<?=
                     $page[self::THUMB] ?? $default_thumb ?>"
-                alt="<?= tl('video_helper_videothumb'); ?>" />
+                alt="<?= tl('video_helper_videothumb'); ?>" >
             </a>
             <div class="video-quality"><?= $quality ?></div>
             <div class="video-play-button"><?=
@@ -182,7 +182,7 @@ class VideosHelper extends Helper implements CrawlConstants
                 "&amp;a=cache&amp;field=favicon&amp;arg=" . urlencode(
                     $page[self::FAVICON_URL]). "&amp;its=".
                     $page[self::CRAWL_TIME]
-                ?>" /><?php
+                ?>" ><?php
             }?><?= $site_name . $pub_date ?></div>
             </figcaption>
             </figure><?php
diff --git a/src/views/helpers/VideourlHelper.php b/src/views/helpers/VideourlHelper.php
index 7835c6f1f..fead2579c 100644
--- a/src/views/helpers/VideourlHelper.php
+++ b/src/views/helpers/VideourlHelper.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\helpers;
@@ -53,9 +53,9 @@ class VideourlHelper extends Helper
             target="_blank" rel="noopener"<?php
         }?>><img
         class="thumb" src="<?= $data_url  ?>"
-        alt="<?php e(tl('videourl_helper_videothumb')); ?>" />
+        alt="<?php e(tl('videourl_helper_videothumb')); ?>" >
         <img class="video-play" src="<?=C\SHORT_BASE_URL
-            ?>resources/play.png" alt="" />
+            ?>resources/play.png" alt="" >
         </a>
         <?php
     }
diff --git a/src/views/layouts/ApiLayout.php b/src/views/layouts/ApiLayout.php
index 378c184a1..096a0bf58 100644
--- a/src/views/layouts/ApiLayout.php
+++ b/src/views/layouts/ApiLayout.php
@@ -3,7 +3,7 @@
  *  SeekQuarry/Yioop --
  *  Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- *  Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ *  Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  *  LICENSE:
  *
@@ -25,7 +25,7 @@
  *  @author Eswara Rajesh Pinapala epinapala@live.com
  *  @license https://www.gnu.org/licenses/ GPL3
  *  @link https://www.seekquarry.com/
- *  @copyright 2009 - 2022
+ *  @copyright 2009 - 2023
  *  @filesource
  */
 namespace seekquarry\yioop\views\layouts;
diff --git a/src/views/layouts/Layout.php b/src/views/layouts/Layout.php
index 10c67fc90..f216b7fbe 100755
--- a/src/views/layouts/Layout.php
+++ b/src/views/layouts/Layout.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\layouts;
diff --git a/src/views/layouts/RssLayout.php b/src/views/layouts/RssLayout.php
index 6e1ef0ba2..489bd3759 100644
--- a/src/views/layouts/RssLayout.php
+++ b/src/views/layouts/RssLayout.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\layouts;
@@ -88,9 +88,9 @@ if (!empty($data['QUERY'])) {?>
                 C\NUM_RESULTS_PER_PAGE
             ?></opensearch:itemsPerPage>
             <atom:link rel="search" type="application/opensearchdescription+xml"
-                href="<?= C\SEARCHBAR_PATH ?>"/>
+                href="<?= C\SEARCHBAR_PATH ?>" >
             <opensearch:Query role="request" searchTerms="<?=$data['QUERY']
-                ?>"/><?php
+                ?>" ><?php
         }
         $this->view->renderView($data); ?>
     </channel>
diff --git a/src/views/layouts/WebLayout.php b/src/views/layouts/WebLayout.php
index d8eba194f..53e746744 100755
--- a/src/views/layouts/WebLayout.php
+++ b/src/views/layouts/WebLayout.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\views\layouts;
@@ -58,7 +58,7 @@ class WebLayout extends Layout
         <html lang="<?= $data['LOCALE_TAG']; ?>" dir="<?=
             $data['LOCALE_DIR']?>" data-redirect="<?=
             (C\REDIRECTS_ON) ? 'true' : 'false'?>" data-base="<?=
-            C\SHORT_BASE_URL; ?>">
+            C\SHORT_BASE_URL; ?>" >
         <head>
         <title><?php
         if (!empty($data['page'])) {
@@ -74,7 +74,7 @@ class WebLayout extends Layout
         } ?></title><?php
         if (isset($this->view->head_objects['robots'])) {
             ?><meta name="ROBOTS" content="<?=
-            $this->view->head_objects['robots'] ?>" /><?php
+            $this->view->head_objects['robots'] ?>" ><?php
         }?>
         <meta name="description" content="<?php
         if (isset($page_id) &&
@@ -82,16 +82,16 @@ class WebLayout extends Layout
             e($this->view->head_objects[$page_id]['description']);
         } else {
             e(tl('web_layout_description'));
-        } ?>" />
-        <meta name="Author" content="<?=tl('web_layout_site_author') ?>" />
-        <meta name="referrer" content="strict-origin-when-cross-origin" />
+        } ?>" >
+        <meta name="Author" content="<?=tl('web_layout_site_author') ?>" >
+        <meta name="referrer" content="strict-origin-when-cross-origin" >
         <?php
         if (C\nsdefined("GENERATOR_STRING") &&
             C\GENERATOR_STRING != "") {?>
             <meta name="generator" content="<?=
-            C\GENERATOR_STRING ?>" /><?php
+            C\GENERATOR_STRING ?>" ><?php
         } ?>
-        <meta charset="utf-8" /><?php
+        <meta charset="utf-8" ><?php
         if (!empty($_SERVER["MOBILE"])) {?>
             <meta name="viewport"
                 content="width=device-width, initial-scale=1.0"><?php
@@ -108,7 +108,7 @@ class WebLayout extends Layout
                 if (count($property_parts) == 2) {
                     list($property, $prop_content) = $property_parts;?>
                     <meta property="<?=trim($property) ?>" content="<?=
-                        trim($prop_content) ?>" />
+                        trim($prop_content) ?>" >
                     <?php
                 }
             }
@@ -135,7 +135,7 @@ class WebLayout extends Layout
            avoid PRSSI attacks
            http://www.theregister.co.uk/2015/02/20/prssi_web_vuln/
          */ ?>
-        <link rel="icon" href="<?= $path_url . C\FAVICON ?>" /><?php
+        <link rel="icon" href="<?= $path_url . C\FAVICON ?>" ><?php
         $search_css = $path_url . 'css/search.css';
         if (file_exists(C\APP_DIR . '/css/search.css')) {
             if (C\REDIRECTS_ON) {
@@ -145,25 +145,25 @@ class WebLayout extends Layout
                     "f=css&amp;n=search.css";
             }
         } ?>
-        <link rel="stylesheet" type="text/css" href="<?=$search_css ?>" /><?php
+        <link rel="stylesheet" type="text/css" href="<?=$search_css ?>" ><?php
         if ($aux_css) { ?>
             <link rel="stylesheet" type="text/css"
-                href="<?=$aux_css ?>" /><?php
+                href="<?=$aux_css ?>" ><?php
         }
         if (C\nsdefined("SEARCHBAR_PATH") && C\SEARCHBAR_PATH != "") { ?>
             <link rel="search" type="application/opensearchdescription+xml"
                 href="<?=C\SEARCHBAR_PATH ?>"
-                title="Content search" /><?php
+                title="Content search" ><?php
         }
         if (!empty($data['RSS_FEED_URL'])) {?>
             <link rel="alternate" type="application/rss+xml"
-                href="<?=$data['RSS_FEED_URL'] ?>" /><?php
+                href="<?=$data['RSS_FEED_URL'] ?>" ><?php
         }
         if (isset($data['INCLUDE_STYLES'])) {
             foreach ($data['INCLUDE_STYLES'] as $style_name) {
                 e('<link rel="stylesheet" type="text/css"
                     href="'. $path_url . 'css/'.
-                    $style_name.'.css" />'."\n");
+                    $style_name.'.css" >'."\n");
             }
         } ?>
         <style>
@@ -338,7 +338,7 @@ class WebLayout extends Layout
             e("<h1>" . tl('web_layout_query_statistics')."</h1>");
             e("<div><b>".
                 $data['YIOOP_INSTANCE']
-                ."</b><br /><br />");
+                ."</b><br><br>");
             e("<b>".tl('web_layout_total_elapsed_time',
                  $data['TOTAL_ELAPSED_TIME'])."</b></div>");
             foreach ($data['QUERY_STATISTICS'] as $query_info) {
diff --git a/tests/BPlusTreeTest.php b/tests/BPlusTreeTest.php
index 0b5c15e19..9bfbd4fa3 100644
--- a/tests/BPlusTreeTest.php
+++ b/tests/BPlusTreeTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/BloomFilterFileTest.php b/tests/BloomFilterFileTest.php
index 6dc606773..ed5eb0d15 100755
--- a/tests/BloomFilterFileTest.php
+++ b/tests/BloomFilterFileTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/BmpProcessorTest.php b/tests/BmpProcessorTest.php
index 5d11829e8..576224096 100644
--- a/tests/BmpProcessorTest.php
+++ b/tests/BmpProcessorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/CrawlQueueBundleTest.php b/tests/CrawlQueueBundleTest.php
index 1d1b5cf5b..a9e79d66d 100644
--- a/tests/CrawlQueueBundleTest.php
+++ b/tests/CrawlQueueBundleTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/DeTokenizerTest.php b/tests/DeTokenizerTest.php
index 50421fc1c..86000fa24 100644
--- a/tests/DeTokenizerTest.php
+++ b/tests/DeTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/DocxProcessorTest.php b/tests/DocxProcessorTest.php
index 2016d931a..382d61608 100644
--- a/tests/DocxProcessorTest.php
+++ b/tests/DocxProcessorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Nakul Natu nakul.natu@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/ElTokenizerTest.php b/tests/ElTokenizerTest.php
index ac6d690ca..304d93cb1 100644
--- a/tests/ElTokenizerTest.php
+++ b/tests/ElTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/EnTokenizerTest.php b/tests/EnTokenizerTest.php
index 355f47663..585b136b9 100644
--- a/tests/EnTokenizerTest.php
+++ b/tests/EnTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/EpubProcessorTest.php b/tests/EpubProcessorTest.php
index 09c6cb3a3..de5aafb29 100644
--- a/tests/EpubProcessorTest.php
+++ b/tests/EpubProcessorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Vijeth Patil vijeth.patil@gmail.coms
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/EsTokenizerTest.php b/tests/EsTokenizerTest.php
index de97ded73..a25ee8f20 100644
--- a/tests/EsTokenizerTest.php
+++ b/tests/EsTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/FaTokenizerTest.php b/tests/FaTokenizerTest.php
index f71684f57..095364d4f 100644
--- a/tests/FaTokenizerTest.php
+++ b/tests/FaTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/FetchUrlTest.php b/tests/FetchUrlTest.php
index 94ec6ecaf..569bdc14a 100644
--- a/tests/FetchUrlTest.php
+++ b/tests/FetchUrlTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/FrTokenizerTest.php b/tests/FrTokenizerTest.php
index f15d80924..949c14e0c 100644
--- a/tests/FrTokenizerTest.php
+++ b/tests/FrTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/HashTableTest.php b/tests/HashTableTest.php
index 0bc1e854c..c8b295f14 100755
--- a/tests/HashTableTest.php
+++ b/tests/HashTableTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/HiTokenizerTest.php b/tests/HiTokenizerTest.php
index 7bd997fa4..716e149e7 100644
--- a/tests/HiTokenizerTest.php
+++ b/tests/HiTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/IconProcessorTest.php b/tests/IconProcessorTest.php
index f4017666e..728f98aba 100644
--- a/tests/IconProcessorTest.php
+++ b/tests/IconProcessorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/IndexDictionaryTest.php b/tests/IndexDictionaryTest.php
index 74f74891b..07a1057bf 100644
--- a/tests/IndexDictionaryTest.php
+++ b/tests/IndexDictionaryTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/IndexDocumentBundleTest.php b/tests/IndexDocumentBundleTest.php
index 515145368..51eb979ec 100644
--- a/tests/IndexDocumentBundleTest.php
+++ b/tests/IndexDocumentBundleTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -27,7 +27,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/IndexManagerTest.php b/tests/IndexManagerTest.php
index 9160524c2..16c726f5f 100644
--- a/tests/IndexManagerTest.php
+++ b/tests/IndexManagerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -27,7 +27,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/IndexShardTest.php b/tests/IndexShardTest.php
index d88a819f3..4bf9ff4cc 100644
--- a/tests/IndexShardTest.php
+++ b/tests/IndexShardTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/ItTokenizerTest.php b/tests/ItTokenizerTest.php
index fe05b2b02..c972adfb2 100644
--- a/tests/ItTokenizerTest.php
+++ b/tests/ItTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/LinearHashTableTest.php b/tests/LinearHashTableTest.php
index b50f7cc67..dfb8e583e 100644
--- a/tests/LinearHashTableTest.php
+++ b/tests/LinearHashTableTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -27,7 +27,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/ManyScrapersExperiment.php b/tests/ManyScrapersExperiment.php
index 1c9699f63..e9a747d2e 100644
--- a/tests/ManyScrapersExperiment.php
+++ b/tests/ManyScrapersExperiment.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -26,7 +26,7 @@
  *  (changed to web scrapers by Chris Pollett)
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/ManyUserExperiment.php b/tests/ManyUserExperiment.php
index a9dd6819c..18c180c33 100644
--- a/tests/ManyUserExperiment.php
+++ b/tests/ManyUserExperiment.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.orgs
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/NlTokenizerTest.php b/tests/NlTokenizerTest.php
index 1aa854e7e..c2e5b6ade 100644
--- a/tests/NlTokenizerTest.php
+++ b/tests/NlTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/PackedTableToolsTest.php b/tests/PackedTableToolsTest.php
index a7924ce68..90042d959 100644
--- a/tests/PackedTableToolsTest.php
+++ b/tests/PackedTableToolsTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -27,7 +27,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/PdfProcessorTest.php b/tests/PdfProcessorTest.php
index ce5a460e0..0677f2fec 100644
--- a/tests/PdfProcessorTest.php
+++ b/tests/PdfProcessorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/PhraseParserTest.php b/tests/PhraseParserTest.php
index 2dbf7ae4f..7c1e4ca08 100644
--- a/tests/PhraseParserTest.php
+++ b/tests/PhraseParserTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/PptxProcessorTest.php b/tests/PptxProcessorTest.php
index 4d2c4015e..32ab38f42 100644
--- a/tests/PptxProcessorTest.php
+++ b/tests/PptxProcessorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Nakul Natu nakul.natu@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/PriorityQueueTest.php b/tests/PriorityQueueTest.php
index 3eb23b9a6..d78f80076 100755
--- a/tests/PriorityQueueTest.php
+++ b/tests/PriorityQueueTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/PtTokenizerTest.php b/tests/PtTokenizerTest.php
index 48b8ad0f6..a16a62cf2 100644
--- a/tests/PtTokenizerTest.php
+++ b/tests/PtTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Niravkumar Patel niravkumar.patel1989@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/QueueServerTest.php b/tests/QueueServerTest.php
index f900dabc7..f90c46c0a 100644
--- a/tests/QueueServerTest.php
+++ b/tests/QueueServerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/RuTokenizerTest.php b/tests/RuTokenizerTest.php
index 2574603e0..428ff65d0 100644
--- a/tests/RuTokenizerTest.php
+++ b/tests/RuTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/ScraperManagerTest.php b/tests/ScraperManagerTest.php
index 56184f5f5..a0f2f1ea4 100644
--- a/tests/ScraperManagerTest.php
+++ b/tests/ScraperManagerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Charles Bocage charles.bocage@sjsu.edu
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/Sha1JavascriptTest.php b/tests/Sha1JavascriptTest.php
index d6a161354..9993ac852 100644
--- a/tests/Sha1JavascriptTest.php
+++ b/tests/Sha1JavascriptTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/SocketExperiment.php b/tests/SocketExperiment.php
index ea8b7dceb..5664cf2d1 100755
--- a/tests/SocketExperiment.php
+++ b/tests/SocketExperiment.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -39,7 +39,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/StringArrayTest.php b/tests/StringArrayTest.php
index f9037cd19..cb2e41fb3 100644
--- a/tests/StringArrayTest.php
+++ b/tests/StringArrayTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/StringCatExperiment.php b/tests/StringCatExperiment.php
index f5bfa5680..24a47a6c4 100644
--- a/tests/StringCatExperiment.php
+++ b/tests/StringCatExperiment.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/TrieTest.php b/tests/TrieTest.php
index efe4b9b9c..70e39f07e 100755
--- a/tests/TrieTest.php
+++ b/tests/TrieTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/UrlParserTest.php b/tests/UrlParserTest.php
index 03ce5e604..e21e8d0eb 100644
--- a/tests/UrlParserTest.php
+++ b/tests/UrlParserTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/UtilityTest.php b/tests/UtilityTest.php
index 38abafb47..05fec1e26 100644
--- a/tests/UtilityTest.php
+++ b/tests/UtilityTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/VersionManagerTest.php b/tests/VersionManagerTest.php
index 7040a4731..518da819a 100644
--- a/tests/VersionManagerTest.php
+++ b/tests/VersionManagerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/WebArchiveTest.php b/tests/WebArchiveTest.php
index ea03d5508..fe6d57f69 100755
--- a/tests/WebArchiveTest.php
+++ b/tests/WebArchiveTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/WikiParserTest.php b/tests/WikiParserTest.php
index bfaf9b92c..050b8f899 100644
--- a/tests/WikiParserTest.php
+++ b/tests/WikiParserTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/WordIteratorTest.php b/tests/WordIteratorTest.php
index f3be8bc02..890817d16 100644
--- a/tests/WordIteratorTest.php
+++ b/tests/WordIteratorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -27,7 +27,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/XlsxProcessorTest.php b/tests/XlsxProcessorTest.php
index fbcada812..68d1c7bd0 100644
--- a/tests/XlsxProcessorTest.php
+++ b/tests/XlsxProcessorTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Tarun Ramaswamy tarun.pepira@gmail.com
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/ZhTokenizerTest.php b/tests/ZhTokenizerTest.php
index 82c918d20..a07a90813 100644
--- a/tests/ZhTokenizerTest.php
+++ b/tests/ZhTokenizerTest.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -25,7 +25,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop\tests;
diff --git a/tests/test_files/VocabSampler.php b/tests/test_files/VocabSampler.php
index 2e1db3850..13699948f 100644
--- a/tests/test_files/VocabSampler.php
+++ b/tests/test_files/VocabSampler.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
@@ -28,7 +28,7 @@
  * @author Chris Pollett chris@pollett.org
  * @license https://www.gnu.org/licenses/ GPL3
  * @link https://www.seekquarry.com/
- * @copyright 2009 - 2022
+ * @copyright 2009 - 2023
  * @filesource
  */
 namespace seekquarry\yioop;
diff --git a/tests/test_files/scrapers/Drupal01.txt b/tests/test_files/scrapers/Drupal01.txt
index 4be3c9043..6c84d4056 100644
--- a/tests/test_files/scrapers/Drupal01.txt
+++ b/tests/test_files/scrapers/Drupal01.txt
@@ -1,38 +1,38 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<meta name="keywords" content="Jaguars, Football, Sports" />
-<meta name="description" content="Jaguars offensive coordinator Greg Olson was refreshingly blunt after practice Wednesday when detailing the team’s red zone woes.The Jaguars enter Sunday’s game at Tampa Bay having scored touchdowns on only4-of-11 trips (36.4 percent, fifth-worst in the NFL) inside the 20-yard line.“Really, it’s been execution more than anything,” Olson said. “When we look at the scheme, I think we’re targeting the right people, but the execution part has to be cleaned up.”Clean it up and the Jaguars might have a chance to win some games." />
-<meta property="og:title" content="Jaguars Insider: Offense has struggled in red zone through first month of play"/>
-<meta property="og:type" content="article"/>
-<meta property="og:url" content="http://jacksonville.com/sports/football/jaguars/2015-10-10/story/jaguars-insider-offense-has-struggled-red-zone"/>
-<meta property="og:site_name" content="jacksonville.com"/>
-<meta property="og:description" content="Jaguars offensive coordinator Greg Olson was refreshingly blunt after practice Wednesday when detailing the team&#039;s red zone woes."/>
-<meta property="og:image" content="http://jacksonville.com/sites/default/files/arob.jpg"/>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" ><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
+<meta name="keywords" content="Jaguars, Football, Sports" >
+<meta name="description" content="Jaguars offensive coordinator Greg Olson was refreshingly blunt after practice Wednesday when detailing the team’s red zone woes.The Jaguars enter Sunday’s game at Tampa Bay having scored touchdowns on only4-of-11 trips (36.4 percent, fifth-worst in the NFL) inside the 20-yard line.“Really, it’s been execution more than anything,” Olson said. “When we look at the scheme, I think we’re targeting the right people, but the execution part has to be cleaned up.”Clean it up and the Jaguars might have a chance to win some games." >
+<meta property="og:title" content="Jaguars Insider: Offense has struggled in red zone through first month of play" >
+<meta property="og:type" content="article" >
+<meta property="og:url" content="http://jacksonville.com/sports/football/jaguars/2015-10-10/story/jaguars-insider-offense-has-struggled-red-zone" >
+<meta property="og:site_name" content="jacksonville.com" >
+<meta property="og:description" content="Jaguars offensive coordinator Greg Olson was refreshingly blunt after practice Wednesday when detailing the team&#039;s red zone woes." >
+<meta property="og:image" content="http://jacksonville.com/sites/default/files/arob.jpg" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >

   		<script src='//www.googletagservices.com/tag/js/gpt.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/nmt_data.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/mbu/nmt_ads_jax.js'></script>
 <title>Jaguars Insider: Offense has struggled in red zone through first month of play | jacksonville.com</title>
-<meta name="application-name" content="Jacksonville.com"/>
-<meta name="msapplication-TileColor" content="#426ab2"/>
-<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png"/>
-<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" />
-<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png"/>
-<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png"/>
-<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png"/>
-<meta name="cXenseParse:recs:publishtime" content="2015-10-10T21:55:15Z" />
+<meta name="application-name" content="Jacksonville.com" >
+<meta name="msapplication-TileColor" content="#426ab2" >
+<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png" >
+<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" >
+<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png" >
+<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png" >
+<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png" >
+<meta name="cXenseParse:recs:publishtime" content="2015-10-10T21:55:15Z" >
 <meta name="cXenseParse:recs:articleid" content="662163">
-<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/arob_0.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/arob_0.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/arob_0.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_b78ab1e60734554e53ae58e07605fa14.css" />
-<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" />
+<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/arob_0.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/arob_0.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/arob_0.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_b78ab1e60734554e53ae58e07605fa14.css" >
+<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" >
 <script type="text/javascript" src="http://jacksonville.com/sites/default/files/js/js_d094133c6afc83a05b563ce33db36a52.js"></script>
 <script type="text/javascript">
 <!--//--><![CDATA[//><!--
@@ -41,11 +41,11 @@ jQuery.extend(Drupal.settings, {"basePath":"\/","Lightbox":{"fileLoadingImage":"
 </script>

 <!--[if lt IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" >
 <![endif]-->

 <!--[if IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" >
 <![endif]-->

 </head>
diff --git a/tests/test_files/scrapers/Drupal02.txt b/tests/test_files/scrapers/Drupal02.txt
index 6743fb04a..0a8ac26c1 100644
--- a/tests/test_files/scrapers/Drupal02.txt
+++ b/tests/test_files/scrapers/Drupal02.txt
@@ -1,38 +1,38 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<meta name="keywords" content="Jaguars, Football, Sports" />
-<meta name="description" content="Speaking to several hundred reporters in February at the NFL Scouting Combine, former Florida State quarterback Jameis Winston couldn’t hide his enthusiasm about being able to focus entirely on football.“This is the first time I’ve had an off-season, and I love just putting everything into this,” he said. “I’m a quarterback. This is what I do.”Eight months later and now the face of the Tampa Bay Buccaneers’ franchise, Winston’s opinion hasn’t changed." />
-<meta property="og:title" content="Rookie Jameis Winston learning piece by piece entering game against Jaguars"/>
-<meta property="og:type" content="article"/>
-<meta property="og:url" content="http://jacksonville.com/sports/football/jaguars/2015-10-10/story/rookie-jameis-winston-learning-piece-piece-entering-game"/>
-<meta property="og:site_name" content="jacksonville.com"/>
-<meta property="og:description" content="Tampa Bay is 1-3 entering Sunday&#039;s game against the 1-3 Jaguars, and Winston&#039;s results have been typical for a rookie quarterback."/>
-<meta property="og:image" content="http://jacksonville.com/sites/default/files/winston_11.jpg"/>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" ><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
+<meta name="keywords" content="Jaguars, Football, Sports" >
+<meta name="description" content="Speaking to several hundred reporters in February at the NFL Scouting Combine, former Florida State quarterback Jameis Winston couldn’t hide his enthusiasm about being able to focus entirely on football.“This is the first time I’ve had an off-season, and I love just putting everything into this,” he said. “I’m a quarterback. This is what I do.”Eight months later and now the face of the Tampa Bay Buccaneers’ franchise, Winston’s opinion hasn’t changed." >
+<meta property="og:title" content="Rookie Jameis Winston learning piece by piece entering game against Jaguars" >
+<meta property="og:type" content="article" >
+<meta property="og:url" content="http://jacksonville.com/sports/football/jaguars/2015-10-10/story/rookie-jameis-winston-learning-piece-piece-entering-game" >
+<meta property="og:site_name" content="jacksonville.com" >
+<meta property="og:description" content="Tampa Bay is 1-3 entering Sunday&#039;s game against the 1-3 Jaguars, and Winston&#039;s results have been typical for a rookie quarterback." >
+<meta property="og:image" content="http://jacksonville.com/sites/default/files/winston_11.jpg" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >

   		<script src='//www.googletagservices.com/tag/js/gpt.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/nmt_data.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/mbu/nmt_ads_jax.js'></script>
 <title>Rookie Jameis Winston learning piece by piece entering game against Jaguars | jacksonville.com</title>
-<meta name="application-name" content="Jacksonville.com"/>
-<meta name="msapplication-TileColor" content="#426ab2"/>
-<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png"/>
-<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" />
-<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png"/>
-<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png"/>
-<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png"/>
-<meta name="cXenseParse:recs:publishtime" content="2015-10-10T23:18:19Z" />
+<meta name="application-name" content="Jacksonville.com" >
+<meta name="msapplication-TileColor" content="#426ab2" >
+<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png" >
+<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" >
+<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png" >
+<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png" >
+<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png" >
+<meta name="cXenseParse:recs:publishtime" content="2015-10-10T23:18:19Z" >
 <meta name="cXenseParse:recs:articleid" content="662171">
-<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/14798984.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/14798984.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/14798984.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_b78ab1e60734554e53ae58e07605fa14.css" />
-<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" />
+<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/14798984.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/14798984.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/14798984.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_b78ab1e60734554e53ae58e07605fa14.css" >
+<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" >
 <script type="text/javascript" src="http://jacksonville.com/sites/default/files/js/js_d094133c6afc83a05b563ce33db36a52.js"></script>
 <script type="text/javascript">
 <!--//--><![CDATA[//><!--
@@ -41,11 +41,11 @@ jQuery.extend(Drupal.settings, {"basePath":"\/","Lightbox":{"fileLoadingImage":"
 </script>

 <!--[if lt IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" >
 <![endif]-->

 <!--[if IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" >
 <![endif]-->

 </head>
diff --git a/tests/test_files/scrapers/Drupal03.txt b/tests/test_files/scrapers/Drupal03.txt
index e7da9c05a..d289c095d 100644
--- a/tests/test_files/scrapers/Drupal03.txt
+++ b/tests/test_files/scrapers/Drupal03.txt
@@ -1,38 +1,38 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<meta name="keywords" content="Jaguars, Football, Sports" />
-<meta name="description" content="The Jaguars are now down to Plan B with their receiving corps.Bryan Walters and Tony Washington, who were both cut earlier this year, are now the team’s third and fourth receivers and Walters is the team’s slot receivers on passing downs. Allen Robinson and Allen Hurns remain the starters." />
-<meta property="og:title" content="Backup receivers Bryan Walters, Tony Washington asked to step up for Jaguars"/>
-<meta property="og:type" content="article"/>
-<meta property="og:url" content="http://jacksonville.com/sports/football/jaguars/2015-10-10/story/backup-receivers-bryan-walters-tony-washington-asked-step"/>
-<meta property="og:site_name" content="jacksonville.com"/>
-<meta property="og:description" content="The Jaguars are now down to Plan B with their receiving corps."/>
-<meta property="og:image" content="http://jacksonville.com/sites/default/files/waltersb.jpg"/>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" ><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
+<meta name="keywords" content="Jaguars, Football, Sports" >
+<meta name="description" content="The Jaguars are now down to Plan B with their receiving corps.Bryan Walters and Tony Washington, who were both cut earlier this year, are now the team’s third and fourth receivers and Walters is the team’s slot receivers on passing downs. Allen Robinson and Allen Hurns remain the starters." >
+<meta property="og:title" content="Backup receivers Bryan Walters, Tony Washington asked to step up for Jaguars" >
+<meta property="og:type" content="article" >
+<meta property="og:url" content="http://jacksonville.com/sports/football/jaguars/2015-10-10/story/backup-receivers-bryan-walters-tony-washington-asked-step" >
+<meta property="og:site_name" content="jacksonville.com" >
+<meta property="og:description" content="The Jaguars are now down to Plan B with their receiving corps." >
+<meta property="og:image" content="http://jacksonville.com/sites/default/files/waltersb.jpg" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >

   		<script src='//www.googletagservices.com/tag/js/gpt.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/nmt_data.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/mbu/nmt_ads_jax.js'></script>
 <title>Backup receivers Bryan Walters, Tony Washington asked to step up for Jaguars | jacksonville.com</title>
-<meta name="application-name" content="Jacksonville.com"/>
-<meta name="msapplication-TileColor" content="#426ab2"/>
-<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png"/>
-<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" />
-<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png"/>
-<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png"/>
-<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png"/>
-<meta name="cXenseParse:recs:publishtime" content="2015-10-10T22:37:01Z" />
+<meta name="application-name" content="Jacksonville.com" >
+<meta name="msapplication-TileColor" content="#426ab2" >
+<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png" >
+<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" >
+<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png" >
+<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png" >
+<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png" >
+<meta name="cXenseParse:recs:publishtime" content="2015-10-10T22:37:01Z" >
 <meta name="cXenseParse:recs:articleid" content="662166">
-<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/waltersb_0.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/waltersb_0.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/waltersb_0.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_2c72f7230d3e1c021c756365866fb3e5.css" />
-<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" />
+<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/waltersb_0.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/waltersb_0.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/waltersb_0.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_2c72f7230d3e1c021c756365866fb3e5.css" >
+<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" >
 <script type="text/javascript" src="http://jacksonville.com/sites/default/files/js/js_d094133c6afc83a05b563ce33db36a52.js"></script>
 <script type="text/javascript">
 <!--//--><![CDATA[//><!--
@@ -41,11 +41,11 @@ jQuery.extend(Drupal.settings, {"basePath":"\/","Lightbox":{"fileLoadingImage":"
 </script>

 <!--[if lt IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" >
 <![endif]-->

 <!--[if IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" >
 <![endif]-->

 </head>
diff --git a/tests/test_files/scrapers/Drupal04.txt b/tests/test_files/scrapers/Drupal04.txt
index 17857b3ae..f9bb95f75 100644
--- a/tests/test_files/scrapers/Drupal04.txt
+++ b/tests/test_files/scrapers/Drupal04.txt
@@ -1,41 +1,41 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<meta name="keywords" content="Florida Gators, College, Sports" />
-<meta name="description" content="SEC POWER POLL1. LSU (4-0) Easy win over South Carolina just got easier with game moved to Baton Rouge.2. TEXAS A&amp;M (5-0) Aggies’ defense needs to enjoy bye with Alabama coming to town next week.3. FLORIDA (5-0) Gators have to ride emotional wave to snap two-game losing streak to Missouri.4. ALABAMA (4-1)  Crimson Tide may have been down, but they certainly aren’t out." />
-<meta property="og:title" content="SEC power poll: LSU moves to top spot"/>
-<meta property="og:type" content="article"/>
-<meta property="og:url" content="http://jacksonville.com/sports/college/florida-gators/2015-10-08/story/sec-power-poll-lsu-moves-top-spot"/>
-<meta property="og:site_name" content="jacksonville.com"/>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" ><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,n,t){function r(t){if(!n[t]){var o=n[t]={exports:{}};e[t][0].call(o.exports,function(n){var o=e[t][1][n];return r(o?o:n)},o,o.exports)}return n[t].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<t.length;o++)r(t[o]);return r}({QJf3ax:[function(e,n){function t(e){function n(n,t,a){e&&e(n,t,a),a||(a={});for(var u=c(n),f=u.length,s=i(a,o,r),p=0;f>p;p++)u[p].apply(s,t);return s}function a(e,n){f[e]=c(e).concat(n)}function c(e){return f[e]||[]}function u(){return t(n)}var f={};return{on:a,emit:n,create:u,listeners:c,_events:f}}function r(){return{}}var o="nr@context",i=e("gos");n.exports=t()},{gos:"7eSDFh"}],ee:[function(e,n){n.exports=e("QJf3ax")},{}],3:[function(e,n){function t(e){return function(){r(e,[(new Date).getTime()].concat(i(arguments)))}}var r=e("handle"),o=e(1),i=e(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(e,n){window.NREUM[n]=t("api-"+n)}),n.exports=window.NREUM},{1:12,2:13,handle:"D5DuLP"}],"7eSDFh":[function(e,n){function t(e,n,t){if(r.call(e,n))return e[n];var o=t();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,n,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return e[n]=o,o}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],gos:[function(e,n){n.exports=e("7eSDFh")},{}],handle:[function(e,n){n.exports=e("D5DuLP")},{}],D5DuLP:[function(e,n){function t(e,n,t){return r.listeners(e).length?r.emit(e,n,t):(o[e]||(o[e]=[]),void o[e].push(n))}var r=e("ee").create(),o={};n.exports=t,t.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(e,n){n.exports=e("XL7HBI")},{}],XL7HBI:[function(e,n){function t(e){var n=typeof e;return!e||"object"!==n&&"function"!==n?-1:e===window?0:i(e,o,function(){return r++})}var r=1,o="nr@id",i=e("gos");n.exports=t},{gos:"7eSDFh"}],G9z0Bl:[function(e,n){function t(){var e=d.info=NREUM.info,n=f.getElementsByTagName("script")[0];if(e&&e.licenseKey&&e.applicationID&&n){c(p,function(n,t){n in e||(e[n]=t)});var t="https"===s.split(":")[0]||e.sslForHttp;d.proto=t?"https://":"http://",a("mark",["onload",i()]);var r=f.createElement("script");r.src=d.proto+e.agent,n.parentNode.insertBefore(r,n)}}function r(){"complete"===f.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=e("handle"),c=e(1),u=(e(2),window),f=u.document,s=(""+location).split("?")[0],p={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},d=n.exports={offset:i(),origin:s,features:{}};f.addEventListener?(f.addEventListener("DOMContentLoaded",o,!1),u.addEventListener("load",t,!1)):(f.attachEvent("onreadystatechange",r),u.attachEvent("onload",t)),a("mark",["firstbyte",i()])},{1:12,2:3,handle:"D5DuLP"}],loader:[function(e,n){n.exports=e("G9z0Bl")},{}],12:[function(e,n){function t(e,n){var t=[],o="",i=0;for(o in e)r.call(e,o)&&(t[i]=n(o,e[o]),i+=1);return t}var r=Object.prototype.hasOwnProperty;n.exports=t},{}],13:[function(e,n){function t(e,n,t){n||(n=0),"undefined"==typeof t&&(t=e?e.length:0);for(var r=-1,o=t-n||0,i=Array(0>o?0:o);++r<o;)i[r]=e[n+r];return i}n.exports=t},{}]},{},["G9z0Bl"]);</script>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
+<meta name="keywords" content="Florida Gators, College, Sports" >
+<meta name="description" content="SEC POWER POLL1. LSU (4-0) Easy win over South Carolina just got easier with game moved to Baton Rouge.2. TEXAS A&amp;M (5-0) Aggies’ defense needs to enjoy bye with Alabama coming to town next week.3. FLORIDA (5-0) Gators have to ride emotional wave to snap two-game losing streak to Missouri.4. ALABAMA (4-1)  Crimson Tide may have been down, but they certainly aren’t out." >
+<meta property="og:title" content="SEC power poll: LSU moves to top spot" >
+<meta property="og:type" content="article" >
+<meta property="og:url" content="http://jacksonville.com/sports/college/florida-gators/2015-10-08/story/sec-power-poll-lsu-moves-top-spot" >
+<meta property="og:site_name" content="jacksonville.com" >
 <meta property="og:description" content="SEC POWER POLL
 Easy win over South Carolina just got easier with game moved to Baton Rouge.
 Aggies&#039; defense needs to enjoy bye with Alabama coming to town next week.
-Gators have to ride emotional wave to snap two-game losing streak to Missouri."/>
-<meta property="og:image" content="http://jacksonville.com/sites/default/files/14795205.jpg"/>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" />
-<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" />
+Gators have to ride emotional wave to snap two-game losing streak to Missouri." >
+<meta property="og:image" content="http://jacksonville.com/sites/default/files/14795205.jpg" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" >
+<link rel="alternate" type="application/rss+xml" title="RSS - Follow Sports" href="/taxonomy/term/1893/2/feed" >
+<link rel="shortcut icon" href="/sites/all/themes/premium/favicon.ico" type="image/x-icon" >

   		<script src='//www.googletagservices.com/tag/js/gpt.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/nmt_data.js'></script>
   		<script src='http://mdw-cdn.com/cdn-static/nmt_data/mbu/nmt_ads_jax.js'></script>
 <title>SEC power poll: LSU moves to top spot | jacksonville.com</title>
-<meta name="application-name" content="Jacksonville.com"/>
-<meta name="msapplication-TileColor" content="#426ab2"/>
-<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png"/>
-<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" />
-<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png"/>
-<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png"/>
-<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png"/>
-<meta name="cXenseParse:recs:publishtime" content="2015-10-09T01:39:55Z" />
+<meta name="application-name" content="Jacksonville.com" >
+<meta name="msapplication-TileColor" content="#426ab2" >
+<meta name="msapplication-TileImage" content="http://jacksonville.com/files/img/Win8icon.png" >
+<meta name="msapplication-square70x70logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon70x70tiny1.png" >
+<meta name="msapplication-square150x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8icon150x150square1.png" >
+<meta name="msapplication-wide310x150logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/wide310x150.png" >
+<meta name="msapplication-square310x310logo" content="http://jacksonville.com/files/img/editorial/Win8Tiles/Win8iconLarge1.png" >
+<meta name="cXenseParse:recs:publishtime" content="2015-10-09T01:39:55Z" >
 <meta name="cXenseParse:recs:articleid" content="661990">
-<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/14795205.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/14795205.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/14795205.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_2c72f7230d3e1c021c756365866fb3e5.css" />
-<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" />
+<meta name="cXenseParse:recs:msm-image319" content="http://jacksonville.com/sites/default/files/imagecache/cxense319x185/14795205.jpg"></meta><meta name="cXenseParse:recs:msm-image150" content="http://jacksonville.com/sites/default/files/imagecache/cxense150x111/14795205.jpg"></meta><meta name="cXenseParse:recs:msm-image320" content="http://jacksonville.com/sites/default/files/imagecache/cxense320/14795205.jpg"></meta><link type="text/css" rel="stylesheet" media="all" href="http://jacksonville.com/sites/default/files/css/css_2c72f7230d3e1c021c756365866fb3e5.css" >
+<link type="text/css" rel="stylesheet" media="screen" href="http://jacksonville.com/sites/default/files/css/css_cab4dde3b1d668178dbb9c1aeec03bab.css" >
 <script type="text/javascript" src="http://jacksonville.com/sites/default/files/js/js_d094133c6afc83a05b563ce33db36a52.js"></script>
 <script type="text/javascript">
 <!--//--><![CDATA[//><!--
@@ -44,11 +44,11 @@ jQuery.extend(Drupal.settings, {"basePath":"\/","Lightbox":{"fileLoadingImage":"
 </script>

 <!--[if lt IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie7.css" >
 <![endif]-->

 <!--[if IE 8]>
-<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" />
+<link type="text/css" rel="stylesheet" media="all" href="/sites/all/themes/premium/assets/css/ie8.css" >
 <![endif]-->

 </head>
diff --git a/tests/test_files/scrapers/Wordpress01.txt b/tests/test_files/scrapers/Wordpress01.txt
index 1dcc1ec6d..ab752c7e8 100644
--- a/tests/test_files/scrapers/Wordpress01.txt
+++ b/tests/test_files/scrapers/Wordpress01.txt
@@ -7,52 +7,52 @@
 <link rel="profile" href="http://gmpg.org/xfn/11">
 <link rel="pingback" href="https://bowenchan100w.wordpress.com/xmlrpc.php">

-<link rel="alternate" type="application/rss+xml" title="Tech Thoughts with Bowen &raquo; Feed" href="https://bowenchan100w.wordpress.com/feed/" />
-<link rel="alternate" type="application/rss+xml" title="Tech Thoughts with Bowen &raquo; Comments Feed" href="https://bowenchan100w.wordpress.com/comments/feed/" />
-<link rel="alternate" type="application/rss+xml" title="Tech Thoughts with Bowen &raquo; What is Agile made up of and the&nbsp;progression Comments Feed" href="https://bowenchan100w.wordpress.com/2014/09/23/the-agile-team-and-backlogs/feed/" />
+<link rel="alternate" type="application/rss+xml" title="Tech Thoughts with Bowen &raquo; Feed" href="https://bowenchan100w.wordpress.com/feed/" >
+<link rel="alternate" type="application/rss+xml" title="Tech Thoughts with Bowen &raquo; Comments Feed" href="https://bowenchan100w.wordpress.com/comments/feed/" >
+<link rel="alternate" type="application/rss+xml" title="Tech Thoughts with Bowen &raquo; What is Agile made up of and the&nbsp;progression Comments Feed" href="https://bowenchan100w.wordpress.com/2014/09/23/the-agile-team-and-backlogs/feed/" >
 <script type="text/javascript">
 /* <![CDATA[ */
 function addLoadEvent(func){var oldonload=window.onload;if(typeof window.onload!='function'){window.onload=func;}else{window.onload=function(){oldonload();func();}}}
 /* ]]> */
 </script>
-<link rel='stylesheet' id='zoren-bitter-css'  href='https://fonts.googleapis.com/css?family=Bitter:400,700,400italic' type='text/css' media='all' />
-<link rel='stylesheet' id='zoren-open-sans-css'  href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' type='text/css' media='all' />
-<link rel='stylesheet' id='print-css-5' href='https://s0.wp.com/wp-content/mu-plugins/global-print/global-print.css?m=1387483371g' type='text/css' media='print' />
-<link rel='stylesheet' id='all-css-6' href='https://s1.wp.com/_static/??/wp-content/mu-plugins/post-flair/sharing/sharing.css,/wp-content/themes/h4/global.css?m=1435590157j' type='text/css' media='all' />
-<link rel='stylesheet' id='all-css-0' href='https://s2.wp.com/wp-content/mu-plugins/highlander-comments/style.css?m=1377793621g' type='text/css' media='all' />
+<link rel='stylesheet' id='zoren-bitter-css'  href='https://fonts.googleapis.com/css?family=Bitter:400,700,400italic' type='text/css' media='all' >
+<link rel='stylesheet' id='zoren-open-sans-css'  href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' type='text/css' media='all' >
+<link rel='stylesheet' id='print-css-5' href='https://s0.wp.com/wp-content/mu-plugins/global-print/global-print.css?m=1387483371g' type='text/css' media='print' >
+<link rel='stylesheet' id='all-css-6' href='https://s1.wp.com/_static/??/wp-content/mu-plugins/post-flair/sharing/sharing.css,/wp-content/themes/h4/global.css?m=1435590157j' type='text/css' media='all' >
+<link rel='stylesheet' id='all-css-0' href='https://s2.wp.com/wp-content/mu-plugins/highlander-comments/style.css?m=1377793621g' type='text/css' media='all' >
 <!--[if lt IE 8]>
-<link rel='stylesheet' id='highlander-comments-ie7-css'  href='https://s2.wp.com/wp-content/mu-plugins/highlander-comments/style-ie7.css?m=1351637563g&#038;ver=20110606' type='text/css' media='all' />
+<link rel='stylesheet' id='highlander-comments-ie7-css'  href='https://s2.wp.com/wp-content/mu-plugins/highlander-comments/style-ie7.css?m=1351637563g&#038;ver=20110606' type='text/css' media='all' >
 <![endif]-->
-<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://bowenchan100w.wordpress.com/xmlrpc.php?rsd" />
-<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://s1.wp.com/wp-includes/wlwmanifest.xml" />
-<link rel='prev' title='The Amazing World of&nbsp;Agiles' href='https://bowenchan100w.wordpress.com/2014/09/10/the-amazing-world-of-agiles/' />
-<link rel='next' title='Agile Sprint Retrospective' href='https://bowenchan100w.wordpress.com/2014/09/29/agile-sprint-retrospective/' />
-<meta name="generator" content="WordPress.com" />
-<link rel='canonical' href='https://bowenchan100w.wordpress.com/2014/09/23/the-agile-team-and-backlogs/comment-page-1/#comments' />
-<link rel='shortlink' href='http://wp.me/p52cdR-a' />
-<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=json&amp;url=https%3A%2F%2Fbowenchan100w.wordpress.com%2F2014%2F09%2F23%2Fthe-agile-team-and-backlogs%2F&amp;for=wpcom-auto-discovery" /><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=xml&amp;url=https%3A%2F%2Fbowenchan100w.wordpress.com%2F2014%2F09%2F23%2Fthe-agile-team-and-backlogs%2F&amp;for=wpcom-auto-discovery" />
+<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://bowenchan100w.wordpress.com/xmlrpc.php?rsd" >
+<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://s1.wp.com/wp-includes/wlwmanifest.xml" >
+<link rel='prev' title='The Amazing World of&nbsp;Agiles' href='https://bowenchan100w.wordpress.com/2014/09/10/the-amazing-world-of-agiles/' >
+<link rel='next' title='Agile Sprint Retrospective' href='https://bowenchan100w.wordpress.com/2014/09/29/agile-sprint-retrospective/' >
+<meta name="generator" content="WordPress.com" >
+<link rel='canonical' href='https://bowenchan100w.wordpress.com/2014/09/23/the-agile-team-and-backlogs/comment-page-1/#comments' >
+<link rel='shortlink' href='http://wp.me/p52cdR-a' >
+<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=json&amp;url=https%3A%2F%2Fbowenchan100w.wordpress.com%2F2014%2F09%2F23%2Fthe-agile-team-and-backlogs%2F&amp;for=wpcom-auto-discovery" ><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=xml&amp;url=https%3A%2F%2Fbowenchan100w.wordpress.com%2F2014%2F09%2F23%2Fthe-agile-team-and-backlogs%2F&amp;for=wpcom-auto-discovery" >
 <!-- Jetpack Open Graph Tags -->
-<meta property="og:type" content="article" />
-<meta property="og:title" content="What is Agile made up of and the progression" />
-<meta property="og:url" content="https://bowenchan100w.wordpress.com/2014/09/23/the-agile-team-and-backlogs/" />
-<meta property="og:description" content="Figure 1: Comparison of Agile versus the Norm. A site of how Agile is run compared to a normal team. Retrieved from September 23, 2014. The Agile Team I&#039;ve explained what Agile and the start, but d..." />
-<meta property="article:published_time" content="2014-09-23T03:22:34+00:00" />
-<meta property="article:modified_time" content="2014-12-01T17:07:25+00:00" />
-<meta property="og:site_name" content="Tech Thoughts with Bowen" />
-<meta property="og:image" content="http://www.mountaingoatsoftware.com/uploads/blog/SprintBacklog.jpg" />
-<meta property="og:locale" content="en_US" />
-<meta name="twitter:site" content="@wordpressdotcom" />
-<meta name="twitter:image" content="http://blogs.seapine.com/wp-content/uploads/2012/02/SelfOrgTeam_9_0611_v2.png?w=240" />
-<meta name="twitter:card" content="summary" />
-<meta property="fb:app_id" content="249643311490" />
-<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" />
-<link rel="shortcut icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" />
-<link rel="icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" />
-<link rel="apple-touch-icon-precomposed" href="https://s0.wp.com/i/webclip.png" />
-<link rel='openid.server' href='https://bowenchan100w.wordpress.com/?openidserver=1' />
-<link rel='openid.delegate' href='https://bowenchan100w.wordpress.com/' />
-<link rel="search" type="application/opensearchdescription+xml" href="https://bowenchan100w.wordpress.com/osd.xml" title="Tech Thoughts with Bowen" />
-<link rel="search" type="application/opensearchdescription+xml" href="https://wordpress.com/opensearch.xml" title="WordPress.com" />
+<meta property="og:type" content="article" >
+<meta property="og:title" content="What is Agile made up of and the progression" >
+<meta property="og:url" content="https://bowenchan100w.wordpress.com/2014/09/23/the-agile-team-and-backlogs/" >
+<meta property="og:description" content="Figure 1: Comparison of Agile versus the Norm. A site of how Agile is run compared to a normal team. Retrieved from September 23, 2014. The Agile Team I&#039;ve explained what Agile and the start, but d..." >
+<meta property="article:published_time" content="2014-09-23T03:22:34+00:00" >
+<meta property="article:modified_time" content="2014-12-01T17:07:25+00:00" >
+<meta property="og:site_name" content="Tech Thoughts with Bowen" >
+<meta property="og:image" content="http://www.mountaingoatsoftware.com/uploads/blog/SprintBacklog.jpg" >
+<meta property="og:locale" content="en_US" >
+<meta name="twitter:site" content="@wordpressdotcom" >
+<meta name="twitter:image" content="http://blogs.seapine.com/wp-content/uploads/2012/02/SelfOrgTeam_9_0611_v2.png?w=240" >
+<meta name="twitter:card" content="summary" >
+<meta property="fb:app_id" content="249643311490" >
+<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" >
+<link rel="shortcut icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" >
+<link rel="icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" >
+<link rel="apple-touch-icon-precomposed" href="https://s0.wp.com/i/webclip.png" >
+<link rel='openid.server' href='https://bowenchan100w.wordpress.com/?openidserver=1' >
+<link rel='openid.delegate' href='https://bowenchan100w.wordpress.com/' >
+<link rel="search" type="application/opensearchdescription+xml" href="https://bowenchan100w.wordpress.com/osd.xml" title="Tech Thoughts with Bowen" >
+<link rel="search" type="application/opensearchdescription+xml" href="https://wordpress.com/opensearch.xml" title="WordPress.com" >
 	<style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style>
 		<style type="text/css">
 			.recentcomments a {
@@ -94,8 +94,8 @@ function addLoadEvent(func){var oldonload=window.onload;if(typeof window.onload!
 				padding: 0px 10px 0px 0px;
 			}
 		</style>
-		<meta name="application-name" content="Tech Thoughts with Bowen" /><meta name="msapplication-window" content="width=device-width;height=device-height" /><meta name="msapplication-task" content="name=Subscribe;action-uri=https://bowenchan100w.wordpress.com/feed/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=Sign up for a free blog;action-uri=http://wordpress.com/signup/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=WordPress.com Support;action-uri=http://support.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=WordPress.com Forums;action-uri=http://forums.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="title" content="What is Agile made up of and the&nbsp;progression | Tech Thoughts with Bowen on WordPress.com" />
-<meta name="description" content="Figure 1: Comparison of Agile versus the Norm. A site of how Agile is run compared to a normal team. Retrieved from September 23, 2014. http://bit.ly/1v4YDvO The Agile Team I&#039;ve explained what Agile and the start, but do you know what is Agile? Agile is a very interesting methodology. The main reason for this is&hellip;" />
+		<meta name="application-name" content="Tech Thoughts with Bowen" ><meta name="msapplication-window" content="width=device-width;height=device-height" ><meta name="msapplication-task" content="name=Subscribe;action-uri=https://bowenchan100w.wordpress.com/feed/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=Sign up for a free blog;action-uri=http://wordpress.com/signup/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=WordPress.com Support;action-uri=http://support.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=WordPress.com Forums;action-uri=http://forums.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="title" content="What is Agile made up of and the&nbsp;progression | Tech Thoughts with Bowen on WordPress.com" >
+<meta name="description" content="Figure 1: Comparison of Agile versus the Norm. A site of how Agile is run compared to a normal team. Retrieved from September 23, 2014. http://bit.ly/1v4YDvO The Agile Team I&#039;ve explained what Agile and the start, but do you know what is Agile? Agile is a very interesting methodology. The main reason for this is&hellip;" >
 <style type="text/css" id="custom-background-css">
 body.custom-background { background-color: #EEEEEE; }
 </style>
diff --git a/tests/test_files/scrapers/Wordpress02.txt b/tests/test_files/scrapers/Wordpress02.txt
index dcd369f1e..a3274fcbc 100644
--- a/tests/test_files/scrapers/Wordpress02.txt
+++ b/tests/test_files/scrapers/Wordpress02.txt
@@ -1,13 +1,13 @@
 <!DOCTYPE html>
 <html lang="en-US">
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
 <title>Release Your Potential</title>
-<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://releaseyourpotential.net/feed/" />
-<link rel="pingback" href="http://releaseyourpotential.net/xmlrpc.php" />
-<link rel="profile" href="http://gmpg.org/xfn/11" />
-<link rel="alternate" type="application/rss+xml" title="Release Your Potential &raquo; Feed" href="http://releaseyourpotential.net/feed/" />
-<link rel="alternate" type="application/rss+xml" title="Release Your Potential &raquo; Comments Feed" href="http://releaseyourpotential.net/comments/feed/" />
+<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://releaseyourpotential.net/feed/" >
+<link rel="pingback" href="http://releaseyourpotential.net/xmlrpc.php" >
+<link rel="profile" href="http://gmpg.org/xfn/11" >
+<link rel="alternate" type="application/rss+xml" title="Release Your Potential &raquo; Feed" href="http://releaseyourpotential.net/feed/" >
+<link rel="alternate" type="application/rss+xml" title="Release Your Potential &raquo; Comments Feed" href="http://releaseyourpotential.net/comments/feed/" >

 		<style type="text/css">
 img.wp-smiley,
@@ -23,14 +23,14 @@ img.emoji {
 	padding: 0 !important;
 }
 </style>
-<link rel='stylesheet' id='contact-form-7-css'  href='http://releaseyourpotential.net/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=4.2.2' type='text/css' media='all' />
-<link rel='stylesheet' id='rs-plugin-settings-css'  href='http://releaseyourpotential.net/wp-content/plugins/revslider/rs-plugin/css/settings.css?ver=4.6.5' type='text/css' media='all' />
-		<meta name="viewport" content="width=device-width, initial-scale=1"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
-<link rel='author' href='' />
-<link rel='publisher' href='' />
-<link rel='canonical' href='releaseyourpotential.net/' />
-<meta name='description' content='Career counseling services' />
-<meta name='keywords' content='Career Planning, Personality Test, Myers-Briggs, Psychological Personality, Career Counseling, Career Assessment, Charles Bocage, personality coach, personalityologist' />
+<link rel='stylesheet' id='contact-form-7-css'  href='http://releaseyourpotential.net/wp-content/plugins/contact-form-7/includes/css/styles.css?ver=4.2.2' type='text/css' media='all' >
+<link rel='stylesheet' id='rs-plugin-settings-css'  href='http://releaseyourpotential.net/wp-content/plugins/revslider/rs-plugin/css/settings.css?ver=4.6.5' type='text/css' media='all' >
+		<meta name="viewport" content="width=device-width, initial-scale=1"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" >
+<link rel='author' href='' >
+<link rel='publisher' href='' >
+<link rel='canonical' href='releaseyourpotential.net/' >
+<meta name='description' content='Career counseling services' >
+<meta name='keywords' content='Career Planning, Personality Test, Myers-Briggs, Psychological Personality, Career Counseling, Career Assessment, Charles Bocage, personality coach, personalityologist' >

 </head>
 <body>
diff --git a/tests/test_files/scrapers/Wordpress03.txt b/tests/test_files/scrapers/Wordpress03.txt
index 254a513d9..c5b993c96 100644
--- a/tests/test_files/scrapers/Wordpress03.txt
+++ b/tests/test_files/scrapers/Wordpress03.txt
@@ -8,27 +8,27 @@
 <link rel="profile" href="http://gmpg.org/xfn/11">
 <link rel="pingback" href="https://dungnguyen100w.wordpress.com/xmlrpc.php">

-<link rel="alternate" type="application/rss+xml" title="A busy life of a girl gamer &raquo; Feed" href="https://dungnguyen100w.wordpress.com/feed/" />
-<link rel="alternate" type="application/rss+xml" title="A busy life of a girl gamer &raquo; Comments Feed" href="https://dungnguyen100w.wordpress.com/comments/feed/" />
-<link rel='stylesheet' id='zoren-bitter-css'  href='https://fonts.googleapis.com/css?family=Bitter:400,700,400italic' type='text/css' media='all' />
-<link rel='stylesheet' id='zoren-open-sans-css'  href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' type='text/css' media='all' />
-<link rel='stylesheet' id='print-css-5' href='https://s0.wp.com/wp-content/mu-plugins/global-print/global-print.css?m=1387483371g' type='text/css' media='print' />
-<link rel='stylesheet' id='all-css-6' href='https://s0.wp.com/wp-content/themes/h4/global.css?m=1420737423g' type='text/css' media='all' />
+<link rel="alternate" type="application/rss+xml" title="A busy life of a girl gamer &raquo; Feed" href="https://dungnguyen100w.wordpress.com/feed/" >
+<link rel="alternate" type="application/rss+xml" title="A busy life of a girl gamer &raquo; Comments Feed" href="https://dungnguyen100w.wordpress.com/comments/feed/" >
+<link rel='stylesheet' id='zoren-bitter-css'  href='https://fonts.googleapis.com/css?family=Bitter:400,700,400italic' type='text/css' media='all' >
+<link rel='stylesheet' id='zoren-open-sans-css'  href='https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' type='text/css' media='all' >
+<link rel='stylesheet' id='print-css-5' href='https://s0.wp.com/wp-content/mu-plugins/global-print/global-print.css?m=1387483371g' type='text/css' media='print' >
+<link rel='stylesheet' id='all-css-6' href='https://s0.wp.com/wp-content/themes/h4/global.css?m=1420737423g' type='text/css' media='all' >
 <script type='text/javascript'>
 /* <![CDATA[ */
 var LoggedOutFollow = {"invalid_email":"Your subscription did not succeed, please try again with a valid email address."};
 /* ]]> */
 </script>
-<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://dungnguyen100w.wordpress.com/xmlrpc.php?rsd" />
-<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://s1.wp.com/wp-includes/wlwmanifest.xml" />
-<meta name="generator" content="WordPress.com" />
-<link rel="shortcut icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" />
-<link rel="icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" />
-<link rel="apple-touch-icon-precomposed" href="https://s0.wp.com/i/webclip.png" />
-<link rel='openid.server' href='https://dungnguyen100w.wordpress.com/?openidserver=1' />
-<link rel='openid.delegate' href='https://dungnguyen100w.wordpress.com/' />
-<link rel="search" type="application/opensearchdescription+xml" href="https://dungnguyen100w.wordpress.com/osd.xml" title="A busy life of a girl gamer" />
-<link rel="search" type="application/opensearchdescription+xml" href="https://wordpress.com/opensearch.xml" title="WordPress.com" />
+<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://dungnguyen100w.wordpress.com/xmlrpc.php?rsd" >
+<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://s1.wp.com/wp-includes/wlwmanifest.xml" >
+<meta name="generator" content="WordPress.com" >
+<link rel="shortcut icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" >
+<link rel="icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" >
+<link rel="apple-touch-icon-precomposed" href="https://s0.wp.com/i/webclip.png" >
+<link rel='openid.server' href='https://dungnguyen100w.wordpress.com/?openidserver=1' >
+<link rel='openid.delegate' href='https://dungnguyen100w.wordpress.com/' >
+<link rel="search" type="application/opensearchdescription+xml" href="https://dungnguyen100w.wordpress.com/osd.xml" title="A busy life of a girl gamer" >
+<link rel="search" type="application/opensearchdescription+xml" href="https://wordpress.com/opensearch.xml" title="WordPress.com" >
 	<style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style>
 		<style type="text/css">
 			.recentcomments a {
@@ -70,8 +70,8 @@ var LoggedOutFollow = {"invalid_email":"Your subscription did not succeed, pleas
 				padding: 0px 10px 0px 0px;
 			}
 		</style>
-		<meta name="application-name" content="A busy life of a girl gamer" /><meta name="msapplication-window" content="width=device-width;height=device-height" /><meta name="msapplication-task" content="name=Subscribe;action-uri=https://dungnguyen100w.wordpress.com/feed/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=Sign up for a free blog;action-uri=http://wordpress.com/signup/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=WordPress.com Support;action-uri=http://support.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=WordPress.com Forums;action-uri=http://forums.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="title" content="A busy life of a girl gamer on WordPress.com" />
-<meta name="description" content="(by Dung Nguyen)" />
+		<meta name="application-name" content="A busy life of a girl gamer" ><meta name="msapplication-window" content="width=device-width;height=device-height" ><meta name="msapplication-task" content="name=Subscribe;action-uri=https://dungnguyen100w.wordpress.com/feed/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=Sign up for a free blog;action-uri=http://wordpress.com/signup/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=WordPress.com Support;action-uri=http://support.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=WordPress.com Forums;action-uri=http://forums.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="title" content="A busy life of a girl gamer on WordPress.com" >
+<meta name="description" content="(by Dung Nguyen)" >
 <style type="text/css" id="custom-background-css">
 body.custom-background { background-image: url('https://s0.wp.com/wp-content/themes/pub/zoren/images/body.png'); background-repeat: repeat; background-position: top left; background-attachment: scroll; }
 </style>
diff --git a/tests/test_files/scrapers/Wordpress04.txt b/tests/test_files/scrapers/Wordpress04.txt
index 4eaa92d21..22b234722 100644
--- a/tests/test_files/scrapers/Wordpress04.txt
+++ b/tests/test_files/scrapers/Wordpress04.txt
@@ -7,16 +7,16 @@
 <link rel="profile" href="http://gmpg.org/xfn/11">
 <link rel="pingback" href="https://swethakogatam.wordpress.com/xmlrpc.php">

-<link rel="alternate" type="application/rss+xml" title="Agile and user stories &raquo; Feed" href="https://swethakogatam.wordpress.com/feed/" />
-<link rel="alternate" type="application/rss+xml" title="Agile and user stories &raquo; Comments Feed" href="https://swethakogatam.wordpress.com/comments/feed/" />
-<link rel="alternate" type="application/rss+xml" title="Agile and user stories &raquo; What is Agile and What are User&nbsp;Stories Comments Feed" href="https://swethakogatam.wordpress.com/2014/09/10/agile-and-user-stories/feed/" />
+<link rel="alternate" type="application/rss+xml" title="Agile and user stories &raquo; Feed" href="https://swethakogatam.wordpress.com/feed/" >
+<link rel="alternate" type="application/rss+xml" title="Agile and user stories &raquo; Comments Feed" href="https://swethakogatam.wordpress.com/comments/feed/" >
+<link rel="alternate" type="application/rss+xml" title="Agile and user stories &raquo; What is Agile and What are User&nbsp;Stories Comments Feed" href="https://swethakogatam.wordpress.com/2014/09/10/agile-and-user-stories/feed/" >
 <script type="text/javascript">
 /* <![CDATA[ */
 function addLoadEvent(func){var oldonload=window.onload;if(typeof window.onload!='function'){window.onload=func;}else{window.onload=function(){oldonload();func();}}}
 /* ]]> */
 </script>
-<link rel='stylesheet' id='print-css-3' href='https://s0.wp.com/wp-content/mu-plugins/global-print/global-print.css?m=1387483371g' type='text/css' media='print' />
-<link rel='stylesheet' id='all-css-4' href='https://s1.wp.com/_static/??/wp-content/mu-plugins/post-flair/sharing/sharing.css,/wp-content/themes/h4/global.css?m=1435590157j' type='text/css' media='all' />
+<link rel='stylesheet' id='print-css-3' href='https://s0.wp.com/wp-content/mu-plugins/global-print/global-print.css?m=1387483371g' type='text/css' media='print' >
+<link rel='stylesheet' id='all-css-4' href='https://s1.wp.com/_static/??/wp-content/mu-plugins/post-flair/sharing/sharing.css,/wp-content/themes/h4/global.css?m=1435590157j' type='text/css' media='all' >
 <script type='text/javascript'>
 /* <![CDATA[ */
 var LoggedOutFollow = {"invalid_email":"Your subscription did not succeed, please try again with a valid email address."};
@@ -24,40 +24,40 @@ var LoggedOutFollow = {"invalid_email":"Your subscription did not succeed, pleas
 </script>

 <!--[if lt IE 8]>
-<link rel='stylesheet' id='highlander-comments-ie7-css'  href='https://s2.wp.com/wp-content/mu-plugins/highlander-comments/style-ie7.css?m=1351637563g&#038;ver=20110606' type='text/css' media='all' />
+<link rel='stylesheet' id='highlander-comments-ie7-css'  href='https://s2.wp.com/wp-content/mu-plugins/highlander-comments/style-ie7.css?m=1351637563g&#038;ver=20110606' type='text/css' media='all' >
 <![endif]-->
-<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://swethakogatam.wordpress.com/xmlrpc.php?rsd" />
-<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://s1.wp.com/wp-includes/wlwmanifest.xml" />
-<link rel='next' title='Agile Team and what is a Backlog ? Why are the backlogs for and why are they&nbsp;important' href='https://swethakogatam.wordpress.com/2014/09/22/agile-team-and-what-is-a-backlog-why-are-the-backlogs-for-and-why-are-they-important/' />
-<meta name="generator" content="WordPress.com" />
-<link rel='canonical' href='https://swethakogatam.wordpress.com/2014/09/10/agile-and-user-stories/comment-page-1/#comments' />
-<link rel='shortlink' href='http://wp.me/p52ER5-3' />
-<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=json&amp;url=https%3A%2F%2Fswethakogatam.wordpress.com%2F2014%2F09%2F10%2Fagile-and-user-stories%2F&amp;for=wpcom-auto-discovery" /><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=xml&amp;url=https%3A%2F%2Fswethakogatam.wordpress.com%2F2014%2F09%2F10%2Fagile-and-user-stories%2F&amp;for=wpcom-auto-discovery" />
+<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://swethakogatam.wordpress.com/xmlrpc.php?rsd" >
+<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://s1.wp.com/wp-includes/wlwmanifest.xml" >
+<link rel='next' title='Agile Team and what is a Backlog ? Why are the backlogs for and why are they&nbsp;important' href='https://swethakogatam.wordpress.com/2014/09/22/agile-team-and-what-is-a-backlog-why-are-the-backlogs-for-and-why-are-they-important/' >
+<meta name="generator" content="WordPress.com" >
+<link rel='canonical' href='https://swethakogatam.wordpress.com/2014/09/10/agile-and-user-stories/comment-page-1/#comments' >
+<link rel='shortlink' href='http://wp.me/p52ER5-3' >
+<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=json&amp;url=https%3A%2F%2Fswethakogatam.wordpress.com%2F2014%2F09%2F10%2Fagile-and-user-stories%2F&amp;for=wpcom-auto-discovery" ><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/1.0/?format=xml&amp;url=https%3A%2F%2Fswethakogatam.wordpress.com%2F2014%2F09%2F10%2Fagile-and-user-stories%2F&amp;for=wpcom-auto-discovery" >
 <!-- Jetpack Open Graph Tags -->
-<meta property="og:type" content="article" />
-<meta property="og:title" content="What is Agile and What are User Stories" />
-<meta property="og:url" content="https://swethakogatam.wordpress.com/2014/09/10/agile-and-user-stories/" />
-<meta property="og:description" content="What is Agile ? Agile is one of the biggest IT buzz words today. Putting it in simpler words , Agile is a methodology for software development process which follows a incremental approach.Agile met..." />
-<meta property="article:published_time" content="2014-09-10T18:29:44+00:00" />
-<meta property="article:modified_time" content="2014-12-01T20:52:08+00:00" />
-<meta property="og:site_name" content="Agile and user stories" />
-<meta property="og:image" content="https://swethakogatam.files.wordpress.com/2014/09/user-story31.jpg?w=300" />
-<meta property="og:locale" content="en_US" />
-<meta name="twitter:site" content="@wordpressdotcom" />
-<meta name="twitter:image" content="https://swethakogatam.files.wordpress.com/2014/09/agilemanifesto.gif?w=240" />
-<meta name="twitter:card" content="summary" />
-<meta property="fb:app_id" content="249643311490" />
-<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" />
-<link rel="shortcut icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" />
-<link rel="icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" />
-<link rel="apple-touch-icon-precomposed" href="https://s0.wp.com/i/webclip.png" />
-<link rel='openid.server' href='https://swethakogatam.wordpress.com/?openidserver=1' />
-<link rel='openid.delegate' href='https://swethakogatam.wordpress.com/' />
-<link rel="search" type="application/opensearchdescription+xml" href="https://swethakogatam.wordpress.com/osd.xml" title="Agile and user stories" />
-<link rel="search" type="application/opensearchdescription+xml" href="https://wordpress.com/opensearch.xml" title="WordPress.com" />
+<meta property="og:type" content="article" >
+<meta property="og:title" content="What is Agile and What are User Stories" >
+<meta property="og:url" content="https://swethakogatam.wordpress.com/2014/09/10/agile-and-user-stories/" >
+<meta property="og:description" content="What is Agile ? Agile is one of the biggest IT buzz words today. Putting it in simpler words , Agile is a methodology for software development process which follows a incremental approach.Agile met..." >
+<meta property="article:published_time" content="2014-09-10T18:29:44+00:00" >
+<meta property="article:modified_time" content="2014-12-01T20:52:08+00:00" >
+<meta property="og:site_name" content="Agile and user stories" >
+<meta property="og:image" content="https://swethakogatam.files.wordpress.com/2014/09/user-story31.jpg?w=300" >
+<meta property="og:locale" content="en_US" >
+<meta name="twitter:site" content="@wordpressdotcom" >
+<meta name="twitter:image" content="https://swethakogatam.files.wordpress.com/2014/09/agilemanifesto.gif?w=240" >
+<meta name="twitter:card" content="summary" >
+<meta property="fb:app_id" content="249643311490" >
+<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" >
+<link rel="shortcut icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" >
+<link rel="icon" type="image/x-icon" href="https://s2.wp.com/i/favicon.ico" sizes="16x16 24x24 32x32 48x48" >
+<link rel="apple-touch-icon-precomposed" href="https://s0.wp.com/i/webclip.png" >
+<link rel='openid.server' href='https://swethakogatam.wordpress.com/?openidserver=1' >
+<link rel='openid.delegate' href='https://swethakogatam.wordpress.com/' >
+<link rel="search" type="application/opensearchdescription+xml" href="https://swethakogatam.wordpress.com/osd.xml" title="Agile and user stories" >
+<link rel="search" type="application/opensearchdescription+xml" href="https://wordpress.com/opensearch.xml" title="WordPress.com" >

-		<meta name="application-name" content="Agile and user stories" /><meta name="msapplication-window" content="width=device-width;height=device-height" /><meta name="msapplication-task" content="name=Subscribe;action-uri=https://swethakogatam.wordpress.com/feed/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=Sign up for a free blog;action-uri=http://wordpress.com/signup/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=WordPress.com Support;action-uri=http://support.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="msapplication-task" content="name=WordPress.com Forums;action-uri=http://forums.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" /><meta name="title" content="What is Agile and What are User&nbsp;Stories | Agile and user stories on WordPress.com" />
-<meta name="description" content="What is Agile ? Agile is one of the biggest IT buzz words today. Putting it in simpler words , Agile is a methodology for software development process which follows a incremental approach.Agile methodology has become more popular and success than any other software development methodology today.To understand why agile has become very popular we have&hellip;" />
+		<meta name="application-name" content="Agile and user stories" ><meta name="msapplication-window" content="width=device-width;height=device-height" ><meta name="msapplication-task" content="name=Subscribe;action-uri=https://swethakogatam.wordpress.com/feed/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=Sign up for a free blog;action-uri=http://wordpress.com/signup/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=WordPress.com Support;action-uri=http://support.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="msapplication-task" content="name=WordPress.com Forums;action-uri=http://forums.wordpress.com/;icon-uri=https://s2.wp.com/i/favicon.ico" ><meta name="title" content="What is Agile and What are User&nbsp;Stories | Agile and user stories on WordPress.com" >
+<meta name="description" content="What is Agile ? Agile is one of the biggest IT buzz words today. Putting it in simpler words , Agile is a methodology for software development process which follows a incremental approach.Agile methodology has become more popular and success than any other software development methodology today.To understand why agile has become very popular we have&hellip;" >
 		<script type="text/javascript" src="//c.amazon-adsystem.com/aax2/amzn_ads.js"></script>
 <style type="text/css" id="syntaxhighlighteranchor"></style>
 <script type="text/javascript">
diff --git a/tests/test_files/scrapers/Yioop01.txt b/tests/test_files/scrapers/Yioop01.txt
index 9e0c33bfd..86cceb392 100644
--- a/tests/test_files/scrapers/Yioop01.txt
+++ b/tests/test_files/scrapers/Yioop01.txt
@@ -1,15 +1,15 @@
     <!DOCTYPE html>
     <html lang="en-US" dir="ltr">
         <head>
-        <meta name="Author" content="Chris Pollett" />
-        <meta name="referrer" content="strict-origin-when-cross-origin" />
-        <meta name="generator" content="Yioop" />
-        <meta charset="utf-8" />
-        <link rel="icon" href="/favicon.ico" />
-        <link rel="stylesheet" type="text/css" href="/css/search.css" />
-        <link rel="stylesheet" type="text/css" href="/wd/css/auxiliary.css" />
+        <meta name="Author" content="Chris Pollett" >
+        <meta name="referrer" content="strict-origin-when-cross-origin" >
+        <meta name="generator" content="Yioop" >
+        <meta charset="utf-8" >
+        <link rel="icon" href="/favicon.ico" >
+        <link rel="stylesheet" type="text/css" href="/css/search.css" >
+        <link rel="stylesheet" type="text/css" href="/wd/css/auxiliary.css" >
         <link rel="search" type="application/opensearchdescription+xml"
-            href="https://www.yioop.com/yioopbar.xml" title="Content search" />
+            href="https://www.yioop.com/yioopbar.xml" title="Content search" >
         <style>
         body
         {
diff --git a/tests/test_files/scrapers/vBulletin01.txt b/tests/test_files/scrapers/vBulletin01.txt
index 4e6348214..27c0c5810 100644
--- a/tests/test_files/scrapers/vBulletin01.txt
+++ b/tests/test_files/scrapers/vBulletin01.txt
@@ -2,20 +2,20 @@
 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
 <head>
 <!-- no cache headers -->
-<meta http-equiv="Pragma" content="no-cache" />
-<meta http-equiv="Expires" content="-1" />
-<meta http-equiv="Cache-Control" content="no-cache" />
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<meta http-equiv="Pragma" content="no-cache" >
+<meta http-equiv="Expires" content="-1" >
+<meta http-equiv="Cache-Control" content="no-cache" >
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >



-<meta name="keywords" content="The International Portal for Sportster and Buell Motorcycle Enthusiasts, sportsters, xlforum, sportster motorcycle forum, 883c, 1200c, hugger, harley, harley davidson, how to, buell" />
-<meta name="description" content="" />
+<meta name="keywords" content="The International Portal for Sportster and Buell Motorcycle Enthusiasts, sportsters, xlforum, sportster motorcycle forum, 883c, 1200c, hugger, harley, harley davidson, how to, buell" >
+<meta name="description" content="" >


-<meta name="author" content="The Sportster and Buell Motorcycle Forum" />
-<meta name="copyright" content="Copyright (c) 2016 by The Sportster and Buell Motorcycle Forum" />
-<meta name="rating" content="general" />
+<meta name="author" content="The Sportster and Buell Motorcycle Forum" >
+<meta name="copyright" content="Copyright (c) 2016 by The Sportster and Buell Motorcycle Forum" >
+<meta name="rating" content="general" >

 <!-- end no cache headers -->

@@ -29,7 +29,7 @@
 */
 @import url("/vbportal/forums/clientscript/vbulletin_css/style-be5282e1-00014.css");
 </style>
-<link rel="stylesheet" type="text/css" href="/vbportal/forums/clientscript/vbulletin_important.css?v=385" />
+<link rel="stylesheet" type="text/css" href="/vbportal/forums/clientscript/vbulletin_important.css?v=385" >


 <!-- / CSS Stylesheet -->
@@ -59,7 +59,7 @@ function openwho(threadid) {
 <script type="text/javascript" src="/vbportal/forums/clientscript/vbulletin_global.js?v=385"></script>
 <script type="text/javascript" src="/vbportal/forums/clientscript/vbulletin_menu.js?v=385"></script>

-<link rel="alternate" type="application/rss+xml" title="The Sportster and Buell Motorcycle Forum RSS News Feed" href="/vbportal/external.php?type=rss2" />
+<link rel="alternate" type="application/rss+xml" title="The Sportster and Buell Motorcycle Forum RSS News Feed" href="/vbportal/external.php?type=rss2" >



diff --git a/tests/test_files/scrapers/vBulletin02.txt b/tests/test_files/scrapers/vBulletin02.txt
index 632ffd15e..a45a7b84d 100644
--- a/tests/test_files/scrapers/vBulletin02.txt
+++ b/tests/test_files/scrapers/vBulletin02.txt
@@ -1,17 +1,17 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en" id="vbulletin_html">
 <head>
-	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<meta id="e_vb_meta_bburl" name="vb_meta_bburl" content="http://ubuntuforums.org" />
-<base href="http://ubuntuforums.org/" /><!--[if IE]></base><![endif]-->
-<meta name="generator" content="vBulletin 4.2.2" />
-<meta http-equiv="X-UA-Compatible" content="IE=9" />
+	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" >
+<meta id="e_vb_meta_bburl" name="vb_meta_bburl" content="http://ubuntuforums.org" >
+<base href="http://ubuntuforums.org/" ><!--[if IE]></base><![endif]-->
+<meta name="generator" content="vBulletin 4.2.2" >
+<meta http-equiv="X-UA-Compatible" content="IE=9" >

-	<link rel="Shortcut Icon" href="favicon.ico" type="image/x-icon" />
+	<link rel="Shortcut Icon" href="favicon.ico" type="image/x-icon" >


-		<meta name="keywords" content="ubuntu forums,ubuntu linux,ubuntu,linux forum,ubuntu forum,linux ubuntu,ubuntu support,ubuntu help,ubuntu linux help" />
-		<meta name="description" content="A help and support forum for Ubuntu Linux." />
+		<meta name="keywords" content="ubuntu forums,ubuntu linux,ubuntu,linux forum,ubuntu forum,linux ubuntu,ubuntu support,ubuntu help,ubuntu linux help" >
+		<meta name="description" content="A help and support forum for Ubuntu Linux." >



@@ -63,26 +63,26 @@



-	<link rel="alternate" type="application/rss+xml" title="Ubuntu Forums RSS Feed" href="http://ubuntuforums.org/external.php?type=RSS2" />
+	<link rel="alternate" type="application/rss+xml" title="Ubuntu Forums RSS Feed" href="http://ubuntuforums.org/external.php?type=RSS2" >




-	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=bbcode.css,editor.css,popupmenu.css,reset-fonts.css,vbulletin.css,vbulletin-chrome.css,vbulletin-formcontrols.css," />
+	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=bbcode.css,editor.css,popupmenu.css,reset-fonts.css,vbulletin.css,vbulletin-chrome.css,vbulletin-formcontrols.css," >

 	<!--[if lt IE 8]>
-	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=popupmenu-ie.css,vbulletin-ie.css,vbulletin-chrome-ie.css,vbulletin-formcontrols-ie.css,editor-ie.css" />
+	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=popupmenu-ie.css,vbulletin-ie.css,vbulletin-chrome-ie.css,vbulletin-formcontrols-ie.css,editor-ie.css" >
 	<![endif]-->

 <link href='http://fonts.googleapis.com/css?family=Ubuntu:400,400italic,700,700italic|Ubuntu+Mono:400,700' rel='stylesheet' type='text/css'>
 	<title>Ubuntu Forums</title>
 	<script type="text/javascript" src="clientscript/vbulletin_read_marker.js?v=422"></script>

-	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=forumbits.css,forumhome.css,options.css" />
+	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=forumbits.css,forumhome.css,options.css" >

-	<!--[if lt IE 8]><link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=forumbits-ie.css,options-ie.css" /><![endif]-->
+	<!--[if lt IE 8]><link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=forumbits-ie.css,options-ie.css" ><![endif]-->

-	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=additional.css" />
+	<link rel="stylesheet" type="text/css" href="css.php?styleid=117&amp;langid=3&amp;d=1456956033&amp;td=ltr&amp;sheet=additional.css" >

 </head>
 <body>
diff --git a/work_directory/_placeholder.php b/work_directory/_placeholder.php
index e4f227f49..dc48b6f4a 100644
--- a/work_directory/_placeholder.php
+++ b/work_directory/_placeholder.php
@@ -3,7 +3,7 @@
  * SeekQuarry/Yioop --
  * Open Source Pure PHP Search Engine, Crawler, and Indexer
  *
- * Copyright (C) 2009 - 2022  Chris Pollett chris@pollett.org
+ * Copyright (C) 2009 - 2023  Chris Pollett chris@pollett.org
  *
  * LICENSE:
  *
ViewGit