Skip to content
This repository was archived by the owner on Sep 20, 2024. It is now read-only.

Commit 7dfad62

Browse files
authored
Merge pull request #43 from shinsenter/develop
Added option for splash screen, improved helper script
2 parents beb2cb9 + a40a7db commit 7dfad62

File tree

8 files changed

+281
-23
lines changed

8 files changed

+281
-23
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ $defer = new \shinsenter\Defer();
9797
$defer->append_defer_js = false;
9898
$defer->default_defer_time = 10;
9999

100+
// Add custom splash screen
101+
$defer->custom_splash_screen = '<div id="splash">Loading</div>';
102+
100103
// Page optimizations
101104
$defer->enable_preloading = true;
102105
$defer->enable_dns_prefetch = true;

assets/helpers.js

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,14 @@
3838
var PROJECT_NAME = 'defer.js';
3939
var CLASS_PREFIX = 'defer-';
4040
var CLASS_SUFFIX = 'deferjs';
41-
var DATA_PREFIX = 'data-';
41+
42+
var COPY_COMMON = 'font-size:14px;color:#fff;'+'padding:2px;border-radius:';
43+
var COPY_TEXT = '%c ' + PROJECT_NAME + ' ';
44+
var COPY_STYLE = COPY_COMMON + '4px;background:#2a313c';
4245

4346
var JQUERY = 'jQuery';
4447
var NOOP = Function();
48+
var DATA_PREFIX = 'data-';
4549
var GET_ATTRIBUTE = 'getAttribute';
4650
var IS_CHROME = typeof window.chrome == 'object' && window.navigator.userAgent.indexOf('Trident/') == -1;
4751

@@ -73,30 +77,22 @@
7377
t: 10
7478
};
7579

76-
var log = (console.log || NOOP)
77-
.bind(console);
78-
var defer = window.defer || NOOP;
79-
var deferimg = window.deferimg || NOOP;
80+
var log = (console.log || NOOP).bind(console);
81+
var defer = window.defer || NOOP;
82+
var deferimg = window.deferimg || NOOP;
8083
var deferiframe = window.deferiframe || NOOP;
8184
var old_ready;
8285

8386
function copyright() {
84-
var text = '%c shinsenter %c ' + PROJECT_NAME + ' ';
85-
var common = 'font-size:16px;color:#fff;padding:4px;border-radius:';
86-
var style1 = common + '4px 0 0 4px;background:#2a313c';
87-
var style2 = common + '0 4px 4px 0;background:#e61e25';
88-
8987
if (IS_CHROME) {
90-
log(text, style1, style2);
88+
log(COPY_TEXT, COPY_STYLE);
9189
}
9290

9391
log([
94-
'This page was optimized with ' + PROJECT_NAME,
92+
'Optimized by ' + PROJECT_NAME,
9593
'(c) 2019 Mai Nhut Tan <[email protected]>',
96-
'',
9794
'Github: ' + PROJECT_URL + PROJECT_NAME,
98-
'PHP lib: ' + PROJECT_URL + 'defer.php',
99-
'WordPress: https://wordpress.org/plugins/shins-pageload-magic/'
95+
'PHP lib: ' + PROJECT_URL + 'defer.php'
10096
].join('\n'));
10197
}
10298

composer.lock

Lines changed: 183 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

public/helpers.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/DeferInterface.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@
5858
]));
5959

6060
define('DEFER_MINIFY_HTML_IGNORE', 'not(parent::*[self::textarea or self::code or self::pre or self::script])');
61+
62+
// Splash screen
63+
64+
define('DEFER_SLASH_TEMPLATE', implode('', [
65+
'<style>#deferjs-splash{position:fixed;top:0;left:0;right:0;bottom:0;z-index:9999}</style>',
66+
'<div id="deferjs-splash">%s</div>',
67+
]));
68+
69+
define('DEFER_SLASH_HIDE_SCRIPT', implode('', [
70+
'<noscript><style>#deferjs-splash{display:none}</style></noscript>',
71+
'<script>defer(function(){document.getElementById("deferjs-splash").style.display="none"},1)</script>',
72+
]));
6173
}
6274

6375
abstract class DeferInterface
@@ -68,6 +80,10 @@ abstract class DeferInterface
6880
const HELPERS_URL = DEFER_JS_ROOT . '/public/helpers.min.js';
6981
const INLINE_CSS_URL = DEFER_JS_ROOT . '/public/styles.min.css';
7082

83+
// For splash screen
84+
const SLASH_TEMPLATE = DEFER_SLASH_TEMPLATE;
85+
const SLASH_HIDE_SCRIPT = DEFER_SLASH_HIDE_SCRIPT;
86+
7187
// Polyfill & library's fingerprint
7288
const POLYFILL_URL = 'https://polyfill.io/v3/polyfill.min.js?features=IntersectionObserver';
7389
const FINGERPRINT_URL = 'https://raw.githubusercontent.com/shinsenter/defer.php/footprint/copyright.txt';

src/DeferOptimizer.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ protected function optimize()
5151
$this->addMissingMeta();
5252
$this->addFingerprint();
5353

54+
// Add custom splash screen
55+
$this->addCustomSplashScreen();
56+
5457
// Minify
5558
$this->minifyOutputHTML();
5659
}
@@ -612,6 +615,23 @@ protected function optimizeBackgroundTags()
612615
}
613616
}
614617

618+
/**
619+
* Added splash screen
620+
*
621+
* @since 1.0.15
622+
*/
623+
protected function addCustomSplashScreen()
624+
{
625+
$splash = $this->custom_splash_screen;
626+
627+
if (empty($splash)) {
628+
return;
629+
}
630+
631+
$this->prependHtml($this->body, sprintf(static::SLASH_TEMPLATE, $splash));
632+
$this->appendHtml($this->body, static::SLASH_HIDE_SCRIPT);
633+
}
634+
615635
/*
616636
|--------------------------------------------------------------------------
617637
| Other helper functions
@@ -755,9 +775,15 @@ protected function getPreloadType($node)
755775
if (is_a($node, DOMElement::class)) {
756776
switch ($node->nodeName) {
757777
case static::LINK_TAG:
778+
if ($node->hasAttribute(static::ATTR_AS)) {
779+
$as = $node->getAttribute(static::ATTR_AS);
780+
break;
781+
}
782+
758783
if (in_array($node->getAttribute(static::ATTR_REL), [static::REL_DNSPREFETCH, static::REL_PRECONNECT])) {
759784
break;
760785
}
786+
761787
$as = static::PRELOAD_STYLE;
762788
break;
763789
case static::STYLE_TAG:

src/DeferOptions.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ trait DeferOptions
3030
'append_defer_js' => false,
3131
'default_defer_time' => 10,
3232

33+
// Splash screen
34+
'custom_splash_screen' => '',
35+
3336
// Page optimizations
3437
'enable_preloading' => true,
3538
'enable_dns_prefetch' => true,

0 commit comments

Comments
 (0)