Initial commit
This commit is contained in:
.gitignore
wp-content
index.phpchangelog.txtclass-conditions.phpclass-elements-helper.phpclass-hero.phpclass-hooks.phpclass-layout.phpclass-metabox.phpclass-post-type.phpelements.phpgenerate-menu-plus.phpgenerate-page-header.phpgenerate-spacing.phpwoocommerce.phpwpml-config.xmlindex.phpreadme.txtloco.xmlreadme.txtSiteHealth.phpUpgrade.phpWP.phpuninstall.php
mu-plugins
LICENSE.mdREADME.mdVERSIONVagrantfilebuild.xmlcomposer.jsondocker-compose.yml
dockersetup
langs
phpunit.travis.xmlphpunit.xml.distreadme.txtscreenshot-1.pngscreenshot-2.pngscreenshot-3.pngscreenshot-4.pngsrc
tests
view
plugins
activitypub
LICENSEactivitypub.php
includes
class-activity-dispatcher.phpclass-activitypub.phpclass-admin.phpclass-debug.phpclass-hashtag.phpclass-health-check.phpclass-signature.phpfunctions.php
model
peer
rest
class-followers.phpclass-following.phpclass-inbox.phpclass-nodeinfo.phpclass-ostatus.phpclass-outbox.phpclass-server.phpclass-webfinger.php
table
languages
readme.txttemplates
authLdap-2.3.1
.ci
50-init.ldif
.gitignore.rsyncIgnore.svnAccess.dist.travis.after.sh.travis.install.sh.travis.ymlLICENSE.mdREADME.mdVERSIONVagrantfileauthLdap.cssauthLdap.phpbuild.xmlcomposer.jsondocker-compose.ymlOpenLDAP
OpenLDAP_run.shldif
example.com.ldifexamplespace.com.ldifmanager.example.com.ldiftest.example.com.ldifuser1.example.com.ldifuser2.example.com.ldifuser3.example.com.ldifuser4.example.com.ldifuser5.example.com.ldif
load_fixtures.shphp.inidockersetup
ldap.phpphpunit.travis.xmlphpunit.xml.distreadme.txtsrc
tests
view
disable-wordpress-core-update
gitium
functions.phpgitium-webhook.phpgitium.php
img
inc
class-git-wrapper.phpclass-gitium-admin.phpclass-gitium-help.phpclass-gitium-menu-bubble.phpclass-gitium-menu.phpclass-gitium-requirements.phpclass-gitium-submenu-commits.phpclass-gitium-submenu-configure.phpclass-gitium-submenu-settings.phpclass-gitium-submenu-status.phpssh-git
languages
readme.txtgp-premium
backgrounds
blog
functions
generate-blog.phpcolors
functions
generate-colors.phpcopyright
disable-elements
elements
assets
admin
js
general
gp-premium.phphooks
import-export
inc
langs
gp-premium-cs_CZ.mogp-premium-cs_CZ.pogp-premium-da_DK.mogp-premium-da_DK.pogp-premium-de_DE.mogp-premium-de_De.pogp-premium-fr_FR.mogp-premium-fr_FR.pogp-premium-it_IT.mogp-premium-it_IT.pogp-premium-pl_PL.mogp-premium-pl_PL.pogp-premium-pt_BR.mogp-premium-pt_BR.pogp-premium-pt_PT.mogp-premium-pt_PT.pogp-premium-ru_RU.mogp-premium-ru_RU.pogp-premium-sk_SK.mogp-premium-sk_SK.pogp-premium-sv_SE.mogp-premium-sv_SE.pogp-premium-zh_CN.mogp-premium-zh_CN.pogp-premium.pot
library
EDD_SL_Plugin_Updater.php
batch-processing
class-make-css.phpcustomizer-helpers.phpcustomizer
active-callbacks.php
controls
class-action-button-control.phpclass-alpha-color-control.phpclass-backgrounds-control.phpclass-control-toggle.phpclass-copyright-control.phpclass-deprecated.phpclass-information-control.phpclass-range-slider-control.phpclass-refresh-button-control.phpclass-section-shortcuts-control.phpclass-spacing-control.phpclass-title-control.phpclass-typography-control.php
deprecated.phpsanitize.phpcss
alpha-color-picker.csscontrol-toggle-customizer.csssection-shortcuts.cssselectWoo.min.cssslider-customizer.cssspacing-customizer.csstitle-customizer.csstransparency-grid.pngtypography-customizer.css
js
image-processing-queue
image-processing-queue.php
includes
select2
menu-plus
functions
css
menu-logo.cssmenu-logo.min.cssnavigation-branding.cssnavigation-branding.min.cssoffside.cssoffside.min.csssticky.csssticky.min.css
generate-menu-plus.phpjs
page-header
functions
css
functions.phpglobal-locations.phpjs
full-height.jsfull-height.min.jsjquery.vide.min.jslc_switch.jsmetabox.jsparallax.jsparallax.min.jswp-color-picker-alpha.min.js
metabox.phppage-header.phppost-image.phppost-type.phpsecondary-nav
functions
generate-secondary-nav.phpsections
functions
generate-sections.phpsites
assets
classes
class-beaver-builder-batch-processing.phpclass-content-importer.phpclass-site-helper.phpclass-site-import-image.phpclass-site-restore.phpclass-site-widget-importer.phpclass-site.phpclass-sites-background-process.php
libs
sites.phpspacing
functions
customizer
content-spacing.phpfooter-spacing.phpheader-spacing.php
functions.phpmigration.phpjs
navigation-spacing.phpsecondary-nav-spacing.phpsidebar-spacing.phptop-bar-spacing.phptypography
functions
functions.phpgoogle-fonts.json
generate-fonts.phpjs
migration.phpsecondary-nav-fonts.phpslideout-nav-fonts.phpwoocommerce-fonts.phpwoocommerce
functions
css
woocommerce-mobile.csswoocommerce-mobile.min.csswoocommerce-tablet.csswoocommerce-tablet.min.csswoocommerce.csswoocommerce.min.css
customizer
functions.phpjs
menu-icons
CHANGELOG.mdLICENSE
assets
banner-1544x500.jpgbanner-772x250.jpgscreenshot-1.pngscreenshot-2.pngscreenshot-3.pngscreenshot-4.pngscreenshot-5.pngscreenshot-6.pngscreenshot-7.pngscreenshot-8.png
css
includes
js
languages
mailin.phpmenu-icons.phpreadme.mdreadme.txtvendor
autoload.php
codeinwp
icon-picker
LICENSE
assets
css
icon-picker.cssicon-picker.min.css
icon-picker.phptypes
Elusive-Icons.eotElusive-Icons.svgElusive-Icons.ttfElusive-Icons.woffGenericons.eotGenericons.svgGenericons.ttfGenericons.woffelusive.csselusive.min.cssfont-awesome.cssfont-awesome.min.cssfontawesome-webfont.eotfontawesome-webfont.svgfontawesome-webfont.ttffontawesome-webfont.wofffontawesome-webfont.woff2foundation-icons.cssfoundation-icons.eotfoundation-icons.min.cssfoundation-icons.svgfoundation-icons.ttffoundation-icons.woffgenericons.cssgenericons.min.css
includes
js
languages
phpcs.ruleset.xmlreadme.mdreadme.txtmenu-item-custom-fields
themeisle-sdk
composer
simple-local-avatars
readme.txtscreenshot-1.pngsimple-local-avatars.dev.jssimple-local-avatars.jssimple-local-avatars.php
static-html-output-plugin
languages
static-html-output-plugin-ja_UTF.mostatic-html-output-plugin-ja_UTF.postatic-html-output-plugin-sp_UTF.mostatic-html-output-plugin-sp_UTF.postatic-html-output-plugin.pot
plugin
CSSParser
FTP
URL2
WP2Static.phpWP2Static
Archive.phpArchiveProcessor.phpCSSProcessor.phpDBSettings.phpDeployer.phpDispatcher.phpExporter.phpFileCopier.phpFileWriter.phpFilesHelper.phpHTMLProcessor.phpMimeTypes.phpOptions.phpPostSettings.phpProgressLog.phpRequest.phpSiteCrawler.phpSitePublisher.phpTXTProcessor.phpTemplateHelper.phpView.phpWP2Static.phpWPSite.phpWsLog.php
deployers
wp2static-wp-cli-commands.phpviews
bitbucket_settings_block.phtmlbunnycdn_settings_block.phtmlfolder_settings_block.phtmlftp_settings_block.phtmlgithub_settings_block.phtmlgitlab_settings_block.phtmlmessage.phtmlnetlify_settings_block.phtmloptions-page-js.phtmloptions-page.phtmls3_settings_block.phtmltab_advanced.phtmltab_crawling.phtmltab_export.phtmltab_help.phtmltab_logs.phtmltab_love.phtmltab_processing.phtmlzip_settings_block.phtml
wp2static.csswp2static.phpwp-mail-smtp
assets
css
images
about
icon-full.svgicon-none.svgicon-partial.svgplugin-mi.pngplugin-om.pngplugin-rp.pngplugin-wpf.pngteam.jpg
control
email
logo.svglogs
menu-icon.svgproviders
aws.svggoogle.svgmailgun.svgmicrosoft.svgpepipost-smtp.pngpepipost.pngphp.svgsendgrid.svgsendinblue.svgsmtp.svg
recommended.svgjs
jquery.matchHeight.jsjquery.matchHeight.min.jssmtp-about.jssmtp-about.min.jssmtp-admin.jssmtp-admin.min.js
languages
libs
src
Admin
Conflicts.phpCore.phpDebug.phpGeo.phpMailCatcher.phpMigration.phpOptions.phpProcessor.phpProviders
AmazonSES
AuthAbstract.phpAuthInterface.phpGmail
Loader.phpMail
MailerAbstract.phpMailerInterface.phpMailgun
OptionsAbstract.phpOptionsInterface.phpOutlook
Pepipost
PepipostAPI
SMTP
Sendgrid
Sendinblue
vendor
autoload.php
wp-mail-smtp-0.11.2.phpwp-mail-smtp.phpwp_mail_smtp.phpcomposer
ClassLoader.phpautoload_classmap.phpautoload_files.phpautoload_namespaces.phpautoload_psr4.phpautoload_real.phpautoload_static.php
google
apiclient-services
LICENSE
src
Google
Service
Gmail.php
Gmail
AutoForwarding.phpBatchDeleteMessagesRequest.phpBatchModifyMessagesRequest.phpDelegate.phpDraft.phpFilter.phpFilterAction.phpFilterCriteria.phpForwardingAddress.phpHistory.phpHistoryLabelAdded.phpHistoryLabelRemoved.phpHistoryMessageAdded.phpHistoryMessageDeleted.phpImapSettings.phpLabel.phpLabelColor.phpLanguageSettings.phpListDelegatesResponse.phpListDraftsResponse.phpListFiltersResponse.phpListForwardingAddressesResponse.phpListHistoryResponse.phpListLabelsResponse.phpListMessagesResponse.phpListSendAsResponse.phpListSmimeInfoResponse.phpListThreadsResponse.phpMessage.phpMessagePart.phpMessagePartBody.phpMessagePartHeader.phpModifyMessageRequest.phpModifyThreadRequest.phpPopSettings.phpProfile.php
Resource
Users.phpUsersDrafts.phpUsersHistory.phpUsersLabels.phpUsersMessages.phpUsersMessagesAttachments.phpUsersSettings.phpUsersSettingsDelegates.phpUsersSettingsFilters.phpUsersSettingsForwardingAddresses.phpUsersSettingsSendAs.phpUsersSettingsSendAsSmimeInfo.phpUsersThreads.php
SendAs.phpSmimeInfo.phpSmtpMsa.phpThread.phpVacationSettings.phpWatchRequest.phpWatchResponse.phpapiclient
LICENSE
src
Google
AccessToken
AuthHandler
Client.phpCollection.phpException.phpHttp
Model.phpService.phpService
Task
Utils
autoload.phpauth
COPYINGLICENSEautoload.php
src
AccessToken.phpApplicationDefaultCredentials.php
Cache
CacheTrait.phpCredentials
AppIdentityCredentials.phpGCECredentials.phpIAMCredentials.phpInsecureCredentials.phpServiceAccountCredentials.phpServiceAccountJwtAccessCredentials.phpUserRefreshCredentials.php
CredentialsLoader.phpFetchAuthTokenCache.phpFetchAuthTokenInterface.phpHttpHandler
Iam.phpMiddleware
OAuth2.phpServiceAccountSignerTrait.phpSignBlobInterface.phpSubscriber
guzzlehttp
guzzle
DockerfileLICENSE
src
Client.phpClientInterface.php
Cookie
Exception
BadResponseException.phpClientException.phpConnectException.phpGuzzleException.phpInvalidArgumentException.phpRequestException.phpSeekException.phpServerException.phpTooManyRedirectsException.phpTransferException.php
Handler
CurlFactory.phpCurlFactoryInterface.phpCurlHandler.phpCurlMultiHandler.phpEasyHandle.phpMockHandler.phpProxy.phpStreamHandler.php
HandlerStack.phpMessageFormatter.phpMiddleware.phpPool.phpPrepareBodyMiddleware.phpRedirectMiddleware.phpRequestOptions.phpRetryMiddleware.phpTransferStats.phpUriTemplate.phpfunctions.phpfunctions_include.phppromises
LICENSE
src
psr7
LICENSE
src
AppendStream.phpBufferStream.phpCachingStream.phpDroppingStream.phpFnStream.phpInflateStream.phpLazyOpenStream.phpLimitStream.phpMessageTrait.phpMultipartStream.phpNoSeekStream.phpPumpStream.phpRequest.phpResponse.phpRfc7230.phpServerRequest.phpStream.phpStreamDecoratorTrait.phpStreamWrapper.phpUploadedFile.phpUri.phpUriNormalizer.phpUriResolver.phpfunctions.phpfunctions_include.php
monolog
monolog
LICENSE
src
Monolog
ErrorHandler.php
Formatter
ChromePHPFormatter.phpElasticaFormatter.phpFlowdockFormatter.phpFluentdFormatter.phpFormatterInterface.phpGelfMessageFormatter.phpHtmlFormatter.phpJsonFormatter.phpLineFormatter.phpLogglyFormatter.phpLogstashFormatter.phpMongoDBFormatter.phpNormalizerFormatter.phpScalarFormatter.phpWildfireFormatter.php
Handler
AbstractHandler.phpAbstractProcessingHandler.phpAbstractSyslogHandler.phpAmqpHandler.phpBrowserConsoleHandler.phpBufferHandler.phpChromePHPHandler.phpCouchDBHandler.phpCubeHandler.php
Logger.phpCurl
DeduplicationHandler.phpDoctrineCouchDBHandler.phpDynamoDbHandler.phpElasticSearchHandler.phpErrorLogHandler.phpFilterHandler.phpFingersCrossed
FingersCrossedHandler.phpFirePHPHandler.phpFleepHookHandler.phpFlowdockHandler.phpFormattableHandlerInterface.phpFormattableHandlerTrait.phpGelfHandler.phpGroupHandler.phpHandlerInterface.phpHandlerWrapper.phpHipChatHandler.phpIFTTTHandler.phpInsightOpsHandler.phpLogEntriesHandler.phpLogglyHandler.phpMailHandler.phpMandrillHandler.phpMissingExtensionException.phpMongoDBHandler.phpNativeMailerHandler.phpNewRelicHandler.phpNullHandler.phpPHPConsoleHandler.phpProcessableHandlerInterface.phpProcessableHandlerTrait.phpPsrHandler.phpPushoverHandler.phpRavenHandler.phpRedisHandler.phpRollbarHandler.phpRotatingFileHandler.phpSamplingHandler.phpSlack
SlackHandler.phpSlackWebhookHandler.phpSlackbotHandler.phpSocketHandler.phpStreamHandler.phpSwiftMailerHandler.phpSyslogHandler.phpSyslogUdp
SyslogUdpHandler.phpTestHandler.phpWhatFailureGroupHandler.phpZendMonitorHandler.phpProcessor
GitProcessor.phpIntrospectionProcessor.phpMemoryPeakUsageProcessor.phpMemoryProcessor.phpMemoryUsageProcessor.phpMercurialProcessor.phpProcessIdProcessor.phpProcessorInterface.phpPsrLogMessageProcessor.phpTagProcessor.phpUidProcessor.phpWebProcessor.php
Registry.phpResettableInterface.phpSignalHandler.phpUtils.phpphpseclib
phpseclib
psr
ralouphie
getallheaders
sendinblue
api-v3-sdk
lib
Api
AccountApi.phpAttributesApi.phpContactsApi.phpEmailCampaignsApi.phpFoldersApi.phpListsApi.phpProcessApi.phpResellerApi.phpSMSCampaignsApi.phpSMTPApi.phpSendersApi.phpTransactionalSMSApi.phpWebhooksApi.php
ApiException.phpConfiguration.phpHeaderSelector.phpModel
AddChildDomain.phpAddContactToList.phpAddCredits.phpCreateAttribute.phpCreateAttributeEnumeration.phpCreateChild.phpCreateContact.phpCreateEmailCampaign.phpCreateEmailCampaignRecipients.phpCreateEmailCampaignSender.phpCreateList.phpCreateModel.phpCreateReseller.phpCreateSender.phpCreateSenderIps.phpCreateSenderModel.phpCreateSmsCampaign.phpCreateSmsCampaignRecipients.phpCreateSmtpEmail.phpCreateSmtpTemplate.phpCreateSmtpTemplateSender.phpCreateUpdateContactModel.phpCreateUpdateFolder.phpCreateWebhook.phpCreatedProcessId.phpDeleteHardbounces.phpEmailExportRecipients.phpErrorModel.phpGetAccount.phpGetAccountMarketingAutomation.phpGetAccountPlan.phpGetAccountRelay.phpGetAccountRelayData.phpGetAggregatedReport.phpGetAttributes.phpGetAttributesAttributes.phpGetAttributesEnumeration.phpGetCampaignOverview.phpGetCampaignRecipients.phpGetCampaignStats.phpGetChildDomain.phpGetChildDomains.phpGetChildInfo.phpGetChildInfoApiKeys.phpGetChildInfoApiKeysV2.phpGetChildInfoApiKeysV3.phpGetChildInfoCredits.phpGetChildInfoStatistics.phpGetChildrenList.phpGetClient.phpGetContactCampaignStats.phpGetContactCampaignStatsClicked.phpGetContactCampaignStatsOpened.phpGetContactCampaignStatsTransacAttributes.phpGetContactCampaignStatsUnsubscriptions.phpGetContactDetails.phpGetContacts.phpGetEmailCampaign.phpGetEmailCampaigns.phpGetEmailEventReport.phpGetEmailEventReportEvents.phpGetExtendedCampaignOverview.phpGetExtendedCampaignOverviewSender.phpGetExtendedCampaignStats.phpGetExtendedClient.phpGetExtendedClientAddress.phpGetExtendedContactDetails.phpGetExtendedContactDetailsStatistics.phpGetExtendedContactDetailsStatisticsClicked.phpGetExtendedContactDetailsStatisticsLinks.phpGetExtendedContactDetailsStatisticsMessagesSent.phpGetExtendedContactDetailsStatisticsOpened.phpGetExtendedContactDetailsStatisticsUnsubscriptions.phpGetExtendedContactDetailsStatisticsUnsubscriptionsAdminUnsubscription.phpGetExtendedContactDetailsStatisticsUnsubscriptionsUserUnsubscription.phpGetExtendedList.phpGetExtendedListCampaignStats.phpGetFolder.phpGetFolderLists.phpGetFolders.phpGetIp.phpGetIpFromSender.phpGetIps.phpGetIpsFromSender.phpGetList.phpGetLists.phpGetProcess.phpGetProcesses.phpGetReports.phpGetReportsReports.phpGetSendersList.phpGetSendersListIps.phpGetSendersListSenders.phpGetSmsCampaign.phpGetSmsCampaignOverview.phpGetSmsCampaignStats.phpGetSmsCampaigns.phpGetSmsEventReport.phpGetSmsEventReportEvents.phpGetSmtpTemplateOverview.phpGetSmtpTemplateOverviewSender.phpGetSmtpTemplates.phpGetSsoToken.phpGetStatsByDomain.phpGetTransacAggregatedSmsReport.phpGetTransacSmsReport.phpGetTransacSmsReportReports.phpGetWebhook.phpGetWebhooks.phpManageIp.phpModelInterface.phpPostContactInfo.phpPostContactInfoContacts.phpPostSendFailed.phpPostSendSmsTestFailed.phpRemainingCreditModel.phpRemainingCreditModelChild.phpRemainingCreditModelReseller.phpRemoveContactFromList.phpRemoveCredits.phpRequestContactExport.phpRequestContactImport.phpRequestContactImportNewList.phpRequestSMSRecipientExport.phpSendEmail.phpSendEmailAttachment.phpSendReport.phpSendReportEmail.phpSendSms.phpSendSmtpEmail.phpSendSmtpEmailAttachment.phpSendSmtpEmailBcc.phpSendSmtpEmailCc.phpSendSmtpEmailReplyTo.phpSendSmtpEmailSender.phpSendSmtpEmailTo.phpSendTemplateEmail.phpSendTestEmail.phpSendTestSms.phpSendTransacSms.phpUpdateAttribute.phpUpdateAttributeEnumeration.phpUpdateCampaignStatus.phpUpdateChild.phpUpdateChildAccountStatus.phpUpdateChildDomain.phpUpdateContact.phpUpdateEmailCampaign.phpUpdateEmailCampaignRecipients.phpUpdateEmailCampaignSender.phpUpdateList.phpUpdateSender.phpUpdateSmsCampaign.phpUpdateSmtpTemplate.phpUpdateSmtpTemplateSender.phpUpdateWebhook.php
ObjectSerializer.phpwp-piwik
LICENSEREADME.mdbitcoin.png
classes
WP_Piwik.php
config.phpWP_Piwik
Admin.php
Admin
Logger.phpLogger
Request.phpRequest
Settings.phpShortcode.phpTemplate.phpTemplate
TrackingCode.phpWidget.phpWidget
css
gpl-3.0.htmlindex.phpjs
index.php
jqplot
IMPORTANT_NOTICE.txtMIT-LICENSE.txtREADME.txtchanges.txtcopyright.txtexcanvas.min.jsgpl-2.0.txtindex.phpjquery.jqplot.min.cssjquery.jqplot.min.js
plugins
usage.txtwp-piwik.jqplot.jssparkline
wp-piwik.jslanguages
.tx
update.shwp-piwik-az_AZ.mowp-piwik-az_AZ.powp-piwik-be_BY.mowp-piwik-be_BY.powp-piwik-cs_CZ.mowp-piwik-cs_CZ.powp-piwik-de_CH.mowp-piwik-de_CH.powp-piwik-de_DE.mowp-piwik-de_DE.powp-piwik-el.mowp-piwik-el.powp-piwik-el_GR.mowp-piwik-el_GR.powp-piwik-es_ES.mowp-piwik-es_ES.powp-piwik-fa_IR.mowp-piwik-fa_IR.powp-piwik-fr_FR.mowp-piwik-fr_FR.powp-piwik-hi.mowp-piwik-hi.powp-piwik-hu_HU.mowp-piwik-hu_HU.powp-piwik-id.mowp-piwik-id.powp-piwik-it_IT.mowp-piwik-it_IT.powp-piwik-lb.mowp-piwik-lb.powp-piwik-lt_LT.mowp-piwik-lt_LT.powp-piwik-nb_NO.mowp-piwik-nb_NO.powp-piwik-nl_NL.mowp-piwik-nl_NL.powp-piwik-pl_PL.mowp-piwik-pl_PL.powp-piwik-pt_BR.mowp-piwik-pt_BR.powp-piwik-ro_RO.mowp-piwik-ro_RO.powp-piwik-ru_RU.mowp-piwik-ru_RU.powp-piwik-sl_SI.mowp-piwik-sl_SI.powp-piwik-sq.mowp-piwik-sq.powp-piwik-sv_SE.mowp-piwik-sv_SE.powp-piwik-tr_TR.mowp-piwik-tr_TR.powp-piwik-ua_UA.mowp-piwik-ua_UA.powp-piwik-uk_UA.mowp-piwik-uk_UA.powp-piwik-zh_CN.mowp-piwik-zh_CN.powp-piwik.potproxy
readme.txtscreenshot-1.gifscreenshot-2.gifscreenshot-3.gifscreenshot-4.gifscreenshot-5.gifuninstall.phpupdate
wp-piwik.phpwpml-config.xmlthemes
generatepress
404.phparchive.phpcomments.phpcontent-link.phpcontent-page.phpcontent-single.phpcontent.php
index.phpcss
admin
all.min.cssfont-awesome.cssfont-awesome.min.cssmobile.cssmobile.min.cssunsemantic-grid-lite.cssunsemantic-grid-lite.min.cssunsemantic-grid.cssunsemantic-grid.min.cssfonts
FontAwesome.otffontawesome-webfont.eotfontawesome-webfont.svgfontawesome-webfont.ttffontawesome-webfont.wofffontawesome-webfont.woff2generatepress.eotgeneratepress.svggeneratepress.ttfgeneratepress.woffgeneratepress.woff2
footer.phpfunctions.phpheader.phpinc
block-editor.phpclass-css.phpcss-output.phpcustomizer.phpdashboard.phpdefaults.phpdeprecated.phpgeneral.phpmarkup.phpmeta-box.phpmigrate.phpplugin-compat.php
index.phpcustomizer
controls
class-deprecated.phpclass-range-control.phpclass-typography-control.phpclass-upsell-control.phpclass-upsell-section.php
customizer-helpers.phpdeprecated.phphelpers.phpcss
js
structure
archives.phpcomments.phpfeatured-images.phpfooter.phpheader.phpnavigation.phppost-meta.phpsidebars.php
theme-functions.phptypography.phpjs
a11y.jsa11y.min.js
no-results.phppage.phpreadme.txtrtl.cssscreenshot.pngsearch.phpsearchform.phpsidebar-left.phpsidebar.phpsingle.phpstyle.cssstyle.min.cssadmin
back-to-top.jsback-to-top.min.jsclassList.jsclassList.min.jsdropdown-click.jsdropdown-click.min.jsmenu.jsmenu.min.jsnavigation-search.jsnavigation-search.min.jstwentynineteen
404.phparchive.php
classes
comments.phpfonts
footer.phpfunctions.phpheader.phpimage.phpinc
back-compat.phpcolor-patterns.phpcustomizer.phphelper-functions.phpicon-functions.phptemplate-functions.phptemplate-tags.php
index.phpjs
customize-controls.jscustomize-preview.jspriority-menu.jsskip-link-focus-fix.jstouch-keyboard-navigation.js
package-lock.jsonpackage.jsonpage.phppostcss.config.jsprint.cssprint.scssreadme.txtsass
_normalize.scss
screenshot.pngsearch.phpsingle.phpstyle-editor-customizer.cssstyle-editor-customizer.scssstyle-editor.cssstyle-editor.scssstyle-rtl.cssstyle.cssstyle.scssblocks
elements
forms
layout
media
mixins
modules
navigation
_links.scss_menu-footer-navigation.scss_menu-main-navigation.scss_menu-social-navigation.scss_navigation.scss_next-previous.scss
site
typography
variables-site
template-parts
twentyseventeen
404.phparchive.phpcomments.phpfooter.phpfront-page.phpfunctions.phpheader.php
assets
css
images
js
inc
back-compat.phpcolor-patterns.phpcustom-header.phpcustomizer.phpicon-functions.phptemplate-functions.phptemplate-tags.php
index.phppage.phpreadme.txtrtl.cssscreenshot.pngsearch.phpsearchform.phpsidebar.phpsingle.phpstyle.csstemplate-parts
twentysixteen
404.phparchive.phpcomments.php
css
footer.phpfunctions.phpgenericons
COPYING.txtGenericons.eotGenericons.svgGenericons.ttfGenericons.woffLICENSE.txtREADME.mdgenericons.css
header.phpimage.phpinc
index.phpjs
color-scheme-control.jscustomize-preview.jsfunctions.jshtml5.jskeyboard-image-navigation.jsskip-link-focus-fix.js
page.phpreadme.txtrtl.cssscreenshot.pngsearch.phpsearchform.phpsidebar-content-bottom.phpsidebar.phpsingle.phpstyle.csstemplate-parts
741
wp-content/plugins/gp-premium/general/js/smooth-scroll.js
Normal file
741
wp-content/plugins/gp-premium/general/js/smooth-scroll.js
Normal file
@ -0,0 +1,741 @@
|
||||
/*!
|
||||
* smooth-scroll v14.2.1: Animate scrolling to anchor links
|
||||
* (c) 2018 Chris Ferdinandi
|
||||
* MIT License
|
||||
* http://github.com/cferdinandi/smooth-scroll
|
||||
*/
|
||||
|
||||
/**
|
||||
* closest() polyfill
|
||||
* @link https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill
|
||||
*/
|
||||
if (window.Element && !Element.prototype.closest) {
|
||||
Element.prototype.closest = function(s) {
|
||||
var matches = (this.document || this.ownerDocument).querySelectorAll(s),
|
||||
i,
|
||||
el = this;
|
||||
do {
|
||||
i = matches.length;
|
||||
while (--i >= 0 && matches.item(i) !== el) {}
|
||||
} while ((i < 0) && (el = el.parentElement));
|
||||
return el;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* CustomEvent() polyfill
|
||||
* https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent#Polyfill
|
||||
*/
|
||||
(function () {
|
||||
|
||||
if (typeof window.CustomEvent === "function") return false;
|
||||
|
||||
function CustomEvent(event, params) {
|
||||
params = params || { bubbles: false, cancelable: false, detail: undefined };
|
||||
var evt = document.createEvent('CustomEvent');
|
||||
evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
|
||||
return evt;
|
||||
}
|
||||
|
||||
CustomEvent.prototype = window.Event.prototype;
|
||||
|
||||
window.CustomEvent = CustomEvent;
|
||||
})();
|
||||
/**
|
||||
* requestAnimationFrame() polyfill
|
||||
* By Erik Möller. Fixes from Paul Irish and Tino Zijdel.
|
||||
* @link http://paulirish.com/2011/requestanimationframe-for-smart-animating/
|
||||
* @link http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
|
||||
* @license MIT
|
||||
*/
|
||||
(function() {
|
||||
var lastTime = 0;
|
||||
var vendors = ['ms', 'moz', 'webkit', 'o'];
|
||||
for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
|
||||
window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
|
||||
window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] ||
|
||||
window[vendors[x]+'CancelRequestAnimationFrame'];
|
||||
}
|
||||
|
||||
if (!window.requestAnimationFrame) {
|
||||
window.requestAnimationFrame = function(callback, element) {
|
||||
var currTime = new Date().getTime();
|
||||
var timeToCall = Math.max(0, 16 - (currTime - lastTime));
|
||||
var id = window.setTimeout((function() { callback(currTime + timeToCall); }),
|
||||
timeToCall);
|
||||
lastTime = currTime + timeToCall;
|
||||
return id;
|
||||
};
|
||||
}
|
||||
|
||||
if (!window.cancelAnimationFrame) {
|
||||
window.cancelAnimationFrame = function(id) {
|
||||
clearTimeout(id);
|
||||
};
|
||||
}
|
||||
}());
|
||||
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define([], (function () {
|
||||
return factory(root);
|
||||
}));
|
||||
} else if (typeof exports === 'object') {
|
||||
module.exports = factory(root);
|
||||
} else {
|
||||
root.SmoothScroll = factory(root);
|
||||
}
|
||||
})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : this, (function (window) {
|
||||
|
||||
'use strict';
|
||||
|
||||
//
|
||||
// Default settings
|
||||
//
|
||||
|
||||
var defaults = {
|
||||
// Selectors
|
||||
ignore: '[data-scroll-ignore]',
|
||||
header: null,
|
||||
topOnEmptyHash: true,
|
||||
|
||||
// Speed & Easing
|
||||
speed: 500,
|
||||
clip: true,
|
||||
offset: 0,
|
||||
easing: 'easeInOutCubic',
|
||||
customEasing: null,
|
||||
|
||||
// History
|
||||
updateURL: true,
|
||||
popstate: true,
|
||||
|
||||
// Custom Events
|
||||
emitEvents: true
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Utility Methods
|
||||
//
|
||||
|
||||
/**
|
||||
* Check if browser supports required methods
|
||||
* @return {Boolean} Returns true if all required methods are supported
|
||||
*/
|
||||
var supports = function () {
|
||||
return (
|
||||
'querySelector' in document &&
|
||||
'addEventListener' in window &&
|
||||
'requestAnimationFrame' in window &&
|
||||
'closest' in window.Element.prototype
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Merge two or more objects. Returns a new object.
|
||||
* @param {Object} objects The objects to merge together
|
||||
* @returns {Object} Merged values of defaults and options
|
||||
*/
|
||||
var extend = function () {
|
||||
|
||||
// Variables
|
||||
var extended = {};
|
||||
|
||||
// Merge the object into the extended object
|
||||
var merge = function (obj) {
|
||||
for (var prop in obj) {
|
||||
if (obj.hasOwnProperty(prop)) {
|
||||
extended[prop] = obj[prop];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Loop through each object and conduct a merge
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
merge(arguments[i]);
|
||||
}
|
||||
|
||||
return extended;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Check to see if user prefers reduced motion
|
||||
* @param {Object} settings Script settings
|
||||
*/
|
||||
var reduceMotion = function (settings) {
|
||||
if ('matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the height of an element.
|
||||
* @param {Node} elem The element to get the height of
|
||||
* @return {Number} The element's height in pixels
|
||||
*/
|
||||
var getHeight = function (elem) {
|
||||
return parseInt(window.getComputedStyle(elem).height, 10);
|
||||
};
|
||||
|
||||
/**
|
||||
* Decode a URI, with error check
|
||||
* @param {String} hash The URI to decode
|
||||
* @return {String} A decoded URI (or the original string if an error is thrown)
|
||||
*/
|
||||
var decode = function (hash) {
|
||||
var decoded;
|
||||
try {
|
||||
decoded = decodeURIComponent(hash);
|
||||
} catch(e) {
|
||||
decoded = hash;
|
||||
}
|
||||
return decoded;
|
||||
};
|
||||
|
||||
/**
|
||||
* Escape special characters for use with querySelector
|
||||
* @author Mathias Bynens
|
||||
* @link https://github.com/mathiasbynens/CSS.escape
|
||||
* @param {String} id The anchor ID to escape
|
||||
*/
|
||||
var escapeCharacters = function (id) {
|
||||
|
||||
// Remove leading hash
|
||||
if (id.charAt(0) === '#') {
|
||||
id = id.substr(1);
|
||||
}
|
||||
|
||||
var string = String(id);
|
||||
var length = string.length;
|
||||
var index = -1;
|
||||
var codeUnit;
|
||||
var result = '';
|
||||
var firstCodeUnit = string.charCodeAt(0);
|
||||
while (++index < length) {
|
||||
codeUnit = string.charCodeAt(index);
|
||||
// Note: there’s no need to special-case astral symbols, surrogate
|
||||
// pairs, or lone surrogates.
|
||||
|
||||
// If the character is NULL (U+0000), then throw an
|
||||
// `InvalidCharacterError` exception and terminate these steps.
|
||||
if (codeUnit === 0x0000) {
|
||||
throw new InvalidCharacterError(
|
||||
'Invalid character: the input contains U+0000.'
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
// If the character is in the range [\1-\1F] (U+0001 to U+001F) or is
|
||||
// U+007F, […]
|
||||
(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||
|
||||
// If the character is the first character and is in the range [0-9]
|
||||
// (U+0030 to U+0039), […]
|
||||
(index === 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||
|
||||
// If the character is the second character and is in the range [0-9]
|
||||
// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]
|
||||
(
|
||||
index === 1 &&
|
||||
codeUnit >= 0x0030 && codeUnit <= 0x0039 &&
|
||||
firstCodeUnit === 0x002D
|
||||
)
|
||||
) {
|
||||
// http://dev.w3.org/csswg/cssom/#escape-a-character-as-code-point
|
||||
result += '\\' + codeUnit.toString(16) + ' ';
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the character is not handled by one of the above rules and is
|
||||
// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or
|
||||
// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to
|
||||
// U+005A), or [a-z] (U+0061 to U+007A), […]
|
||||
if (
|
||||
codeUnit >= 0x0080 ||
|
||||
codeUnit === 0x002D ||
|
||||
codeUnit === 0x005F ||
|
||||
codeUnit >= 0x0030 && codeUnit <= 0x0039 ||
|
||||
codeUnit >= 0x0041 && codeUnit <= 0x005A ||
|
||||
codeUnit >= 0x0061 && codeUnit <= 0x007A
|
||||
) {
|
||||
// the character itself
|
||||
result += string.charAt(index);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Otherwise, the escaped character.
|
||||
// http://dev.w3.org/csswg/cssom/#escape-a-character
|
||||
result += '\\' + string.charAt(index);
|
||||
|
||||
}
|
||||
|
||||
// Return sanitized hash
|
||||
var hash;
|
||||
try {
|
||||
hash = decodeURIComponent('#' + result);
|
||||
} catch(e) {
|
||||
hash = '#' + result;
|
||||
}
|
||||
return hash;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate the easing pattern
|
||||
* @link https://gist.github.com/gre/1650294
|
||||
* @param {String} type Easing pattern
|
||||
* @param {Number} time Time animation should take to complete
|
||||
* @returns {Number}
|
||||
*/
|
||||
var easingPattern = function (settings, time) {
|
||||
var pattern;
|
||||
|
||||
// Default Easing Patterns
|
||||
if (settings.easing === 'easeInQuad') pattern = time * time; // accelerating from zero velocity
|
||||
if (settings.easing === 'easeOutQuad') pattern = time * (2 - time); // decelerating to zero velocity
|
||||
if (settings.easing === 'easeInOutQuad') pattern = time < 0.5 ? 2 * time * time : -1 + (4 - 2 * time) * time; // acceleration until halfway, then deceleration
|
||||
if (settings.easing === 'easeInCubic') pattern = time * time * time; // accelerating from zero velocity
|
||||
if (settings.easing === 'easeOutCubic') pattern = (--time) * time * time + 1; // decelerating to zero velocity
|
||||
if (settings.easing === 'easeInOutCubic') pattern = time < 0.5 ? 4 * time * time * time : (time - 1) * (2 * time - 2) * (2 * time - 2) + 1; // acceleration until halfway, then deceleration
|
||||
if (settings.easing === 'easeInQuart') pattern = time * time * time * time; // accelerating from zero velocity
|
||||
if (settings.easing === 'easeOutQuart') pattern = 1 - (--time) * time * time * time; // decelerating to zero velocity
|
||||
if (settings.easing === 'easeInOutQuart') pattern = time < 0.5 ? 8 * time * time * time * time : 1 - 8 * (--time) * time * time * time; // acceleration until halfway, then deceleration
|
||||
if (settings.easing === 'easeInQuint') pattern = time * time * time * time * time; // accelerating from zero velocity
|
||||
if (settings.easing === 'easeOutQuint') pattern = 1 + (--time) * time * time * time * time; // decelerating to zero velocity
|
||||
if (settings.easing === 'easeInOutQuint') pattern = time < 0.5 ? 16 * time * time * time * time * time : 1 + 16 * (--time) * time * time * time * time; // acceleration until halfway, then deceleration
|
||||
|
||||
// Custom Easing Patterns
|
||||
if (!!settings.customEasing) pattern = settings.customEasing(time);
|
||||
|
||||
return pattern || time; // no easing, no acceleration
|
||||
};
|
||||
|
||||
/**
|
||||
* Determine the document's height
|
||||
* @returns {Number}
|
||||
*/
|
||||
var getDocumentHeight = function () {
|
||||
return Math.max(
|
||||
document.body.scrollHeight, document.documentElement.scrollHeight,
|
||||
document.body.offsetHeight, document.documentElement.offsetHeight,
|
||||
document.body.clientHeight, document.documentElement.clientHeight
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate how far to scroll
|
||||
* Clip support added by robjtede - https://github.com/cferdinandi/smooth-scroll/issues/405
|
||||
* @param {Element} anchor The anchor element to scroll to
|
||||
* @param {Number} headerHeight Height of a fixed header, if any
|
||||
* @param {Number} offset Number of pixels by which to offset scroll
|
||||
* @param {Boolean} clip If true, adjust scroll distance to prevent abrupt stops near the bottom of the page
|
||||
* @returns {Number}
|
||||
*/
|
||||
var getEndLocation = function (anchor, headerHeight, offset, clip) {
|
||||
var location = 0;
|
||||
if (anchor.offsetParent) {
|
||||
do {
|
||||
location += anchor.offsetTop;
|
||||
anchor = anchor.offsetParent;
|
||||
} while (anchor);
|
||||
}
|
||||
location = Math.max(location - headerHeight - offset, 0);
|
||||
if (clip) {
|
||||
location = Math.min(location, getDocumentHeight() - window.innerHeight);
|
||||
}
|
||||
return location;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get the height of the fixed header
|
||||
* @param {Node} header The header
|
||||
* @return {Number} The height of the header
|
||||
*/
|
||||
var getHeaderHeight = function (header) {
|
||||
return !header ? 0 : (getHeight(header) + header.offsetTop);
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the URL
|
||||
* @param {Node} anchor The anchor that was scrolled to
|
||||
* @param {Boolean} isNum If true, anchor is a number
|
||||
* @param {Object} options Settings for Smooth Scroll
|
||||
*/
|
||||
var updateURL = function (anchor, isNum, options) {
|
||||
|
||||
// Bail if the anchor is a number
|
||||
if (isNum) return;
|
||||
|
||||
// Verify that pushState is supported and the updateURL option is enabled
|
||||
if (!history.pushState || !options.updateURL) return;
|
||||
|
||||
// Update URL
|
||||
history.pushState(
|
||||
{
|
||||
smoothScroll: JSON.stringify(options),
|
||||
anchor: anchor.id
|
||||
},
|
||||
document.title,
|
||||
anchor === document.documentElement ? '#top' : '#' + anchor.id
|
||||
);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Bring the anchored element into focus
|
||||
* @param {Node} anchor The anchor element
|
||||
* @param {Number} endLocation The end location to scroll to
|
||||
* @param {Boolean} isNum If true, scroll is to a position rather than an element
|
||||
*/
|
||||
var adjustFocus = function (anchor, endLocation, isNum) {
|
||||
|
||||
// Is scrolling to top of page, blur
|
||||
if (anchor === 0) {
|
||||
document.body.focus();
|
||||
}
|
||||
|
||||
// Don't run if scrolling to a number on the page
|
||||
if (isNum) return;
|
||||
|
||||
// Otherwise, bring anchor element into focus
|
||||
anchor.focus();
|
||||
if (document.activeElement !== anchor) {
|
||||
anchor.setAttribute('tabindex', '-1');
|
||||
anchor.focus();
|
||||
anchor.style.outline = 'none';
|
||||
}
|
||||
window.scrollTo(0 , endLocation);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Emit a custom event
|
||||
* @param {String} type The event type
|
||||
* @param {Object} options The settings object
|
||||
* @param {Node} anchor The anchor element
|
||||
* @param {Node} toggle The toggle element
|
||||
*/
|
||||
var emitEvent = function (type, options, anchor, toggle) {
|
||||
if (!options.emitEvents || typeof window.CustomEvent !== 'function') return;
|
||||
var event = new CustomEvent(type, {
|
||||
bubbles: true,
|
||||
detail: {
|
||||
anchor: anchor,
|
||||
toggle: toggle
|
||||
}
|
||||
});
|
||||
document.dispatchEvent(event);
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// SmoothScroll Constructor
|
||||
//
|
||||
|
||||
var SmoothScroll = function (selector, options) {
|
||||
|
||||
//
|
||||
// Variables
|
||||
//
|
||||
|
||||
var smoothScroll = {}; // Object for public APIs
|
||||
var settings, anchor, toggle, fixedHeader, headerHeight, eventTimeout, animationInterval;
|
||||
|
||||
|
||||
//
|
||||
// Methods
|
||||
//
|
||||
|
||||
/**
|
||||
* Cancel a scroll-in-progress
|
||||
*/
|
||||
smoothScroll.cancelScroll = function (noEvent) {
|
||||
cancelAnimationFrame(animationInterval);
|
||||
animationInterval = null;
|
||||
if (noEvent) return;
|
||||
emitEvent('scrollCancel', settings);
|
||||
};
|
||||
|
||||
/**
|
||||
* Start/stop the scrolling animation
|
||||
* @param {Node|Number} anchor The element or position to scroll to
|
||||
* @param {Element} toggle The element that toggled the scroll event
|
||||
* @param {Object} options
|
||||
*/
|
||||
smoothScroll.animateScroll = function (anchor, toggle, options) {
|
||||
|
||||
// Local settings
|
||||
var animateSettings = extend(settings || defaults, options || {}); // Merge user options with defaults
|
||||
|
||||
// Selectors and variables
|
||||
var isNum = Object.prototype.toString.call(anchor) === '[object Number]' ? true : false;
|
||||
var anchorElem = isNum || !anchor.tagName ? null : anchor;
|
||||
if (!isNum && !anchorElem) return;
|
||||
var startLocation = window.pageYOffset; // Current location on the page
|
||||
if (animateSettings.header && !fixedHeader) {
|
||||
// Get the fixed header if not already set
|
||||
fixedHeader = document.querySelector(animateSettings.header);
|
||||
}
|
||||
if (!headerHeight) {
|
||||
// Get the height of a fixed header if one exists and not already set
|
||||
headerHeight = getHeaderHeight(fixedHeader);
|
||||
}
|
||||
var endLocation = isNum ? anchor : getEndLocation(anchorElem, headerHeight, parseInt((typeof animateSettings.offset === 'function' ? animateSettings.offset(anchor, toggle) : animateSettings.offset), 10), animateSettings.clip); // Location to scroll to
|
||||
var distance = endLocation - startLocation; // distance to travel
|
||||
var documentHeight = getDocumentHeight();
|
||||
var timeLapsed = 0;
|
||||
var start, percentage, position;
|
||||
|
||||
/**
|
||||
* Stop the scroll animation when it reaches its target (or the bottom/top of page)
|
||||
* @param {Number} position Current position on the page
|
||||
* @param {Number} endLocation Scroll to location
|
||||
* @param {Number} animationInterval How much to scroll on this loop
|
||||
*/
|
||||
var stopAnimateScroll = function (position, endLocation) {
|
||||
|
||||
// Get the current location
|
||||
var currentLocation = window.pageYOffset;
|
||||
|
||||
// Check if the end location has been reached yet (or we've hit the end of the document)
|
||||
if (position == endLocation || currentLocation == endLocation || ((startLocation < endLocation && window.innerHeight + currentLocation) >= documentHeight)) {
|
||||
|
||||
// Clear the animation timer
|
||||
smoothScroll.cancelScroll(true);
|
||||
|
||||
// Bring the anchored element into focus
|
||||
adjustFocus(anchor, endLocation, isNum);
|
||||
|
||||
// Emit a custom event
|
||||
emitEvent('scrollStop', animateSettings, anchor, toggle);
|
||||
|
||||
// Reset start
|
||||
start = null;
|
||||
animationInterval = null;
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Loop scrolling animation
|
||||
*/
|
||||
var loopAnimateScroll = function (timestamp) {
|
||||
if (!start) { start = timestamp; }
|
||||
timeLapsed += timestamp - start;
|
||||
percentage = (timeLapsed / parseInt(animateSettings.speed, 10));
|
||||
percentage = (percentage > 1) ? 1 : percentage;
|
||||
position = startLocation + (distance * easingPattern(animateSettings, percentage));
|
||||
window.scrollTo(0, Math.floor(position));
|
||||
if (!stopAnimateScroll(position, endLocation)) {
|
||||
animationInterval = window.requestAnimationFrame(loopAnimateScroll);
|
||||
start = timestamp;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset position to fix weird iOS bug
|
||||
* @link https://github.com/cferdinandi/smooth-scroll/issues/45
|
||||
*/
|
||||
if (window.pageYOffset === 0) {
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
// Update the URL
|
||||
updateURL(anchor, isNum, animateSettings);
|
||||
|
||||
// Emit a custom event
|
||||
emitEvent('scrollStart', animateSettings, anchor, toggle);
|
||||
|
||||
// Start scrolling animation
|
||||
smoothScroll.cancelScroll(true);
|
||||
window.requestAnimationFrame(loopAnimateScroll);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* If smooth scroll element clicked, animate scroll
|
||||
*/
|
||||
var clickHandler = function (event) {
|
||||
|
||||
// Don't run if the user prefers reduced motion
|
||||
if (reduceMotion(settings)) return;
|
||||
|
||||
// Don't run if right-click or command/control + click
|
||||
if (event.button !== 0 || event.metaKey || event.ctrlKey) return;
|
||||
|
||||
// Check if event.target has closest() method
|
||||
// By @totegi - https://github.com/cferdinandi/smooth-scroll/pull/401/
|
||||
if(!('closest' in event.target))return;
|
||||
|
||||
// Check if a smooth scroll link was clicked
|
||||
toggle = event.target.closest(selector);
|
||||
if (!toggle || toggle.tagName.toLowerCase() !== 'a' || event.target.closest(settings.ignore)) return;
|
||||
|
||||
// Only run if link is an anchor and points to the current page
|
||||
if (toggle.hostname !== window.location.hostname || toggle.pathname !== window.location.pathname || !/#/.test(toggle.href)) return;
|
||||
|
||||
// Get an escaped version of the hash
|
||||
var hash = escapeCharacters(decode(toggle.hash));
|
||||
|
||||
// Get the anchored element
|
||||
var anchor = settings.topOnEmptyHash && hash === '#' ? document.documentElement : document.querySelector(hash);
|
||||
anchor = !anchor && hash === '#top' ? document.documentElement : anchor;
|
||||
|
||||
// If anchored element exists, scroll to it
|
||||
if (!anchor) return;
|
||||
event.preventDefault();
|
||||
smoothScroll.animateScroll(anchor, toggle);
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Animate scroll on popstate events
|
||||
*/
|
||||
var popstateHandler = function (event) {
|
||||
// Stop if history.state doesn't exist (ex. if clicking on a broken anchor link).
|
||||
// fixes `Cannot read property 'smoothScroll' of null` error getting thrown.
|
||||
if (history.state === null) return;
|
||||
|
||||
// Only run if state is a popstate record for this instantiation
|
||||
if (!history.state.smoothScroll || history.state.smoothScroll !== JSON.stringify(settings)) return;
|
||||
|
||||
// Only run if state includes an anchor
|
||||
if (!history.state.anchor) return;
|
||||
|
||||
// Get the anchor
|
||||
var anchor = document.querySelector(escapeCharacters(decode(history.state.anchor)));
|
||||
if (!anchor) return;
|
||||
|
||||
// Animate scroll to anchor link
|
||||
smoothScroll.animateScroll(anchor, null, {updateURL: false});
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* On window scroll and resize, only run events at a rate of 15fps for better performance
|
||||
*/
|
||||
var resizeThrottler = function (event) {
|
||||
if (!eventTimeout) {
|
||||
eventTimeout = setTimeout((function() {
|
||||
eventTimeout = null; // Reset timeout
|
||||
headerHeight = getHeaderHeight(fixedHeader); // Get the height of a fixed header if one exists
|
||||
}), 66);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Destroy the current initialization.
|
||||
*/
|
||||
smoothScroll.destroy = function () {
|
||||
|
||||
// If plugin isn't already initialized, stop
|
||||
if (!settings) return;
|
||||
|
||||
// Remove event listeners
|
||||
document.removeEventListener('click', clickHandler, false);
|
||||
window.removeEventListener('resize', resizeThrottler, false);
|
||||
window.removeEventListener('popstate', popstateHandler, false);
|
||||
|
||||
// Cancel any scrolls-in-progress
|
||||
smoothScroll.cancelScroll();
|
||||
|
||||
// Reset variables
|
||||
settings = null;
|
||||
anchor = null;
|
||||
toggle = null;
|
||||
fixedHeader = null;
|
||||
headerHeight = null;
|
||||
eventTimeout = null;
|
||||
animationInterval = null;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialize Smooth Scroll
|
||||
* @param {Object} options User settings
|
||||
*/
|
||||
smoothScroll.init = function (options) {
|
||||
|
||||
// feature test
|
||||
if (!supports()) throw 'Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.';
|
||||
|
||||
// Destroy any existing initializations
|
||||
smoothScroll.destroy();
|
||||
|
||||
// Selectors and variables
|
||||
settings = extend(defaults, options || {}); // Merge user options with defaults
|
||||
fixedHeader = settings.header ? document.querySelector(settings.header) : null; // Get the fixed header
|
||||
headerHeight = getHeaderHeight(fixedHeader);
|
||||
|
||||
// When a toggle is clicked, run the click handler
|
||||
document.addEventListener('click', clickHandler, false);
|
||||
|
||||
// If window is resized and there's a fixed header, recalculate its size
|
||||
if (fixedHeader) {
|
||||
window.addEventListener('resize', resizeThrottler, false);
|
||||
}
|
||||
|
||||
// If updateURL and popState are enabled, listen for pop events
|
||||
if (settings.updateURL && settings.popstate) {
|
||||
window.addEventListener('popstate', popstateHandler, false);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
//
|
||||
// Initialize plugin
|
||||
//
|
||||
|
||||
smoothScroll.init(options);
|
||||
|
||||
|
||||
//
|
||||
// Public APIs
|
||||
//
|
||||
|
||||
return smoothScroll;
|
||||
|
||||
};
|
||||
|
||||
return SmoothScroll;
|
||||
|
||||
}));
|
||||
|
||||
/* GP */
|
||||
var scroll = new SmoothScroll( smooth.elements.join(), {
|
||||
speed: smooth.duration,
|
||||
offset: function( anchor, toggle ) {
|
||||
var body = document.body,
|
||||
nav = document.querySelector( '#site-navigation' ),
|
||||
stickyNav = document.querySelector( '#sticky-navigation' ),
|
||||
mobileHeader = document.querySelector( '#mobile-header' ),
|
||||
menuToggle = document.querySelector( '.menu-toggle' ),
|
||||
offset = 0;
|
||||
|
||||
if ( mobileHeader && ( mobileHeader.offsetWidth || mobileHeader.offsetHeight || mobileHeader.getClientRects().length ) ) {
|
||||
if ( body.classList.contains( 'mobile-header-sticky' ) ) {
|
||||
offset = offset + mobileHeader.clientHeight;
|
||||
}
|
||||
} else if ( menuToggle && ( menuToggle.offsetWidth || menuToggle.offsetHeight || menuToggle.getClientRects().length ) ) {
|
||||
if ( body.classList.contains( 'both-sticky-menu' ) || body.classList.contains( 'mobile-sticky-menu' ) ) {
|
||||
if ( stickyNav ) {
|
||||
offset = offset + stickyNav.clientHeight;
|
||||
} else if ( nav ) {
|
||||
offset = offset + nav.clientHeight;
|
||||
}
|
||||
}
|
||||
} else if ( body.classList.contains( 'both-sticky-menu' ) || body.classList.contains( 'desktop-sticky-menu' ) ) {
|
||||
if ( stickyNav ) {
|
||||
offset = offset + stickyNav.clientHeight;
|
||||
} else if ( nav ) {
|
||||
offset = offset + nav.clientHeight;
|
||||
}
|
||||
}
|
||||
|
||||
return offset;
|
||||
}
|
||||
} );
|
Reference in New Issue
Block a user