Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
00ab82a35d | ||
|
|
51cfce0071 | ||
|
|
416039449f | ||
|
|
e548158c15 | ||
|
|
41a42d3a2a | ||
|
|
b6aca366b2 | ||
|
|
7cc5b6de5a | ||
|
|
ca68f59a28 | ||
|
|
a3040b6c47 | ||
|
|
b99be56795 | ||
|
|
3458b724be |
27
CHANGELOG.md
27
CHANGELOG.md
@ -1,5 +1,32 @@
|
||||
# Notice Manager Changelog
|
||||
|
||||
## 0.27
|
||||
|
||||
Release date: Sep 7 2024
|
||||
|
||||
### Dependencies
|
||||
- Composer config: `prepend-autoloader: false` - Give precedence to other composer installations if present.
|
||||
|
||||
## 0.26
|
||||
|
||||
Release date: Sep 1 2024
|
||||
|
||||
### Changed
|
||||
- Use Mutation Observer instead of deprecated `DOMNodeRemoved` event.
|
||||
|
||||
### Added
|
||||
- Add method `NoticeManager.bootstrap()` to initialize Notice manager.
|
||||
|
||||
## 0.25
|
||||
|
||||
Release date: Feb 18 2024
|
||||
|
||||
### Fixed
|
||||
- Fix fatal error `Class "WPHelper\MetaBox" not found` due to dependency `abuyoyo/adminmenupage` < 0.29 not requiring dependency `abuyoyo/metabox`.
|
||||
|
||||
### Dependencies
|
||||
- Library WPHelper\AdminPage (`abuyoyo/adminmenupage`) updated to 0.29. Requires `abuyoyo/metabox`.
|
||||
|
||||
## 0.24
|
||||
|
||||
Release date: Oct 4 2023
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"name": "abuyoyo/notice-manager",
|
||||
"description": "Manage notices on WordPress admin pages. Adds 'Notices' screen-meta-link.",
|
||||
"type": "wordpress-plugin",
|
||||
"version": "0.24",
|
||||
"version": "0.27",
|
||||
"repositories": [
|
||||
{
|
||||
"type": "vcs",
|
||||
@ -12,6 +12,9 @@
|
||||
"require":{
|
||||
"abuyoyo/screen-meta-links": "~0.13",
|
||||
"abuyoyo/plugincore": "~0.27",
|
||||
"abuyoyo/adminmenupage": "~0.28"
|
||||
"abuyoyo/adminmenupage": "~0.29"
|
||||
},
|
||||
"config": {
|
||||
"prepend-autoloader": false
|
||||
}
|
||||
}
|
||||
50
composer.lock
generated
50
composer.lock
generated
@ -4,22 +4,25 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "4ad7c014df793fb15d9b01b71d7a7acf",
|
||||
"content-hash": "b1a74cf1316f5dd317f70efeb60d9f4d",
|
||||
"packages": [
|
||||
{
|
||||
"name": "abuyoyo/adminmenupage",
|
||||
"version": "0.28",
|
||||
"version": "0.29",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/abuyoyo/AdminMenuPage.git",
|
||||
"reference": "c16d80ebbe1cc112acd3e5eca2f97e7abd017d29"
|
||||
"reference": "4cd47d5217ca25ed17af76f5fdbab3cab3b37ef8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/abuyoyo/AdminMenuPage/zipball/c16d80ebbe1cc112acd3e5eca2f97e7abd017d29",
|
||||
"reference": "c16d80ebbe1cc112acd3e5eca2f97e7abd017d29",
|
||||
"url": "https://api.github.com/repos/abuyoyo/AdminMenuPage/zipball/4cd47d5217ca25ed17af76f5fdbab3cab3b37ef8",
|
||||
"reference": "4cd47d5217ca25ed17af76f5fdbab3cab3b37ef8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"abuyoyo/metabox": "~0.8"
|
||||
},
|
||||
"suggest": {
|
||||
"abuyoyo/plugincore": "~0.26",
|
||||
"cmb2/cmb2": "~2.9"
|
||||
@ -40,9 +43,40 @@
|
||||
"description": "WordPress admin menu page helper class",
|
||||
"support": {
|
||||
"issues": "https://github.com/abuyoyo/AdminMenuPage/issues",
|
||||
"source": "https://github.com/abuyoyo/AdminMenuPage/tree/0.28"
|
||||
"source": "https://github.com/abuyoyo/AdminMenuPage/tree/0.29"
|
||||
},
|
||||
"time": "2023-10-04T00:00:00+00:00"
|
||||
"time": "2023-10-05T00:00:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "abuyoyo/metabox",
|
||||
"version": "0.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/abuyoyo/MetaBox.git",
|
||||
"reference": "98cb4c30db4c366c0d273985eb9c31ffa1cd78f9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/abuyoyo/MetaBox/zipball/98cb4c30db4c366c0d273985eb9c31ffa1cd78f9",
|
||||
"reference": "98cb4c30db4c366c0d273985eb9c31ffa1cd78f9",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"WPHelper\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"description": "WordPress metabox helper class",
|
||||
"support": {
|
||||
"issues": "https://github.com/abuyoyo/MetaBox/issues",
|
||||
"source": "https://github.com/abuyoyo/MetaBox/tree/0.8"
|
||||
},
|
||||
"time": "2023-07-18T19:14:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "abuyoyo/plugincore",
|
||||
@ -112,7 +146,7 @@
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"prefer-lowest": true,
|
||||
"platform": [],
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.3.0"
|
||||
|
||||
@ -2,27 +2,26 @@
|
||||
* NoticeManager class/module
|
||||
*
|
||||
*/
|
||||
var NoticeManager = (function ($, document) {
|
||||
let options = window.notice_manager_options
|
||||
const NoticeManager = function ($) {
|
||||
|
||||
let selectors_notice = [
|
||||
const selectors_notice = [
|
||||
"div.notice",
|
||||
"div.updated",
|
||||
]
|
||||
|
||||
let selectors_warning = [
|
||||
const selectors_warning = [
|
||||
"div.notice-warning",
|
||||
"div.update-nag",
|
||||
]
|
||||
|
||||
let selectors_error = [
|
||||
const selectors_error = [
|
||||
"div.error",
|
||||
"div.notice-error",
|
||||
]
|
||||
|
||||
let selectors_all = selectors_notice.concat(selectors_warning, selectors_error)
|
||||
const selectors_all = selectors_notice.concat(selectors_warning, selectors_error)
|
||||
|
||||
let selectors_skip = [
|
||||
const selectors_skip = [
|
||||
".inline",
|
||||
".below-h2",
|
||||
".theme-info .notice",
|
||||
@ -30,136 +29,133 @@ var NoticeManager = (function ($, document) {
|
||||
]
|
||||
|
||||
// wait function used with autoCollapse
|
||||
let wait = function (ms) {
|
||||
const wait = function (ms) {
|
||||
var dfd = $.Deferred()
|
||||
setTimeout(dfd.resolve, ms) //callback, timeout till callback
|
||||
return dfd.promise()
|
||||
}
|
||||
|
||||
const options = window.notice_manager_options
|
||||
|
||||
let notices
|
||||
|
||||
let button
|
||||
let panel
|
||||
let haveClosed // set to true on first close/collect
|
||||
let dismissNoticesButton
|
||||
|
||||
// bootstrap
|
||||
// some of these need to run BEFORE document.ready - don't know why really
|
||||
button = $("#meta-link-notices")
|
||||
panel = $("#meta-link-notices-wrap")
|
||||
haveClosed = false
|
||||
dismissNoticesButton = $("#meta-link-notices-wrap button.notice-dismiss")
|
||||
|
||||
dismissNoticesButton.on("click", () => {
|
||||
screenMeta.close(panel, button)
|
||||
if (! haveClosed){
|
||||
NoticeManager.collectNotices()
|
||||
}
|
||||
NoticeManager.addCounter()
|
||||
})
|
||||
|
||||
//original wp focus on click function
|
||||
button.on("focus.scroll-into-view", (e) => {
|
||||
if (e.target.scrollIntoView) e.target.scrollIntoView(false)
|
||||
})
|
||||
|
||||
// scroll page to top when closing notice panel
|
||||
// function used to work with $(this)
|
||||
// using e.target instead
|
||||
// not sure if this should perhaps be e.currentTarget
|
||||
button.on("click", (e) => {
|
||||
if ($(e.target).hasClass("screen-meta-active")) {
|
||||
if (haveClosed) {
|
||||
NoticeManager.addCounter()
|
||||
}
|
||||
|
||||
// $(window).scrollTop(true)
|
||||
} else {
|
||||
NoticeManager.removeCounter()
|
||||
|
||||
// wait (500).then(function(){ //still jumpy sometimes - but scrolls to correct position 400 ~ 600
|
||||
// $(window).scrollTop(true)
|
||||
// })
|
||||
}
|
||||
})
|
||||
|
||||
/**
|
||||
* document.on.ready
|
||||
*/
|
||||
$(() => {
|
||||
|
||||
console.log("NoticeManager.on.ready")
|
||||
console.log("options")
|
||||
console.log(options)
|
||||
|
||||
// bootstrap notices
|
||||
// get all notices that are not explicitly marked as `.inline` or `.below-h2`
|
||||
// we add .update-nag.inline for WordPress Update notice
|
||||
notices = $( selectors_all.join(', ') )
|
||||
.not(selectors_skip.join(', '))
|
||||
.add("div.update-nag")
|
||||
|
||||
/**
|
||||
* Remove panel if there are no notices on this page
|
||||
*/
|
||||
if (options.screen_panel) {
|
||||
NoticeManager.maybeRemoveNoticesPanel()
|
||||
}
|
||||
|
||||
if (options.screen_panel && options.auto_collect) {
|
||||
NoticeManager.collectNotices()
|
||||
} else {
|
||||
if (options.above_title) {
|
||||
NoticeManager.moveAboveTitle()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* auto-open notices panel
|
||||
*/
|
||||
if (button.length && ! options.distraction_free) {
|
||||
panel.toggle()
|
||||
button.addClass("screen-meta-active")
|
||||
screenMeta.open(panel, button)
|
||||
}
|
||||
|
||||
/**
|
||||
* auto-close notices panel after short delay
|
||||
* only auto-close if we have collected notices previously
|
||||
* only auto-close if no error messages
|
||||
*/
|
||||
if (options.auto_collapse && ! options.distraction_free) {
|
||||
wait(4000).then(() => {
|
||||
if (haveClosed && NoticeManager.getNoticesTopPriority() != 'error') {
|
||||
screenMeta.close(panel, button)
|
||||
NoticeManager.addCounter()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (options.distraction_free) {
|
||||
NoticeManager.addCounterWhenClosed()
|
||||
}
|
||||
|
||||
}) // end document.on.ready
|
||||
|
||||
// prevent jumpy scrollRestoration on reload page
|
||||
// fixed below on 'beforeunload'
|
||||
// if (history.scrollRestoration) {
|
||||
// history.scrollRestoration = 'manual'
|
||||
//}
|
||||
/**
|
||||
* Set history.scrollTop to prevent jump on page refresh when scrollRestoration = auto
|
||||
*/
|
||||
$(window).on("beforeunload", () => {
|
||||
history.pushState(
|
||||
{ scrollTop: document.body.scrollTop },
|
||||
document.title,
|
||||
document.location.pathname
|
||||
)
|
||||
})
|
||||
let haveClosed // set to true on first close/collect
|
||||
let panelObserver
|
||||
|
||||
return {
|
||||
bootstrap: () => {
|
||||
|
||||
// Init selectors
|
||||
button = $("#meta-link-notices")
|
||||
panel = $("#meta-link-notices-wrap")
|
||||
dismissNoticesButton = $("#meta-link-notices-wrap button.notice-dismiss")
|
||||
|
||||
// bootstrap notices
|
||||
// get all notices that are not explicitly marked as `.inline` or `.below-h2`
|
||||
// we add .update-nag.inline for WordPress Update notice
|
||||
notices = $(selectors_all.join(', '))
|
||||
.not(selectors_skip.join(', '))
|
||||
.add("div.update-nag")
|
||||
|
||||
// Set state
|
||||
haveClosed = false
|
||||
|
||||
dismissNoticesButton.on("click", () => {
|
||||
screenMeta.close(panel, button)
|
||||
if (!haveClosed) {
|
||||
NoticeManager.collectNotices()
|
||||
}
|
||||
NoticeManager.addCounter()
|
||||
})
|
||||
|
||||
//original wp focus on click function
|
||||
button.on("focus.scroll-into-view", (e) => {
|
||||
if (e.target.scrollIntoView) e.target.scrollIntoView(false)
|
||||
})
|
||||
|
||||
// scroll page to top when closing notice panel
|
||||
// function used to work with $(this)
|
||||
// using e.target instead
|
||||
// not sure if this should perhaps be e.currentTarget
|
||||
button.on("click", (e) => {
|
||||
if ($(e.target).hasClass("screen-meta-active")) {
|
||||
if (haveClosed) {
|
||||
NoticeManager.addCounter()
|
||||
}
|
||||
|
||||
// $(window).scrollTop(true)
|
||||
} else {
|
||||
NoticeManager.removeCounter()
|
||||
|
||||
// wait (500).then(function(){ //still jumpy sometimes - but scrolls to correct position 400 ~ 600
|
||||
// $(window).scrollTop(true)
|
||||
// })
|
||||
}
|
||||
})
|
||||
|
||||
// prevent jumpy scrollRestoration on reload page
|
||||
// fixed below on 'beforeunload'
|
||||
// if (history.scrollRestoration) {
|
||||
// history.scrollRestoration = 'manual'
|
||||
//}
|
||||
/**
|
||||
* Set history.scrollTop to prevent jump on page refresh when scrollRestoration = auto
|
||||
*/
|
||||
$(window).on('beforeunload', () => history.pushState(
|
||||
{ scrollTop: document.body.scrollTop },
|
||||
document.title,
|
||||
document.location.pathname
|
||||
)
|
||||
)
|
||||
|
||||
/**
|
||||
* Remove panel if there are no notices on this page
|
||||
*/
|
||||
if (options.screen_panel) {
|
||||
NoticeManager.maybeRemoveNoticesPanel()
|
||||
}
|
||||
|
||||
if (options.screen_panel && options.auto_collect) {
|
||||
NoticeManager.collectNotices()
|
||||
} else {
|
||||
if (options.above_title) {
|
||||
NoticeManager.moveAboveTitle()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* auto-open notices panel
|
||||
*/
|
||||
if (button.length && !options.distraction_free) {
|
||||
panel.toggle()
|
||||
button.addClass("screen-meta-active")
|
||||
screenMeta.open(panel, button)
|
||||
}
|
||||
|
||||
/**
|
||||
* auto-close notices panel after short delay
|
||||
* only auto-close if we have collected notices previously
|
||||
* only auto-close if no error messages
|
||||
*/
|
||||
if (options.auto_collapse && !options.distraction_free) {
|
||||
wait(4000).then(() => {
|
||||
if (haveClosed && NoticeManager.getNoticesTopPriority() != 'error') {
|
||||
screenMeta.close(panel, button)
|
||||
NoticeManager.addCounter()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (options.distraction_free) {
|
||||
NoticeManager.addCounterWhenClosed()
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
getNotices: () => notices,
|
||||
|
||||
getNoticesTopPriority: () => {
|
||||
@ -197,20 +193,18 @@ var NoticeManager = (function ($, document) {
|
||||
* When dismissible notices are dismissed, check if any notices are left on page.
|
||||
* If no notices are left - remove Notice Panel entirely
|
||||
*/
|
||||
$(document).on(
|
||||
"DOMNodeRemoved",
|
||||
"#meta-link-notices-wrap div.notice",
|
||||
() => {
|
||||
notices = panel
|
||||
.find(selectors_all.join(", "))
|
||||
.filter(":visible")
|
||||
NoticeManager.maybeRemoveNoticesPanel()
|
||||
}
|
||||
)
|
||||
panelObserver = new MutationObserver(() => {
|
||||
notices = panel
|
||||
.find(selectors_all.join(", "))
|
||||
.filter(":visible")
|
||||
NoticeManager.maybeRemoveNoticesPanel()
|
||||
});
|
||||
panelObserver.observe(panel.get(0), { childList: true, subtree: true }); // only run once
|
||||
|
||||
},
|
||||
|
||||
addCounter: () => {
|
||||
if (!button.children('.plugin-count').length){
|
||||
if (!button.children('.plugin-count').length) {
|
||||
button.append(
|
||||
$("<span/>").text(notices.filter(":visible").length).attr({
|
||||
class: "plugin-count",
|
||||
@ -223,7 +217,7 @@ var NoticeManager = (function ($, document) {
|
||||
* cannot rely on filter(:visible)
|
||||
*/
|
||||
addCounterWhenClosed: () => {
|
||||
if (!button.children('.plugin-count').length){
|
||||
if (!button.children('.plugin-count').length) {
|
||||
button.append(
|
||||
$("<span/>").text(notices.length).attr({
|
||||
class: "plugin-count",
|
||||
@ -247,7 +241,7 @@ var NoticeManager = (function ($, document) {
|
||||
$("#meta-link-notices-link-wrap").detach()
|
||||
$("#meta-link-notices-wrap").detach()
|
||||
|
||||
if ($("#screen-meta-links").children().length == 0){
|
||||
if ($("#screen-meta-links").children().length == 0) {
|
||||
$("#screen-meta-links").detach()
|
||||
}
|
||||
}
|
||||
@ -262,4 +256,6 @@ var NoticeManager = (function ($, document) {
|
||||
notices.insertBefore(".wrap:first")
|
||||
},
|
||||
}
|
||||
}(jQuery,document) )
|
||||
}(jQuery);
|
||||
|
||||
jQuery(NoticeManager.bootstrap);
|
||||
@ -2,7 +2,7 @@
|
||||
/**
|
||||
* Plugin Name: Notice Manager
|
||||
* Description: Manage notices on WordPress admin pages. Adds 'Notices' screen-meta-link panel to collect notices from page.
|
||||
* Version: 0.24
|
||||
* Version: 0.27
|
||||
* Author: abuyoyo
|
||||
* Author URI: https://github.com/abuyoyo/
|
||||
* Plugin URI: https://github.com/abuyoyo/notice-manager
|
||||
|
||||
9
vendor/abuyoyo/adminmenupage/CHANGELOG.md
vendored
9
vendor/abuyoyo/adminmenupage/CHANGELOG.md
vendored
@ -1,6 +1,15 @@
|
||||
# Changelog
|
||||
WPHelper\AdminMenuPage
|
||||
|
||||
## 0.29
|
||||
Release date: Oct 5 2023
|
||||
|
||||
### Fixed
|
||||
- `composer.json` - Require `abuyoyo/metabox`. WPHelper\Metabox has been a required library since 0.25.
|
||||
|
||||
### Dependencies
|
||||
- lib: WPHelper\Metabox (`abuyoyo/metabox`) ~0.8.
|
||||
|
||||
## 0.28
|
||||
Release date: Oct 4 2023
|
||||
|
||||
|
||||
7
vendor/abuyoyo/adminmenupage/composer.json
vendored
7
vendor/abuyoyo/adminmenupage/composer.json
vendored
@ -2,9 +2,12 @@
|
||||
"name": "abuyoyo/adminmenupage",
|
||||
"description": "WordPress admin menu page helper class",
|
||||
"type": "library",
|
||||
"version": "0.28",
|
||||
"time": "2023-10-04",
|
||||
"version": "0.29",
|
||||
"time": "2023-10-05",
|
||||
"license": "BSD-3-Clause",
|
||||
"require": {
|
||||
"abuyoyo/metabox": "~0.8"
|
||||
},
|
||||
"suggest": {
|
||||
"abuyoyo/plugincore": "~0.26",
|
||||
"cmb2/cmb2": "~2.9"
|
||||
|
||||
38
vendor/abuyoyo/metabox/.github/workflows/create-github-release.yml
vendored
Normal file
38
vendor/abuyoyo/metabox/.github/workflows/create-github-release.yml
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
# Create Github Release
|
||||
# v1.0
|
||||
# Create Github release on tag push
|
||||
# - Use tag name as release title
|
||||
# - Use CHANGELOG.md log entry as body
|
||||
|
||||
on:
|
||||
push:
|
||||
# Sequence of patterns matched against refs/tags
|
||||
tags:
|
||||
- '*' # Match any tag
|
||||
|
||||
name: Create Release
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
- name: Get Changelog Entry
|
||||
id: changelog_reader
|
||||
uses: mindsers/changelog-reader-action@v1.1.0
|
||||
with:
|
||||
version: ${{ github.ref }}
|
||||
path: ./CHANGELOG.md
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: ${{ github.ref }}
|
||||
body: ${{ steps.changelog_reader.outputs.log_entry }} # This pulls from the GET CHANGELOG ENTRY step above, referencing it's ID to get its outputs object, which include a `log_entry`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
|
||||
draft: false
|
||||
prerelease: false
|
||||
26
vendor/abuyoyo/metabox/CHANGELOG.md
vendored
Normal file
26
vendor/abuyoyo/metabox/CHANGELOG.md
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
# Changelog
|
||||
WPHelper\MetaBox
|
||||
|
||||
## 0.8
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix `Metabox::render()` callback arguments. Callback is passed `$data_object` and `$box`.
|
||||
|
||||
## 0.7
|
||||
|
||||
### Fixed
|
||||
|
||||
- Validate `is_callable(render_cb)` before `call_user_func` call.
|
||||
|
||||
## 0.6
|
||||
|
||||
### Added
|
||||
|
||||
- Accept callable `render_cb` as well as readable `render_tpl` as render template.
|
||||
|
||||
## 0.5
|
||||
|
||||
### Added
|
||||
|
||||
- Basic Metabox API.
|
||||
220
vendor/abuyoyo/metabox/MetaBox.php
vendored
Normal file
220
vendor/abuyoyo/metabox/MetaBox.php
vendored
Normal file
@ -0,0 +1,220 @@
|
||||
<?php
|
||||
namespace WPHelper;
|
||||
|
||||
use function wp_parse_args;
|
||||
use function add_action;
|
||||
use function add_meta_box;
|
||||
/**
|
||||
* MetaBox
|
||||
*
|
||||
* Object-Oriented WordPress meta box creator.
|
||||
*
|
||||
* @author abuyoyo
|
||||
* @version 0.8
|
||||
*/
|
||||
class MetaBox
|
||||
{
|
||||
/**
|
||||
* Screen context where the meta box should display.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $context;
|
||||
|
||||
/**
|
||||
* The ID of the meta box.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $id;
|
||||
|
||||
/**
|
||||
* The display priority of the meta box.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $priority;
|
||||
|
||||
/**
|
||||
* Screens where this meta box will appear.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
private $screens;
|
||||
|
||||
/**
|
||||
* Path to the template used to display the content of the meta box.
|
||||
*
|
||||
* @var string filename
|
||||
*/
|
||||
private $render_tpl;
|
||||
|
||||
/**
|
||||
* Path to the template used to display the content of the meta box.
|
||||
*
|
||||
* @var callable
|
||||
*/
|
||||
private $render_cb;
|
||||
|
||||
/**
|
||||
* The title of the meta box.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $title;
|
||||
|
||||
/**
|
||||
* Hook where this meta box will be added.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $hook;
|
||||
|
||||
/**
|
||||
* Array of $args to be sent to callback function's second parameter
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
private $args;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param string $id
|
||||
* @param string $template
|
||||
* @param string $title
|
||||
* @param string $context
|
||||
* @param string $priority
|
||||
* @param string[] $screens
|
||||
*/
|
||||
public function __construct($options)
|
||||
{
|
||||
// should throw error if required fields (id, title) not given
|
||||
// template is actually optional
|
||||
|
||||
$defaults = [
|
||||
'context' => 'advanced',
|
||||
'priority' => 'default',
|
||||
'screens' => [],
|
||||
'args' => null,
|
||||
'hook' => 'add_meta_boxes',
|
||||
];
|
||||
|
||||
$options = wp_parse_args( $options, $defaults );
|
||||
extract($options);
|
||||
|
||||
$this->context = $context;
|
||||
$this->id = $id;
|
||||
$this->priority = $priority;
|
||||
$this->screens = $screens;
|
||||
$this->render_tpl = isset( $template ) ? rtrim( $template, '/' ) : '';
|
||||
$this->render_cb = $render ?? '';
|
||||
$this->title = $title;
|
||||
$this->hook = $hook;
|
||||
$this->args = $args;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add metabox at given hook.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function add()
|
||||
{
|
||||
add_action( $this->hook, [ $this, 'wp_add_metabox' ] );
|
||||
}
|
||||
|
||||
public function wp_add_metabox(){
|
||||
add_meta_box(
|
||||
$this->id,
|
||||
$this->title,
|
||||
[ $this, 'render' ], // $this->render_tpl | $this->render_cb
|
||||
$this->screens,
|
||||
$this->context,
|
||||
$this->priority,
|
||||
$this->args
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the callable that will render the content of the meta box.
|
||||
*
|
||||
* @return callable
|
||||
*/
|
||||
public function get_callback()
|
||||
{
|
||||
return [ $this, 'render' ];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the screen context where the meta box should display.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_context()
|
||||
{
|
||||
return $this->context;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the ID of the meta box.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_id()
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the display priority of the meta box.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_priority()
|
||||
{
|
||||
return $this->priority;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the screen(s) where the meta box will appear.
|
||||
*
|
||||
* @return array|string|WP_Screen
|
||||
*/
|
||||
public function get_screens()
|
||||
{
|
||||
return $this->screens;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the title of the meta box.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_title()
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the content of the meta box using a PHP template.
|
||||
* Callback passed to to add_meta_box()
|
||||
*
|
||||
* @see do_meta_boxes()
|
||||
*
|
||||
* @param mixed $data_object Object that's the focus of the current screen. eg. WP_Post|WP_Comment
|
||||
* @param array $box Meta-box data [id, title, callback, args] (@see global $wp_meta_boxes)
|
||||
*/
|
||||
public function render( $data_object, $box )
|
||||
{
|
||||
if ( ! is_readable( $this->render_tpl ) && ! is_callable( $this->render_cb ) ){
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_callable( $this->render_cb ) ){
|
||||
call_user_func( $this->render_cb, $data_object, $box );
|
||||
} else if ( isset( $this->render_tpl ) ){
|
||||
include $this->render_tpl;
|
||||
}
|
||||
}
|
||||
}
|
||||
1
vendor/abuyoyo/metabox/README.md
vendored
Normal file
1
vendor/abuyoyo/metabox/README.md
vendored
Normal file
@ -0,0 +1 @@
|
||||
# WPHelper\MetaBox
|
||||
12
vendor/abuyoyo/metabox/composer.json
vendored
Normal file
12
vendor/abuyoyo/metabox/composer.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"name": "abuyoyo/metabox",
|
||||
"description": "WordPress metabox helper class",
|
||||
"type": "library",
|
||||
"version": "0.8",
|
||||
"license": "BSD-3-Clause",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"WPHelper\\" : ""
|
||||
}
|
||||
}
|
||||
}
|
||||
2
vendor/composer/autoload_psr4.php
vendored
2
vendor/composer/autoload_psr4.php
vendored
@ -6,5 +6,5 @@ $vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'WPHelper\\' => array($vendorDir . '/abuyoyo/adminmenupage/src', $vendorDir . '/abuyoyo/plugincore'),
|
||||
'WPHelper\\' => array($vendorDir . '/abuyoyo/adminmenupage/src', $vendorDir . '/abuyoyo/metabox', $vendorDir . '/abuyoyo/plugincore'),
|
||||
);
|
||||
|
||||
3
vendor/composer/autoload_static.php
vendored
3
vendor/composer/autoload_static.php
vendored
@ -22,7 +22,8 @@ class ComposerStaticInita13a895834453aad32a897cc456c73ff
|
||||
'WPHelper\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/abuyoyo/adminmenupage/src',
|
||||
1 => __DIR__ . '/..' . '/abuyoyo/plugincore',
|
||||
1 => __DIR__ . '/..' . '/abuyoyo/metabox',
|
||||
2 => __DIR__ . '/..' . '/abuyoyo/plugincore',
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
51
vendor/composer/installed.json
vendored
51
vendor/composer/installed.json
vendored
@ -2,24 +2,27 @@
|
||||
"packages": [
|
||||
{
|
||||
"name": "abuyoyo/adminmenupage",
|
||||
"version": "0.28",
|
||||
"version_normalized": "0.28.0.0",
|
||||
"version": "0.29",
|
||||
"version_normalized": "0.29.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/abuyoyo/AdminMenuPage.git",
|
||||
"reference": "c16d80ebbe1cc112acd3e5eca2f97e7abd017d29"
|
||||
"reference": "4cd47d5217ca25ed17af76f5fdbab3cab3b37ef8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/abuyoyo/AdminMenuPage/zipball/c16d80ebbe1cc112acd3e5eca2f97e7abd017d29",
|
||||
"reference": "c16d80ebbe1cc112acd3e5eca2f97e7abd017d29",
|
||||
"url": "https://api.github.com/repos/abuyoyo/AdminMenuPage/zipball/4cd47d5217ca25ed17af76f5fdbab3cab3b37ef8",
|
||||
"reference": "4cd47d5217ca25ed17af76f5fdbab3cab3b37ef8",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"abuyoyo/metabox": "~0.8"
|
||||
},
|
||||
"suggest": {
|
||||
"abuyoyo/plugincore": "~0.26",
|
||||
"cmb2/cmb2": "~2.9"
|
||||
},
|
||||
"time": "2023-10-04T00:00:00+00:00",
|
||||
"time": "2023-10-05T00:00:00+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@ -37,10 +40,44 @@
|
||||
"description": "WordPress admin menu page helper class",
|
||||
"support": {
|
||||
"issues": "https://github.com/abuyoyo/AdminMenuPage/issues",
|
||||
"source": "https://github.com/abuyoyo/AdminMenuPage/tree/0.28"
|
||||
"source": "https://github.com/abuyoyo/AdminMenuPage/tree/0.29"
|
||||
},
|
||||
"install-path": "../abuyoyo/adminmenupage"
|
||||
},
|
||||
{
|
||||
"name": "abuyoyo/metabox",
|
||||
"version": "0.8",
|
||||
"version_normalized": "0.8.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/abuyoyo/MetaBox.git",
|
||||
"reference": "98cb4c30db4c366c0d273985eb9c31ffa1cd78f9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/abuyoyo/MetaBox/zipball/98cb4c30db4c366c0d273985eb9c31ffa1cd78f9",
|
||||
"reference": "98cb4c30db4c366c0d273985eb9c31ffa1cd78f9",
|
||||
"shasum": ""
|
||||
},
|
||||
"time": "2023-07-18T19:14:03+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"WPHelper\\": ""
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"BSD-3-Clause"
|
||||
],
|
||||
"description": "WordPress metabox helper class",
|
||||
"support": {
|
||||
"issues": "https://github.com/abuyoyo/MetaBox/issues",
|
||||
"source": "https://github.com/abuyoyo/MetaBox/tree/0.8"
|
||||
},
|
||||
"install-path": "../abuyoyo/metabox"
|
||||
},
|
||||
{
|
||||
"name": "abuyoyo/plugincore",
|
||||
"version": "0.27",
|
||||
|
||||
23
vendor/composer/installed.php
vendored
23
vendor/composer/installed.php
vendored
@ -1,8 +1,8 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'name' => 'abuyoyo/notice-manager',
|
||||
'pretty_version' => '0.24',
|
||||
'version' => '0.24.0.0',
|
||||
'pretty_version' => '0.25',
|
||||
'version' => '0.25.0.0',
|
||||
'reference' => NULL,
|
||||
'type' => 'wordpress-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
@ -11,17 +11,26 @@
|
||||
),
|
||||
'versions' => array(
|
||||
'abuyoyo/adminmenupage' => array(
|
||||
'pretty_version' => '0.28',
|
||||
'version' => '0.28.0.0',
|
||||
'reference' => 'c16d80ebbe1cc112acd3e5eca2f97e7abd017d29',
|
||||
'pretty_version' => '0.29',
|
||||
'version' => '0.29.0.0',
|
||||
'reference' => '4cd47d5217ca25ed17af76f5fdbab3cab3b37ef8',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../abuyoyo/adminmenupage',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'abuyoyo/metabox' => array(
|
||||
'pretty_version' => '0.8',
|
||||
'version' => '0.8.0.0',
|
||||
'reference' => '98cb4c30db4c366c0d273985eb9c31ffa1cd78f9',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../abuyoyo/metabox',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'abuyoyo/notice-manager' => array(
|
||||
'pretty_version' => '0.24',
|
||||
'version' => '0.24.0.0',
|
||||
'pretty_version' => '0.25',
|
||||
'version' => '0.25.0.0',
|
||||
'reference' => NULL,
|
||||
'type' => 'wordpress-plugin',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
|
||||
Loading…
Reference in New Issue
Block a user