traceability update 2.5.6d1 revert space indent to tab.

git-svn-id: https://plugins.svn.wordpress.org/footnotes/trunk@2477300 b8457f37-d9ea-0310-8a92-e5e31aec5664
This commit is contained in:
pewgeuges 2021-02-18 19:56:44 +00:00
parent 177841be4b
commit 7f5499723b
51 changed files with 7494 additions and 7494 deletions

View file

@ -9,7 +9,7 @@
* Edited for:
* 2.0.4 add Public Plugin name for dashboard heading 2020-11-01T0452+0100
*
* Last modified: 2020-12-08T2032+0100
* Last modified: 2021-02-18T2027+0100
*/
@ -21,63 +21,63 @@
*/
class MCI_Footnotes_Config {
/**
* Internal Plugin name.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_PLUGIN_NAME = "footnotes";
/**
* Internal Plugin name.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_PLUGIN_NAME = "footnotes";
/**
* Public Plugin name.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*
* edited classes for v2.0.4
*/
const C_STR_PLUGIN_PUBLIC_NAME = '<span class="footnotes_logo footnotes_logo_part1">foot</span><span class="footnotes_logo footnotes_logo_part2">notes</span>';
/**
* Public Plugin name.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*
* edited classes for v2.0.4
*/
const C_STR_PLUGIN_PUBLIC_NAME = '<span class="footnotes_logo footnotes_logo_part1">foot</span><span class="footnotes_logo footnotes_logo_part2">notes</span>';
/**
* Public Plugin name for dashboard heading
*
* After properly displaying in dashboard headings until WPv5.4, the above started
* in WPv5.5 being torn apart as if the headline was text-align:justify and not
* the last line. That ugly display bug badly affected the plugins communication.
* The only working solution found so far is using position:fixed in one heading
* that isnt translated, and dropping the logo in another, translatable heading.
*
* @since 2.0.4
* @var string
*/
const C_STR_PLUGIN_HEADING_NAME = '<span class="footnotes_logo_heading footnotes_logo_part1_heading">foot</span><span class="footnotes_logo_heading footnotes_logo_part2_heading">notes</span>';
/**
* Public Plugin name for dashboard heading
*
* After properly displaying in dashboard headings until WPv5.4, the above started
* in WPv5.5 being torn apart as if the headline was text-align:justify and not
* the last line. That ugly display bug badly affected the plugins communication.
* The only working solution found so far is using position:fixed in one heading
* that isnt translated, and dropping the logo in another, translatable heading.
*
* @since 2.0.4
* @var string
*/
const C_STR_PLUGIN_HEADING_NAME = '<span class="footnotes_logo_heading footnotes_logo_part1_heading">foot</span><span class="footnotes_logo_heading footnotes_logo_part2_heading">notes</span>';
/**
* Html tag for the LOVE symbol.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_LOVE_SYMBOL = '<span style="color:#ff6d3b; font-weight:bold;">&hearts;</span>';
/**
* Html tag for the LOVE symbol.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_LOVE_SYMBOL = '<span style="color:#ff6d3b; font-weight:bold;">&hearts;</span>';
/**
* HTML code for the 'love' symbol used in dashboard heading
*
* @since 2.0.4
* @var string
*/
const C_STR_LOVE_SYMBOL_HEADING = '<span class="footnotes_heart_heading">&hearts;</span>';
/**
* HTML code for the 'love' symbol used in dashboard heading
*
* @since 2.0.4
* @var string
*/
const C_STR_LOVE_SYMBOL_HEADING = '<span class="footnotes_heart_heading">&hearts;</span>';
/**
* Short code to DON'T display the 'LOVE ME' slug on certain pages.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_NO_LOVE_SLUG = '[[no footnotes: love]]';
/**
* Short code to DON'T display the 'LOVE ME' slug on certain pages.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_NO_LOVE_SLUG = '[[no footnotes: love]]';
}

View file

@ -16,197 +16,197 @@
*/
class MCI_Footnotes_Layout_Init {
/**
* Slug for the Plugin main menu.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_MAIN_MENU_SLUG = "mfmmf";
/**
* Slug for the Plugin main menu.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_MAIN_MENU_SLUG = "mfmmf";
/**
* Plugin main menu name.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_MAIN_MENU_TITLE = "ManFisher";
/**
* Plugin main menu name.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_MAIN_MENU_TITLE = "ManFisher";
/**
*
* @author Stefan Herndler
* @since 1.5.0
* @var array
*/
private $a_arr_SubPageClasses = array();
/**
*
* @author Stefan Herndler
* @since 1.5.0
* @var array
*/
private $a_arr_SubPageClasses = array();
/**
* Class Constructor. Initializes all WordPress hooks for the Plugin Settings.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function __construct() {
// iterate through each class define in the current script
foreach(get_declared_classes() as $l_str_ClassName) {
// accept only child classes of the layout engine
if(is_subclass_of($l_str_ClassName, 'MCI_Footnotes_LayoutEngine')) {
/** @var MCI_Footnotes_LayoutEngine $l_obj_Class */
$l_obj_Class = new $l_str_ClassName();
// append new instance of the layout engine sub class
$this->a_arr_SubPageClasses[$l_obj_Class->getPriority()] = $l_obj_Class;
}
}
ksort($this->a_arr_SubPageClasses);
/**
* Class Constructor. Initializes all WordPress hooks for the Plugin Settings.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function __construct() {
// iterate through each class define in the current script
foreach(get_declared_classes() as $l_str_ClassName) {
// accept only child classes of the layout engine
if(is_subclass_of($l_str_ClassName, 'MCI_Footnotes_LayoutEngine')) {
/** @var MCI_Footnotes_LayoutEngine $l_obj_Class */
$l_obj_Class = new $l_str_ClassName();
// append new instance of the layout engine sub class
$this->a_arr_SubPageClasses[$l_obj_Class->getPriority()] = $l_obj_Class;
}
}
ksort($this->a_arr_SubPageClasses);
// register hooks/actions
add_action('admin_init', array($this, 'initializeSettings'));
add_action('admin_menu', array($this, 'registerMainMenu'));
// register AJAX callbacks for Plugin information
add_action("wp_ajax_nopriv_footnotes_getPluginInfo", array($this, "getPluginMetaInformation"));
add_action("wp_ajax_footnotes_getPluginInfo", array($this, "getPluginMetaInformation"));
}
// register hooks/actions
add_action('admin_init', array($this, 'initializeSettings'));
add_action('admin_menu', array($this, 'registerMainMenu'));
// register AJAX callbacks for Plugin information
add_action("wp_ajax_nopriv_footnotes_getPluginInfo", array($this, "getPluginMetaInformation"));
add_action("wp_ajax_footnotes_getPluginInfo", array($this, "getPluginMetaInformation"));
}
/**
* Initializes all sub pages and registers the settings.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function initializeSettings() {
MCI_Footnotes_Settings::instance()->RegisterSettings();
// iterate though each sub class of the layout engine and register their sections
/** @var MCI_Footnotes_LayoutEngine $l_obj_LayoutEngineSubClass */
foreach($this->a_arr_SubPageClasses as $l_obj_LayoutEngineSubClass) {
$l_obj_LayoutEngineSubClass->registerSections();
}
}
/**
* Initializes all sub pages and registers the settings.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function initializeSettings() {
MCI_Footnotes_Settings::instance()->RegisterSettings();
// iterate though each sub class of the layout engine and register their sections
/** @var MCI_Footnotes_LayoutEngine $l_obj_LayoutEngineSubClass */
foreach($this->a_arr_SubPageClasses as $l_obj_LayoutEngineSubClass) {
$l_obj_LayoutEngineSubClass->registerSections();
}
}
/**
* Registers the new main menu for the WordPress dashboard.
* Registers all sub menu pages for the new main menu.
*
* @author Stefan Herndler
* @since 1.5.0
* @see http://codex.wordpress.org/Function_Reference/add_menu_page
*/
public function registerMainMenu() {
global $menu;
// iterate through each main menu
foreach($menu as $l_arr_MainMenu) {
// iterate through each main menu attribute
foreach($l_arr_MainMenu as $l_str_Attribute) {
// main menu already added, append sub pages and stop
if ($l_str_Attribute == self::C_STR_MAIN_MENU_SLUG) {
$this->registerSubPages();
return;
}
}
}
/**
* Registers the new main menu for the WordPress dashboard.
* Registers all sub menu pages for the new main menu.
*
* @author Stefan Herndler
* @since 1.5.0
* @see http://codex.wordpress.org/Function_Reference/add_menu_page
*/
public function registerMainMenu() {
global $menu;
// iterate through each main menu
foreach($menu as $l_arr_MainMenu) {
// iterate through each main menu attribute
foreach($l_arr_MainMenu as $l_str_Attribute) {
// main menu already added, append sub pages and stop
if ($l_str_Attribute == self::C_STR_MAIN_MENU_SLUG) {
$this->registerSubPages();
return;
}
}
}
// add a new main menu page to the WordPress dashboard
add_menu_page(
self::C_STR_MAIN_MENU_TITLE, // page title
self::C_STR_MAIN_MENU_TITLE, // menu title
'manage_options', // capability
self::C_STR_MAIN_MENU_SLUG, // menu slug
array($this, "displayOtherPlugins"), // function
plugins_url('footnotes/img/main-menu.png'), // icon url
null // position
);
$this->registerSubPages();
}
// add a new main menu page to the WordPress dashboard
add_menu_page(
self::C_STR_MAIN_MENU_TITLE, // page title
self::C_STR_MAIN_MENU_TITLE, // menu title
'manage_options', // capability
self::C_STR_MAIN_MENU_SLUG, // menu slug
array($this, "displayOtherPlugins"), // function
plugins_url('footnotes/img/main-menu.png'), // icon url
null // position
);
$this->registerSubPages();
}
/**
* Registers all SubPages for this Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*/
private function registerSubPages() {
// first registered sub menu page MUST NOT contain a unique slug suffix
// iterate though each sub class of the layout engine and register their sub page
/** @var MCI_Footnotes_LayoutEngine $l_obj_LayoutEngineSubClass */
foreach($this->a_arr_SubPageClasses as $l_obj_LayoutEngineSubClass) {
$l_obj_LayoutEngineSubClass->registerSubPage();
}
}
/**
* Registers all SubPages for this Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*/
private function registerSubPages() {
// first registered sub menu page MUST NOT contain a unique slug suffix
// iterate though each sub class of the layout engine and register their sub page
/** @var MCI_Footnotes_LayoutEngine $l_obj_LayoutEngineSubClass */
foreach($this->a_arr_SubPageClasses as $l_obj_LayoutEngineSubClass) {
$l_obj_LayoutEngineSubClass->registerSubPage();
}
}
/**
* Displays other Plugins from the developers.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function displayOtherPlugins() {
printf("<br/><br/>");
// load template file
$l_obj_Template = new MCI_Footnotes_Template(MCI_Footnotes_Template::C_STR_DASHBOARD, "manfisher");
echo $l_obj_Template->getContent();
/**
* Displays other Plugins from the developers.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function displayOtherPlugins() {
printf("<br/><br/>");
// load template file
$l_obj_Template = new MCI_Footnotes_Template(MCI_Footnotes_Template::C_STR_DASHBOARD, "manfisher");
echo $l_obj_Template->getContent();
printf('<em>visit <a href="https://cheret.de/plugins/footnotes-2/" target="_blank">Mark Cheret</a></em>');
printf("<br/><br/>");
printf('</div>');
}
printf('<em>visit <a href="https://cheret.de/plugins/footnotes-2/" target="_blank">Mark Cheret</a></em>');
printf("<br/><br/>");
/**
* AJAX call. returns a JSON string containing meta information about a specific WordPress Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function getPluginMetaInformation() {
// get plugin internal name from POST data
$l_str_PluginName = array_key_exists("plugin", $_POST) ? $_POST["plugin"] : null;
if (empty($l_str_PluginName)) {
echo json_encode(array("error" => "Plugin name invalid."));
exit;
}
$l_str_Url = "https://api.wordpress.org/plugins/info/1.0/".$l_str_PluginName.".json";
// call URL and collect data
$l_arr_Response = wp_remote_get($l_str_Url);
// check if response is valid
if (is_wp_error($l_arr_Response)) {
echo json_encode(array("error" => "Error receiving Plugin Information from WordPress."));
exit;
}
if (!array_key_exists("body", $l_arr_Response)) {
echo json_encode(array("error" => "Error reading WordPress API response message."));
exit;
}
// get the body of the response
$l_str_Response = $l_arr_Response["body"];
// get plugin object
$l_arr_Plugin = json_decode($l_str_Response, true);
if (empty($l_arr_Plugin)) {
echo json_encode(array("error" => "Error reading Plugin meta information.<br/>URL: " . $l_str_Url . "<br/>Response: " . $l_str_Response));
exit;
}
printf('</div>');
}
$l_int_NumRatings = array_key_exists("num_ratings", $l_arr_Plugin) ? intval($l_arr_Plugin["num_ratings"]) : 0;
$l_int_Rating = array_key_exists("rating", $l_arr_Plugin) ? floatval($l_arr_Plugin["rating"]) : 0.0;
$l_int_Stars = round(5 * $l_int_Rating / 100.0, 1);
/**
* AJAX call. returns a JSON string containing meta information about a specific WordPress Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function getPluginMetaInformation() {
// get plugin internal name from POST data
$l_str_PluginName = array_key_exists("plugin", $_POST) ? $_POST["plugin"] : null;
if (empty($l_str_PluginName)) {
echo json_encode(array("error" => "Plugin name invalid."));
exit;
}
$l_str_Url = "https://api.wordpress.org/plugins/info/1.0/".$l_str_PluginName.".json";
// call URL and collect data
$l_arr_Response = wp_remote_get($l_str_Url);
// check if response is valid
if (is_wp_error($l_arr_Response)) {
echo json_encode(array("error" => "Error receiving Plugin Information from WordPress."));
exit;
}
if (!array_key_exists("body", $l_arr_Response)) {
echo json_encode(array("error" => "Error reading WordPress API response message."));
exit;
}
// get the body of the response
$l_str_Response = $l_arr_Response["body"];
// get plugin object
$l_arr_Plugin = json_decode($l_str_Response, true);
if (empty($l_arr_Plugin)) {
echo json_encode(array("error" => "Error reading Plugin meta information.<br/>URL: " . $l_str_Url . "<br/>Response: " . $l_str_Response));
exit;
}
// return Plugin information as JSON encoded string
echo json_encode(
array(
"error" => "",
"PluginDescription" => array_key_exists("short_description", $l_arr_Plugin) ? html_entity_decode($l_arr_Plugin["short_description"]) : "Error reading Plugin information",
"PluginAuthor" => array_key_exists("author", $l_arr_Plugin) ? html_entity_decode($l_arr_Plugin["author"]) : "unknown",
"PluginRatingText" => $l_int_Stars . " " . __("rating based on", MCI_Footnotes_Config::C_STR_PLUGIN_NAME) . " " . $l_int_NumRatings . " " . __("ratings", MCI_Footnotes_Config::C_STR_PLUGIN_NAME),
"PluginRating1" => $l_int_Stars >= 0.5 ? "star-full" : "star-empty",
"PluginRating2" => $l_int_Stars >= 1.5 ? "star-full" : "star-empty",
"PluginRating3" => $l_int_Stars >= 2.5 ? "star-full" : "star-empty",
"PluginRating4" => $l_int_Stars >= 3.5 ? "star-full" : "star-empty",
"PluginRating5" => $l_int_Stars >= 4.5 ? "star-full" : "star-empty",
"PluginRating" => $l_int_NumRatings,
"PluginLastUpdated" => array_key_exists("last_updated", $l_arr_Plugin) ? $l_arr_Plugin["last_updated"] : "unknown",
"PluginDownloads" => array_key_exists("downloaded", $l_arr_Plugin) ? $l_arr_Plugin["downloaded"] : "---"
)
);
exit;
}
$l_int_NumRatings = array_key_exists("num_ratings", $l_arr_Plugin) ? intval($l_arr_Plugin["num_ratings"]) : 0;
$l_int_Rating = array_key_exists("rating", $l_arr_Plugin) ? floatval($l_arr_Plugin["rating"]) : 0.0;
$l_int_Stars = round(5 * $l_int_Rating / 100.0, 1);
// return Plugin information as JSON encoded string
echo json_encode(
array(
"error" => "",
"PluginDescription" => array_key_exists("short_description", $l_arr_Plugin) ? html_entity_decode($l_arr_Plugin["short_description"]) : "Error reading Plugin information",
"PluginAuthor" => array_key_exists("author", $l_arr_Plugin) ? html_entity_decode($l_arr_Plugin["author"]) : "unknown",
"PluginRatingText" => $l_int_Stars . " " . __("rating based on", MCI_Footnotes_Config::C_STR_PLUGIN_NAME) . " " . $l_int_NumRatings . " " . __("ratings", MCI_Footnotes_Config::C_STR_PLUGIN_NAME),
"PluginRating1" => $l_int_Stars >= 0.5 ? "star-full" : "star-empty",
"PluginRating2" => $l_int_Stars >= 1.5 ? "star-full" : "star-empty",
"PluginRating3" => $l_int_Stars >= 2.5 ? "star-full" : "star-empty",
"PluginRating4" => $l_int_Stars >= 3.5 ? "star-full" : "star-empty",
"PluginRating5" => $l_int_Stars >= 4.5 ? "star-full" : "star-empty",
"PluginRating" => $l_int_NumRatings,
"PluginLastUpdated" => array_key_exists("last_updated", $l_arr_Plugin) ? $l_arr_Plugin["last_updated"] : "unknown",
"PluginDownloads" => array_key_exists("downloaded", $l_arr_Plugin) ? $l_arr_Plugin["downloaded"] : "---"
)
);
exit;
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -18,77 +18,77 @@
*/
class MCI_Footnotes_Hooks {
/**
* Registers all WordPress hooks.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function registerHooks() {
register_activation_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "activatePlugin"));
register_deactivation_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "deactivatePlugin"));
register_uninstall_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "uninstallPlugin"));
}
/**
* Registers all WordPress hooks.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function registerHooks() {
register_activation_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "activatePlugin"));
register_deactivation_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "deactivatePlugin"));
register_uninstall_hook(dirname(__FILE__) . "/../footnotes.php", array("MCI_Footnotes_Hooks", "uninstallPlugin"));
}
/**
* Executed when the Plugin gets activated.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function activatePlugin() {
// currently unused
}
/**
* Executed when the Plugin gets activated.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function activatePlugin() {
// currently unused
}
/**
* Executed when the Plugin gets deactivated.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function deactivatePlugin() {
// currently unused
}
/**
* Executed when the Plugin gets deactivated.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function deactivatePlugin() {
// currently unused
}
/**
* Executed when the Plugin gets uninstalled.
*
* @author Stefan Herndler
* @since 1.5.0
*
* Edit: ClearAll didnt actually work.
* @since 2.2.0 this function is not called any longer when deleting the plugin
*/
public static function uninstallPlugin() {
// WordPress User has to be logged in
if (!is_user_logged_in()) {
wp_die(__('You must be logged in to run this script.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
}
// WordPress User needs the permission to (un)install plugins
if (!current_user_can('install_plugins')) {
wp_die(__('You do not have permission to run this script.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
}
// deletes all settings and restore the default values
// MCI_Footnotes_Settings::instance()->ClearAll();
}
/**
* Executed when the Plugin gets uninstalled.
*
* @author Stefan Herndler
* @since 1.5.0
*
* Edit: ClearAll didnt actually work.
* @since 2.2.0 this function is not called any longer when deleting the plugin
*/
public static function uninstallPlugin() {
// WordPress User has to be logged in
if (!is_user_logged_in()) {
wp_die(__('You must be logged in to run this script.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
}
// WordPress User needs the permission to (un)install plugins
if (!current_user_can('install_plugins')) {
wp_die(__('You do not have permission to run this script.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
}
// deletes all settings and restore the default values
// MCI_Footnotes_Settings::instance()->ClearAll();
}
/**
* Add Links to the Plugin in the "installed Plugins" page.
*
* @author Stefan Herndler
* @since 1.5.0
* @param array $p_arr_Links Current Links.
* @param string $p_str_PluginFileName Plugins init file name.
* @return array
*/
public static function PluginLinks($p_arr_Links, $p_str_PluginFileName) {
// append link to the WordPress Plugin page
$p_arr_Links[] = sprintf('<a href="http://wordpress.org/support/plugin/footnotes" target="_blank">%s</a>', __('Support', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
// append link to the Settings page
$p_arr_Links[] = sprintf('<a href="%s">%s</a>', admin_url('admin.php?page=mfmmf-footnotes'), __('Settings', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
// append link to the PlayPal Donate function
$p_arr_Links[] = sprintf('<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6Z6CZDW8PPBBJ" target="_blank">%s</a>', __('Donate', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
// return new links
return $p_arr_Links;
}
/**
* Add Links to the Plugin in the "installed Plugins" page.
*
* @author Stefan Herndler
* @since 1.5.0
* @param array $p_arr_Links Current Links.
* @param string $p_str_PluginFileName Plugins init file name.
* @return array
*/
public static function PluginLinks($p_arr_Links, $p_str_PluginFileName) {
// append link to the WordPress Plugin page
$p_arr_Links[] = sprintf('<a href="http://wordpress.org/support/plugin/footnotes" target="_blank">%s</a>', __('Support', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
// append link to the Settings page
$p_arr_Links[] = sprintf('<a href="%s">%s</a>', admin_url('admin.php?page=mfmmf-footnotes'), __('Settings', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
// append link to the PlayPal Donate function
$p_arr_Links[] = sprintf('<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6Z6CZDW8PPBBJ" target="_blank">%s</a>', __('Donate', MCI_Footnotes_Config::C_STR_PLUGIN_NAME));
// return new links
return $p_arr_Links;
}
}

View file

@ -7,7 +7,7 @@
* @since 1.5.0 12.09.14 10:56
*
*
* @lastmodified 2021-02-16T0258+0100
* @lastmodified 2021-02-18T2023+0100
*
* @since 1.6.5 Bugfix: Improve widgets registration, thanks to @felipelavinz code contribution.
* @since 1.6.5 Update: Fix for deprecated PHP function create_function(), thanks to @psykonevro @daliasued bug reports, thanks to @felipelavinz code contribution.
@ -31,329 +31,329 @@
*/
class MCI_Footnotes {
/**
* Reference to the Plugin Task object.
*
* @author Stefan Herndler
* @since 1.5.0
* @var null|MCI_Footnotes_Task
*/
public $a_obj_Task = null;
/**
* Reference to the Plugin Task object.
*
* @author Stefan Herndler
* @since 1.5.0
* @var null|MCI_Footnotes_Task
*/
public $a_obj_Task = null;
/**
* Template process and script / stylesheet load optimization.
*
* - Bugfix: Templates: optimize template load and processing based on settings, thanks to @misfist code contribution.
*
* @since 2.4.0
* @date 2021-01-04T1355+0100
*
* @author Patrizia Lutz @misfist
*
* @link https://wordpress.org/support/topic/template-override-filter/#post-13864301
* @link https://github.com/misfist/footnotes/releases/tag/2.4.0d3 repository
* @link https://github.com/misfist/footnotes/compare/2.4.0%E2%80%A62.4.0d3 diff
*
* @var bool
*
* Streamline process depending on tooltip enabled status.
* Load tooltip inline script only if jQuery tooltips are enabled.
* Actual value depends on settings.
*/
public static $a_bool_TooltipsEnabled = false;
public static $a_bool_AlternativeTooltipsEnabled = false;
/**
* Template process and script / stylesheet load optimization.
*
* - Bugfix: Templates: optimize template load and processing based on settings, thanks to @misfist code contribution.
*
* @since 2.4.0
* @date 2021-01-04T1355+0100
*
* @author Patrizia Lutz @misfist
*
* @link https://wordpress.org/support/topic/template-override-filter/#post-13864301
* @link https://github.com/misfist/footnotes/releases/tag/2.4.0d3 repository
* @link https://github.com/misfist/footnotes/compare/2.4.0%E2%80%A62.4.0d3 diff
*
* @var bool
*
* Streamline process depending on tooltip enabled status.
* Load tooltip inline script only if jQuery tooltips are enabled.
* Actual value depends on settings.
*/
public static $a_bool_TooltipsEnabled = false;
public static $a_bool_AlternativeTooltipsEnabled = false;
/**
* Executes the Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*
*
* - Bugfix: Improve widgets registration, thanks to @felipelavinz code contribution.
*
* @since 1.6.5
*
* @contributor @felipelavinz
* @link https://github.com/media-competence-institute/footnotes/commit/87173d2980c7ff90e12ffee94ca7153e11163793
*
* @see self::initializeWidgets()
*/
public function run() {
// register language
MCI_Footnotes_Language::registerHooks();
// register Button hooks
MCI_Footnotes_WYSIWYG::registerHooks();
// register general hooks
MCI_Footnotes_Hooks::registerHooks();
/**
* Executes the Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*
*
* - Bugfix: Improve widgets registration, thanks to @felipelavinz code contribution.
*
* @since 1.6.5
*
* @contributor @felipelavinz
* @link https://github.com/media-competence-institute/footnotes/commit/87173d2980c7ff90e12ffee94ca7153e11163793
*
* @see self::initializeWidgets()
*/
public function run() {
// register language
MCI_Footnotes_Language::registerHooks();
// register Button hooks
MCI_Footnotes_WYSIWYG::registerHooks();
// register general hooks
MCI_Footnotes_Hooks::registerHooks();
// initialize the Plugin Dashboard
$this->initializeDashboard();
// initialize the Plugin Task
$this->initializeTask();
// initialize the Plugin Dashboard
$this->initializeDashboard();
// initialize the Plugin Task
$this->initializeTask();
// Register all Public Stylesheets and Scripts
add_action('init', array($this, 'registerPublic'));
// Enqueue all Public Stylesheets and Scripts
add_action('wp_enqueue_scripts', array($this, 'registerPublic'));
// Register all Widgets of the Plugin.
add_action('widgets_init', array($this, 'initializeWidgets'));
}
// Register all Public Stylesheets and Scripts
add_action('init', array($this, 'registerPublic'));
// Enqueue all Public Stylesheets and Scripts
add_action('wp_enqueue_scripts', array($this, 'registerPublic'));
// Register all Widgets of the Plugin.
add_action('widgets_init', array($this, 'initializeWidgets'));
}
/**
* Initializes all Widgets of the Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*
*
* - Update: Fix for deprecated PHP function create_function(), thanks to @psykonevro @daliasued bug reports, thanks to @felipelavinz code contribution
*
* @since 1.6.5
*
* @contributor @felipelavinz
* @link https://github.com/media-competence-institute/footnotes/commit/87173d2980c7ff90e12ffee94ca7153e11163793
*
* @reporter @psykonevro
* @link https://wordpress.org/support/topic/bug-function-create_function-is-deprecated/
* @link https://wordpress.org/support/topic/deprecated-function-create_function-14/
*
* @reporter @daliasued
* @link https://wordpress.org/support/topic/deprecated-function-create_function-14/#post-13312853
*
* create_function() was deprecated in PHP 7.2.0 and removed in PHP 8.0.0.
* @link https://www.php.net/manual/en/function.create-function.php
*
* The fix is to move add_action() above into run(),
* and use the bare register_widget() here.
* @see self::run()
*
* Also, the visibility of initializeWidgets() is not private any longer.
*/
public function initializeWidgets() {
register_widget( "MCI_Footnotes_Widget_ReferenceContainer" );
}
/**
* Initializes all Widgets of the Plugin.
*
* @author Stefan Herndler
* @since 1.5.0
*
*
* - Update: Fix for deprecated PHP function create_function(), thanks to @psykonevro @daliasued bug reports, thanks to @felipelavinz code contribution
*
* @since 1.6.5
*
* @contributor @felipelavinz
* @link https://github.com/media-competence-institute/footnotes/commit/87173d2980c7ff90e12ffee94ca7153e11163793
*
* @reporter @psykonevro
* @link https://wordpress.org/support/topic/bug-function-create_function-is-deprecated/
* @link https://wordpress.org/support/topic/deprecated-function-create_function-14/
*
* @reporter @daliasued
* @link https://wordpress.org/support/topic/deprecated-function-create_function-14/#post-13312853
*
* create_function() was deprecated in PHP 7.2.0 and removed in PHP 8.0.0.
* @link https://www.php.net/manual/en/function.create-function.php
*
* The fix is to move add_action() above into run(),
* and use the bare register_widget() here.
* @see self::run()
*
* Also, the visibility of initializeWidgets() is not private any longer.
*/
public function initializeWidgets() {
register_widget( "MCI_Footnotes_Widget_ReferenceContainer" );
}
/**
* Initializes the Dashboard of the Plugin and loads them.
*
* @author Stefan Herndler
* @since 1.5.0
*/
private function initializeDashboard() {
new MCI_Footnotes_Layout_Init();
}
/**
* Initializes the Dashboard of the Plugin and loads them.
*
* @author Stefan Herndler
* @since 1.5.0
*/
private function initializeDashboard() {
new MCI_Footnotes_Layout_Init();
}
/**
* Initializes the Plugin Task and registers the Task hooks.
*
* @author Stefan Herndler
* @since 1.5.0
*/
private function initializeTask() {
$this->a_obj_Task = new MCI_Footnotes_Task();
$this->a_obj_Task->registerHooks();
}
/**
* Initializes the Plugin Task and registers the Task hooks.
*
* @author Stefan Herndler
* @since 1.5.0
*/
private function initializeTask() {
$this->a_obj_Task = new MCI_Footnotes_Task();
$this->a_obj_Task->registerHooks();
}
/**
* Registers and enqueues scripts and stylesheets to the public pages.
*
* @author Stefan Herndler
* @since 1.5.0
*
* @since 2.0.0 Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution.
* @since 2.0.3 add versioning of public.css for cache busting 2020-10-29T1413+0100
* @since 2.0.4 add jQuery UI from WordPress 2020-11-01T1902+0100
* @since 2.1.4 automate passing version number for cache busting 2020-11-30T0646+0100
* @since 2.1.4 optionally enqueue an extra stylesheet 2020-12-04T2231+0100
*/
public function registerPublic() {
/**
* Registers and enqueues scripts and stylesheets to the public pages.
*
* @author Stefan Herndler
* @since 1.5.0
*
* @since 2.0.0 Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution.
* @since 2.0.3 add versioning of public.css for cache busting 2020-10-29T1413+0100
* @since 2.0.4 add jQuery UI from WordPress 2020-11-01T1902+0100
* @since 2.1.4 automate passing version number for cache busting 2020-11-30T0646+0100
* @since 2.1.4 optionally enqueue an extra stylesheet 2020-12-04T2231+0100
*/
public function registerPublic() {
/**
* Enqueues external scripts.
*
* - Bugfix: Libraries: optimize processes by loading external and internal scripts only if needed, thanks to @docteurfitness issue report.
*
* @since 2.5.5
* @reporter @docteurfitness
* @link https://wordpress.org/support/topic/simply-speed-optimisation/
*
* The condition about tooltips was missing, only the not-alternative-tooltips part was present.
*/
/**
* Enqueues external scripts.
*
* - Bugfix: Libraries: optimize processes by loading external and internal scripts only if needed, thanks to @docteurfitness issue report.
*
* @since 2.5.5
* @reporter @docteurfitness
* @link https://wordpress.org/support/topic/simply-speed-optimisation/
*
* The condition about tooltips was missing, only the not-alternative-tooltips part was present.
*/
/**
* Enqueues the jQuery library registered by WordPress.
*
* jQuery is also used for animated scrolling, so it should be loaded by default.
* The function wp_enqueue_script() avoids loading the same library multiple times.
*/
wp_enqueue_script( 'jquery' );
/**
* Enqueues the jQuery library registered by WordPress.
*
* jQuery is also used for animated scrolling, so it should be loaded by default.
* The function wp_enqueue_script() avoids loading the same library multiple times.
*/
wp_enqueue_script( 'jquery' );
// set conditions re-used for stylesheet enqueuing:
self::$a_bool_TooltipsEnabled = MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED ) );
self::$a_bool_AlternativeTooltipsEnabled = MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ALTERNATIVE ) );
// set conditions re-used for stylesheet enqueuing:
self::$a_bool_TooltipsEnabled = MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ENABLED ) );
self::$a_bool_AlternativeTooltipsEnabled = MCI_Footnotes_Convert::toBool(MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_BOOL_FOOTNOTES_MOUSE_OVER_BOX_ALTERNATIVE ) );
if ( self::$a_bool_TooltipsEnabled && ! self::$a_bool_AlternativeTooltipsEnabled ) {
if ( self::$a_bool_TooltipsEnabled && ! self::$a_bool_AlternativeTooltipsEnabled ) {
/**
* Enqueues the jQuery Tools library shipped with the plugin.
*
* redacted jQuery.browser, completed minification;
* see full header in js/jquery.tools.js
* added versioning 2020-11-18T2150+0100
* not use '-js' in the handle, is appended automatically
*/
wp_enqueue_script(
'mci-footnotes-jquery-tools',
plugins_url('footnotes/js/jquery.tools.min.js'),
array(),
'1.2.7.redacted.2'
);
/**
* Enqueues the jQuery Tools library shipped with the plugin.
*
* redacted jQuery.browser, completed minification;
* see full header in js/jquery.tools.js
* added versioning 2020-11-18T2150+0100
* not use '-js' in the handle, is appended automatically
*/
wp_enqueue_script(
'mci-footnotes-jquery-tools',
plugins_url('footnotes/js/jquery.tools.min.js'),
array(),
'1.2.7.redacted.2'
);
/**
* Registers jQuery UI from the JavaScript Content Delivery Network.
*
* - Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution.
*
* @since 2.0.0
* Alternatively, fetch jQuery UI from cdnjs.cloudflare.com:
* @since 2.0.0 add jQueryUI from Cloudflare 2020-10-26T1907+0100
* Used to add jQuery UI following @vonpiernik:
* <https://wordpress.org/support/topic/tooltip-hover-not-showing/#post-13456762>:
*
*
* jQueryUI re-enables the tooltip infobox disabled when WPv5.5 was released.
*
* Updated for v2.0.4 by adding jQuery UI from WordPress following @check2020de:
* <https://wordpress.org/support/topic/gdpr-issue-with-jquery/>
* See <https://wordpress.stackexchange.com/questions/273986/correct-way-to-enqueue-jquery-ui>
*
* This was enabled in Footnotes v2.0.0 through v2.0.3.
* Re-added for 2.0.9d1 / 2.1.1d0 to look whether it can fix a broken tooltip display. 2020-11-07T1601+0100/2020-11-08T2246+0100
*/
//wp_register_script( 'jQueryUI', 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js', null, null, false ); // in header 2020-11-09T2003+0100
//wp_enqueue_script( 'jQueryUI' );
/**
* This is then needed instead of the above first instance:
* Add jQuery Tools and finish adding jQueryUI: 2020-11-08T1638+0100/2020-11-08T2246+0100
*/
//wp_enqueue_script('mci-footnotes-js-jquery-tools', plugins_url('../js/jquery.tools.min.js', __FILE__), ['jQueryUI']);
/**
* Registers jQuery UI from the JavaScript Content Delivery Network.
*
* - Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett bug reports, thanks to @vonpiernik code contribution.
*
* @since 2.0.0
* Alternatively, fetch jQuery UI from cdnjs.cloudflare.com:
* @since 2.0.0 add jQueryUI from Cloudflare 2020-10-26T1907+0100
* Used to add jQuery UI following @vonpiernik:
* <https://wordpress.org/support/topic/tooltip-hover-not-showing/#post-13456762>:
*
*
* jQueryUI re-enables the tooltip infobox disabled when WPv5.5 was released.
*
* Updated for v2.0.4 by adding jQuery UI from WordPress following @check2020de:
* <https://wordpress.org/support/topic/gdpr-issue-with-jquery/>
* See <https://wordpress.stackexchange.com/questions/273986/correct-way-to-enqueue-jquery-ui>
*
* This was enabled in Footnotes v2.0.0 through v2.0.3.
* Re-added for 2.0.9d1 / 2.1.1d0 to look whether it can fix a broken tooltip display. 2020-11-07T1601+0100/2020-11-08T2246+0100
*/
//wp_register_script( 'jQueryUI', 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js', null, null, false ); // in header 2020-11-09T2003+0100
//wp_enqueue_script( 'jQueryUI' );
/**
* This is then needed instead of the above first instance:
* Add jQuery Tools and finish adding jQueryUI: 2020-11-08T1638+0100/2020-11-08T2246+0100
*/
//wp_enqueue_script('mci-footnotes-js-jquery-tools', plugins_url('../js/jquery.tools.min.js', __FILE__), ['jQueryUI']);
/**
* Enqueues some jQuery UI libraries registered by WordPress.
*
* @since 2.0.4 add jQuery UI from WordPress 2020-11-01T1902+0100
* If alternative tooltips are enabled, these libraries are not needed.
*/
wp_enqueue_script( 'jquery-ui-core' );
wp_enqueue_script( 'jquery-ui-widget' );
wp_enqueue_script( 'jquery-ui-position' );
wp_enqueue_script( 'jquery-ui-tooltip' );
/**
* Enqueues some jQuery UI libraries registered by WordPress.
*
* @since 2.0.4 add jQuery UI from WordPress 2020-11-01T1902+0100
* If alternative tooltips are enabled, these libraries are not needed.
*/
wp_enqueue_script( 'jquery-ui-core' );
wp_enqueue_script( 'jquery-ui-widget' );
wp_enqueue_script( 'jquery-ui-position' );
wp_enqueue_script( 'jquery-ui-tooltip' );
}
}
/**
* Enables enqueuing a new-scheme stylesheet.
*
* @since 2.5.5
* @date 2021-02-14T1512+0100
*
* Enables enqueuing the formatted individual stylesheets if false.
* WARNING: This facility is designed for development and must NOT be used in production.
*
* The Boolean may be set at the bottom of the plugins main PHP file.
* @see footnotes.php
*/
if ( C_BOOL_CSS_PRODUCTION_MODE === true ) {
/**
* Enables enqueuing a new-scheme stylesheet.
*
* @since 2.5.5
* @date 2021-02-14T1512+0100
*
* Enables enqueuing the formatted individual stylesheets if false.
* WARNING: This facility is designed for development and must NOT be used in production.
*
* The Boolean may be set at the bottom of the plugins main PHP file.
* @see footnotes.php
*/
if ( C_BOOL_CSS_PRODUCTION_MODE === true ) {
/**
* Enqueues a minified united external stylesheet in production.
*
* - Update: Stylesheets: increase speed and energy efficiency by tailoring stylesheets to the needs of the instance, thanks to @docteurfitness design contribution.
* - Bugfix: Stylesheets: minify to shrink the carbon footprint, increase speed and implement best practice, thanks to @docteurfitness issue report.
*
* @since 2.5.5
* @date 2021-02-14T1543+0100
*
* @contributor @docteurfitness
* @link https://wordpress.org/support/topic/simply-speed-optimisation/
*
* @reporter @docteurfitness
* @link https://wordpress.org/support/topic/simply-speed-optimisation/
*
* The dashboard stylesheet is minified as-is.
* @see class/dashboard/layout.php
*
* @since 2.0.3 add versioning of public.css for cache busting.
* @date 2020-10-29T1413+0100
* Plugin version number is needed for busting browser caches after each plugin update.
* @since 2.1.4 automate passing version number for cache busting.
* @date 2020-11-30T0646+0100
* The constant C_STR_FOOTNOTES_VERSION is defined at start of footnotes.php.
*
* The media scope argument 'all' is the default.
* No need to use '-css' in the handle, as this is appended automatically.
*/
// set tooltip mode for use in stylesheet name:
if ( self::$a_bool_TooltipsEnabled ) {
if ( self::$a_bool_AlternativeTooltipsEnabled ) {
$l_str_TooltipMode = 'al';
$l_str_TComplement = 'ternative-tooltips';
} else {
$l_str_TooltipMode = 'jq';
$l_str_TComplement = 'uery-tooltips';
}
} else {
$l_str_TooltipMode = 'no';
$l_str_TComplement = '-tooltips';
}
/**
* Enqueues a minified united external stylesheet in production.
*
* - Update: Stylesheets: increase speed and energy efficiency by tailoring stylesheets to the needs of the instance, thanks to @docteurfitness design contribution.
* - Bugfix: Stylesheets: minify to shrink the carbon footprint, increase speed and implement best practice, thanks to @docteurfitness issue report.
*
* @since 2.5.5
* @date 2021-02-14T1543+0100
*
* @contributor @docteurfitness
* @link https://wordpress.org/support/topic/simply-speed-optimisation/
*
* @reporter @docteurfitness
* @link https://wordpress.org/support/topic/simply-speed-optimisation/
*
* The dashboard stylesheet is minified as-is.
* @see class/dashboard/layout.php
*
* @since 2.0.3 add versioning of public.css for cache busting.
* @date 2020-10-29T1413+0100
* Plugin version number is needed for busting browser caches after each plugin update.
* @since 2.1.4 automate passing version number for cache busting.
* @date 2020-11-30T0646+0100
* The constant C_STR_FOOTNOTES_VERSION is defined at start of footnotes.php.
*
* The media scope argument 'all' is the default.
* No need to use '-css' in the handle, as this is appended automatically.
*/
// set tooltip mode for use in stylesheet name:
if ( self::$a_bool_TooltipsEnabled ) {
if ( self::$a_bool_AlternativeTooltipsEnabled ) {
$l_str_TooltipMode = 'al';
$l_str_TComplement = 'ternative-tooltips';
} else {
$l_str_TooltipMode = 'jq';
$l_str_TComplement = 'uery-tooltips';
}
} else {
$l_str_TooltipMode = 'no';
$l_str_TComplement = '-tooltips';
}
// set basic responsive page layout mode for use in stylesheet name:
$l_str_PageLayoutOption = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT);
switch ( $l_str_PageLayoutOption ) {
case "reference-container": $l_str_LayoutMode = '1'; break;
case "entry-content" : $l_str_LayoutMode = '2'; break;
case "main-content" : $l_str_LayoutMode = '3'; break;
case "none": default: $l_str_LayoutMode = '0'; break;
}
// set basic responsive page layout mode for use in stylesheet name:
$l_str_PageLayoutOption = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT);
switch ( $l_str_PageLayoutOption ) {
case "reference-container": $l_str_LayoutMode = '1'; break;
case "entry-content" : $l_str_LayoutMode = '2'; break;
case "main-content" : $l_str_LayoutMode = '3'; break;
case "none": default: $l_str_LayoutMode = '0'; break;
}
// enqueue the tailored united minified stylesheet:
wp_enqueue_style(
'mci-footnotes-' . $l_str_TooltipMode . $l_str_TComplement . '-pagelayout-' . $l_str_PageLayoutOption,
plugins_url(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/footnotes-' . $l_str_TooltipMode . 'ttbrpl' . $l_str_LayoutMode . '.min.css'
),
array(),
C_STR_FOOTNOTES_VERSION,
'all'
);
// enqueue the tailored united minified stylesheet:
wp_enqueue_style(
'mci-footnotes-' . $l_str_TooltipMode . $l_str_TComplement . '-pagelayout-' . $l_str_PageLayoutOption,
plugins_url(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/footnotes-' . $l_str_TooltipMode . 'ttbrpl' . $l_str_LayoutMode . '.min.css'
),
array(),
C_STR_FOOTNOTES_VERSION,
'all'
);
} else {
} else {
/**
* Enqueues external stylesheets, ONLY in development now.
*
* @since 2.1.4 optionally enqueue an extra stylesheet.
* @date 2020-12-04T2231+0100
*
* This optional layout fix is useful by lack of layout support.
*/
wp_enqueue_style( 'mci-footnotes-common', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-common.css' ), array(), C_STR_FOOTNOTES_VERSION );
wp_enqueue_style( 'mci-footnotes-tooltips', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips.css' ), array(), C_STR_FOOTNOTES_VERSION );
wp_enqueue_style( 'mci-footnotes-alternative', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips-alternative.css' ), array(), C_STR_FOOTNOTES_VERSION );
/**
* Enqueues external stylesheets, ONLY in development now.
*
* @since 2.1.4 optionally enqueue an extra stylesheet.
* @date 2020-12-04T2231+0100
*
* This optional layout fix is useful by lack of layout support.
*/
wp_enqueue_style( 'mci-footnotes-common', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-common.css' ), array(), C_STR_FOOTNOTES_VERSION );
wp_enqueue_style( 'mci-footnotes-tooltips', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips.css' ), array(), C_STR_FOOTNOTES_VERSION );
wp_enqueue_style( 'mci-footnotes-alternative', plugins_url( MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-tooltips-alternative.css' ), array(), C_STR_FOOTNOTES_VERSION );
$l_str_PageLayoutOption = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT);
if ($l_str_PageLayoutOption != 'none') {
wp_enqueue_style(
'mci-footnotes-layout-' . $l_str_PageLayoutOption,
plugins_url(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-layout-' . $l_str_PageLayoutOption . '.css'
),
array(),
C_STR_FOOTNOTES_VERSION,
'all'
);
}
}
}
$l_str_PageLayoutOption = MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_FOOTNOTES_PAGE_LAYOUT_SUPPORT);
if ($l_str_PageLayoutOption != 'none') {
wp_enqueue_style(
'mci-footnotes-layout-' . $l_str_PageLayoutOption,
plugins_url(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/css/dev-layout-' . $l_str_PageLayoutOption . '.css'
),
array(),
C_STR_FOOTNOTES_VERSION,
'all'
);
}
}
}
}

View file

@ -7,7 +7,7 @@
* @since 1.5.0 14.09.14 17:47
*
*
* @lastmodified 2021-02-08T1914+0100
* @lastmodified 2021-02-18T2028+0100
*
* @since 2.0.0 Bugfix: Localization: correct function call apply_filters() with all required arguments after PHP 7.1 promoted warning to error, thanks to @matkus2 bug report and code contribution.
* @since 2.1.6 Bugfix: Localization: conform to WordPress plugin language file name scheme, thanks to @nikelaos bug report.
@ -21,88 +21,88 @@
*/
class MCI_Footnotes_Language {
/**
* Register WordPress Hook.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function registerHooks() {
add_action('plugins_loaded', array("MCI_Footnotes_Language", "loadTextDomain"));
}
/**
* Register WordPress Hook.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public static function registerHooks() {
add_action('plugins_loaded', array("MCI_Footnotes_Language", "loadTextDomain"));
}
/**
* Loads the text domain for current WordPress language if exists.
* Otherwise fallback "en_GB" will be loaded.
*
* @author Stefan Herndler
* @since 1.5.0
*
*
* - Bugfix: Correct function call apply_filters() with all required arguments after PHP 7.1 promoted warning to error, thanks to @matkus2 bug report and code contribution.
*
* @since 2.0.0
* @date 2020-10-26T1609+0100
*
* @contributor @matkus2
* @link https://wordpress.org/support/topic/error-missing-parameter-if-using-php-7-1-or-later/
*
* Add 3rd (empty) argument in apply_filters() to prevent PHP from throwing an error:
* “Fatal error: Uncaught ArgumentCountError: Too few arguments to function apply_filters()
*
* Yet get_locale() is defined w/o parameters in wp-includes/l10n.php:30, and
* apply_filters() is defined as apply_filters( $tag, $value ) in wp-includes/plugin.php:181.
* @link https://developer.wordpress.org/reference/functions/apply_filters/
*
* But apply_filters() is defined with a 3rd parameter (and w/o the first one) in
* wp-includes/class-wp-hook.php:264, as public function apply_filters( $value, $args ).
*
* Taking it all together, probably the full function definition would be:
* public function apply_filters( $tag, $value, $args ).
* In the case of get_locale(), $args is empty.
*
* The bug was lurking in WP. PHP 7.1 promoted the warning to an error.
* @link https://www.php.net/manual/en/migration71.incompatible.php
* @link https://www.php.net/manual/en/migration71.incompatible.php#migration71.incompatible.too-few-arguments-exception
*/
public static function loadTextDomain() {
/**
* Loads the text domain for current WordPress language if exists.
* Otherwise fallback "en_GB" will be loaded.
*
* @author Stefan Herndler
* @since 1.5.0
*
*
* - Bugfix: Correct function call apply_filters() with all required arguments after PHP 7.1 promoted warning to error, thanks to @matkus2 bug report and code contribution.
*
* @since 2.0.0
* @date 2020-10-26T1609+0100
*
* @contributor @matkus2
* @link https://wordpress.org/support/topic/error-missing-parameter-if-using-php-7-1-or-later/
*
* Add 3rd (empty) argument in apply_filters() to prevent PHP from throwing an error:
* “Fatal error: Uncaught ArgumentCountError: Too few arguments to function apply_filters()
*
* Yet get_locale() is defined w/o parameters in wp-includes/l10n.php:30, and
* apply_filters() is defined as apply_filters( $tag, $value ) in wp-includes/plugin.php:181.
* @link https://developer.wordpress.org/reference/functions/apply_filters/
*
* But apply_filters() is defined with a 3rd parameter (and w/o the first one) in
* wp-includes/class-wp-hook.php:264, as public function apply_filters( $value, $args ).
*
* Taking it all together, probably the full function definition would be:
* public function apply_filters( $tag, $value, $args ).
* In the case of get_locale(), $args is empty.
*
* The bug was lurking in WP. PHP 7.1 promoted the warning to an error.
* @link https://www.php.net/manual/en/migration71.incompatible.php
* @link https://www.php.net/manual/en/migration71.incompatible.php#migration71.incompatible.too-few-arguments-exception
*/
public static function loadTextDomain() {
// if language file with localization exists:
if ( self::load( apply_filters( 'plugin_locale', get_locale(), '' ) ) ) {
return;
}
// else fall back to British English:
self::load( "en_GB" );
}
// if language file with localization exists:
if ( self::load( apply_filters( 'plugin_locale', get_locale(), '' ) ) ) {
return;
}
// else fall back to British English:
self::load( "en_GB" );
}
/**
* Loads a specific text domain.
*
* @author Stefan Herndler
* @since 1.5.1
* @param string $p_str_LanguageCode Language Code to load a specific text domain.
* @return bool
*
*
* - Bugfix: Localization: conform to WordPress plugin language file name scheme, thanks to @nikelaos bug report.
*
* @since 2.1.6
* @date 2020-12-08T1931+0100
*
* @reporter @nikelaos
* @link https://wordpress.org/support/topic/more-feature-ideas/
*
* That is done by using load_plugin_textdomain():
* “The .mo file should be named based on the text domain with a dash, and then the locale exactly.
* @see wp-includes/l10n.php:857
*/
private static function load($p_str_LanguageCode) {
return load_plugin_textdomain(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME,
// This argument only fills the gap left by a deprecated argument (since WP2.7):
false,
// The plugin basedir is provided; trailing slash would be clipped:
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/languages'
);
}
/**
* Loads a specific text domain.
*
* @author Stefan Herndler
* @since 1.5.1
* @param string $p_str_LanguageCode Language Code to load a specific text domain.
* @return bool
*
*
* - Bugfix: Localization: conform to WordPress plugin language file name scheme, thanks to @nikelaos bug report.
*
* @since 2.1.6
* @date 2020-12-08T1931+0100
*
* @reporter @nikelaos
* @link https://wordpress.org/support/topic/more-feature-ideas/
*
* That is done by using load_plugin_textdomain():
* “The .mo file should be named based on the text domain with a dash, and then the locale exactly.
* @see wp-includes/l10n.php:857
*/
private static function load($p_str_LanguageCode) {
return load_plugin_textdomain(
MCI_Footnotes_Config::C_STR_PLUGIN_NAME,
// This argument only fills the gap left by a deprecated argument (since WP2.7):
false,
// The plugin basedir is provided; trailing slash would be clipped:
MCI_Footnotes_Config::C_STR_PLUGIN_NAME . '/languages'
);
}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,7 @@
* @since 1.5.0 14.09.14 10:58
*
*
* @lastmodified 2021-02-12T1113+0100
* @lastmodified 2021-02-18T2024+0100
*
* @since 2.0.3 prettify reference container template
* @since 2.0.3 replace tab with a space
@ -38,224 +38,224 @@
*/
class MCI_Footnotes_Template {
/**
* Directory name for dashboard templates.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_DASHBOARD = "dashboard";
/**
* Directory name for dashboard templates.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_DASHBOARD = "dashboard";
/**
* Directory name for public templates.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_PUBLIC = "public";
/**
* Directory name for public templates.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
const C_STR_PUBLIC = "public";
/**
* Contains the content of the template after initialize.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
private $a_str_OriginalContent = "";
/**
* Contains the content of the template after initialize.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
private $a_str_OriginalContent = "";
/**
* Contains the content of the template after initialize with replaced place holders.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
private $a_str_ReplacedContent = "";
/**
* Contains the content of the template after initialize with replaced place holders.
*
* @author Stefan Herndler
* @since 1.5.0
* @var string
*/
private $a_str_ReplacedContent = "";
/**
* Plugin Directory
*
* @author Patrizia Lutz @misfist
* @since 2.4.0d3
*
* @var string
*/
public $plugin_directory;
/**
* Plugin Directory
*
* @author Patrizia Lutz @misfist
* @since 2.4.0d3
*
* @var string
*/
public $plugin_directory;
/**
* Class Constructor. Reads and loads the template file without replace any placeholder.
*
* @author Stefan Herndler
* @since 1.5.0
* @param string $p_str_FileType Template file type (take a look on the Class constants).
* @param string $p_str_FileName Template file name inside the Template directory without the file extension.
* @param string $p_str_Extension Optional Template file extension (default: html)
*
*
* @since 2.2.6 support for custom templates 2020-12-19T0606+0100
* @link https://wordpress.org/support/topic/template-override-filter/
*
* @since 2.4.0 look for custom template in the active theme first, thanks to @misfist
* @link https://wordpress.org/support/topic/template-override-filter/#post-13846598
*/
public function __construct($p_str_FileType, $p_str_FileName, $p_str_Extension = "html") {
// no template file type and/or file name set
if (empty($p_str_FileType) || empty($p_str_FileName)) {
return;
}
/**
* Class Constructor. Reads and loads the template file without replace any placeholder.
*
* @author Stefan Herndler
* @since 1.5.0
* @param string $p_str_FileType Template file type (take a look on the Class constants).
* @param string $p_str_FileName Template file name inside the Template directory without the file extension.
* @param string $p_str_Extension Optional Template file extension (default: html)
*
*
* @since 2.2.6 support for custom templates 2020-12-19T0606+0100
* @link https://wordpress.org/support/topic/template-override-filter/
*
* @since 2.4.0 look for custom template in the active theme first, thanks to @misfist
* @link https://wordpress.org/support/topic/template-override-filter/#post-13846598
*/
public function __construct($p_str_FileType, $p_str_FileName, $p_str_Extension = "html") {
// no template file type and/or file name set
if (empty($p_str_FileType) || empty($p_str_FileName)) {
return;
}
/**
* Define plugin root path
*
* @since 2.4.0d3
*
* @author Patrizia Lutz @misfist
*/
$this->plugin_directory = plugin_dir_path( dirname( __FILE__ ) );
/**
* Define plugin root path
*
* @since 2.4.0d3
*
* @author Patrizia Lutz @misfist
*/
$this->plugin_directory = plugin_dir_path( dirname( __FILE__ ) );
/**
* Modularize functions
*
* @since 2.4.0d3
*
* @author Patrizia Lutz @misfist
*/
if( $template = $this->get_template( $p_str_FileType, $p_str_FileName, $p_str_Extension ) ) {
$this->process_template( $template );
} else {
return;
}
/**
* Modularize functions
*
* @since 2.4.0d3
*
* @author Patrizia Lutz @misfist
*/
if( $template = $this->get_template( $p_str_FileType, $p_str_FileName, $p_str_Extension ) ) {
$this->process_template( $template );
} else {
return;
}
}
}
/**
* Replace all placeholders specified in array.
*
* @author Stefan Herndler
* @since 1.5.0
* @param array $p_arr_Placeholders Placeholders (key = placeholder, value = value).
* @return bool True on Success, False if Placeholders invalid.
*/
public function replace($p_arr_Placeholders) {
// no placeholders set
if (empty($p_arr_Placeholders)) {
return false;
}
// template content is empty
if (empty($this->a_str_ReplacedContent)) {
return false;
}
// iterate through each placeholder and replace it with its value
foreach($p_arr_Placeholders as $l_str_Placeholder => $l_str_Value) {
$this->a_str_ReplacedContent = str_replace("[[" . $l_str_Placeholder . "]]", $l_str_Value, $this->a_str_ReplacedContent);
}
// success
return true;
}
/**
* Replace all placeholders specified in array.
*
* @author Stefan Herndler
* @since 1.5.0
* @param array $p_arr_Placeholders Placeholders (key = placeholder, value = value).
* @return bool True on Success, False if Placeholders invalid.
*/
public function replace($p_arr_Placeholders) {
// no placeholders set
if (empty($p_arr_Placeholders)) {
return false;
}
// template content is empty
if (empty($this->a_str_ReplacedContent)) {
return false;
}
// iterate through each placeholder and replace it with its value
foreach($p_arr_Placeholders as $l_str_Placeholder => $l_str_Value) {
$this->a_str_ReplacedContent = str_replace("[[" . $l_str_Placeholder . "]]", $l_str_Value, $this->a_str_ReplacedContent);
}
// success
return true;
}
/**
* Reloads the original content of the template file.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function reload() {
$this->a_str_ReplacedContent = $this->a_str_OriginalContent;
}
/**
* Reloads the original content of the template file.
*
* @author Stefan Herndler
* @since 1.5.0
*/
public function reload() {
$this->a_str_ReplacedContent = $this->a_str_OriginalContent;
}
/**
* Returns the content of the template file with replaced placeholders.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string Template content with replaced placeholders.
*/
public function getContent() {
return $this->a_str_ReplacedContent;
}
/**
* Returns the content of the template file with replaced placeholders.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string Template content with replaced placeholders.
*/
public function getContent() {
return $this->a_str_ReplacedContent;
}
/**
* Process template file
*
* @author Patrizia Lutz @misfist
*
* @since 2.4.0d3
*
* @param string $template
* @return void
*
*
* @since 2.0.3 replace tab with a space
* @since 2.0.3 replace 2 spaces with 1
* @since 2.0.4 collapse multiple spaces
* @since 2.2.6 delete a space before a closing pointy bracket
* @since 2.5.4 collapse HTML comments and PHP/JS docblocks (only)
*/
public function process_template( $template ) {
$this->a_str_OriginalContent = preg_replace( '#<!--.+?-->#s', "", file_get_contents( $template ) );
$this->a_str_OriginalContent = preg_replace( '#/\*\*.+?\*/#s', "", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( "\n", "", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( "\r", "", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( "\t", " ", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = preg_replace( '# +#', " ", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( " >", ">", $this->a_str_OriginalContent );
$this->reload();
}
/**
* Process template file
*
* @author Patrizia Lutz @misfist
*
* @since 2.4.0d3
*
* @param string $template
* @return void
*
*
* @since 2.0.3 replace tab with a space
* @since 2.0.3 replace 2 spaces with 1
* @since 2.0.4 collapse multiple spaces
* @since 2.2.6 delete a space before a closing pointy bracket
* @since 2.5.4 collapse HTML comments and PHP/JS docblocks (only)
*/
public function process_template( $template ) {
$this->a_str_OriginalContent = preg_replace( '#<!--.+?-->#s', "", file_get_contents( $template ) );
$this->a_str_OriginalContent = preg_replace( '#/\*\*.+?\*/#s', "", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( "\n", "", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( "\r", "", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( "\t", " ", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = preg_replace( '# +#', " ", $this->a_str_OriginalContent );
$this->a_str_OriginalContent = str_replace( " >", ">", $this->a_str_OriginalContent );
$this->reload();
}
/**
* Get the template
*
* @author Patrizia Lutz @misfist
*
* @since 2.4.0d3
*
* @param string $p_str_FileType
* @param string $p_str_FileName
* @param string $p_str_Extension
* @return mixed false | template path
*/
public function get_template( $p_str_FileType, $p_str_FileName, $p_str_Extension = "html" ) {
$located = false;
/**
* Get the template
*
* @author Patrizia Lutz @misfist
*
* @since 2.4.0d3
*
* @param string $p_str_FileType
* @param string $p_str_FileName
* @param string $p_str_Extension
* @return mixed false | template path
*/
public function get_template( $p_str_FileType, $p_str_FileName, $p_str_Extension = "html" ) {
$located = false;
/**
* The directory change be modified
* @usage to change location of templates to `template_parts/footnotes/':
* add_filter( 'mci_footnotes_template_directory', function( $directory ) {
* return 'template_parts/footnotes/;
* } );
*/
$template_directory = apply_filters( 'mci_footnotes_template_directory', 'footnotes/templates/' );
$custom_directory = apply_filters( 'mci_footnotes_custom_template_directory', 'footnotes-custom/' );
$template_name = $p_str_FileType . '/' . $p_str_FileName . '.' . $p_str_Extension;
/**
* The directory change be modified
* @usage to change location of templates to `template_parts/footnotes/':
* add_filter( 'mci_footnotes_template_directory', function( $directory ) {
* return 'template_parts/footnotes/;
* } );
*/
$template_directory = apply_filters( 'mci_footnotes_template_directory', 'footnotes/templates/' );
$custom_directory = apply_filters( 'mci_footnotes_custom_template_directory', 'footnotes-custom/' );
$template_name = $p_str_FileType . '/' . $p_str_FileName . '.' . $p_str_Extension;
/**
* Look in active (child) theme
*/
if ( file_exists( trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name ) ) {
$located = trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name;
/**
* Look in active (child) theme
*/
if ( file_exists( trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name ) ) {
$located = trailingslashit( get_stylesheet_directory() ) . $template_directory . $template_name;
/**
* Look in parent theme
*/
} elseif ( file_exists( trailingslashit( get_template_directory() ) . $template_directory . $template_name ) ) {
$located = trailingslashit( get_template_directory() ) . $template_directory . $template_name;
/**
* Look in parent theme
*/
} elseif ( file_exists( trailingslashit( get_template_directory() ) . $template_directory . $template_name ) ) {
$located = trailingslashit( get_template_directory() ) . $template_directory . $template_name;
/**
* Look in custom directory
*/
} elseif ( file_exists( trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name ) ) {
$located = trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name;
/**
* Look in custom directory
*/
} elseif ( file_exists( trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name ) ) {
$located = trailingslashit( WP_PLUGIN_DIR ) . $custom_directory . 'templates/' . $template_name;
/**
* Look in plugin
*/
} elseif ( file_exists( $this->plugin_directory . 'templates/' . $template_name ) ) {
$located = $this->plugin_directory . 'templates/' . $template_name;
}
/**
* Look in plugin
*/
} elseif ( file_exists( $this->plugin_directory . 'templates/' . $template_name ) ) {
$located = $this->plugin_directory . 'templates/' . $template_name;
}
return $located;
}
return $located;
}
} // end of class

View file

@ -18,68 +18,68 @@
*/
class MCI_Footnotes_Widget_ReferenceContainer extends MCI_Footnotes_WidgetBase {
/**
* Returns an unique ID as string used for the Widget Base ID.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string
*/
protected function getID() {
return "footnotes_widget";
}
/**
* Returns an unique ID as string used for the Widget Base ID.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string
*/
protected function getID() {
return "footnotes_widget";
}
/**
* Returns the Public name of the Widget to be displayed in the Configuration page.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string
*/
protected function getName() {
return MCI_Footnotes_Config::C_STR_PLUGIN_NAME;
}
/**
* Returns the Public name of the Widget to be displayed in the Configuration page.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string
*/
protected function getName() {
return MCI_Footnotes_Config::C_STR_PLUGIN_NAME;
}
/**
* Returns the Description of the child widget.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string
*
* Edit: curly quotes 2.2.0 2020-12-12T2130+0100
*/
protected function getDescription() {
return __('The widget defines the position of the reference container if set to “widget area”.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME);
}
/**
* Returns the Description of the child widget.
*
* @author Stefan Herndler
* @since 1.5.0
* @return string
*
* Edit: curly quotes 2.2.0 2020-12-12T2130+0100
*/
protected function getDescription() {
return __('The widget defines the position of the reference container if set to “widget area”.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME);
}
/**
* Outputs the Settings of the Widget.
*
* @author Stefan Herndler
* @since 1.5.0
* @param mixed $instance
* @return void
*
* Edit: curly quotes 2.2.0 2020-12-12T2130+0100
*/
public function form($instance) {
echo __('The widget defines the position of the reference container if set to “widget area”.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME);
}
/**
* Outputs the Settings of the Widget.
*
* @author Stefan Herndler
* @since 1.5.0
* @param mixed $instance
* @return void
*
* Edit: curly quotes 2.2.0 2020-12-12T2130+0100
*/
public function form($instance) {
echo __('The widget defines the position of the reference container if set to “widget area”.', MCI_Footnotes_Config::C_STR_PLUGIN_NAME);
}
/**
* Outputs the Content of the Widget.
*
* @author Stefan Herndler
* @since 1.5.0
* @param mixed $args
* @param mixed $instance
*/
public function widget($args, $instance) {
global $g_obj_MCI_Footnotes;
// reference container positioning is set to "widget area"
if (MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_REFERENCE_CONTAINER_POSITION) == "widget") {
echo $g_obj_MCI_Footnotes->a_obj_Task->ReferenceContainer();
}
}
/**
* Outputs the Content of the Widget.
*
* @author Stefan Herndler
* @since 1.5.0
* @param mixed $args
* @param mixed $instance
*/
public function widget($args, $instance) {
global $g_obj_MCI_Footnotes;
// reference container positioning is set to "widget area"
if (MCI_Footnotes_Settings::instance()->get(MCI_Footnotes_Settings::C_STR_REFERENCE_CONTAINER_POSITION) == "widget") {
echo $g_obj_MCI_Footnotes->a_obj_Task->ReferenceContainer();
}
}
}

View file

@ -7,7 +7,7 @@
* Since: 1.0
*
* @version 2.5.5
* @lastmodified 2021-02-16T0651+0100
* @lastmodified 2021-02-18T2026+0100
*
* Classes recommended for Custom CSS:
* @see templates/dashboard/customize-css-new.html
@ -82,31 +82,31 @@
*/
.footnotes_validation_error {
border: 4px solid red;
padding: 20px 40px;
margin: 20px 0;
background: #ff000055;
text-align: start;
border: 4px solid red;
padding: 20px 40px;
margin: 20px 0;
background: #ff000055;
text-align: start;
}
.footnotes_validation_error p:first-child {
font-size: 20px;
font-weight: bold;
text-align: center;
font-size: 20px;
font-weight: bold;
text-align: center;
}
.footnotes_validation_error p:nth-child(2) {
font-size: 16px;
font-style: italic;
font-size: 16px;
font-style: italic;
}
.footnotes_validation_error p:nth-child(3) {
font-size: 14px;
font-weight: bold;
font-size: 14px;
font-weight: bold;
}
.footnotes_validation_error p:last-child {
font-size: 12px;
font-size: 12px;
}
/**
@ -145,9 +145,9 @@
*/
.footnote_url_wrap {
word-wrap: anywhere;
overflow-wrap: anywhere;
word-break: break-all;
word-wrap: anywhere;
overflow-wrap: anywhere;
word-break: break-all;
}
/**
@ -168,12 +168,12 @@
.footnote_item_base,
.footnote_referrer_base {
position: absolute;
position: absolute;
}
.footnote_item_anchor,
.footnote_referrer_anchor {
position: relative;
position: relative;
}
/**
@ -203,9 +203,9 @@
.main-content .footnote_referrer > a:hover,
.main-content .footnote_plugin_tooltip_text,
.main-content .footnote_plugin_tooltip_text:hover {
text-decoration: none !important;
border-bottom: none !important;
box-shadow: none !important;
text-decoration: none !important;
border-bottom: none !important;
box-shadow: none !important;
}
/**
@ -226,8 +226,8 @@
.footnote_plugin_tooltip_text {
line-height: 0;
position: relative !important;
cursor: pointer;
position: relative !important;
cursor: pointer;
}
/**
@ -241,14 +241,14 @@
*/
.footnote_tooltip {
display: none;
z-index: 2147483647 !important;
cursor: auto;
text-align: left;
padding: 12px;
line-height: 1.2;
font-weight: normal;
font-style: normal;
display: none;
z-index: 2147483647 !important;
cursor: auto;
text-align: left;
padding: 12px;
line-height: 1.2;
font-weight: normal;
font-style: normal;
}
/**
@ -258,15 +258,15 @@
*/
.footnote_referrer.relative {
position: relative;
position: relative;
}
.footnote_tooltip.position {
display: unset;
position: absolute;
bottom: 24px;
left: -50px;
width: 400px;
display: unset;
position: absolute;
bottom: 24px;
left: -50px;
width: 400px;
}
/*
@ -274,14 +274,14 @@ fade-in parameters
*/
.footnote_tooltip.shown {
visibility: visible;
opacity: 1;
transition-property: visibility opacity;
transition-timing-function: linear;
visibility: visible;
opacity: 1;
transition-property: visibility opacity;
transition-timing-function: linear;
/*
property values of settings are inline CSS
transition-delay: 0ms;
transition-duration: 200ms;
transition-delay: 0ms;
transition-duration: 200ms;
*/
}
@ -290,14 +290,14 @@ fade-out parameters
*/
.footnote_tooltip.hidden {
visibility: hidden;
opacity: 0;
transition-property: visibility opacity;
transition-timing-function: linear;
visibility: hidden;
opacity: 0;
transition-property: visibility opacity;
transition-timing-function: linear;
/*
property values of settings are inline CSS
transition-delay: 400ms;
transition-duration: 200ms;
transition-delay: 400ms;
transition-duration: 200ms;
*/
}
@ -306,16 +306,16 @@ Read-on button
*/
.footnote_tooltip_continue {
font-style: italic;
color: green;
text-decoration: none !important;
cursor: pointer;
white-space: nowrap;
font-style: italic;
color: green;
text-decoration: none !important;
cursor: pointer;
white-space: nowrap;
}
.footnote_tooltip_continue:hover {
color: blue;
text-decoration: underline !important;
color: blue;
text-decoration: underline !important;
}
@ -354,9 +354,9 @@ Classes:
*/
.footnotes_reference_container {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
/*
@ -364,29 +364,29 @@ label
*/
.footnote_container_prepare {
display: block !important;
padding-top: 24px !important;
display: block !important;
padding-top: 24px !important;
}
.footnote_container_prepare > p {
line-height: 1.3 !important;
margin-top: 1em !important;
margin-bottom: 0.25em !important;
padding: 0 !important;
font-weight: normal !important;
/* bottom border optional since 2.2.5 */
display: block !important;
-webkit-margin-before: 0.83em !important;
-webkit-margin-after: 0.83em !important;
-webkit-margin-start: 0px !important;
-webkit-margin-end: 0px !important;
text-align: left !important;
vertical-align: middle;
line-height: 1.3 !important;
margin-top: 1em !important;
margin-bottom: 0.25em !important;
padding: 0 !important;
font-weight: normal !important;
/* bottom border optional since 2.2.5 */
display: block !important;
-webkit-margin-before: 0.83em !important;
-webkit-margin-after: 0.83em !important;
-webkit-margin-start: 0px !important;
-webkit-margin-end: 0px !important;
text-align: left !important;
vertical-align: middle;
}
.footnote_container_prepare > p > span:first-child {
text-align: left !important;
font-size: 1.5em !important;
text-align: left !important;
font-size: 1.5em !important;
}
/*
@ -395,11 +395,11 @@ fully clickable, not sign only
*/
.footnote_reference_container_collapse_button {
cursor: pointer;
padding: 0 0.5em;
font-size: 1.3em !important;
vertical-align: 2px;
text-decoration: none !important;
cursor: pointer;
padding: 0 0.5em;
font-size: 1.3em !important;
vertical-align: 2px;
text-decoration: none !important;
}
h2 > .footnote_reference_container_collapse_button,
@ -407,12 +407,12 @@ h3 > .footnote_reference_container_collapse_button,
h4 > .footnote_reference_container_collapse_button,
h5 > .footnote_reference_container_collapse_button,
h6 > .footnote_reference_container_collapse_button {
font-size: inherit !important;
font-size: inherit !important;
}
.footnote_container_prepare > p > span:last-child a,
.footnote_reference_container_collapse_button a {
text-decoration: none !important;
text-decoration: none !important;
}
/*
@ -421,8 +421,8 @@ table
.footnote-reference-container,
.footnotes_table {
width: 100%;
border: none;
width: 100%;
border: none;
}
/*
@ -438,10 +438,10 @@ footnotes
.footnote_plugin_index_combi,
.footnote_plugin_symbol,
.footnote_plugin_text {
border: none !important;
text-align: left !important;
vertical-align: top !important;
padding: 5px 6px 10px 0 !important;
border: none !important;
text-align: left !important;
vertical-align: top !important;
padding: 5px 6px 10px 0 !important;
}
.footnote_backlink,
@ -452,19 +452,19 @@ footnotes
.main-content .footnote_backlink:link,
.main-content .footnote_plugin_link,
.main-content .footnote_plugin_link:link {
text-decoration: none !important;
border-bottom: none !important;
text-decoration: none !important;
border-bottom: none !important;
}
.footnote_backlink,
.footnote_plugin_link {
white-space: nowrap;
white-space: nowrap;
}
.pointer,
.footnote_index,
.footnote_backlink {
cursor: pointer;
cursor: pointer;
}
/*
@ -479,12 +479,12 @@ when hovered in some themes, not in others:
.footnote_backlink:hover,
.footnote_plugin_link:hover,
.footnote_plugin_text a:hover {
text-decoration: unset;
text-decoration: underline; /*deprioritized to ease customization*/
text-decoration: unset;
text-decoration: underline; /*deprioritized to ease customization*/
}
.footnote_plugin_text {
width: unset; /*unset width of text column to fix site issues*/
width: unset; /*unset width of text column to fix site issues*/
}
/*
@ -499,8 +499,8 @@ These are overridden if settings are enabled.
.footnote_plugin_index,
.footnote_plugin_index_combi {
max-width: 100px;
width: 2.5em;
max-width: 100px;
width: 2.5em;
}
/*
@ -509,10 +509,10 @@ Responsive
@media only screen and (max-width: 768px) {
.footnote_plugin_index,
.footnote_plugin_index_combi {
max-width: 80px;
}
.footnote_plugin_index,
.footnote_plugin_index_combi {
max-width: 80px;
}
}
@ -532,31 +532,31 @@ Link color set to inherit, so referrers/numbers are not grayed out.
*/
.footnotes_reference_container {
page-break-inside: avoid;
page-break-inside: avoid;
}
@media print {
.footnote_tooltip,
.footnote_reference_container_collapse_button,
.footnote_index_arrow {
display: none;
}
.footnote_tooltip,
.footnote_reference_container_collapse_button,
.footnote_index_arrow {
display: none;
}
.footnote_plugin_tooltip_text {
color: inherit;
}
.footnote_plugin_tooltip_text {
color: inherit;
}
.footnote_plugin_index a,
.footnote_plugin_index_combi a {
color: inherit;
text-decoration: none !important;
}
.footnote_plugin_index a,
.footnote_plugin_index_combi a {
color: inherit;
text-decoration: none !important;
}
/* Edit button in WP2020 (added as a service) */
div.post-meta-edit-link-wrapper {
display: none;
}
/* Edit button in WP2020 (added as a service) */
div.post-meta-edit-link-wrapper {
display: none;
}
}
/**
@ -577,14 +577,14 @@ Link color set to inherit, so referrers/numbers are not grayed out.
.footnotes_logo,
.footnotes_logo:hover {
text-decoration: none;
font-weight: normal;
text-decoration: none;
font-weight: normal;
}
.footnotes_logo_part1 {
color: #2bb975;
color: #2bb975;
}
.footnotes_logo_part2 {
color: #545f5a;
color: #545f5a;
}

View file

@ -26,7 +26,7 @@ Rationale
In Hello Elementor Theme, this applies to .site-header, and
also to .site-main, which is a class of the <main> element,
at the condition that the page is not built with Elementor:
body:not([class*="elementor-page-"])
body:not([class*="elementor-page-"])
Therefore, in pages built with Elementor, proper layout is
applied only to features managed by Elementor, not others.
@ -47,55 +47,55 @@ Sources:
.entry-content,
.entry .entry-content,
main .entry .entry-content {
margin: 0 auto;
margin: 0 auto;
}
@media (max-width: 575px) {
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
padding: 0 10px;
}
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
padding: 0 10px;
}
}
@media (min-width: 576px) {
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 500px;
}
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 500px;
}
}
@media (min-width: 768px) {
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 600px;
}
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 600px;
}
}
@media (min-width: 992px) {
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 800px;
}
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 800px;
}
}
@media (min-width: 1200px) {
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 960px;
}
.page-content,
.entry-content,
.entry .entry-content,
main .entry .entry-content {
max-width: 960px;
}
}

View file

@ -22,7 +22,7 @@ Rationale
In Hello Elementor Theme, this applies to .site-header, and
also to .site-main, which is a class of the <main> element,
at the condition that the page is not built with Elementor:
body:not([class*="elementor-page-"])
body:not([class*="elementor-page-"])
Therefore, in pages built with Elementor, proper layout is
applied only to features managed by Elementor, not others.
@ -40,55 +40,55 @@ main,
.main-content,
.site-main,
div.hentry {
margin: 0 auto;
margin: 0 auto;
}
@media (max-width: 575px) {
main,
.main-content,
.site-main,
div.hentry {
padding: 0 10px;
}
main,
.main-content,
.site-main,
div.hentry {
padding: 0 10px;
}
}
@media (min-width: 576px) {
main,
.main-content,
.site-main,
div.hentry {
max-width: 500px;
}
main,
.main-content,
.site-main,
div.hentry {
max-width: 500px;
}
}
@media (min-width: 768px) {
main,
.main-content,
.site-main,
div.hentry {
max-width: 600px;
}
main,
.main-content,
.site-main,
div.hentry {
max-width: 600px;
}
}
@media (min-width: 992px) {
main,
.main-content,
.site-main,
div.hentry {
max-width: 800px;
}
main,
.main-content,
.site-main,
div.hentry {
max-width: 800px;
}
}
@media (min-width: 1200px) {
main,
.main-content,
.site-main,
div.hentry {
max-width: 960px;
}
main,
.main-content,
.site-main,
div.hentry {
max-width: 960px;
}
}

View file

@ -21,7 +21,7 @@ Rationale
In Hello Elementor Theme, this applies to .site-header, and
also to .site-main, which is a class of the <main> element,
at the condition that the page is not built with Elementor:
body:not([class*="elementor-page-"])
body:not([class*="elementor-page-"])
Therefore, in pages built with Elementor, proper layout is
applied only to features managed by Elementor, not others.
@ -38,50 +38,50 @@ older browsers not yet supporting CSS variables.
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
margin: 0 auto;
margin: 0 auto;
}
@media (max-width: 575px) {
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
padding: 0 10px;
}
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
padding: 0 10px;
}
}
@media (min-width: 576px) {
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 500px;
}
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 500px;
}
}
@media (min-width: 768px) {
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 600px;
}
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 600px;
}
}
@media (min-width: 992px) {
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 800px;
}
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 800px;
}
}
@media (min-width: 1200px) {
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 960px;
}
.entry-content div.footnotes_reference_container,
.entry-content > .footnotes_reference_container,
main div.footnotes_reference_container {
max-width: 960px;
}
}

View file

@ -4,7 +4,7 @@
*
* @since 2.5.5
* @version 2.5.5
* @lastmodified 2021-02-16T0206+0100
* @lastmodified 2021-02-18T2029+0100
*
* System of unified minified style sheets tailored to the instance.
*
@ -19,15 +19,15 @@
*/
.footnote_referrer.relative {
position: relative;
position: relative;
}
.footnote_tooltip.position {
display: unset;
position: absolute;
bottom: 24px;
left: -50px;
width: 400px;
display: unset;
position: absolute;
bottom: 24px;
left: -50px;
width: 400px;
}
/*
@ -35,14 +35,14 @@ fade-in parameters
*/
.footnote_tooltip.shown {
visibility: visible;
opacity: 1;
transition-property: visibility opacity;
transition-timing-function: linear;
visibility: visible;
opacity: 1;
transition-property: visibility opacity;
transition-timing-function: linear;
/*
property values of settings are inline CSS
transition-delay: 0ms;
transition-duration: 200ms;
transition-delay: 0ms;
transition-duration: 200ms;
*/
}
@ -51,13 +51,13 @@ fade-out parameters
*/
.footnote_tooltip.hidden {
visibility: hidden;
opacity: 0;
transition-property: visibility opacity;
transition-timing-function: linear;
visibility: hidden;
opacity: 0;
transition-property: visibility opacity;
transition-timing-function: linear;
/*
property values of settings are inline CSS
transition-delay: 400ms;
transition-duration: 200ms;
transition-delay: 400ms;
transition-duration: 200ms;
*/
}

View file

@ -11,7 +11,7 @@
* It doesnt matter if the tooltips are jQuery based or alternative.
* @since 2.5.5
* @version 2.5.5
* @lastmodified 2021-02-16T0206+0100
* @lastmodified 2021-02-18T2030+0100
*
* System of unified minified style sheets tailored to the instance.
*
@ -30,14 +30,14 @@
*/
.footnote_tooltip {
display: none;
z-index: 2147483647 !important;
cursor: auto;
text-align: left;
padding: 12px;
line-height: 1.2;
font-weight: normal;
font-style: normal;
display: none;
z-index: 2147483647 !important;
cursor: auto;
text-align: left;
padding: 12px;
line-height: 1.2;
font-weight: normal;
font-style: normal;
}
/*
@ -45,14 +45,14 @@ Read-on button
*/
.footnote_tooltip_continue {
font-style: italic;
color: green;
text-decoration: none !important;
cursor: pointer;
white-space: nowrap;
font-style: italic;
color: green;
text-decoration: none !important;
cursor: pointer;
white-space: nowrap;
}
.footnote_tooltip_continue:hover {
color: blue;
text-decoration: underline !important;
color: blue;
text-decoration: underline !important;
}

View file

@ -7,7 +7,7 @@
* Since: 1.0
*
* @version 2.5.5
* @lastmodified 2021-02-16T0033+0100
* @lastmodified 2021-02-18T2026+0100
*/
/**
@ -22,25 +22,25 @@
*/
.footnotes_logo_heading {
display: inline-block;
float: left;
position: absolute;
text-decoration: none;
font-weight: normal;
display: inline-block;
float: left;
position: absolute;
text-decoration: none;
font-weight: normal;
}
.footnotes_logo_part1_heading {
left: 20px;
color: #2bb975;
left: 20px;
color: #2bb975;
}
.footnotes_logo_part2_heading {
left: 51px;
color: #545f5a;
left: 51px;
color: #545f5a;
}
.footnotes_heart_heading {
color:#ff6d3b;
font-weight:bold;
position: absolute;
left: 96px;
color:#ff6d3b;
font-weight:bold;
position: absolute;
left: 96px;
}
/**
@ -48,8 +48,8 @@
*/
.postbox-header {
position: relative;
padding: 0 20px;
position: relative;
padding: 0 20px;
}
/************************************************************
@ -63,28 +63,28 @@ Limited to a number of IDs to not affect all dashboards
#footnote_inputfield_readon_label,
#footnote_inputfield_references_label,
#footnote_inputfield_love {
padding-left: 8px !important;
padding-right: 8px !important;
width: 80% !important;
padding-left: 8px !important;
padding-right: 8px !important;
width: 80% !important;
}
#footnote_inputfield_reference_container_place {
width: 310px;
width: 310px;
}
#footnote_inputfield_counter_style,
#footnotes_inputfield_page_layout_support {
width: 505px;
width: 505px;
}
#footnote_inputfield_placeholder_start,
#footnote_inputfield_placeholder_end,
#footnote_inputfield_custom_mouse_over_box_excerpt_length {
width: 180px;
width: 180px;
}
#footnote_inputfield_placeholder_start_user_defined,
#footnote_inputfield_placeholder_end_user_defined {
width: 320px;
width: 320px;
}
#footnote_inputfield_combine_identical,
@ -103,13 +103,13 @@ Limited to a number of IDs to not affect all dashboards
#footnotes_inputfield_mouse_over_box_fade_out_duration,
#footnote_inputfield_custom_mouse_over_box_border_width,
#footnote_inputfield_custom_mouse_over_box_border_radius {
width: 80px;
width: 80px;
}
#footnote_inputfield_custom_hyperlink_symbol,
#footnotes_inputfield_backlinks_terminator_option,
#footnotes_inputfield_backlinks_separator_option {
width: 230px;
width: 230px;
}
#footnotes_inputfield_reference_container_top_margin,
@ -117,13 +117,13 @@ Limited to a number of IDs to not affect all dashboards
#footnotes_inputfield_backlinks_column_width_scalar,
#footnotes_inputfield_backlinks_column_max_width_scalar,
#footnotes_inputfield_mouse_over_box_font_size_scalar {
width: 85px;
width: 85px;
}
#footnotes_inputfield_backlinks_column_width_unit,
#footnotes_inputfield_backlinks_column_max_width_unit,
#footnotes_inputfield_mouse_over_box_font_size_unit {
width: 140px;
width: 140px;
}
/************************************************************
@ -131,44 +131,44 @@ Headings and labels
*/
label {
display: inline-block;
display: inline-block;
}
.postbox > h3 {
height: 32px !important;
line-height: 32px !important;
height: 32px !important;
line-height: 32px !important;
}
.postbox > h3 > span {
padding: 0 10px;
padding: 0 10px;
}
.postbox > .inside > table {
border: none !important;
border: none !important;
}
.postbox > .inside >table > tbody > tr > td:first-child {
width: 15% !important;
font-weight: bold !important;
width: 15% !important;
font-weight: bold !important;
}
.footnote_placeholder_box_container {
text-align: center !important;
text-align: center !important;
}
span.footnote_highlight_placeholder {
font-weight: bold !important;
padding: 0 8px !important;
font-weight: bold !important;
padding: 0 8px !important;
}
.footnote_placeholder_box_example {
border: 2px solid #2bb975 !important;
border-radius: 4px !important;
padding: 16px 0 !important;
width: 50% !important;
display: block !important;
margin: 20px auto !important;
text-align: center !important;
border: 2px solid #2bb975 !important;
border-radius: 4px !important;
padding: 16px 0 !important;
width: 50% !important;
display: block !important;
margin: 20px auto !important;
text-align: center !important;
}
/************************************************************
@ -180,22 +180,22 @@ IE doesnt support nth child, but these are not critical
*/
.expert_lookup tr th:first-child,
.expert_lookup tr td:first-child {
width: 170px !important;
width: 170px !important;
}
.expert_lookup tr th:nth-child(2),
.expert_lookup tr td:nth-child(2) {
width: 65px !important;
width: 65px !important;
}
.expert_lookup tr th:nth-child(3),
.expert_lookup tr td:nth-child(3) {
width: 200px !important;
width: 200px !important;
}
.expert_lookup tr td:nth-child(3) input {
width: 190px;
width: 190px;
}
.expert_lookup tr th:last-child,
.expert_lookup tr td:last-child {
white-space: nowrap;
white-space: nowrap;
}
/*
@ -216,31 +216,31 @@ The textarea has monospace font, but no other features
helping edit CSS, like tab support and syntactic colors.
*/
#customize_css_new tr td:first-child {
width: 38% !important;
font-weight: normal !important;
width: 38% !important;
font-weight: normal !important;
}
.customize_css_new tr td:first-child span:first-child {
font-weight: bold !important;
font-weight: bold !important;
}
.customize_css_new .list {
padding-top: 10px;
padding-top: 10px;
}
.customize_css_new .list p {
font-family: monospace;
padding: 0 10px;
text-indent: -10px;
margin: .5em 0;
font-family: monospace;
padding: 0 10px;
text-indent: -10px;
margin: .5em 0;
}
#footnote_inputfield_custom_css_new {
height: 500px;
height: 500px;
}
#footnote_inputfield_custom_css,
#footnote_inputfield_custom_css_new {
width: 96%;
resize: both;
overflow: scroll;
font-family: monospace;
width: 96%;
resize: both;
overflow: scroll;
font-family: monospace;
}
/************************************************************
@ -260,9 +260,9 @@ look weird.
since 2.1.4
*/
.footnotes_notice {
font-style: italic;
display: inline-block;
text-align: end;
font-style: italic;
display: inline-block;
text-align: end;
}
/************************************************************
@ -274,9 +274,9 @@ Use case: more extensive information not fitting into a brief
notice after the end of the settings box.
*/
.footnotes_description {
padding: 0 4%;
padding: 0 4%;
}
.footnotes_description p {
font-size: 1.06em;
font-style: italic;
font-size: 1.06em;
font-style: italic;
}

View file

@ -1,13 +1,13 @@
<?php
/*
Plugin Name: footnotes
Plugin URI: https://wordpress.org/plugins/footnotes/
Description: time to bring footnotes to your website! footnotes are known from offline publishing and everybody takes them for granted when reading a magazine.
Author: Mark Cheret
Version: 2.5.6d0
Author URI: http://cheret.de/plugins/footnotes-2/
Text Domain: footnotes
Domain Path: /languages
Plugin Name: footnotes
Plugin URI: https://wordpress.org/plugins/footnotes/
Description: time to bring footnotes to your website! footnotes are known from offline publishing and everybody takes them for granted when reading a magazine.
Author: Mark Cheret
Version: 2.5.6d1
Author URI: http://cheret.de/plugins/footnotes-2/
Text Domain: footnotes
Domain Path: /languages
*/
/*
* Copyright 2021 Mark Cheret (email: mark@cheret.de)
@ -18,26 +18,26 @@
* @since 2.1.4
* @since 2.5.3 (Hungarian)
* @var str
* @lastmodified 2021-02-18T1919+0100
* @lastmodified 2021-02-18T2048+0100
* @committer @pewgeuges
*/
define( 'C_STR_FOOTNOTES_VERSION', '2.5.6d0' );
define( 'C_STR_FOOTNOTES_VERSION', '2.5.6d1' );
/*
LICENSE NOTICE
LICENSE NOTICE
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 3, as
published by the Free Software Foundation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 3, as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**

View file

@ -25,7 +25,7 @@
* Make sure to sync the version number in class/init.php:
* @version 1.2.7.redacted.2
*
* @lastmodified 2021-02-05T0618+0100
* @lastmodified 2021-02-18T2032+0100
* @accountable @pewgeuges
*
* @since 2.0.0 Update: Tooltips: fix disabling bug by loading jQuery UI library, thanks to @rajinderverma @ericcorbett2 @honlapdavid @mmallett @twellve_million bug reports, thanks to @vonpiernik code contribution
@ -125,472 +125,472 @@
*/
(function (a) {
a.tools = a.tools || {version: "v1.2.7"};
var b;
b = a.tools.expose = {conf: {maskId: "exposeMask", loadSpeed: "slow", closeSpeed: "fast", closeOnClick: !0, closeOnEsc: !0, zIndex: 9998, opacity: .8, startOpacity: 0, color: "#fff", onLoad: null, onClose: null}};
function c() {
a.tools = a.tools || {version: "v1.2.7"};
var b;
b = a.tools.expose = {conf: {maskId: "exposeMask", loadSpeed: "slow", closeSpeed: "fast", closeOnClick: !0, closeOnEsc: !0, zIndex: 9998, opacity: .8, startOpacity: 0, color: "#fff", onLoad: null, onClose: null}};
function c() {
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #1 This was only a tweak to adjust width and height in Internet Explorer.
*/
/*if (a.browser && a.browser.msie) {
var b = a(document).height(), c = a(window).height();
return[window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, b - c < 20 ? c : b]
}*/
return[a(document).width(), a(document).height()]
}
function d(b) {
if (b)return b.call(a.mask)
}
var e, f, g, h, i;
a.mask = {load: function (j, k) {
if (g)return this;
/**
* EQUALS SIGN IN JAVASCRIPT
*
* - Bugfix: Libraries: jQuery Tools: replace discouraged double equals sign with recommended triple equals sign
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* @since 2.5.4
* @date 2021-01-27T1955+0100
* @accountable @pewgeuges
*
* 23 instances (27 less 4 already triple), first below, next was already
* All instances checked whether '==' has the semantics of '===', though.
* @bib Douglas Crockford, JavaScript: The Good Parts
*/
* #1 This was only a tweak to adjust width and height in Internet Explorer.
*/
typeof j === "string" && (j = {color: j}), j = j || h, h = j = a.extend(a.extend({}, b.conf), j), e = a("#" + j.maskId), e.length || (e = a("<div/>").attr("id", j.maskId), a("body").append(e));
var l = c();
e.css({position: "absolute", top: 0, left: 0, width: l[0], height: l[1], display: "none", opacity: j.startOpacity, zIndex: j.zIndex}), j.color && e.css("backgroundColor", j.color);
if (d(j.onBeforeLoad) === !1)return this;
j.closeOnEsc && a(document).on("keydown.mask", function (b) {
b.keyCode === 27 && a.mask.close(b)
}), j.closeOnClick && e.on("click.mask", function (b) {
a.mask.close(b)
}), a(window).on("resize.mask", function () {
a.mask.fit()
}), k && k.length && (i = k.eq(0).css("zIndex"), a.each(k, function () {
var b = a(this);
/relative|absolute|fixed/i.test(b.css("position")) || b.css("position", "relative")
}), f = k.css({zIndex: Math.max(j.zIndex + 1, i === "auto" ? 0 : i)})), e.css({display: "block"}).fadeTo(j.loadSpeed, j.opacity, function () {
a.mask.fit(), d(j.onLoad), g = "full"
}), g = !0;
return this
}, close: function () {
if (g) {
if (d(h.onBeforeClose) === !1)return this;
e.fadeOut(h.closeSpeed, function () {
d(h.onClose), f && f.css({zIndex: i}), g = !1
}), a(document).off("keydown.mask"), e.off("click.mask"), a(window).off("resize.mask")
}
return this
}, fit: function () {
if (g) {
var a = c();
e.css({width: a[0], height: a[1]})
}
}, getMask: function () {
return e
}, isLoaded: function (a) {
return a ? g === "full" : g
}, getConf: function () {
return h
}, getExposed: function () {
return f
}}, a.fn.mask = function (b) {
a.mask.load(b);
return this
}, a.fn.expose = function (b) {
a.mask.load(b, this);
return this
}
/*if (a.browser && a.browser.msie) {
var b = a(document).height(), c = a(window).height();
return[window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth, b - c < 20 ? c : b]
}*/
return[a(document).width(), a(document).height()]
}
function d(b) {
if (b)return b.call(a.mask)
}
var e, f, g, h, i;
a.mask = {load: function (j, k) {
if (g)return this;
/**
* EQUALS SIGN IN JAVASCRIPT
*
* - Bugfix: Libraries: jQuery Tools: replace discouraged double equals sign with recommended triple equals sign
*
* @since 2.5.4
* @date 2021-01-27T1955+0100
* @accountable @pewgeuges
*
* 23 instances (27 less 4 already triple), first below, next was already
* All instances checked whether '==' has the semantics of '===', though.
* @bib Douglas Crockford, JavaScript: The Good Parts
*/
typeof j === "string" && (j = {color: j}), j = j || h, h = j = a.extend(a.extend({}, b.conf), j), e = a("#" + j.maskId), e.length || (e = a("<div/>").attr("id", j.maskId), a("body").append(e));
var l = c();
e.css({position: "absolute", top: 0, left: 0, width: l[0], height: l[1], display: "none", opacity: j.startOpacity, zIndex: j.zIndex}), j.color && e.css("backgroundColor", j.color);
if (d(j.onBeforeLoad) === !1)return this;
j.closeOnEsc && a(document).on("keydown.mask", function (b) {
b.keyCode === 27 && a.mask.close(b)
}), j.closeOnClick && e.on("click.mask", function (b) {
a.mask.close(b)
}), a(window).on("resize.mask", function () {
a.mask.fit()
}), k && k.length && (i = k.eq(0).css("zIndex"), a.each(k, function () {
var b = a(this);
/relative|absolute|fixed/i.test(b.css("position")) || b.css("position", "relative")
}), f = k.css({zIndex: Math.max(j.zIndex + 1, i === "auto" ? 0 : i)})), e.css({display: "block"}).fadeTo(j.loadSpeed, j.opacity, function () {
a.mask.fit(), d(j.onLoad), g = "full"
}), g = !0;
return this
}, close: function () {
if (g) {
if (d(h.onBeforeClose) === !1)return this;
e.fadeOut(h.closeSpeed, function () {
d(h.onClose), f && f.css({zIndex: i}), g = !1
}), a(document).off("keydown.mask"), e.off("click.mask"), a(window).off("resize.mask")
}
return this
}, fit: function () {
if (g) {
var a = c();
e.css({width: a[0], height: a[1]})
}
}, getMask: function () {
return e
}, isLoaded: function (a) {
return a ? g === "full" : g
}, getConf: function () {
return h
}, getExposed: function () {
return f
}}, a.fn.mask = function (b) {
a.mask.load(b);
return this
}, a.fn.expose = function (b) {
a.mask.load(b, this);
return this
}
})(jQuery);
(function () {
var a = document.all, b = "http://www.adobe.com/go/getflashplayer", c = typeof jQuery === "function", d = /(\d+)[^\d]+(\d+)[^\d]*(\d*)/, e = {width: "100%", height: "100%", id: "_" + ("" + Math.random()).slice(9), allowfullscreen: !0, allowscriptaccess: "always", quality: "high", version: [3, 0], onFail: null, expressInstall: null, w3c: !1, cachebusting: !1};
window.attachEvent && window.attachEvent("onbeforeunload", function () {
__flash_unloadHandler = function () {
}, __flash_savedUnloadHandler = function () {
}
});
function f(a, b) {
if (b)for (var c in b)b.hasOwnProperty(c) && (a[c] = b[c]);
return a
}
var a = document.all, b = "http://www.adobe.com/go/getflashplayer", c = typeof jQuery === "function", d = /(\d+)[^\d]+(\d+)[^\d]*(\d*)/, e = {width: "100%", height: "100%", id: "_" + ("" + Math.random()).slice(9), allowfullscreen: !0, allowscriptaccess: "always", quality: "high", version: [3, 0], onFail: null, expressInstall: null, w3c: !1, cachebusting: !1};
window.attachEvent && window.attachEvent("onbeforeunload", function () {
__flash_unloadHandler = function () {
}, __flash_savedUnloadHandler = function () {
}
});
function f(a, b) {
if (b)for (var c in b)b.hasOwnProperty(c) && (a[c] = b[c]);
return a
}
function g(a, b) {
var c = [];
for (var d in a)a.hasOwnProperty(d) && (c[d] = b(a[d]));
return c
}
function g(a, b) {
var c = [];
for (var d in a)a.hasOwnProperty(d) && (c[d] = b(a[d]));
return c
}
window.flashembed = function (a, b, c) {
typeof a === "string" && (a = document.getElementById(a.replace("#", "")));
if (a) {
typeof b === "string" && (b = {src: b});
return new j(a, f(f({}, e), b), c)
}
};
var h = f(window.flashembed, {conf: e, getVersion: function () {
var a, b;
try {
b = navigator.plugins["Shockwave Flash"].description.slice(16)
} catch (c) {
try {
a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"), b = a && a.GetVariable("$version")
} catch (e) {
try {
a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), b = a && a.GetVariable("$version")
} catch (f) {
}
}
}
b = d.exec(b);
return b ? [b[1], b[3]] : [0, 0]
}, asString: function (a) {
if (a === null || a === undefined)return null;
var b = typeof a;
b === "object" && a.push && (b = "array");
switch (b) {
case"string":
a = a.replace(new RegExp("([\"\\\\])", "g"), "\\$1"), a = a.replace(/^\s?(\d+\.?\d*)%/, "$1pct");
return"\"" + a + "\"";
case"array":
return"[" + g(a,function (a) {
return h.asString(a)
}).join(",") + "]";
case"function":
return"\"function()\"";
case"object":
var c = [];
for (var d in a)a.hasOwnProperty(d) && c.push("\"" + d + "\":" + h.asString(a[d]));
return"{" + c.join(",") + "}"
}
return String(a).replace(/\s/g, " ").replace(/\'/g, "\"")
}, getHTML: function (b, c) {
b = f({}, b);
var d = "<object width=\"" + b.width + "\" height=\"" + b.height + "\" id=\"" + b.id + "\" name=\"" + b.id + "\"";
b.cachebusting && (b.src += (b.src.indexOf("?") != -1 ? "&" : "?") + Math.random()), b.w3c || !a ? d += " data=\"" + b.src + "\" type=\"application/x-shockwave-flash\"" : d += " classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"", d += ">";
if (b.w3c || a)d += "<param name=\"movie\" value=\"" + b.src + "\" />";
b.width = b.height = b.id = b.w3c = b.src = null, b.onFail = b.version = b.expressInstall = null;
for (var e in b)b[e] && (d += "<param name=\"" + e + "\" value=\"" + b[e] + "\" />");
var g = "";
if (c) {
for (var i in c)if (c[i]) {
var j = c[i];
g += i + "=" + encodeURIComponent(/function|object/.test(typeof j) ? h.asString(j) : j) + "&"
}
g = g.slice(0, -1), d += "<param name=\"flashvars\" value='" + g + "' />"
}
d += "</object>";
return d
}, isSupported: function (a) {
return i[0] > a[0] || i[0] === a[0] && i[1] >= a[1]
}}), i = h.getVersion();
window.flashembed = function (a, b, c) {
typeof a === "string" && (a = document.getElementById(a.replace("#", "")));
if (a) {
typeof b === "string" && (b = {src: b});
return new j(a, f(f({}, e), b), c)
}
};
var h = f(window.flashembed, {conf: e, getVersion: function () {
var a, b;
try {
b = navigator.plugins["Shockwave Flash"].description.slice(16)
} catch (c) {
try {
a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"), b = a && a.GetVariable("$version")
} catch (e) {
try {
a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"), b = a && a.GetVariable("$version")
} catch (f) {
}
}
}
b = d.exec(b);
return b ? [b[1], b[3]] : [0, 0]
}, asString: function (a) {
if (a === null || a === undefined)return null;
var b = typeof a;
b === "object" && a.push && (b = "array");
switch (b) {
case"string":
a = a.replace(new RegExp("([\"\\\\])", "g"), "\\$1"), a = a.replace(/^\s?(\d+\.?\d*)%/, "$1pct");
return"\"" + a + "\"";
case"array":
return"[" + g(a,function (a) {
return h.asString(a)
}).join(",") + "]";
case"function":
return"\"function()\"";
case"object":
var c = [];
for (var d in a)a.hasOwnProperty(d) && c.push("\"" + d + "\":" + h.asString(a[d]));
return"{" + c.join(",") + "}"
}
return String(a).replace(/\s/g, " ").replace(/\'/g, "\"")
}, getHTML: function (b, c) {
b = f({}, b);
var d = "<object width=\"" + b.width + "\" height=\"" + b.height + "\" id=\"" + b.id + "\" name=\"" + b.id + "\"";
b.cachebusting && (b.src += (b.src.indexOf("?") != -1 ? "&" : "?") + Math.random()), b.w3c || !a ? d += " data=\"" + b.src + "\" type=\"application/x-shockwave-flash\"" : d += " classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"", d += ">";
if (b.w3c || a)d += "<param name=\"movie\" value=\"" + b.src + "\" />";
b.width = b.height = b.id = b.w3c = b.src = null, b.onFail = b.version = b.expressInstall = null;
for (var e in b)b[e] && (d += "<param name=\"" + e + "\" value=\"" + b[e] + "\" />");
var g = "";
if (c) {
for (var i in c)if (c[i]) {
var j = c[i];
g += i + "=" + encodeURIComponent(/function|object/.test(typeof j) ? h.asString(j) : j) + "&"
}
g = g.slice(0, -1), d += "<param name=\"flashvars\" value='" + g + "' />"
}
d += "</object>";
return d
}, isSupported: function (a) {
return i[0] > a[0] || i[0] === a[0] && i[1] >= a[1]
}}), i = h.getVersion();
function j(c, d, e) {
if (h.isSupported(d.version))c.innerHTML = h.getHTML(d, e); else if (d.expressInstall && h.isSupported([6, 65]))c.innerHTML = h.getHTML(f(d, {src: d.expressInstall}), {MMredirectURL: location.href, MMplayerType: "PlugIn", MMdoctitle: document.title}); else {
c.innerHTML.replace(/\s/g, "") || (c.innerHTML = "<h2>Flash version " + d.version + " or greater is required</h2><h3>" + (i[0] > 0 ? "Your version is " + i : "You have no flash plugin installed") + "</h3>" + (c.tagName === "A" ? "<p>Click here to download latest version</p>" : "<p>Download latest version from <a href='" + b + "'>here</a></p>"), c.tagName === "A" && (c.onclick = function () {
location.href = b
}));
if (d.onFail) {
var g = d.onFail.call(this);
typeof g === "string" && (c.innerHTML = g)
}
}
a && (window[d.id] = document.getElementById(d.id)), f(this, {getRoot: function () {
return c
}, getOptions: function () {
return d
}, getConf: function () {
return e
}, getApi: function () {
return c.firstChild
}})
}
function j(c, d, e) {
if (h.isSupported(d.version))c.innerHTML = h.getHTML(d, e); else if (d.expressInstall && h.isSupported([6, 65]))c.innerHTML = h.getHTML(f(d, {src: d.expressInstall}), {MMredirectURL: location.href, MMplayerType: "PlugIn", MMdoctitle: document.title}); else {
c.innerHTML.replace(/\s/g, "") || (c.innerHTML = "<h2>Flash version " + d.version + " or greater is required</h2><h3>" + (i[0] > 0 ? "Your version is " + i : "You have no flash plugin installed") + "</h3>" + (c.tagName === "A" ? "<p>Click here to download latest version</p>" : "<p>Download latest version from <a href='" + b + "'>here</a></p>"), c.tagName === "A" && (c.onclick = function () {
location.href = b
}));
if (d.onFail) {
var g = d.onFail.call(this);
typeof g === "string" && (c.innerHTML = g)
}
}
a && (window[d.id] = document.getElementById(d.id)), f(this, {getRoot: function () {
return c
}, getOptions: function () {
return d
}, getConf: function () {
return e
}, getApi: function () {
return c.firstChild
}})
}
c && (jQuery.tools = jQuery.tools || {version: "v1.2.7"}, jQuery.tools.flashembed = {conf: e}, jQuery.fn.flashembed = function (a, b) {
return this.each(function () {
jQuery(this).data("flashembed", flashembed(this, a, b))
})
})
c && (jQuery.tools = jQuery.tools || {version: "v1.2.7"}, jQuery.tools.flashembed = {conf: e}, jQuery.fn.flashembed = function (a, b) {
return this.each(function () {
jQuery(this).data("flashembed", flashembed(this, a, b))
})
})
})();
(function (a) {
var b, c, d, e;
a.tools = a.tools || {version: "v1.2.7"}, a.tools.history = {init: function (g) {
var b, c, d, e;
a.tools = a.tools || {version: "v1.2.7"}, a.tools.history = {init: function (g) {
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #2 This was only for very old Internet Explorer (older than IE8).
*/
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #2 This was only for very old Internet Explorer (older than IE8).
*/
e || (/*a.browser && a.browser.msie && a.browser.version < "8" ? c || (c = a("<iframe/>").attr("src", "javascript:false;").hide().get(0), a("body").append(c), setInterval(function () {
var d = c.contentWindow.document, e = d.location.hash;
b !== e && a(window).trigger("hash", e)
}, 100), f(location.hash || "#")) :*/ setInterval(function () {
var c = location.hash;
c !== b && a(window).trigger("hash", c)
}, 100), d = d ? d.add(g) : g, g.click(function (b) {
var d = a(this).attr("href");
c && f(d);
if (d.slice(0, 1) != "#") {
location.href = "#" + d;
return b.preventDefault()
}
}), e = !0)
}};
function f(a) {
if (a) {
var b = c.contentWindow.document;
b.open().close(), b.location.hash = a
}
}
e || (/*a.browser && a.browser.msie && a.browser.version < "8" ? c || (c = a("<iframe/>").attr("src", "javascript:false;").hide().get(0), a("body").append(c), setInterval(function () {
var d = c.contentWindow.document, e = d.location.hash;
b !== e && a(window).trigger("hash", e)
}, 100), f(location.hash || "#")) :*/ setInterval(function () {
var c = location.hash;
c !== b && a(window).trigger("hash", c)
}, 100), d = d ? d.add(g) : g, g.click(function (b) {
var d = a(this).attr("href");
c && f(d);
if (d.slice(0, 1) != "#") {
location.href = "#" + d;
return b.preventDefault()
}
}), e = !0)
}};
function f(a) {
if (a) {
var b = c.contentWindow.document;
b.open().close(), b.location.hash = a
}
}
a(window).on("hash", function (c, e) {
e ? d.filter(function () {
var b = a(this).attr("href");
return b === e || b === e.replace("#", "")
}).trigger("history", [e]) : d.eq(0).trigger("history", [e]), b = e
}), a.fn.history = function (b) {
a.tools.history.init(this);
return this.on("history", b)
}
a(window).on("hash", function (c, e) {
e ? d.filter(function () {
var b = a(this).attr("href");
return b === e || b === e.replace("#", "")
}).trigger("history", [e]) : d.eq(0).trigger("history", [e]), b = e
}), a.fn.history = function (b) {
a.tools.history.init(this);
return this.on("history", b)
}
})(jQuery);
(function (a) {
a.fn.mousewheel = function (a) {
return this[a ? "on" : "trigger"]("wheel", a)
}, a.event.special.wheel = {setup: function () {
a.event.add(this, b, c, {})
}, teardown: function () {
a.event.remove(this, b, c)
}};
a.fn.mousewheel = function (a) {
return this[a ? "on" : "trigger"]("wheel", a)
}, a.event.special.wheel = {setup: function () {
a.event.add(this, b, c, {})
}, teardown: function () {
a.event.remove(this, b, c)
}};
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #3 This was only about a naming convention of Firefox: 'DOMMouseScroll' vs 'mousewheel',
* or 'mousemove' in very old Firefox (older than v1.9).
* When making jQuery.browser optional, an 'if(a.browser)' condition was added around.
*/
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #3 This was only about a naming convention of Firefox: 'DOMMouseScroll' vs 'mousewheel',
* or 'mousemove' in very old Firefox (older than v1.9).
* When making jQuery.browser optional, an 'if(a.browser)' condition was added around.
*/
var b = /*a.browser.mozilla ? "DOMMouseScroll" + (a.browser.version < "1.9" ? " mousemove" : "") :*/ "mousewheel";
var b = /*a.browser.mozilla ? "DOMMouseScroll" + (a.browser.version < "1.9" ? " mousemove" : "") :*/ "mousewheel";
function c(b) {
switch (b.type) {
case"mousemove":
return a.extend(b.data, {clientX: b.clientX, clientY: b.clientY, pageX: b.pageX, pageY: b.pageY});
case"DOMMouseScroll":
a.extend(b, b.data), b.delta = -b.detail / 3;
break;
case"mousewheel":
b.delta = b.wheelDelta / 120
}
b.type = "wheel";
return a.event.handle.call(this, b, b.delta)
}
function c(b) {
switch (b.type) {
case"mousemove":
return a.extend(b.data, {clientX: b.clientX, clientY: b.clientY, pageX: b.pageX, pageY: b.pageY});
case"DOMMouseScroll":
a.extend(b, b.data), b.delta = -b.detail / 3;
break;
case"mousewheel":
b.delta = b.wheelDelta / 120
}
b.type = "wheel";
return a.event.handle.call(this, b, b.delta)
}
})(jQuery);
(function (a) {
a.tools = a.tools || {version: "v1.2.7"}, a.tools.tooltip = {conf: {effect: "toggle", fadeOutSpeed: "fast", predelay: 0, delay: 30, opacity: 1, tip: 0, fadeIE: !1, position: ["top", "center"], offset: [0, 0], relative: !1, cancelDefault: !0, events: {def: "mouseenter,mouseleave", input: "focus,blur", widget: "focus mouseenter,blur mouseleave", tooltip: "mouseenter,mouseleave"}, layout: "<div/>", tipClass: "tooltip"}, addEffect: function (a, c, d) {
b[a] = [c, d]
}};
var b = {toggle: [function (a) {
var b = this.getConf(), c = this.getTip(), d = b.opacity;
d < 1 && c.css({opacity: d}), c.show(), a.call()
}, function (a) {
this.getTip().hide(), a.call()
}], fade: [function (b) {
var c = this.getConf();
a.tools = a.tools || {version: "v1.2.7"}, a.tools.tooltip = {conf: {effect: "toggle", fadeOutSpeed: "fast", predelay: 0, delay: 30, opacity: 1, tip: 0, fadeIE: !1, position: ["top", "center"], offset: [0, 0], relative: !1, cancelDefault: !0, events: {def: "mouseenter,mouseleave", input: "focus,blur", widget: "focus mouseenter,blur mouseleave", tooltip: "mouseenter,mouseleave"}, layout: "<div/>", tipClass: "tooltip"}, addEffect: function (a, c, d) {
b[a] = [c, d]
}};
var b = {toggle: [function (a) {
var b = this.getConf(), c = this.getTip(), d = b.opacity;
d < 1 && c.css({opacity: d}), c.show(), a.call()
}, function (a) {
this.getTip().hide(), a.call()
}], fade: [function (b) {
var c = this.getConf();
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #4 This disabled fade-in for Internet Explorer other than FadeIE.
*/
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #4 This disabled fade-in for Internet Explorer other than FadeIE.
*/
/*!(a.browser && a.browser.msie) || c.fadeIE ?*/ this.getTip().fadeTo(c.fadeInSpeed, c.opacity, b) /*: (this.getTip().show(), b())*/
}, function (b) {
var c = this.getConf();
/*!(a.browser && a.browser.msie) || c.fadeIE ?*/ this.getTip().fadeTo(c.fadeInSpeed, c.opacity, b) /*: (this.getTip().show(), b())*/
}, function (b) {
var c = this.getConf();
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #5 This disabled fade-out for Internet Explorer other than FadeIE.
*/
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #5 This disabled fade-out for Internet Explorer other than FadeIE.
*/
/*!(a.browser && a.browser.msie) || c.fadeIE ?*/ this.getTip().fadeOut(c.fadeOutSpeed, b) /*: (this.getTip().hide(), b())*/
}]};
/*!(a.browser && a.browser.msie) || c.fadeIE ?*/ this.getTip().fadeOut(c.fadeOutSpeed, b) /*: (this.getTip().hide(), b())*/
}]};
function c(b, c, d) {
var e = d.relative ? b.position().top : b.offset().top, f = d.relative ? b.position().left : b.offset().left, g = d.position[0];
e -= c.outerHeight() - d.offset[0], f += b.outerWidth() + d.offset[1], /iPad/i.test(navigator.userAgent) && (e -= a(window).scrollTop());
var h = c.outerHeight() + b.outerHeight();
g === "center" && (e += h / 2), g === "bottom" && (e += h), g = d.position[1];
var i = c.outerWidth() + b.outerWidth();
g === "center" && (f -= i / 2), g === "left" && (f -= i);
return{top: e, left: f}
}
function c(b, c, d) {
var e = d.relative ? b.position().top : b.offset().top, f = d.relative ? b.position().left : b.offset().left, g = d.position[0];
e -= c.outerHeight() - d.offset[0], f += b.outerWidth() + d.offset[1], /iPad/i.test(navigator.userAgent) && (e -= a(window).scrollTop());
var h = c.outerHeight() + b.outerHeight();
g === "center" && (e += h / 2), g === "bottom" && (e += h), g = d.position[1];
var i = c.outerWidth() + b.outerWidth();
g === "center" && (f -= i / 2), g === "left" && (f -= i);
return{top: e, left: f}
}
function d(d, e) {
var f = this, g = d.add(f), h, i = 0, j = 0, k = d.attr("title"), l = d.attr("data-tooltip"), m = b[e.effect], n, o = d.is(":input"), p = o && d.is(":checkbox, :radio, select, :button, :submit"), q = d.attr("type"), r = e.events[q] || e.events[o ? p ? "widget" : "input" : "def"];
if (!m)throw"Nonexistent effect \"" + e.effect + "\"";
r = r.split(/,\s*/);
if (r.length != 2)throw"Tooltip: bad events configuration for " + q;
d.on(r[0],function (a) {
clearTimeout(i), e.predelay ? j = setTimeout(function () {
f.show(a)
}, e.predelay) : f.show(a)
}).on(r[1], function (a) {
clearTimeout(j), e.delay ? i = setTimeout(function () {
f.hide(a)
}, e.delay) : f.hide(a)
}), k && e.cancelDefault && (d.removeAttr("title"), d.data("title", k)), a.extend(f, {show: function (b) {
if (!h) {
l ? h = a(l) : e.tip ? h = a(e.tip).eq(0) : k ? h = a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k) : (h = d.next(), h.length || (h = d.parent().next()));
if (!h.length)throw"Cannot find tooltip for " + d
}
if (f.isShown())return f;
h.stop(!0, !0);
var o = c(d, h, e);
e.tip && h.html(d.data("title")), b = a.Event(), b.type = "onBeforeShow", g.trigger(b, [o]);
if (b.isDefaultPrevented())return f;
o = c(d, h, e), h.css({position: "absolute", top: o.top, left: o.left}), n = !0, m[0].call(f, function () {
b.type = "onShow", n = "full", g.trigger(b)
});
var p = e.events.tooltip.split(/,\s*/);
h.data("__set") || (h.off(p[0]).on(p[0], function () {
clearTimeout(i), clearTimeout(j)
}), p[1] && !d.is("input:not(:checkbox, :radio), textarea") && h.off(p[1]).on(p[1], function (a) {
a.relatedTarget != d[0] && d.trigger(r[1].split(" ")[0])
}), e.tip || h.data("__set", !0));
return f
}, hide: function (c) {
if (!h || !f.isShown())return f;
c = a.Event(), c.type = "onBeforeHide", g.trigger(c);
if (!c.isDefaultPrevented()) {
n = !1, b[e.effect][1].call(f, function () {
c.type = "onHide", g.trigger(c)
});
return f
}
}, isShown: function (a) {
return a ? n === "full" : n
}, getConf: function () {
return e
}, getTip: function () {
return h
}, getTrigger: function () {
return d
}}), a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function (b, c) {
function d(d, e) {
var f = this, g = d.add(f), h, i = 0, j = 0, k = d.attr("title"), l = d.attr("data-tooltip"), m = b[e.effect], n, o = d.is(":input"), p = o && d.is(":checkbox, :radio, select, :button, :submit"), q = d.attr("type"), r = e.events[q] || e.events[o ? p ? "widget" : "input" : "def"];
if (!m)throw"Nonexistent effect \"" + e.effect + "\"";
r = r.split(/,\s*/);
if (r.length != 2)throw"Tooltip: bad events configuration for " + q;
d.on(r[0],function (a) {
clearTimeout(i), e.predelay ? j = setTimeout(function () {
f.show(a)
}, e.predelay) : f.show(a)
}).on(r[1], function (a) {
clearTimeout(j), e.delay ? i = setTimeout(function () {
f.hide(a)
}, e.delay) : f.hide(a)
}), k && e.cancelDefault && (d.removeAttr("title"), d.data("title", k)), a.extend(f, {show: function (b) {
if (!h) {
l ? h = a(l) : e.tip ? h = a(e.tip).eq(0) : k ? h = a(e.layout).addClass(e.tipClass).appendTo(document.body).hide().append(k) : (h = d.next(), h.length || (h = d.parent().next()));
if (!h.length)throw"Cannot find tooltip for " + d
}
if (f.isShown())return f;
h.stop(!0, !0);
var o = c(d, h, e);
e.tip && h.html(d.data("title")), b = a.Event(), b.type = "onBeforeShow", g.trigger(b, [o]);
if (b.isDefaultPrevented())return f;
o = c(d, h, e), h.css({position: "absolute", top: o.top, left: o.left}), n = !0, m[0].call(f, function () {
b.type = "onShow", n = "full", g.trigger(b)
});
var p = e.events.tooltip.split(/,\s*/);
h.data("__set") || (h.off(p[0]).on(p[0], function () {
clearTimeout(i), clearTimeout(j)
}), p[1] && !d.is("input:not(:checkbox, :radio), textarea") && h.off(p[1]).on(p[1], function (a) {
a.relatedTarget != d[0] && d.trigger(r[1].split(" ")[0])
}), e.tip || h.data("__set", !0));
return f
}, hide: function (c) {
if (!h || !f.isShown())return f;
c = a.Event(), c.type = "onBeforeHide", g.trigger(c);
if (!c.isDefaultPrevented()) {
n = !1, b[e.effect][1].call(f, function () {
c.type = "onHide", g.trigger(c)
});
return f
}
}, isShown: function (a) {
return a ? n === "full" : n
}, getConf: function () {
return e
}, getTip: function () {
return h
}, getTrigger: function () {
return d
}}), a.each("onHide,onBeforeShow,onShow,onBeforeHide".split(","), function (b, c) {
/**
* REPLACE DEPRECATED FUNCTION jQuery.isFunction()
*
* - Update: Libraries: jQuery Tools: replace deprecated function jQuery.isFunction(), thanks to @a223123131 bug report
/**
* REPLACE DEPRECATED FUNCTION jQuery.isFunction()
*
* - Update: Libraries: jQuery Tools: replace deprecated function jQuery.isFunction(), thanks to @a223123131 bug report
*
* @since 2.5.4
* @date 2021-01-27T1911+0100
* @accountable @pewgeuges
*
* @reporter @a223123131
* @link https://wordpress.org/support/topic/deprecated-jquery-code-9/
*
* The official fix is to replace it with the typeof operator.
* @link https://api.jquery.com/jquery.isfunction/
*
* That requires to double-check the absence of problem with
* the use of typeof.
* @bib Douglas Crockford, JavaScript: The Good Parts
*/
* @since 2.5.4
* @date 2021-01-27T1911+0100
* @accountable @pewgeuges
*
* @reporter @a223123131
* @link https://wordpress.org/support/topic/deprecated-jquery-code-9/
*
* The official fix is to replace it with the typeof operator.
* @link https://api.jquery.com/jquery.isfunction/
*
* That requires to double-check the absence of problem with
* the use of typeof.
* @bib Douglas Crockford, JavaScript: The Good Parts
*/
typeof (e[c]) === "function" && a(f).on(c, e[c]), f[c] = function (b) {
b && a(f).on(c, b);
return f
}
})
}
typeof (e[c]) === "function" && a(f).on(c, e[c]), f[c] = function (b) {
b && a(f).on(c, b);
return f
}
})
}
a.fn.tooltip = function (b) {
var c = this.data("tooltip");
if (c)return c;
b = a.extend(!0, {}, a.tools.tooltip.conf, b), typeof b.position === "string" && (b.position = b.position.split(/,?\s/)), this.each(function () {
c = new d(a(this), b), a(this).data("tooltip", c)
});
return b.api ? c : this
}
a.fn.tooltip = function (b) {
var c = this.data("tooltip");
if (c)return c;
b = a.extend(!0, {}, a.tools.tooltip.conf, b), typeof b.position === "string" && (b.position = b.position.split(/,?\s/)), this.each(function () {
c = new d(a(this), b), a(this).data("tooltip", c)
});
return b.api ? c : this
}
})(jQuery);
(function (a) {
var b = a.tools.tooltip;
b.dynamic = {conf: {classNames: "top right bottom left"}};
function c(b) {
var c = a(window), d = c.width() + c.scrollLeft(), e = c.height() + c.scrollTop();
return[b.offset().top <= c.scrollTop(), d <= b.offset().left + b.width(), e <= b.offset().top + b.height(), c.scrollLeft() >= b.offset().left]
}
var b = a.tools.tooltip;
b.dynamic = {conf: {classNames: "top right bottom left"}};
function c(b) {
var c = a(window), d = c.width() + c.scrollLeft(), e = c.height() + c.scrollTop();
return[b.offset().top <= c.scrollTop(), d <= b.offset().left + b.width(), e <= b.offset().top + b.height(), c.scrollLeft() >= b.offset().left]
}
function d(a) {
var b = a.length;
while (b--)if (a[b])return!1;
return!0
}
function d(a) {
var b = a.length;
while (b--)if (a[b])return!1;
return!0
}
a.fn.dynamic = function (e) {
typeof e === "number" && (e = {speed: e}), e = a.extend({}, b.dynamic.conf, e);
var f = a.extend(!0, {}, e), g = e.classNames.split(/\s/), h;
this.each(function () {
var b = a(this).tooltip().onBeforeShow(function (b, e) {
var i = this.getTip(), j = this.getConf();
h || (h = [j.position[0], j.position[1], j.offset[0], j.offset[1], a.extend({}, j)]), a.extend(j, h[4]), j.position = [h[0], h[1]], j.offset = [h[2], h[3]], i.css({visibility: "hidden", position: "absolute", top: e.top, left: e.left}).show();
var k = a.extend(!0, {}, f), l = c(i);
if (!d(l)) {
l[2] && (a.extend(j, k.top), j.position[0] = "top", i.addClass(g[0])), l[3] && (a.extend(j, k.right), j.position[1] = "right", i.addClass(g[1])), l[0] && (a.extend(j, k.bottom), j.position[0] = "bottom", i.addClass(g[2])), l[1] && (a.extend(j, k.left), j.position[1] = "left", i.addClass(g[3]));
if (l[0] || l[2])j.offset[0] *= -1;
if (l[1] || l[3])j.offset[1] *= -1
}
i.css({visibility: "visible"}).hide()
});
b.onBeforeShow(function () {
var a = this.getConf(), b = this.getTip();
setTimeout(function () {
a.position = [h[0], h[1]], a.offset = [h[2], h[3]]
}, 0)
}), b.onHide(function () {
var a = this.getTip();
a.removeClass(e.classNames)
}), ret = b
});
return e.api ? ret : this
}
a.fn.dynamic = function (e) {
typeof e === "number" && (e = {speed: e}), e = a.extend({}, b.dynamic.conf, e);
var f = a.extend(!0, {}, e), g = e.classNames.split(/\s/), h;
this.each(function () {
var b = a(this).tooltip().onBeforeShow(function (b, e) {
var i = this.getTip(), j = this.getConf();
h || (h = [j.position[0], j.position[1], j.offset[0], j.offset[1], a.extend({}, j)]), a.extend(j, h[4]), j.position = [h[0], h[1]], j.offset = [h[2], h[3]], i.css({visibility: "hidden", position: "absolute", top: e.top, left: e.left}).show();
var k = a.extend(!0, {}, f), l = c(i);
if (!d(l)) {
l[2] && (a.extend(j, k.top), j.position[0] = "top", i.addClass(g[0])), l[3] && (a.extend(j, k.right), j.position[1] = "right", i.addClass(g[1])), l[0] && (a.extend(j, k.bottom), j.position[0] = "bottom", i.addClass(g[2])), l[1] && (a.extend(j, k.left), j.position[1] = "left", i.addClass(g[3]));
if (l[0] || l[2])j.offset[0] *= -1;
if (l[1] || l[3])j.offset[1] *= -1
}
i.css({visibility: "visible"}).hide()
});
b.onBeforeShow(function () {
var a = this.getConf(), b = this.getTip();
setTimeout(function () {
a.position = [h[0], h[1]], a.offset = [h[2], h[3]]
}, 0)
}), b.onHide(function () {
var a = this.getTip();
a.removeClass(e.classNames)
}), ret = b
});
return e.api ? ret : this
}
})(jQuery);
(function (a) {
var b = a.tools.tooltip;
var b = a.tools.tooltip;
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #6 This disabled slide-fade for Internet Explorer.
* Browsers not supporting an effect simply dont execute it, they wont throw an error.
*/
/**
* REDACT (COMMENT OUT) DEPRECATED FUNCTION jQuery.browser()
*
* #6 This disabled slide-fade for Internet Explorer.
* Browsers not supporting an effect simply dont execute it, they wont throw an error.
*/
a.extend(b.conf, {direction: "up", bounce: !1, slideOffset: 10, slideInSpeed: 200, slideOutSpeed: 200, slideFade: true /*!(a.browser && a.browser.msie)*/});
var c = {up: ["-", "top"], down: ["+", "top"], left: ["-", "left"], right: ["+", "left"]};
b.addEffect("slide", function (a) {
var b = this.getConf(), d = this.getTip(), e = b.slideFade ? {opacity: b.opacity} : {}, f = c[b.direction] || c.up;
e[f[1]] = f[0] + "=" + b.slideOffset, b.slideFade && d.css({opacity: 0}), d.show().animate(e, b.slideInSpeed, a)
}, function (b) {
var d = this.getConf(), e = d.slideOffset, f = d.slideFade ? {opacity: 0} : {}, g = c[d.direction] || c.up, h = "" + g[0];
d.bounce && (h = h === "+" ? "-" : "+"), f[g[1]] = h + "=" + e, this.getTip().animate(f, d.slideOutSpeed, function () {
a(this).hide(), b.call()
})
})
a.extend(b.conf, {direction: "up", bounce: !1, slideOffset: 10, slideInSpeed: 200, slideOutSpeed: 200, slideFade: true /*!(a.browser && a.browser.msie)*/});
var c = {up: ["-", "top"], down: ["+", "top"], left: ["-", "left"], right: ["+", "left"]};
b.addEffect("slide", function (a) {
var b = this.getConf(), d = this.getTip(), e = b.slideFade ? {opacity: b.opacity} : {}, f = c[b.direction] || c.up;
e[f[1]] = f[0] + "=" + b.slideOffset, b.slideFade && d.css({opacity: 0}), d.show().animate(e, b.slideInSpeed, a)
}, function (b) {
var d = this.getConf(), e = d.slideOffset, f = d.slideFade ? {opacity: 0} : {}, g = c[d.direction] || c.up, h = "" + g[0];
d.bounce && (h = h === "+" ? "-" : "+"), f[g[1]] = h + "=" + e, this.getTip().animate(f, d.slideOutSpeed, function () {
a(this).hide(), b.call()
})
})
})(jQuery);

View file

@ -6,74 +6,74 @@
*/
(function() {
tinymce.create('tinymce.plugins.Footnotes', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished its initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed, url) {
ed.addButton('footnotes', {
title : 'footnotes',
cmd : 'footnotes',
image : url + '/../img/fn-wysiwyg.png'
});
tinymce.create('tinymce.plugins.Footnotes', {
/**
* Initializes the plugin, this will be executed after the plugin has been created.
* This call is done before the editor instance has finished its initialization so use the onInit event
* of the editor instance to intercept that event.
*
* @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
* @param {string} url Absolute URL to where the plugin is located.
*/
init : function(ed, url) {
ed.addButton('footnotes', {
title : 'footnotes',
cmd : 'footnotes',
image : url + '/../img/fn-wysiwyg.png'
});
ed.addCommand('footnotes', function() {
jQuery.ajax({
type: 'POST',
url: './admin-ajax.php',
data: {
action: 'footnotes_getTags'
},
success: function(data, textStatus, XMLHttpRequest){
var l_arr_Tags = JSON.parse(data);
var return_text = l_arr_Tags['start'] + ed.selection.getContent() + l_arr_Tags['end'];
ed.execCommand('insertHTML', true, return_text);
},
error: function(MLHttpRequest, textStatus, errorThrown){
console.log("Error: " + errorThrown);
}
});
});
},
ed.addCommand('footnotes', function() {
jQuery.ajax({
type: 'POST',
url: './admin-ajax.php',
data: {
action: 'footnotes_getTags'
},
success: function(data, textStatus, XMLHttpRequest){
var l_arr_Tags = JSON.parse(data);
var return_text = l_arr_Tags['start'] + ed.selection.getContent() + l_arr_Tags['end'];
ed.execCommand('insertHTML', true, return_text);
},
error: function(MLHttpRequest, textStatus, errorThrown){
console.log("Error: " + errorThrown);
}
});
});
},
/**
* Creates control instances based in the incomming name. This method is normally not
* needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
* but you sometimes need to create more complex controls like listboxes, split buttons etc then this
* method can be used to create those.
*
* @param {String} n Name of the control to create.
* @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
* @return {tinymce.ui.Control} New control instance or null if no control was created.
*/
createControl : function(n, cm) {
return null;
},
/**
* Creates control instances based in the incomming name. This method is normally not
* needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
* but you sometimes need to create more complex controls like listboxes, split buttons etc then this
* method can be used to create those.
*
* @param {String} n Name of the control to create.
* @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
* @return {tinymce.ui.Control} New control instance or null if no control was created.
*/
createControl : function(n, cm) {
return null;
},
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @return {Object} Name/value array containing information about the plugin.
/**
* Returns information about the plugin as a name/value array.
* The current keys are longname, author, authorurl, infourl and version.
*
* @return {Object} Name/value array containing information about the plugin.
*
* Edit: needs update the version number manually 2020-12-11T1224+0100
*/
getInfo : function() {
return {
longname : 'Inserts the Footnotes short code.',
author : 'Mark Cheret',
authorurl : 'https://cheret.de',
infourl : 'https://wordpress.org/plugins/footnotes/',
version : "2.1.6"
};
}
});
*/
getInfo : function() {
return {
longname : 'Inserts the Footnotes short code.',
author : 'Mark Cheret',
authorurl : 'https://cheret.de',
infourl : 'https://wordpress.org/plugins/footnotes/',
version : "2.1.6"
};
}
});
// Register plugin
tinymce.PluginManager.add('footnotes', tinymce.plugins.Footnotes);
// Register plugin
tinymce.PluginManager.add('footnotes', tinymce.plugins.Footnotes);
})();

View file

@ -1,18 +1,18 @@
<div class="footnotes_description">
<p>[[description-css]]</p>
<p>[[description-css]]</p>
</div>
<table class="customize_css_migration widefat fixed">
<tbody>
<tr>
<td>[[label-css]]</td>
<td>[[css]]</td>
</tr>
<tr>
<td>[[label-show-legacy]]</td>
<td>[[show-legacy]] <span class="footnotes_notice">[[notice-show-legacy]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-css]]</td>
<td>[[css]]</td>
</tr>
<tr>
<td>[[label-show-legacy]]</td>
<td>[[show-legacy]] <span class="footnotes_notice">[[notice-show-legacy]]</span></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-show-legacy]]</p>
<p>[[description-show-legacy]]</p>
</div>

View file

@ -1,8 +1,8 @@
<table id="customize_css_new" class="customize_css_new widefat fixed">
<tbody>
<tr>
<td>[[headline]]<br />
<div class="list">
<tbody>
<tr>
<td>[[headline]]<br />
<div class="list">
<p>.footnote_referrer = enclosing &lt;span>
<p>.footnote_referrer > a = optional &lt;a> enclosing the &lt;sup>
<p>.footnote_plugin_tooltip_text = inner &lt;sup>, not tooltip
@ -25,9 +25,9 @@
<p>.footnote_backlink = &lt;a> or &lt;span> if identical footnotes are combined, or in second &lt;td> in 3-column table
<p>.footnote_index_arrow = nested &lt;span>, symbol only
<p>.footnote_plugin_text = second &lt;td>, or third &lt;td> in 3-column table
</div>
</td>
<td>[[css]]</td>
</tr>
</tbody>
</div>
</td>
<td>[[css]]</td>
</tr>
</tbody>
</table>

View file

@ -1,11 +1,11 @@
<div class="footnotes_description">
<p>[[description-css]]</p>
<p>[[description-css]]</p>
</div>
<table class="customize_css widefat fixed">
<tbody>
<tr>
<td>[[label-css]]</td>
<td>[[css]]</td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-css]]</td>
<td>[[css]]</td>
</tr>
</tbody>
</table>

View file

@ -1,14 +1,14 @@
<table class="customize_hyperlink_arrow widefat fixed">
<tbody>
<tr>
<td>[[label-symbol]]</td>
<td>
[[symbol-options]]
[[symbol-custom]]
<span class="footnotes_notice">[[notice-symbol]]</span>
</td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-symbol]]</td>
<td>
[[symbol-options]]
[[symbol-custom]]
<span class="footnotes_notice">[[notice-symbol]]</span>
</td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-symbol]]</p>

View file

@ -1,24 +1,24 @@
<table class="customize_superscript widefat fixed">
<tbody>
<tr>
<td>[[label-superscript]]</td>
<td>[[superscript]]</td>
</tr>
<tr>
<td>[[label-normalize]]</td>
<td>[[normalize]] <span class="footnotes_notice">[[notice-normalize]]</span></td>
</tr>
<tr>
<td>[[label-before]]</td>
<td>[[before]]</td>
</tr>
<tr>
<td>[[label-after]]</td>
<td>[[after]]</td>
</tr>
<tr>
<td>[[label-link]]</td>
<td><span class="footnotes_notice">[[notice-link]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-superscript]]</td>
<td>[[superscript]]</td>
</tr>
<tr>
<td>[[label-normalize]]</td>
<td>[[normalize]] <span class="footnotes_notice">[[notice-normalize]]</span></td>
</tr>
<tr>
<td>[[label-before]]</td>
<td>[[before]]</td>
</tr>
<tr>
<td>[[label-after]]</td>
<td>[[after]]</td>
</tr>
<tr>
<td>[[label-link]]</td>
<td><span class="footnotes_notice">[[notice-link]]</span></td>
</tr>
</tbody>
</table>

View file

@ -1,37 +1,37 @@
<table class="diagnostics widefat fixed">
<tbody>
<tr>
<td>[[label-server]]</td>
<td>[[server]]</td>
</tr>
<tr>
<td>[[label-php]]</td>
<td>[[php]]</td>
</tr>
<tr>
<td>[[label-user-agent]]</td>
<td>[[user-agent]]</td>
</tr>
<tr>
<td>[[label-max-execution-time]]</td>
<td>[[max-execution-time]]</td>
</tr>
<tr>
<td>[[label-memory-limit]]</td>
<td>[[memory-limit]]</td>
</tr>
<tr>
<td>[[label-php-extensions]]</td>
<td>[[php-extensions]]</td>
</tr>
<tr>
<td>[[label-wordpress]]</td>
<td>[[wordpress]]</td>
</tr>
<tr>
<td>[[label-theme]]</td>
<td>[[theme]]</td>
</tr>
[[plugins]]
</tbody>
<tbody>
<tr>
<td>[[label-server]]</td>
<td>[[server]]</td>
</tr>
<tr>
<td>[[label-php]]</td>
<td>[[php]]</td>
</tr>
<tr>
<td>[[label-user-agent]]</td>
<td>[[user-agent]]</td>
</tr>
<tr>
<td>[[label-max-execution-time]]</td>
<td>[[max-execution-time]]</td>
</tr>
<tr>
<td>[[label-memory-limit]]</td>
<td>[[memory-limit]]</td>
</tr>
<tr>
<td>[[label-php-extensions]]</td>
<td>[[php-extensions]]</td>
</tr>
<tr>
<td>[[label-wordpress]]</td>
<td>[[wordpress]]</td>
</tr>
<tr>
<td>[[label-theme]]</td>
<td>[[theme]]</td>
</tr>
[[plugins]]
</tbody>
</table>

View file

@ -1,62 +1,62 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
* Footnote button for the Classic Editor text mode.
*
* @since 1.3.0
* @lastmodified 2021-02-09T0039+0100
*
* @since 2.5.4 Bugfix: Editor button: Classic Editor text mode: try to fix uncaught reference error of “QTags is not defined”, thanks to @dpartridge bug report.
* @since 2.5.4 Bugfix: Editor button: Classic Editor text mode: correct label to singular.
*/?>
/**
* Footnote button for the Classic Editor text mode.
*
* @since 1.3.0
* @lastmodified 2021-02-18T2043+0100
*
* @since 2.5.4 Bugfix: Editor button: Classic Editor text mode: try to fix uncaught reference error of “QTags is not defined”, thanks to @dpartridge bug report.
* @since 2.5.4 Bugfix: Editor button: Classic Editor text mode: correct label to singular.
*/?>
-->
<script type="text/javascript">
/**
* Brackets the selected text with tags in the text area.
*
* @param string elementID
* @param string openTag
* @param string closeTag
*/
function MCI_Footnotes_wrapText(elementID, openTag, closeTag) {
var textArea = jQuery('#' + elementID);
var len = textArea.val().length;
var start = textArea[0].selectionStart;
var end = textArea[0].selectionEnd;
var selectedText = textArea.val().substring(start, end);
var replacement = openTag + selectedText + closeTag;
textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
}
/**
* Adds a button to the Classic Editor text mode.
*
* - Bugfix: Editor button: Classic Editor text mode: try to fix uncaught reference error of “QTags is not defined”, thanks to @dpartridge bug report.
*
* @reporter @dpartridge
* @link https://wordpress.org/support/topic/qtags-addbutton/
*
*/
if ( QTags ) {
QTags.addButton( 'MCI_Footnotes_QuickTag_button', 'footnote', MCI_Footnotes_text_editor_callback );
}
/**
* Brackets the selected text with tags in the text area.
*
* @param string elementID
* @param string openTag
* @param string closeTag
*/
function MCI_Footnotes_wrapText(elementID, openTag, closeTag) {
var textArea = jQuery('#' + elementID);
var len = textArea.val().length;
var start = textArea[0].selectionStart;
var end = textArea[0].selectionEnd;
var selectedText = textArea.val().substring(start, end);
var replacement = openTag + selectedText + closeTag;
textArea.val(textArea.val().substring(0, start) + replacement + textArea.val().substring(end, len));
}
/**
* Adds a button to the Classic Editor text mode.
*
* - Bugfix: Editor button: Classic Editor text mode: try to fix uncaught reference error of “QTags is not defined”, thanks to @dpartridge bug report.
*
* @reporter @dpartridge
* @link https://wordpress.org/support/topic/qtags-addbutton/
*
*/
if ( QTags ) {
QTags.addButton( 'MCI_Footnotes_QuickTag_button', 'footnote', MCI_Footnotes_text_editor_callback );
}
/**
* callback function when the button is clicked
* executes a ajax call to get the start and end tag for the footnotes and
* adds them in before and after the selected text
*/
function MCI_Footnotes_text_editor_callback() {
jQuery.ajax({
type: 'POST',
url: '/wp-admin/admin-ajax.php',
data: {
action: 'footnotes_getTags'
},
success: function(data, textStatus, XMLHttpRequest){
var l_arr_Tags = JSON.parse(data);
MCI_Footnotes_wrapText("content", l_arr_Tags['start'], l_arr_Tags['end']);
},
error: function(MLHttpRequest, textStatus, errorThrown){
}
});
}
/**
* callback function when the button is clicked
* executes a ajax call to get the start and end tag for the footnotes and
* adds them in before and after the selected text
*/
function MCI_Footnotes_text_editor_callback() {
jQuery.ajax({
type: 'POST',
url: '/wp-admin/admin-ajax.php',
data: {
action: 'footnotes_getTags'
},
success: function(data, textStatus, XMLHttpRequest){
var l_arr_Tags = JSON.parse(data);
MCI_Footnotes_wrapText("content", l_arr_Tags['start'], l_arr_Tags['end']);
},
error: function(MLHttpRequest, textStatus, errorThrown){
}
});
}
</script>

View file

@ -1,50 +1,50 @@
<div class="footnotes_description">
<p>[[description-1]]</p>
<p>[[description-2]]</p>
<p>[[description-3]]</p>
<p>[[description-1]]</p>
<p>[[description-2]]</p>
<p>[[description-3]]</p>
</div>
<table class="expert_lookup widefat fixed">
<thead>
<tr>
<th>[[head-hook]]</th>
<th>[[head-checkbox]]</th>
<th>[[head-numbox]]</th>
<th>[[head-url]]</th>
</tr>
</thead>
<tbody>
<tr>
<td>[[label-the-title]]</td>
<td>[[the-title]]</td>
<td>[[priority-the-title]]</td>
<td><a href="[[url-the-title]]" target="_blank">[[url-the-title]]</a></td>
</tr>
<tr>
<td>[[label-the-content]]</td>
<td>[[the-content]]</td>
<td>[[priority-the-content]]</td>
<td><a href="[[url-the-content]]" target="_blank">[[url-the-content]]</a></td>
</tr>
<tr>
<td>[[label-the-excerpt]]</td>
<td>[[the-excerpt]]</td>
<td>[[priority-the-excerpt]]</td>
<td><a href="[[url-the-excerpt]]" target="_blank">[[url-the-excerpt]]</a></td>
</tr>
<tr>
<td>[[label-widget-title]]</td>
<td>[[widget-title]]</td>
<td>[[priority-widget-title]]</td>
<td><a href="[[url-widget-title]]" target="_blank">[[url-widget-title]]</a></td>
</tr>
<tr>
<td>[[label-widget-text]]</td>
<td>[[widget-text]]</td>
<td>[[priority-widget-text]]</td>
<td><a href="[[url-widget-text]]" target="_blank">[[url-widget-text]]</a></td>
</tr>
</tbody>
<thead>
<tr>
<th>[[head-hook]]</th>
<th>[[head-checkbox]]</th>
<th>[[head-numbox]]</th>
<th>[[head-url]]</th>
</tr>
</thead>
<tbody>
<tr>
<td>[[label-the-title]]</td>
<td>[[the-title]]</td>
<td>[[priority-the-title]]</td>
<td><a href="[[url-the-title]]" target="_blank">[[url-the-title]]</a></td>
</tr>
<tr>
<td>[[label-the-content]]</td>
<td>[[the-content]]</td>
<td>[[priority-the-content]]</td>
<td><a href="[[url-the-content]]" target="_blank">[[url-the-content]]</a></td>
</tr>
<tr>
<td>[[label-the-excerpt]]</td>
<td>[[the-excerpt]]</td>
<td>[[priority-the-excerpt]]</td>
<td><a href="[[url-the-excerpt]]" target="_blank">[[url-the-excerpt]]</a></td>
</tr>
<tr>
<td>[[label-widget-title]]</td>
<td>[[widget-title]]</td>
<td>[[priority-widget-title]]</td>
<td><a href="[[url-widget-title]]" target="_blank">[[url-widget-title]]</a></td>
</tr>
<tr>
<td>[[label-widget-text]]</td>
<td>[[widget-text]]</td>
<td>[[priority-widget-text]]</td>
<td><a href="[[url-widget-text]]" target="_blank">[[url-widget-text]]</a></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-4]]</p>
<p>[[description-4]]</p>
</div>

View file

@ -1,32 +1,32 @@
<table class="mouse_over_box_appearance widefat fixed">
<tbody>
<tr>
<td>[[label-font-size]]</td>
<td>[[font-size-enable]][[font-size-scalar]][[font-size-unit]] <span class="footnotes_notice">[[notice-font-size]]</span></td>
</tr>
<tr>
<td>[[label-color]]</td>
<td>[[color]] <span class="footnotes_notice">[[notice-color]]</span></td>
</tr>
<tr>
<td>[[label-background]]</td>
<td>[[background]] <span class="footnotes_notice">[[notice-background]]</span></td>
</tr>
<tr>
<td>[[label-border-width]]</td>
<td>[[border-width]] <span class="footnotes_notice">[[notice-border-width]]</span></td>
</tr>
<tr>
<td>[[label-border-color]]</td>
<td>[[border-color]] <span class="footnotes_notice">[[notice-border-color]]</span></td>
</tr>
<tr>
<td>[[label-border-radius]]</td>
<td>[[border-radius]] <span class="footnotes_notice">[[notice-border-radius]]</span></td>
</tr>
<tr>
<td>[[label-box-shadow-color]]</td>
<td>[[box-shadow-color]] <span class="footnotes_notice">[[notice-box-shadow-color]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-font-size]]</td>
<td>[[font-size-enable]][[font-size-scalar]][[font-size-unit]] <span class="footnotes_notice">[[notice-font-size]]</span></td>
</tr>
<tr>
<td>[[label-color]]</td>
<td>[[color]] <span class="footnotes_notice">[[notice-color]]</span></td>
</tr>
<tr>
<td>[[label-background]]</td>
<td>[[background]] <span class="footnotes_notice">[[notice-background]]</span></td>
</tr>
<tr>
<td>[[label-border-width]]</td>
<td>[[border-width]] <span class="footnotes_notice">[[notice-border-width]]</span></td>
</tr>
<tr>
<td>[[label-border-color]]</td>
<td>[[border-color]] <span class="footnotes_notice">[[notice-border-color]]</span></td>
</tr>
<tr>
<td>[[label-border-radius]]</td>
<td>[[border-radius]] <span class="footnotes_notice">[[notice-border-radius]]</span></td>
</tr>
<tr>
<td>[[label-box-shadow-color]]</td>
<td>[[box-shadow-color]] <span class="footnotes_notice">[[notice-box-shadow-color]]</span></td>
</tr>
</tbody>
</table>

View file

@ -1,8 +1,8 @@
<table class="mouse_over_box_dimensions widefat fixed">
<tbody>
<tr>
<td>[[label-max-width]]</td>
<td>[[max-width]] [[width]] <span class="footnotes_notice">[[notice-max-width]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-max-width]]</td>
<td>[[max-width]] [[width]] <span class="footnotes_notice">[[notice-max-width]]</span></td>
</tr>
</tbody>
</table>

View file

@ -1,15 +1,15 @@
<table class="mouse_over_box_display widefat fixed">
<tbody>
<tr>
<td>[[label-enable]]</td>
<td>[[enable]] <span class="footnotes_notice">[[notice-enable]]</span></td>
</tr>
<tr>
<td>[[label-alternative]]</td>
<td>[[alternative]] <span class="footnotes_notice">[[notice-alternative]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-enable]]</td>
<td>[[enable]] <span class="footnotes_notice">[[notice-enable]]</span></td>
</tr>
<tr>
<td>[[label-alternative]]</td>
<td>[[alternative]] <span class="footnotes_notice">[[notice-alternative]]</span></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-alternative]]</p>
<p>[[description-alternative]]</p>
</div>

View file

@ -1,16 +1,16 @@
<table class="mouse_over_box_position widefat fixed">
<tbody>
<tr>
<td>[[label-position]]</td>
<td>[[position]] [[position-alternative]] <span class="footnotes_notice">[[notice-position]]</span></td>
</tr>
<tr>
<td>[[label-offset-x]]</td>
<td>[[offset-x]] [[offset-x-alternative]] <span class="footnotes_notice">[[notice-offset-x]]</span></td>
</tr>
<tr>
<td>[[label-offset-y]]</td>
<td>[[offset-y]] [[offset-y-alternative]] <span class="footnotes_notice">[[notice-offset-y]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-position]]</td>
<td>[[position]] [[position-alternative]] <span class="footnotes_notice">[[notice-position]]</span></td>
</tr>
<tr>
<td>[[label-offset-x]]</td>
<td>[[offset-x]] [[offset-x-alternative]] <span class="footnotes_notice">[[notice-offset-x]]</span></td>
</tr>
<tr>
<td>[[label-offset-y]]</td>
<td>[[offset-y]] [[offset-y-alternative]] <span class="footnotes_notice">[[notice-offset-y]]</span></td>
</tr>
</tbody>
</table>

View file

@ -1,22 +1,22 @@
<div class="footnotes_description">
<p>[[description-delimiter]]</p>
<p>[[description-delimiter]]</p>
</div>
<table class="mouse_over_box_text widefat fixed">
<tbody>
<tr>
<td>[[label-delimiter]]</td>
<td>[[delimiter]] <span class="footnotes_notice">[[notice-delimiter]]</span></td>
</tr>
<tr>
<td>[[label-mirror]]</td>
<td>[[mirror]] <span class="footnotes_notice">[[notice-mirror]]</span></td>
</tr>
<tr>
<td>[[label-separator]]</td>
<td>[[separator]] <span class="footnotes_notice">[[notice-separator]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-delimiter]]</td>
<td>[[delimiter]] <span class="footnotes_notice">[[notice-delimiter]]</span></td>
</tr>
<tr>
<td>[[label-mirror]]</td>
<td>[[mirror]] <span class="footnotes_notice">[[notice-mirror]]</span></td>
</tr>
<tr>
<td>[[label-separator]]</td>
<td>[[separator]] <span class="footnotes_notice">[[notice-separator]]</span></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-mirror]]</p>
<p>[[description-mirror]]</p>
</div>

View file

@ -1,20 +1,20 @@
<table class="mouse_over_box_timing widefat fixed">
<tbody>
<tr>
<td>[[label-fade-in-delay]]</td>
<td>[[fade-in-delay]] <span class="footnotes_notice">[[notice-fade-in-delay]]</span></td>
</tr>
<tr>
<td>[[label-fade-in-duration]]</td>
<td>[[fade-in-duration]] <span class="footnotes_notice">[[notice-fade-in-duration]]</span></td>
</tr>
<tr>
<td>[[label-fade-out-delay]]</td>
<td>[[fade-out-delay]] <span class="footnotes_notice">[[notice-fade-out-delay]]</span></td>
</tr>
<tr>
<td>[[label-fade-out-duration]]</td>
<td>[[fade-out-duration]] <span class="footnotes_notice">[[notice-fade-out-duration]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-fade-in-delay]]</td>
<td>[[fade-in-delay]] <span class="footnotes_notice">[[notice-fade-in-delay]]</span></td>
</tr>
<tr>
<td>[[label-fade-in-duration]]</td>
<td>[[fade-in-duration]] <span class="footnotes_notice">[[notice-fade-in-duration]]</span></td>
</tr>
<tr>
<td>[[label-fade-out-delay]]</td>
<td>[[fade-out-delay]] <span class="footnotes_notice">[[notice-fade-out-delay]]</span></td>
</tr>
<tr>
<td>[[label-fade-out-duration]]</td>
<td>[[fade-out-duration]] <span class="footnotes_notice">[[notice-fade-out-duration]]</span></td>
</tr>
</tbody>
</table>

View file

@ -1,16 +1,16 @@
<table class="mouse_over_box_truncation widefat fixed">
<tbody>
<tr>
<td>[[label-truncation]]</td>
<td>[[truncation]]</td>
</tr>
<tr>
<td>[[label-max-length]]</td>
<td>[[max-length]] <span class="footnotes_notice">[[notice-max-length]]</span></td>
</tr>
<tr>
<td>[[label-readon]]</td>
<td>[[readon]]</td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-truncation]]</td>
<td>[[truncation]]</td>
</tr>
<tr>
<td>[[label-max-length]]</td>
<td>[[max-length]] <span class="footnotes_notice">[[notice-max-length]]</span></td>
</tr>
<tr>
<td>[[label-readon]]</td>
<td>[[readon]]</td>
</tr>
</tbody>
</table>

View file

@ -1,51 +1,51 @@
<div class="plugin-card">
<div class="plugin-card-top">
<a href="[[server]]/wp-admin/plugin-install.php?tab=plugin-information&plugin=[[plugin-name]]&TB_iframe=true&width=600&height=550" class="thickbox plugin-icon">
<img src="[[plugin-icon]]"/>
</a>
<div class="name column-name">
<h4>
<a href="[[server]]/wp-admin/plugin-install.php?tab=plugin-information&plugin=[[plugin-name]]&TB_iframe=true&width=600&height=550" class="thickbox">[[plugin-title]]</a>
</h4>
</div>
<div class="action-links">
<ul class="plugin-action-buttons">
<li>
[[install-link]]
</li>
<li>
<a href="[[server]]/wp-admin/plugin-install.php?tab=plugin-information&plugin=[[plugin-name]]&TB_iframe=true&width=600&height=550" class="thickbox" aria-label="More information about [[plugin-title]]" data-title="[[plugin-title]]">[[more-details-label]]</a>
</li>
</ul>
</div>
<div class="desc column-description">
<p id="manfisher-[[plugin-name]]-description"></p>
<p class="authors">
<cite id="manfisher-[[plugin-name]]-author"></cite>
</p>
</div>
</div>
<div class="plugin-card-bottom">
<div class="vers column-rating">
<div class="star-rating" title="">
<span class="screen-reader-text" id="manfisher-[[plugin-name]]-rating-text"></span>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
</div>
<span class="num-ratings" id="manfisher-[[plugin-name]]-rating-num"></span>
</div>
<div class="column-updated">
<strong>[[last-updated-label]]:</strong>
<span id="manfisher-[[plugin-name]]-updated"></span>
</div>
<div class="column-downloaded" id="manfisher-[[plugin-name]]-downloads"></div>
<div class="column-compatibility">
<!--<span class="compatibility-compatible"></span>-->
</div>
</div>
<div class="plugin-card-top">
<a href="[[server]]/wp-admin/plugin-install.php?tab=plugin-information&plugin=[[plugin-name]]&TB_iframe=true&width=600&height=550" class="thickbox plugin-icon">
<img src="[[plugin-icon]]"/>
</a>
<div class="name column-name">
<h4>
<a href="[[server]]/wp-admin/plugin-install.php?tab=plugin-information&plugin=[[plugin-name]]&TB_iframe=true&width=600&height=550" class="thickbox">[[plugin-title]]</a>
</h4>
</div>
<div class="action-links">
<ul class="plugin-action-buttons">
<li>
[[install-link]]
</li>
<li>
<a href="[[server]]/wp-admin/plugin-install.php?tab=plugin-information&plugin=[[plugin-name]]&TB_iframe=true&width=600&height=550" class="thickbox" aria-label="More information about [[plugin-title]]" data-title="[[plugin-title]]">[[more-details-label]]</a>
</li>
</ul>
</div>
<div class="desc column-description">
<p id="manfisher-[[plugin-name]]-description"></p>
<p class="authors">
<cite id="manfisher-[[plugin-name]]-author"></cite>
</p>
</div>
</div>
<div class="plugin-card-bottom">
<div class="vers column-rating">
<div class="star-rating" title="">
<span class="screen-reader-text" id="manfisher-[[plugin-name]]-rating-text"></span>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
<div class="star"></div>
</div>
<span class="num-ratings" id="manfisher-[[plugin-name]]-rating-num"></span>
</div>
<div class="column-updated">
<strong>[[last-updated-label]]:</strong>
<span id="manfisher-[[plugin-name]]-updated"></span>
</div>
<div class="column-downloaded" id="manfisher-[[plugin-name]]-downloads"></div>
<div class="column-compatibility">
<!--<span class="compatibility-compatible"></span>-->
</div>
</div>
</div>
@ -59,33 +59,33 @@
},
dataType: 'json',
success: function (data, textStatus, XMLHttpRequest) {
var l_obj_Description = jQuery("#manfisher-[[plugin-name]]-description");
var l_obj_Author = jQuery("#manfisher-[[plugin-name]]-author");
var l_obj_RatingText = jQuery("#manfisher-[[plugin-name]]-rating-text");
var l_obj_RatingNum = jQuery("#manfisher-[[plugin-name]]-rating-num");
var l_obj_LastUpdated = jQuery("#manfisher-[[plugin-name]]-updated");
var l_obj_Downloads = jQuery("#manfisher-[[plugin-name]]-downloads");
var l_obj_Description = jQuery("#manfisher-[[plugin-name]]-description");
var l_obj_Author = jQuery("#manfisher-[[plugin-name]]-author");
var l_obj_RatingText = jQuery("#manfisher-[[plugin-name]]-rating-text");
var l_obj_RatingNum = jQuery("#manfisher-[[plugin-name]]-rating-num");
var l_obj_LastUpdated = jQuery("#manfisher-[[plugin-name]]-updated");
var l_obj_Downloads = jQuery("#manfisher-[[plugin-name]]-downloads");
if (data == null) {
l_obj_Description.text("No response received.");
l_obj_Description.text("No response received.");
} else if (data.error) {
l_obj_Description.text(data.error);
l_obj_Description.text(data.error);
} else {
l_obj_Description.text(data.PluginDescription);
l_obj_Author.append("By " + data.PluginAuthor);
l_obj_RatingText.text(data.PluginRatingText);
l_obj_RatingText.next().addClass(data.PluginRating1);
l_obj_RatingText.next().next().addClass(data.PluginRating2);
l_obj_RatingText.next().next().next().addClass(data.PluginRating3);
l_obj_RatingText.next().next().next().next().addClass(data.PluginRating4);
l_obj_RatingText.next().next().next().next().next().addClass(data.PluginRating5);
l_obj_RatingNum.text("(" + data.PluginRating + ")");
l_obj_LastUpdated.text(data.PluginLastUpdated);
l_obj_Downloads.text(data.PluginDownloads + " downloads");
l_obj_Description.text(data.PluginDescription);
l_obj_Author.append("By " + data.PluginAuthor);
l_obj_RatingText.text(data.PluginRatingText);
l_obj_RatingText.next().addClass(data.PluginRating1);
l_obj_RatingText.next().next().addClass(data.PluginRating2);
l_obj_RatingText.next().next().next().addClass(data.PluginRating3);
l_obj_RatingText.next().next().next().next().addClass(data.PluginRating4);
l_obj_RatingText.next().next().next().next().next().addClass(data.PluginRating5);
l_obj_RatingNum.text("(" + data.PluginRating + ")");
l_obj_LastUpdated.text(data.PluginLastUpdated);
l_obj_Downloads.text(data.PluginDownloads + " downloads");
}
},
error: function (MLHttpRequest, textStatus, errorThrown) {
console.log(textStatus);
}
});
</script>
</script>

View file

@ -1,11 +1,11 @@
<table class="settings_excerpts widefat fixed">
<tbody>
<tr>
<td>[[label-excerpts]]</td>
<td>[[excerpts]] <span class="footnotes_notice">[[notice-excerpts]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-excerpts]]</td>
<td>[[excerpts]] <span class="footnotes_notice">[[notice-excerpts]]</span></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-excerpts]]</p>
<p>[[description-excerpts]]</p>
</div>

View file

@ -1,12 +1,12 @@
<table class="settings_love widefat fixed">
<tbody>
<tr>
<td>[[label-love]]</td>
<td>[[love]]</td>
</tr>
<tr>
<td>[[label-no-love]]</td>
<td>[[no-love]]</td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-love]]</td>
<td>[[love]]</td>
</tr>
<tr>
<td>[[label-no-love]]</td>
<td>[[no-love]]</td>
</tr>
</tbody>
</table>

View file

@ -1,15 +1,15 @@
<table class="settings_numbering widefat fixed">
<tbody>
<tr>
<td>[[label-counter-style]]</td>
<td>[[counter-style]]</td>
</tr>
<tr>
<td>[[label-identical]]</td>
<td>[[identical]] <span class="footnotes_notice">[[notice-identical]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-counter-style]]</td>
<td>[[counter-style]]</td>
</tr>
<tr>
<td>[[label-identical]]</td>
<td>[[identical]] <span class="footnotes_notice">[[notice-identical]]</span></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-identical]]</p>
<p>[[description-identical]]</p>
</div>

View file

@ -1,113 +1,113 @@
<table class="settings_reference_container widefat fixed">
<tbody>
<tr>
<td>[[label-name]]</td>
<td>[[name]]</td>
</tr>
<tr>
<td>[[label-element]]</td>
<td>[[element]]</td>
</tr>
<tr>
<td>[[label-border]]</td>
<td>[[border]]</td>
</tr>
<tr>
<td>[[label-collapse]]</td>
<td>[[collapse]]</td>
</tr>
<tr>
<td>[[label-position]]</td>
<td>[[position]] <span class="footnotes_notice">[[notice-position]]</span></td>
</tr>
<tr>
<td>[[label-shortcode]]</td>
<td>[[shortcode]] <span class="footnotes_notice">[[notice-shortcode]]</span></td>
</tr>
<tr>
<td>[[label-startpage]]</td>
<td>[[startpage]]</td>
</tr>
<tr>
<td>[[label-margin-top]]</td>
<td>[[margin-top]] <span class="footnotes_notice">[[notice-margin-top]]</span></td>
</tr>
<tr>
<td>[[label-margin-bottom]]</td>
<td>[[margin-bottom]] <span class="footnotes_notice">[[notice-margin-bottom]]</span></td>
</tr>
<tr>
<td>[[label-page-layout]]</td>
<td>[[page-layout]] <span class="footnotes_notice">[[notice-page-layout]]</span></td>
</tr>
<tr>
<td>[[label-url-wrap]]</td>
<td>[[url-wrap]] <span class="footnotes_notice">[[notice-url-wrap]]</span></td>
</tr>
<tr>
<td>[[label-symbol]]</td>
<td>[[symbol-enable]] <span class="footnotes_notice">[[notice-symbol]]</span></td>
</tr>
<tr>
<td>[[label-switch]]</td>
<td>[[switch]]</td>
</tr>
<tr>
<td>[[label-3column]]</td>
<td>[[3column]] <span class="footnotes_notice">[[notice-3column]]</span></td>
</tr>
<tr>
<td>[[label-row-borders]]</td>
<td>[[row-borders]]</td>
</tr>
<tr>
<td>[[label-separator]]</td>
<td>
[[separator-enable]]
[[separator-options]]
[[separator-custom]]
<span class="footnotes_notice">[[notice-separator]]</span>
</td>
</tr>
<tr>
<td>[[label-terminator]]</td>
<td>
[[terminator-enable]]
[[terminator-options]]
[[terminator-custom]]
<span class="footnotes_notice">[[notice-terminator]]</span>
</td>
</tr>
<tr>
<td>[[label-width]]</td>
<td>
[[width-enable]]
[[width-scalar]]
[[width-unit]]
<span class="footnotes_notice">[[notice-width]]</span>
</td>
</tr>
<tr>
<td>[[label-max-width]]</td>
<td>
[[max-width-enable]]
[[max-width-scalar]]
[[max-width-unit]]
<span class="footnotes_notice">[[notice-max-width]]</span>
</td>
</tr>
<tr>
<td>[[label-line-break]]</td>
<td>[[line-break]]
<span class="footnotes_notice">[[notice-line-break]]</span>
</td>
</tr>
<tr>
<td>[[label-link]]</td>
<td>[[link]] <span class="footnotes_notice">[[notice-link]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-name]]</td>
<td>[[name]]</td>
</tr>
<tr>
<td>[[label-element]]</td>
<td>[[element]]</td>
</tr>
<tr>
<td>[[label-border]]</td>
<td>[[border]]</td>
</tr>
<tr>
<td>[[label-collapse]]</td>
<td>[[collapse]]</td>
</tr>
<tr>
<td>[[label-position]]</td>
<td>[[position]] <span class="footnotes_notice">[[notice-position]]</span></td>
</tr>
<tr>
<td>[[label-shortcode]]</td>
<td>[[shortcode]] <span class="footnotes_notice">[[notice-shortcode]]</span></td>
</tr>
<tr>
<td>[[label-startpage]]</td>
<td>[[startpage]]</td>
</tr>
<tr>
<td>[[label-margin-top]]</td>
<td>[[margin-top]] <span class="footnotes_notice">[[notice-margin-top]]</span></td>
</tr>
<tr>
<td>[[label-margin-bottom]]</td>
<td>[[margin-bottom]] <span class="footnotes_notice">[[notice-margin-bottom]]</span></td>
</tr>
<tr>
<td>[[label-page-layout]]</td>
<td>[[page-layout]] <span class="footnotes_notice">[[notice-page-layout]]</span></td>
</tr>
<tr>
<td>[[label-url-wrap]]</td>
<td>[[url-wrap]] <span class="footnotes_notice">[[notice-url-wrap]]</span></td>
</tr>
<tr>
<td>[[label-symbol]]</td>
<td>[[symbol-enable]] <span class="footnotes_notice">[[notice-symbol]]</span></td>
</tr>
<tr>
<td>[[label-switch]]</td>
<td>[[switch]]</td>
</tr>
<tr>
<td>[[label-3column]]</td>
<td>[[3column]] <span class="footnotes_notice">[[notice-3column]]</span></td>
</tr>
<tr>
<td>[[label-row-borders]]</td>
<td>[[row-borders]]</td>
</tr>
<tr>
<td>[[label-separator]]</td>
<td>
[[separator-enable]]
[[separator-options]]
[[separator-custom]]
<span class="footnotes_notice">[[notice-separator]]</span>
</td>
</tr>
<tr>
<td>[[label-terminator]]</td>
<td>
[[terminator-enable]]
[[terminator-options]]
[[terminator-custom]]
<span class="footnotes_notice">[[notice-terminator]]</span>
</td>
</tr>
<tr>
<td>[[label-width]]</td>
<td>
[[width-enable]]
[[width-scalar]]
[[width-unit]]
<span class="footnotes_notice">[[notice-width]]</span>
</td>
</tr>
<tr>
<td>[[label-max-width]]</td>
<td>
[[max-width-enable]]
[[max-width-scalar]]
[[max-width-unit]]
<span class="footnotes_notice">[[notice-max-width]]</span>
</td>
</tr>
<tr>
<td>[[label-line-break]]</td>
<td>[[line-break]]
<span class="footnotes_notice">[[notice-line-break]]</span>
</td>
</tr>
<tr>
<td>[[label-link]]</td>
<td>[[link]] <span class="footnotes_notice">[[notice-link]]</span></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-link]]</p>
<p>[[description-link]]</p>
</div>

View file

@ -1,36 +1,36 @@
<table class="settings_scrolling widefat fixed">
<tbody>
<tr>
<td>[[label-scroll-offset]]</td>
<td>[[scroll-offset]] <span class="footnotes_notice">[[notice-scroll-offset]]</span></td>
</tr>
<tr>
<td>[[label-scroll-duration]]</td>
<td>[[scroll-duration]] <span class="footnotes_notice">[[notice-scroll-duration]]</span></td>
</tr>
<tr>
<td>[[label-hard-links]]</td>
<td>[[hard-links]] <span class="footnotes_notice">[[notice-hard-links]]</span></td>
</tr>
<tr>
<td>[[label-footnote]]</td>
<td>[[footnote]] <span class="footnotes_notice">[[notice-footnote]]</span></td>
</tr>
<tr>
<td>[[label-referrer]]</td>
<td>[[referrer]] <span class="footnotes_notice">[[notice-referrer]]</span></td>
</tr>
<tr>
<td>[[label-separator]]</td>
<td>[[separator]] <span class="footnotes_notice">[[notice-separator]]</span></td>
</tr>
<tr>
<td>[[label-backlink-tooltips]]</td>
<td>[[backlink-tooltips]] <span class="footnotes_notice">[[notice-backlink-tooltips]]</span></td>
</tr>
<tr>
<td>[[label-backlink-tooltip-text]]</td>
<td>[[backlink-tooltip-text]] <span class="footnotes_notice">[[notice-backlink-tooltip-text]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-scroll-offset]]</td>
<td>[[scroll-offset]] <span class="footnotes_notice">[[notice-scroll-offset]]</span></td>
</tr>
<tr>
<td>[[label-scroll-duration]]</td>
<td>[[scroll-duration]] <span class="footnotes_notice">[[notice-scroll-duration]]</span></td>
</tr>
<tr>
<td>[[label-hard-links]]</td>
<td>[[hard-links]] <span class="footnotes_notice">[[notice-hard-links]]</span></td>
</tr>
<tr>
<td>[[label-footnote]]</td>
<td>[[footnote]] <span class="footnotes_notice">[[notice-footnote]]</span></td>
</tr>
<tr>
<td>[[label-referrer]]</td>
<td>[[referrer]] <span class="footnotes_notice">[[notice-referrer]]</span></td>
</tr>
<tr>
<td>[[label-separator]]</td>
<td>[[separator]] <span class="footnotes_notice">[[notice-separator]]</span></td>
</tr>
<tr>
<td>[[label-backlink-tooltips]]</td>
<td>[[backlink-tooltips]] <span class="footnotes_notice">[[notice-backlink-tooltips]]</span></td>
</tr>
<tr>
<td>[[label-backlink-tooltip-text]]</td>
<td>[[backlink-tooltip-text]] <span class="footnotes_notice">[[notice-backlink-tooltip-text]]</span></td>
</tr>
</tbody>
</table>

View file

@ -1,63 +1,63 @@
<div class="footnotes_description">
<p>[[description-escapement]]</p>
<p>[[description-escapement]]</p>
</div>
<table class="settings_start_end widefat fixed">
<tbody>
<tr>
<td>[[label-short-code-start]]</td>
<td>
<span>[[short-code-start]]</span>
<span>[[short-code-start-user]]</span>
</td>
</tr>
<tr>
<td>[[label-short-code-end]]</td>
<td>
<span>[[short-code-end]]</span>
<span>[[short-code-end-user]]</span>
</td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-short-code-start]]</td>
<td>
<span>[[short-code-start]]</span>
<span>[[short-code-start-user]]</span>
</td>
</tr>
<tr>
<td>[[label-short-code-end]]</td>
<td>
<span>[[short-code-end]]</span>
<span>[[short-code-end-user]]</span>
</td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-parentheses]]</p>
<p>[[description-parentheses]]</p>
</div>
<table class="settings_start_end widefat fixed">
<tbody>
<tr>
<td>[[label-syntax]]</td>
<td>[[syntax]] <span class="footnotes_notice">[[notice-syntax]]</span></td>
</tr>
</tbody>
<tbody>
<tr>
<td>[[label-syntax]]</td>
<td>[[syntax]] <span class="footnotes_notice">[[notice-syntax]]</span></td>
</tr>
</tbody>
</table>
<div class="footnotes_description">
<p>[[description-syntax]]</p>
<p>[[description-syntax]]</p>
</div>
<script type="text/javascript">
var l_obj_ShortCodeStart = jQuery("#[[short-code-start-id]]");
var l_obj_ShortCodeEnd = jQuery("#[[short-code-end-id]]");
var l_obj_ShortCodeStartUserDefined = jQuery("#[[short-code-start-user-id]]");
var l_obj_ShortCodeEndUserDefined = jQuery("#[[short-code-end-user-id]]");
var l_obj_ShortCodeStart = jQuery("#[[short-code-start-id]]");
var l_obj_ShortCodeEnd = jQuery("#[[short-code-end-id]]");
var l_obj_ShortCodeStartUserDefined = jQuery("#[[short-code-start-user-id]]");
var l_obj_ShortCodeEndUserDefined = jQuery("#[[short-code-end-user-id]]");
function footnotes_Display_UserDefined_Placeholders() {
if (l_obj_ShortCodeStart.val() == "userdefined") {
l_obj_ShortCodeStartUserDefined.parent().show();
l_obj_ShortCodeEndUserDefined.parent().show();
} else {
l_obj_ShortCodeStartUserDefined.parent().hide();
l_obj_ShortCodeEndUserDefined.parent().hide();
}
}
footnotes_Display_UserDefined_Placeholders();
function footnotes_Display_UserDefined_Placeholders() {
if (l_obj_ShortCodeStart.val() == "userdefined") {
l_obj_ShortCodeStartUserDefined.parent().show();
l_obj_ShortCodeEndUserDefined.parent().show();
} else {
l_obj_ShortCodeStartUserDefined.parent().hide();
l_obj_ShortCodeEndUserDefined.parent().hide();
}
}
footnotes_Display_UserDefined_Placeholders();
l_obj_ShortCodeStart.on('change', function() {
var l_int_SelectedIndex = jQuery(this).prop("selectedIndex");
jQuery('#[[short-code-end-id]] option:eq(' + l_int_SelectedIndex + ')').prop('selected', true);
footnotes_Display_UserDefined_Placeholders();
});
l_obj_ShortCodeEnd.on('change', function() {
var l_int_SelectedIndex = jQuery(this).prop("selectedIndex");
jQuery('#[[short-code-start-id]] option:eq(' + l_int_SelectedIndex + ')').prop('selected', true);
footnotes_Display_UserDefined_Placeholders();
});
l_obj_ShortCodeStart.on('change', function() {
var l_int_SelectedIndex = jQuery(this).prop("selectedIndex");
jQuery('#[[short-code-end-id]] option:eq(' + l_int_SelectedIndex + ')').prop('selected', true);
footnotes_Display_UserDefined_Placeholders();
});
l_obj_ShortCodeEnd.on('change', function() {
var l_int_SelectedIndex = jQuery(this).prop("selectedIndex");
jQuery('#[[short-code-start-id]] option:eq(' + l_int_SelectedIndex + ')').prop('selected', true);
footnotes_Display_UserDefined_Placeholders();
});
</script>

View file

@ -1,23 +1,23 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
*/?>
/**
*/?>
-->
<span
class="footnote_referrer relative"
onmouseover="footnoteTooltipShow('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
onmouseout="footnoteTooltipHide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
><[[link-span]]
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]');"
[[hard-link]]
><[[sup-span]]
id="footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_tooltip_text"
>[[before]][[index]][[after]]</[[sup-span]]
></[[link-span]]
>[[anchor-element]]<span
id="footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_tooltip position hidden"
onmouseout="footnoteTooltipHide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
>[[text]]</span
></span
class="footnote_referrer relative"
onmouseover="footnoteTooltipShow('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
onmouseout="footnoteTooltipHide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
><[[link-span]]
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]');"
[[hard-link]]
><[[sup-span]]
id="footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_tooltip_text"
>[[before]][[index]][[after]]</[[sup-span]]
></[[link-span]]
>[[anchor-element]]<span
id="footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_tooltip position hidden"
onmouseout="footnoteTooltipHide('footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]')"
>[[text]]</span
></span
>

View file

@ -1,20 +1,20 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
*/?>
/**
*/?>
-->
<span
class="footnote_referrer"
><[[link-span]]
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]');"
[[hard-link]]
><[[sup-span]]
id="footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_tooltip_text"
>[[before]][[index]][[after]]</[[sup-span]]
></[[link-span]]
>[[anchor-element]]<span
id="footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_tooltip"
>[[text]]</span
></span
class="footnote_referrer"
><[[link-span]]
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]');"
[[hard-link]]
><[[sup-span]]
id="footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_tooltip_text"
>[[before]][[index]][[after]]</[[sup-span]]
></[[link-span]]
>[[anchor-element]]<span
id="footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_tooltip"
>[[text]]</span
></span
>

View file

@ -1,29 +1,29 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
*/?>
/**
*/?>
-->
<tr class="footnotes_plugin_reference_row">
<td
class="footnote_plugin_index"
><[[link-span]]
id="footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_index"
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
[[hard-link]]
>[[index]][[terminator]]</[[link-span]]
>[[anchor-element]]</td
>
<td
class="footnote_plugin_symbol"
><[[link-span]]
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
class="footnote_backlink"
[[hard-link]]
>[[arrow]]</[[link-span]]
></td
>
<td
class="footnote_plugin_text"
>[[text]]</td
>
<td
class="footnote_plugin_index"
><[[link-span]]
id="footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_index"
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
[[hard-link]]
>[[index]][[terminator]]</[[link-span]]
>[[anchor-element]]</td
>
<td
class="footnote_plugin_symbol"
><[[link-span]]
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
class="footnote_backlink"
[[hard-link]]
>[[arrow]]</[[link-span]]
></td
>
<td
class="footnote_plugin_text"
>[[text]]</td
>
</tr>

View file

@ -1,14 +1,14 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
*/?>
/**
*/?>
-->
<tr class="footnotes_plugin_reference_row">
<td
class="footnote_plugin_index_combi[[pointer]]"
[[event]]
>[[backlinks]]</td
>
<td
class="footnote_plugin_text"
>[[text]]</td>
<td
class="footnote_plugin_index_combi[[pointer]]"
[[event]]
>[[backlinks]]</td
>
<td
class="footnote_plugin_text"
>[[text]]</td>
</tr>

View file

@ -1,19 +1,19 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
*/?>
/**
*/?>
-->
<tr class="footnotes_plugin_reference_row">
<td
id="footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_index pointer"
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
><[[link-span]]
class="footnote_plugin_link"
[[hard-link]]
>[[index]][[terminator]][[arrow]]</[[link-span]]
>[[anchor-element]]</td
>
<td
class="footnote_plugin_text"
>[[text]]</td>
<td
id="footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_index pointer"
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
><[[link-span]]
class="footnote_plugin_link"
[[hard-link]]
>[[index]][[terminator]][[arrow]]</[[link-span]]
>[[anchor-element]]</td
>
<td
class="footnote_plugin_text"
>[[text]]</td>
</tr>

View file

@ -1,24 +1,24 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
* Default table row template for uncombined footnotes
*
* @since 2.2.10 Bugfix: Reference container: add missing container ID in function name in default table row template for uncombined footnotes.
*
*/?>
/**
* Default table row template for uncombined footnotes
*
* @since 2.2.10 Bugfix: Reference container: add missing container ID in function name in default table row template for uncombined footnotes.
*
*/?>
-->
<tr class="footnotes_plugin_reference_row">
<td
id="footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_index pointer"
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
><[[link-span]]
class="footnote_plugin_link"
[[hard-link]]
>[[arrow]][[index]][[terminator]]</[[link-span]]
>[[anchor-element]]</td
>
<td
class="footnote_plugin_text"
>[[text]]</td
>
<td
id="footnote_plugin_reference_[[post_id]]_[[container_id]]_[[note_id]]"
class="footnote_plugin_index pointer"
onclick="footnote_moveToAnchor_[[post_id]]_[[container_id]]('footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]');"
><[[link-span]]
class="footnote_plugin_link"
[[hard-link]]
>[[arrow]][[index]][[terminator]]</[[link-span]]
>[[anchor-element]]</td
>
<td
class="footnote_plugin_text"
>[[text]]</td
>
</tr>

View file

@ -1,83 +1,83 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
* Yields the reference container start and end including the scroll script.
*
* @since Unknown
* @type object
*
* @lastmodified 2021-02-07T0811+0100
*
*
*
* - Bugfix: Reference container: restore expand/collapse button in the template, thanks to @ragonesi bug report.
*
* @since 2.0.2
*
* @reporter @ragonesi
* @link https://wordpress.org/support/topic/hyperlink-symbol-in-reference-container/#post-13587782
*
* The expand/collapse button was lost @since 2.0.0 for an unknown reason.
* The fix was about restoring the button code (only, while the script remained complete).
*/?>
/**
* Yields the reference container start and end including the scroll script.
*
* @since Unknown
* @type object
*
* @lastmodified 2021-02-18T2046+0100
*
*
*
* - Bugfix: Reference container: restore expand/collapse button in the template, thanks to @ragonesi bug report.
*
* @since 2.0.2
*
* @reporter @ragonesi
* @link https://wordpress.org/support/topic/hyperlink-symbol-in-reference-container/#post-13587782
*
* The expand/collapse button was lost @since 2.0.0 for an unknown reason.
* The fix was about restoring the button code (only, while the script remained complete).
*/?>
-->
<div
class="speaker-mute footnotes_reference_container"
>
<div
class="footnote_container_prepare"
><[[element]]
><span
class="footnote_reference_container_label pointer"
onclick="footnote_expand_collapse_reference_container_[[post_id]]_[[container_id]]();"
>[[name]]</span
><span
class="footnote_reference_container_collapse_button"
style="[[button-style]]"
onclick="footnote_expand_collapse_reference_container_[[post_id]]_[[container_id]]();"
>[<a
id="footnote_reference_container_collapse_button_[[post_id]]_[[container_id]]"
>+</a
>]</span
></[[element]]
></div
>
<div
id="footnote_references_container_[[post_id]]_[[container_id]]"
style="[[style]]"
>
<table
class="footnotes_table footnote-reference-container"
>
<tbody>
[[content]]
</tbody>
</table>
</div>
class="speaker-mute footnotes_reference_container"
>
<div
class="footnote_container_prepare"
><[[element]]
><span
class="footnote_reference_container_label pointer"
onclick="footnote_expand_collapse_reference_container_[[post_id]]_[[container_id]]();"
>[[name]]</span
><span
class="footnote_reference_container_collapse_button"
style="[[button-style]]"
onclick="footnote_expand_collapse_reference_container_[[post_id]]_[[container_id]]();"
>[<a
id="footnote_reference_container_collapse_button_[[post_id]]_[[container_id]]"
>+</a
>]</span
></[[element]]
></div
>
<div
id="footnote_references_container_[[post_id]]_[[container_id]]"
style="[[style]]"
>
<table
class="footnotes_table footnote-reference-container"
>
<tbody>
[[content]]
</tbody>
</table>
</div>
</div>
<script type="text/javascript">
function footnote_expand_reference_container_[[post_id]]_[[container_id]]() {
jQuery('#footnote_references_container_[[post_id]]_[[container_id]]').show();
jQuery('#footnote_reference_container_collapse_button_[[post_id]]_[[container_id]]').text('');
}
function footnote_collapse_reference_container_[[post_id]]_[[container_id]]() {
jQuery('#footnote_references_container_[[post_id]]_[[container_id]]').hide();
jQuery('#footnote_reference_container_collapse_button_[[post_id]]_[[container_id]]').text('+');
}
function footnote_expand_collapse_reference_container_[[post_id]]_[[container_id]]() {
if (jQuery('#footnote_references_container_[[post_id]]_[[container_id]]').is(':hidden')) {
footnote_expand_reference_container_[[post_id]]_[[container_id]]();
} else {
footnote_collapse_reference_container_[[post_id]]_[[container_id]]();
}
}
function footnote_moveToAnchor_[[post_id]]_[[container_id]](p_str_TargetID) {
footnote_expand_reference_container_[[post_id]]_[[container_id]]();
var l_obj_Target = jQuery('#' + p_str_TargetID);
if (l_obj_Target.length) {
jQuery('html, body').animate({
scrollTop: l_obj_Target.offset().top - window.innerHeight * [[scroll-offset]]
},
[[scroll-duration]]);
}
}
function footnote_expand_reference_container_[[post_id]]_[[container_id]]() {
jQuery('#footnote_references_container_[[post_id]]_[[container_id]]').show();
jQuery('#footnote_reference_container_collapse_button_[[post_id]]_[[container_id]]').text('');
}
function footnote_collapse_reference_container_[[post_id]]_[[container_id]]() {
jQuery('#footnote_references_container_[[post_id]]_[[container_id]]').hide();
jQuery('#footnote_reference_container_collapse_button_[[post_id]]_[[container_id]]').text('+');
}
function footnote_expand_collapse_reference_container_[[post_id]]_[[container_id]]() {
if (jQuery('#footnote_references_container_[[post_id]]_[[container_id]]').is(':hidden')) {
footnote_expand_reference_container_[[post_id]]_[[container_id]]();
} else {
footnote_collapse_reference_container_[[post_id]]_[[container_id]]();
}
}
function footnote_moveToAnchor_[[post_id]]_[[container_id]](p_str_TargetID) {
footnote_expand_reference_container_[[post_id]]_[[container_id]]();
var l_obj_Target = jQuery('#' + p_str_TargetID);
if (l_obj_Target.length) {
jQuery('html, body').animate({
scrollTop: l_obj_Target.offset().top - window.innerHeight * [[scroll-offset]]
},
[[scroll-duration]]);
}
}
</script>

View file

@ -1,18 +1,18 @@
<!--<?php//for docblock, @see MCI_Footnotes_Template::process_template()
/**
*/?>
/**
*/?>
-->
<script type="text/javascript">
jQuery('#footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]').tooltip({
tip: '#footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]',
tipClass: 'footnote_tooltip',
effect: 'fade',
predelay: [[fade-in-delay]],
fadeInSpeed: [[fade-in-duration]],
delay: [[fade-out-delay]],
fadeOutSpeed: [[fade-out-duration]],
position: '[[position]]',
relative: true,
offset: [[[offset-y]], [[offset-x]]],
});
jQuery('#footnote_plugin_tooltip_[[post_id]]_[[container_id]]_[[note_id]]').tooltip({
tip: '#footnote_plugin_tooltip_text_[[post_id]]_[[container_id]]_[[note_id]]',
tipClass: 'footnote_tooltip',
effect: 'fade',
predelay: [[fade-in-delay]],
fadeInSpeed: [[fade-in-duration]],
delay: [[fade-out-delay]],
fadeOutSpeed: [[fade-out-duration]],
position: '[[position]]',
relative: true,
offset: [[[offset-y]], [[offset-x]]],
});
</script>