]> git.mxchange.org Git - friendica.git/commitdiff
Add new footer hook
authorHypolite Petovan <mrpetovan@gmail.com>
Fri, 21 Sep 2018 01:01:05 +0000 (21:01 -0400)
committerHypolite Petovan <mrpetovan@gmail.com>
Fri, 21 Sep 2018 01:01:05 +0000 (21:01 -0400)
- Add new App->footerScripts array
- Add footer.tpl template
- Add documentation
- Rework App->init_page_end to App->initFooter

doc/Addons.md
index.php
src/App.php
view/templates/footer.tpl [new file with mode: 0644]

index ec413c6ac89a6df88ba6114e0fabdcf0062f06f7..b126fedc4db303d9c77ea58359c586b8e8addbad 100644 (file)
@@ -286,6 +286,11 @@ No hook data.
 Called after HTML content functions have completed.
 `$b` is (string) HTML of content div.
 
+### footer
+Called after HTML content functions have completed.
+`$b` is (string) HTML of footer div/element.
+Used to load deferred Javascript files.
+
 ### avatar_lookup
 Called when looking up the avatar. `$b` is an array:
 
@@ -563,6 +568,7 @@ Here is a complete list of all hook callbacks with file locations (as of 01-Apr-
 ### src/App.php
 
     Addon::callHooks('load_config');
+    Addon::callHooks('footer');
 
 ### src/Model/Item.php
 
index 8b0bd472513fd9c5a1ca9bbd457a60ce963682d3..aa7704930e303cde178e8ae039f6ea0543c4a5bb 100644 (file)
--- a/index.php
+++ b/index.php
@@ -153,10 +153,6 @@ if (! x($_SESSION, 'authenticated')) {
        header('X-Account-Management-Status: none');
 }
 
-/* set up page['htmlhead'] and page['end'] for the modules to use */
-$a->page['htmlhead'] = '';
-$a->page['end'] = '';
-
 $_SESSION['sysmsg']       = defaults($_SESSION, 'sysmsg'      , []);
 $_SESSION['sysmsg_info']  = defaults($_SESSION, 'sysmsg_info' , []);
 $_SESSION['last_updated'] = defaults($_SESSION, 'last_updated', []);
@@ -326,10 +322,6 @@ if (file_exists($theme_info_file)) {
 
 /* initialise content region */
 
-if (! x($a->page, 'content')) {
-       $a->page['content'] = '';
-}
-
 if ($a->mode == App::MODE_NORMAL) {
        Addon::callHooks('page_content_top', $a->page['content']);
 }
@@ -411,18 +403,7 @@ $a->init_pagehead();
  * Build the page ending -- this is stuff that goes right before
  * the closing </body> tag
  */
-$a->init_page_end();
-
-// If you're just visiting, let javascript take you home
-if (x($_SESSION, 'visitor_home')) {
-       $homebase = $_SESSION['visitor_home'];
-} elseif (local_user()) {
-       $homebase = 'profile/' . $a->user['nickname'];
-}
-
-if (isset($homebase)) {
-       $a->page['content'] .= '<script>var homebase="' . $homebase . '" ; </script>';
-}
+$a->initFooter();
 
 /*
  * now that we've been through the module content, see if the page reported
@@ -444,23 +425,6 @@ if ($a->module != 'install' && $a->module != 'maintenance') {
        Nav::build($a);
 }
 
-/*
- * Add a "toggle mobile" link if we're using a mobile device
- */
-if ($a->is_mobile || $a->is_tablet) {
-       if (isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
-               $link = 'toggle_mobile?address=' . curPageURL();
-       } else {
-               $link = 'toggle_mobile?off=1&address=' . curPageURL();
-       }
-       $a->page['footer'] = replace_macros(
-               get_markup_template("toggle_mobile_footer.tpl"),
-               [
-                       '$toggle_link' => $link,
-                       '$toggle_text' => L10n::t('toggle mobile')]
-       );
-}
-
 /**
  * Build the page - now that we have all the components
  */
index 2a5fba854146b78ae7b88a08ac40f8ef41cb5bb6..1a26dd6507793ec86a3ffde15e4f1b6c69533078 100644 (file)
@@ -96,6 +96,15 @@ class App
        public $force_max_items = 0;
        public $theme_events_in_profile = true;
 
+       public $footerScripts = [];
+
+       public function registerFooterScript($path)
+       {
+               $url = str_replace($this->get_basepath() . DIRECTORY_SEPARATOR, '', $path);
+
+               $this->footerScripts[] = $this->get_baseurl() . '/' . trim($url, '/');
+       }
+
        /**
         * @brief An array for all theme-controllable parameters
         *
@@ -802,15 +811,45 @@ class App
                ]) . $this->page['htmlhead'];
        }
 
-       public function init_page_end()
+       public function initFooter()
        {
-               if (!isset($this->page['end'])) {
-                       $this->page['end'] = '';
+               if (!isset($this->page['footer'])) {
+                       $this->page['footer'] = '';
+               }
+
+               // If you're just visiting, let javascript take you home
+               if (!empty($_SESSION['visitor_home'])) {
+                       $homebase = $_SESSION['visitor_home'];
+               } elseif (local_user()) {
+                       $homebase = 'profile/' . $a->user['nickname'];
+               }
+
+               if (isset($homebase)) {
+                       $this->page['footer'] .= '<script>var homebase="' . $homebase . '";</script>' . "\n";
                }
-               $tpl = get_markup_template('end.tpl');
-               $this->page['end'] = replace_macros($tpl, [
-                       '$baseurl' => $this->get_baseurl()
-               ]) . $this->page['end'];
+
+               /*
+                * Add a "toggle mobile" link if we're using a mobile device
+                */
+               if ($this->is_mobile || $this->is_tablet) {
+                       if (isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
+                               $link = 'toggle_mobile?address=' . curPageURL();
+                       } else {
+                               $link = 'toggle_mobile?off=1&address=' . curPageURL();
+                       }
+                       $this->page['footer'] .= replace_macros(get_markup_template("toggle_mobile_footer.tpl"), [
+                               '$toggle_link' => $link,
+                               '$toggle_text' => Core\L10n::t('toggle mobile')
+                       ]);
+               }
+
+               Core\Addon::callHooks('footer', $this->page['footer']);
+
+               $tpl = get_markup_template('footer.tpl');
+               $this->page['footer'] .= replace_macros($tpl, [
+                       '$baseurl' => $this->get_baseurl(),
+                       '$footerScripts' => $this->footerScripts,
+               ]);
        }
 
        public function set_curl_code($code)
diff --git a/view/templates/footer.tpl b/view/templates/footer.tpl
new file mode 100644 (file)
index 0000000..1b9d700
--- /dev/null
@@ -0,0 +1,3 @@
+{{foreach $footerScripts as $scriptUrl}}
+<script type="text/javascript" src="{{$scriptUrl}}"></script>
+{{/foreach}}