├── languages ├── simple-fading-testimonials-es_ES.mo ├── simple-fading-testimonials-fr_FR.mo ├── simple-fading-testimonials-fr_FR.po └── simple-fading-testimonials-es_ES.po ├── public ├── css │ ├── sft-public.min.css │ └── sft-public.css ├── js │ ├── sft-public.min.js │ └── sft-public.js ├── partials │ └── docReady.php └── sft-public.php ├── includes ├── class-sft-deactivator.php ├── class-sft-activator.php ├── class-sft-i18n.php ├── class-sft-loader.php └── class-sft.php ├── uninstall.php ├── simple-fading-testimonials.php ├── README.txt ├── admin ├── sft-admin.php └── partials │ ├── custom_field.php │ └── widget.php └── LICENSE.txt /languages/simple-fading-testimonials-es_ES.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SKempin/simple-fading-testimonials-widget/master/languages/simple-fading-testimonials-es_ES.mo -------------------------------------------------------------------------------- /languages/simple-fading-testimonials-fr_FR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SKempin/simple-fading-testimonials-widget/master/languages/simple-fading-testimonials-fr_FR.mo -------------------------------------------------------------------------------- /public/css/sft-public.min.css: -------------------------------------------------------------------------------- 1 | .widget_wp_simple_fading_testimonials{display:block;clear:both;overflow:visible}.widget_wp_simple_fading_testimonials ul{position:relative;display:block;overflow:visible;margin-left:0}.widget_wp_simple_fading_testimonials ul li{position:absolute;top:0;left:0;display:block;overflow:visible;list-style:none;opacity:0}.widget_wp_simple_fading_testimonials ul li .author{font-style:italic;display:block;padding-top:8px} -------------------------------------------------------------------------------- /public/css/sft-public.css: -------------------------------------------------------------------------------- 1 | .widget_wp_simple_fading_testimonials { 2 | display: block; 3 | clear: both; 4 | overflow: visible; 5 | } 6 | 7 | .widget_wp_simple_fading_testimonials ul { 8 | position: relative; 9 | display: block; 10 | overflow: visible; 11 | margin-left: 0; 12 | } 13 | 14 | /* testimonial */ 15 | .widget_wp_simple_fading_testimonials ul li { 16 | position: absolute; 17 | top: 0; 18 | left: 0; 19 | display: block; 20 | overflow: visible; 21 | list-style: none; 22 | opacity: 0; 23 | } 24 | 25 | /* author */ 26 | .widget_wp_simple_fading_testimonials ul li .author { 27 | font-style: italic; 28 | display: block; 29 | padding-top: 8px; 30 | } -------------------------------------------------------------------------------- /public/js/sft-public.min.js: -------------------------------------------------------------------------------- 1 | !function(a){a.fn.fader=function(e){function t(a,e,n){e[a].animate({opacity:0},i.fadeSpeed),n[a].animate({opacity:0},i.fadeSpeed);var o=a===e.length-1?0:a+1;e[o].animate({opacity:1},i.fadeSpeed),n[o].stop(!0,!0).delay(i.authorDelay).animate({opacity:1},i.authorFadeSpeed),setTimeout(function(){t(o,e,n)},i.duration)}var i=a.extend({fadeSpeed:1500,duration:4e3,authorDelay:1200,authorFadeSpeed:750},e),n=[];a(this).find("ul li").each(function(){n.push(a(this)),a(this).css({opacity:0})});var o=[];a(this).find("ul li span").each(function(){o.push(a(this)),a(this).css({opacity:0})}),n[0].animate({opacity:1},i.fadeSpeed/2),setTimeout(function(){t(0,n,o)},i.duration),o[0].stop(!0,!0).delay(i.authorDelay/2).animate({opacity:1},i.fadeSpeed/2)}}(jQuery); -------------------------------------------------------------------------------- /includes/class-sft-deactivator.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | 13 | /** 14 | * Fired during plugin deactivation. 15 | * 16 | * This class defines all code necessary to run during the plugin's deactivation. 17 | * 18 | * @since 1.1.2 19 | * @package simple-fading-testimonials-widget 20 | * @subpackage simple-fading-testimonials-widget/admin 21 | * @author Stephen Kempin 22 | */ 23 | class Simple_Fading_Testimonials_Deactivator { 24 | 25 | /** 26 | * Short Description. (use period) 27 | * 28 | * Long Description. 29 | * 30 | * @since 1.1.2 31 | */ 32 | public static function deactivate() { 33 | 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /includes/class-sft-activator.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | 13 | /** 14 | * Fired during plugin activation. 15 | * 16 | * This class defines all code necessary to run during the plugin's activation. 17 | * 18 | * @since 1.1.2 19 | * @package simple-fading-testimonials-widget 20 | * @subpackage simple-fading-testimonials-widget/admin 21 | * @author Stephen Kempin 22 | */ 23 | class Simple_Fading_Testimonials_Activator { 24 | 25 | /** 26 | * Short Description. (use period) 27 | * 28 | * Long Description. 29 | * 30 | * @since 1.1.2 31 | */ 32 | public static function activate() { 33 | 34 | 35 | 36 | 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /uninstall.php: -------------------------------------------------------------------------------- 1 | 25 | */ 26 | class Simple_Fading_Testimonials_i18n { 27 | 28 | 29 | /** 30 | * Load the plugin text domain for translation. 31 | * 32 | * @since 1.1.2 33 | */ 34 | public function load_plugin_textdomain() { 35 | 36 | load_plugin_textdomain( 37 | 'simple-fading-testimonials-widget', 38 | true, 39 | dirname( dirname( plugin_basename( __FILE__ ) ) ) . '/languages/' 40 | ); 41 | 42 | } 43 | 44 | 45 | 46 | } -------------------------------------------------------------------------------- /public/partials/docReady.php: -------------------------------------------------------------------------------- 1 | get_settings(); 5 | $instance_key = key($settings); 6 | 7 | // Set vars 8 | $speed_transition = $settings[$instance_key][speed_transition]; 9 | $duration_testimonial = $settings[$instance_key][duration_testimonial]; 10 | $author_delay = $settings[$instance_key][author_delay]; 11 | $author_fade_speed = $settings[$instance_key][author_fade_speed]; 12 | 13 | ?> 14 | 15 | 37 | 38 | run(); 72 | 73 | } 74 | 75 | run_Simple_Fading_Testimonials(); -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | === Simple Fading Testimonials Widget === 2 | Contributors: skempin 3 | Tags: testimonials, quotes, widgets, fadein, fadeout, jquery, reviews, text 4 | Requires at least: 4.3.1 5 | Tested up to: 5.0.3 6 | Stable tag: /trunk/ 7 | License: GPLv2 or later 8 | License URI: http://www.gnu.org/licenses/gpl.html 9 | 10 | Easily add revolving and fading testimonials to your site, with a delayed author element, via a widget. 11 | 12 | 13 | == Description == 14 | 15 | The Simple Fading Testimonials Widget enables easy to add revolving and fading testimonials through the widget area. 16 | 17 | Testimonial text is faded in first, followed by the author name. Both have separate delay and fade settings and can be styled with custom CSS in your theme, making for a very versatile widget. 18 | 19 | 20 | 21 | = Features = 22 | 23 | * Customisable widget title 24 | * Duration settings for both the testimonial and author text 25 | * Transition speed settings for both the testimonial and author text 26 | * Transition delay setting for the author text 27 | * Word count 28 | * Styleable elements via custom CSS 29 | 30 | 31 | = Localization = 32 | * English (default) 33 | * French 34 | * Spanish 35 | 36 | 37 | 38 | = Links = 39 | * [Author Website](http://www.stephenkempin.co.uk) 40 | * [Github](https://github.com/SKempin/simple-fading-testimonials-widget) 41 | 42 | 43 | 44 | == Installation == 45 | 46 | 1. Upload `simple-fading-testimonials-widget` to the `/wp-content/plugins/` directory. 47 | 1. Activate the plugin through the Plugins menu in the WordPress Admin area. 48 | 1. Add a new testimonial via the custom post type that appears in the main menu. 49 | 1. Go to Appearance -> Widgets and add a Simple Fading Testimonials widget to a sidebar of your choosing and set the required options. 50 | 51 | 52 | 53 | == Frequently Asked Questions == 54 | 55 | = Can I adjust the number of testimonials to display? = 56 | 57 | Yes, all settings are controlled via the Appearance -> Widgets area. 58 | 59 | = Can I adjust the speed of the testimonials? = 60 | 61 | Yes, speed can be set in milliseconds. 62 | 63 | = Is the widget styleable? = 64 | 65 | The testimonial and author text are wrapped in separate li tags, allow you to target each individually with custom CSS styling. 66 | 67 | 68 | 69 | == Screenshots == 70 | 71 | 1. Simple Fading Testimonials widget settings. 72 | 73 | 2. Testimonials Post Type screen 74 | 75 | 3. Editing a testimonial 76 | 77 | 78 | 79 | == Changelog == 80 | 81 | = 1.0 = 82 | * Initial release. 83 | 84 | = 1.0.1 = 85 | * Minor bug fixes. 86 | * Adjustment of defaault transition settings. 87 | 88 | = 1.0.2 = 89 | * Internationalisation translation preperation fixes. 90 | 91 | = 1.1.0 = 92 | * Adding translations for French (FR) and Spanish (ES). 93 | 94 | = 1.1.1 = 95 | * Updating plugin text domain. 96 | 97 | = 1.1.2 = 98 | * Updating for Wordpress 5 compatibility -------------------------------------------------------------------------------- /public/sft-public.php: -------------------------------------------------------------------------------- 1 | 21 | */ 22 | class Simple_Fading_Testimonials_Public { 23 | 24 | /** 25 | * The ID of this plugin. 26 | * 27 | * @since 1.1.2 28 | * @access private 29 | * @var string $plugin_name The ID of this plugin. 30 | */ 31 | private $plugin_name; 32 | 33 | /** 34 | * The version of this plugin. 35 | * 36 | * @since 1.1.2 37 | * @access private 38 | * @var string $version The current version of this plugin. 39 | */ 40 | private $version; 41 | 42 | /** 43 | * Initialize the class and set its properties. 44 | * 45 | * @since 1.1.2 46 | * @param string $plugin_name The name of the plugin. 47 | * @param string $version The version of this plugin. 48 | */ 49 | public function __construct( $plugin_name, $version ) { 50 | 51 | $this->plugin_name = $plugin_name; 52 | $this->version = $version; 53 | 54 | } 55 | 56 | /** 57 | * Register the stylesheets for the public-facing side of the site. 58 | * 59 | * @since 1.1.2 60 | */ 61 | public function enqueue_styles() { 62 | 63 | /** 64 | * This function is provided for demonstration purposes only. 65 | * 66 | * An instance of this class should be passed to the run() function 67 | * defined in Plugin_Name_Loader as all of the hooks are defined 68 | * in that particular class. 69 | * 70 | * The Plugin_Name_Loader will then create the relationship 71 | * between the defined hooks and the functions defined in this 72 | * class. 73 | */ 74 | 75 | wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/sft-public.min.css', array(), $this->version, 'all' ); 76 | 77 | } 78 | 79 | /** 80 | * Register the JavaScript for the public-facing side of the site. 81 | * 82 | * @since 1.1.2 83 | */ 84 | public function enqueue_scripts() { 85 | 86 | /** 87 | * This function is provided for demonstration purposes only. 88 | * 89 | * An instance of this class should be passed to the run() function 90 | * defined in Plugin_Name_Loader as all of the hooks are defined 91 | * in that particular class. 92 | * 93 | * The Plugin_Name_Loader will then create the relationship 94 | * between the defined hooks and the functions defined in this 95 | * class. 96 | */ 97 | 98 | wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/sft-public.min.js', array( 'jquery' ), $this->version, false ); 99 | 100 | } 101 | 102 | 103 | } 104 | 105 | 106 | /* Include partial files */ 107 | require_once('partials/docReady.php'); -------------------------------------------------------------------------------- /admin/sft-admin.php: -------------------------------------------------------------------------------- 1 | 21 | */ 22 | class Simple_Fading_Testimonials_Admin { 23 | 24 | /** 25 | * The ID of this plugin. 26 | * 27 | * @since 1.1.2 28 | * @access private 29 | * @var string $plugin_name The ID of this plugin. 30 | */ 31 | private $plugin_name; 32 | 33 | /** 34 | * The version of this plugin. 35 | * 36 | * @since 1.1.2 37 | * @access private 38 | * @var string $version The current version of this plugin. 39 | */ 40 | private $version; 41 | 42 | /** 43 | * Initialize the class and set its properties. 44 | * 45 | * @since 1.1.2 46 | * @param string $plugin_name The name of this plugin. 47 | * @param string $version The version of this plugin. 48 | */ 49 | public function __construct( $plugin_name, $version ) { 50 | 51 | $this->plugin_name = $plugin_name; 52 | $this->version = $version; 53 | 54 | } 55 | 56 | /** 57 | * Register the stylesheets for the admin area. 58 | * 59 | * @since 1.1.2 60 | */ 61 | public function enqueue_styles() { 62 | 63 | /** 64 | * This function is provided for demonstration purposes only. 65 | * 66 | * An instance of this class should be passed to the run() function 67 | * defined in Plugin_Name_Loader as all of the hooks are defined 68 | * in that particular class. 69 | * 70 | * The Plugin_Name_Loader will then create the relationship 71 | * between the defined hooks and the functions defined in this 72 | * class. 73 | */ 74 | 75 | //wp_enqueue_style( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'css/plugin-name-admin.css', array(), $this->version, 'all' ); 76 | 77 | } 78 | 79 | /** 80 | * Register the JavaScript for the admin area. 81 | * 82 | * @since 1.1.2 83 | */ 84 | public function enqueue_scripts() { 85 | 86 | /** 87 | * This function is provided for demonstration purposes only. 88 | * 89 | * An instance of this class should be passed to the run() function 90 | * defined in Plugin_Name_Loader as all of the hooks are defined 91 | * in that particular class. 92 | * 93 | * The Plugin_Name_Loader will then create the relationship 94 | * between the defined hooks and the functions defined in this 95 | * class. 96 | */ 97 | 98 | // wp_enqueue_script( $this->plugin_name, plugin_dir_url( __FILE__ ) . 'js/plugin-name-admin.js', array( 'jquery' ), $this->version, false ); 99 | 100 | } 101 | 102 | 103 | 104 | 105 | } 106 | 107 | 108 | /* Include partial files */ 109 | require_once('partials/custom_field.php'); 110 | require_once('partials/widget.php'); -------------------------------------------------------------------------------- /languages/simple-fading-testimonials-fr_FR.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2017 Simple Fading Testimonials 2 | # This file is distributed under the same license as the Simple Fading Testimonials package. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: Simple Fading Testimonials 1.1.2\n" 6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/simple-fading-" 7 | "testimonials-widget\n" 8 | "POT-Creation-Date: 2017-01-31 16:59+0000\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "PO-Revision-Date: 2017-01-31 17:06+0000\n" 13 | "Language-Team: \n" 14 | "X-Generator: Poedit 1.8.11\n" 15 | "Last-Translator: \n" 16 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 17 | "Language: fr\n" 18 | 19 | #: admin/partials/custom_field.php:7 admin/partials/custom_field.php:8 20 | #: admin/partials/custom_field.php:19 21 | msgid "Testimonials" 22 | msgstr "Témoignages" 23 | 24 | #: admin/partials/custom_field.php:9 admin/partials/custom_field.php:10 25 | msgid "Add New Testimonial" 26 | msgstr "Ajouter un nouveau témoignage" 27 | 28 | #: admin/partials/custom_field.php:11 29 | msgid "Edit Testimonial" 30 | msgstr "Modifier le témoignage" 31 | 32 | #: admin/partials/custom_field.php:12 33 | msgid "New Testimonial" 34 | msgstr "Nouveau témoignage" 35 | 36 | #: admin/partials/custom_field.php:13 37 | msgid "All Testimonials" 38 | msgstr "Tous les témoignages" 39 | 40 | #: admin/partials/custom_field.php:14 41 | msgid "View Testimonial" 42 | msgstr "Voir le témoignage" 43 | 44 | #: admin/partials/custom_field.php:15 45 | msgid "Search Testimonials" 46 | msgstr "Chercher les Témoignages" 47 | 48 | #: admin/partials/custom_field.php:16 49 | msgid "No Testimonials Found" 50 | msgstr "Aucun Témoignage" 51 | 52 | #: admin/partials/custom_field.php:17 53 | msgid "No Testimonials found in Trash" 54 | msgstr "Aucun Témoignage dans Trash" 55 | 56 | #: admin/partials/custom_field.php:46 57 | msgid "Testimonial Content" 58 | msgstr "Témoignage Contenu" 59 | 60 | #: admin/partials/custom_field.php:47 61 | msgid "Word Count" 62 | msgstr "Nombre de mots" 63 | 64 | #: admin/partials/custom_field.php:81 65 | msgid "Enter testimonial author" 66 | msgstr "Entrez un auteur de témoignage" 67 | 68 | #. Plugin Name of the plugin/theme 69 | #: admin/partials/widget.php:7 70 | msgid "Simple Fading Testimonials" 71 | msgstr "Témoignages S'estomper Simples" 72 | 73 | #: admin/partials/widget.php:34 74 | msgid "Widget Title (leave blank for none):" 75 | msgstr "Titre du widget (Laisser vide pour aucun):" 76 | 77 | #: admin/partials/widget.php:40 78 | msgid "Number of testimonials to display:" 79 | msgstr "Nombre de témoignages à afficher:" 80 | 81 | #: admin/partials/widget.php:67 82 | msgid "Duration of each testimonial (ms):" 83 | msgstr "Durée de chaque témoignage (ms):" 84 | 85 | #: admin/partials/widget.php:73 86 | msgid "Transition speed (ms):" 87 | msgstr "Vitesse de transition (ms):" 88 | 89 | #: admin/partials/widget.php:79 90 | msgid "Author prefix:" 91 | msgstr "Préfixe de l'auteur:" 92 | 93 | #: admin/partials/widget.php:99 94 | msgid "Author Delay (ms):" 95 | msgstr "Auteur Delay (ms):" 96 | 97 | #: admin/partials/widget.php:106 98 | msgid "Author Fade In Speed (ms):" 99 | msgstr "Auteur Fade La vitesse (ms):" 100 | 101 | #. Plugin URI of the plugin/theme 102 | msgid "https://en-gb.wordpress.org/plugins/simple-fading-testimonials-widget/" 103 | msgstr "" 104 | 105 | #. Description of the plugin/theme 106 | msgid "" 107 | "Easily add revolving and fading testimonials to your site, via a widget." 108 | msgstr "" 109 | "Ajoutez facilement des histoires tournantes à votre site, via un widget." 110 | 111 | #. Author of the plugin/theme 112 | msgid "Stephen Kempin" 113 | msgstr "" 114 | 115 | #. Author URI of the plugin/theme 116 | msgid "http://www.stephenkempin.co.uk/" 117 | msgstr "" 118 | -------------------------------------------------------------------------------- /languages/simple-fading-testimonials-es_ES.po: -------------------------------------------------------------------------------- 1 | # Copyright (C) 2017 Simple Fading Testimonials 2 | # This file is distributed under the same license as the Simple Fading Testimonials package. 3 | msgid "" 4 | msgstr "" 5 | "Project-Id-Version: Simple Fading Testimonials 1.1.2\n" 6 | "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/simple-fading-" 7 | "testimonials-widget\n" 8 | "POT-Creation-Date: 2017-01-31 16:50+0000\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "PO-Revision-Date: 2017-01-31 16:56+0000\n" 13 | "Language-Team: \n" 14 | "X-Generator: Poedit 1.8.11\n" 15 | "Last-Translator: \n" 16 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 17 | "Language: es\n" 18 | 19 | #: admin/partials/custom_field.php:7 admin/partials/custom_field.php:8 20 | #: admin/partials/custom_field.php:19 21 | msgid "Testimonials" 22 | msgstr "Testimonios" 23 | 24 | #: admin/partials/custom_field.php:9 admin/partials/custom_field.php:10 25 | msgid "Add New Testimonial" 26 | msgstr "Añadir Nuevo Testimonio" 27 | 28 | #: admin/partials/custom_field.php:11 29 | msgid "Edit Testimonial" 30 | msgstr "Editar Testimonio" 31 | 32 | #: admin/partials/custom_field.php:12 33 | msgid "New Testimonial" 34 | msgstr "Nuevo Testimonio" 35 | 36 | #: admin/partials/custom_field.php:13 37 | msgid "All Testimonials" 38 | msgstr "Todos los Testimonios" 39 | 40 | #: admin/partials/custom_field.php:14 41 | msgid "View Testimonial" 42 | msgstr "Ver Testimonio" 43 | 44 | #: admin/partials/custom_field.php:15 45 | msgid "Search Testimonials" 46 | msgstr "Buscar Testimonios" 47 | 48 | #: admin/partials/custom_field.php:16 49 | msgid "No Testimonials Found" 50 | msgstr "No se encontraron testimonios" 51 | 52 | #: admin/partials/custom_field.php:17 53 | msgid "No Testimonials found in Trash" 54 | msgstr "No se encontraron testimonios en la Papelera" 55 | 56 | #: admin/partials/custom_field.php:46 57 | msgid "Testimonial Content" 58 | msgstr "Contenido del testimonio" 59 | 60 | #: admin/partials/custom_field.php:47 61 | msgid "Word Count" 62 | msgstr "Recuento de palabras" 63 | 64 | #: admin/partials/custom_field.php:81 65 | msgid "Enter testimonial author" 66 | msgstr "Escribe un autor de testimonio" 67 | 68 | #. Plugin Name of the plugin/theme 69 | #: admin/partials/widget.php:7 70 | msgid "Simple Fading Testimonials" 71 | msgstr "Testimonios de Desvanecimiento Sencillo" 72 | 73 | #: admin/partials/widget.php:34 74 | msgid "Widget Title (leave blank for none):" 75 | msgstr "Título del widget (dejar en blanco para ninguno):" 76 | 77 | #: admin/partials/widget.php:40 78 | msgid "Number of testimonials to display:" 79 | msgstr "Número de testimonios a mostrar:" 80 | 81 | #: admin/partials/widget.php:67 82 | msgid "Duration of each testimonial (ms):" 83 | msgstr "Duración de cada testimonio (ms):" 84 | 85 | #: admin/partials/widget.php:73 86 | msgid "Transition speed (ms):" 87 | msgstr "Velocidad de transición (ms):" 88 | 89 | #: admin/partials/widget.php:79 90 | msgid "Author prefix:" 91 | msgstr "Prefijo del autor:" 92 | 93 | #: admin/partials/widget.php:99 94 | msgid "Author Delay (ms):" 95 | msgstr "Autor tiempo de retardo (ms):" 96 | 97 | #: admin/partials/widget.php:106 98 | msgid "Author Fade In Speed (ms):" 99 | msgstr "Autor se desvanece en velocidad (ms):" 100 | 101 | #. Plugin URI of the plugin/theme 102 | msgid "https://en-gb.wordpress.org/plugins/simple-fading-testimonials-widget/" 103 | msgstr "" 104 | 105 | #. Description of the plugin/theme 106 | msgid "" 107 | "Easily add revolving and fading testimonials to your site, via a widget." 108 | msgstr "" 109 | "Añade fácilmente testimonios giratorios y de decoloración a tu sitio, a " 110 | "través de un widget." 111 | 112 | #. Author of the plugin/theme 113 | msgid "Stephen Kempin" 114 | msgstr "" 115 | 116 | #. Author URI of the plugin/theme 117 | msgid "http://www.stephenkempin.co.uk/" 118 | msgstr "" 119 | -------------------------------------------------------------------------------- /admin/partials/custom_field.php: -------------------------------------------------------------------------------- 1 | __('Testimonials', 'simple-fading-testimonials-widget'), 9 | 'singular_name' => __('Testimonials', 'simple-fading-testimonials-widget'), 10 | 'add_new' => __('Add New Testimonial', 'simple-fading-testimonials-widget'), 11 | 'add_new_item' => __('Add New Testimonial', 'simple-fading-testimonials-widget'), 12 | 'edit_item' => __('Edit Testimonial', 'simple-fading-testimonials-widget'), 13 | 'new_item' => __('New Testimonial', 'simple-fading-testimonials-widget'), 14 | 'all_items' => __('All Testimonials', 'simple-fading-testimonials-widget'), 15 | 'view_item' => __('View Testimonial', 'simple-fading-testimonials-widget'), 16 | 'search_items' => __('Search Testimonials', 'simple-fading-testimonials-widget'), 17 | 'not_found' => __('No Testimonials Found', 'simple-fading-testimonials-widget'), 18 | 'not_found_in_trash' => __('No Testimonials found in Trash', 'simple-fading-testimonials-widget'), 19 | 'parent_item_colon' => '', 20 | 'menu_name' => __('Testimonials', 'simple-fading-testimonials-widget'), 21 | ); 22 | 23 | //register post type 24 | register_post_type( 'Testimonial', array( 25 | 'labels' => $labels, 26 | 'has_archive' => false, 27 | 'public' => false, 28 | 'show_ui' => true, 29 | 'supports' => array( 'title', 'editor', 'page-attributes'), 30 | 'exclude_from_search' => false, 31 | 'capability_type' => 'post', 32 | 'rewrite' => array( 'slug' => 'Testimonials' ), 33 | 'menu_icon'=> 'dashicons-format-quote', 34 | ) 35 | ); 36 | 37 | } 38 | add_action( 'init', 'testimonials_post_type' ); 39 | //add_action( 'add_meta_boxes', 'add_events_metaboxes' ); 40 | 41 | // END Create Custom Post Type ----------------------------------------------- 42 | 43 | 44 | // add custom columns in admin ----------------------------------------------- 45 | add_filter('manage_edit-testimonial_columns', 'testimonials_table_head'); 46 | function testimonials_table_head( $defaults ) { 47 | $defaults['testimonial_content'] = __('Testimonial Content', 'simple-fading-testimonials-widget'); 48 | $defaults['word_count'] = __('Word Count', 'simple-fading-testimonials-widget'); 49 | return $defaults; 50 | } 51 | 52 | 53 | // word count function 54 | function word_count() { 55 | $content = get_post_field( 'post_content', $post->ID ); 56 | $word_count = str_word_count( strip_tags( $content ) ); 57 | echo $word_count; 58 | } 59 | 60 | 61 | // assign custom columns 62 | add_action( 'manage_testimonial_posts_custom_column', 'testimonials_table_content', 10, 2 ); 63 | function testimonials_table_content( $column_name, $post_id ) { 64 | if ($column_name == 'testimonial_content') { 65 | $testimonial_content = get_post_field( 'post_content', $post->ID ); 66 | // echo testimonial link and content 67 | echo "$testimonial_content"; 68 | } 69 | if ($column_name == 'word_count') { 70 | word_count(); 71 | } 72 | 73 | 74 | } 75 | // END add custom columns in admin -----------------------------------------------*/ 76 | 77 | 78 | // edit testimonial title placeholder 79 | function wpfstop_change_default_title( $title ){ 80 | if ( 'testimonial' == $screen->post_type ){ 81 | $title = _e('Enter testimonial author', 'simple-fading-testimonials-widget'); 82 | } 83 | return $title; 84 | } 85 | add_filter( 'enter_title_here', 'wpfstop_change_default_title' ); 86 | // END edit testimonial title placeholder ----------------------------------------------- 87 | 88 | 89 | 90 | // add admin credits 91 | function my_custom_admin_credits( $footer_text ) { 92 | $current_screen = get_current_screen(); 93 | if( $current_screen->post_type === "testimonial" ) { 94 | 95 | $footer_text = __( 'Thank you for using Simple Fading Testimonials by Stephen Kempin' ); 96 | } 97 | return $footer_text; 98 | } 99 | add_filter( 'admin_footer_text', 'my_custom_admin_credits' ); 100 | // END add admin credits -------------------------------------------------------------------------------- /includes/class-sft-loader.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | 13 | /** 14 | * Register all actions and filters for the plugin. 15 | * 16 | * Maintain a list of all hooks that are registered throughout 17 | * the plugin, and register them with the WordPress API. Call the 18 | * run function to execute the list of actions and filters. 19 | * 20 | * @package simple-fading-testimonials-widget 21 | * @subpackage simple-fading-testimonials-widget/admin 22 | * @author Stephen Kempin 23 | */ 24 | class Simple_Fading_Testimonials_Loader { 25 | 26 | /** 27 | * The array of actions registered with WordPress. 28 | * 29 | * @since 1.1.2 30 | * @access protected 31 | * @var array $actions The actions registered with WordPress to fire when the plugin loads. 32 | */ 33 | protected $actions; 34 | 35 | /** 36 | * The array of filters registered with WordPress. 37 | * 38 | * @since 1.1.2 39 | * @access protected 40 | * @var array $filters The filters registered with WordPress to fire when the plugin loads. 41 | */ 42 | protected $filters; 43 | 44 | /** 45 | * Initialize the collections used to maintain the actions and filters. 46 | * 47 | * @since 1.1.2 48 | */ 49 | public function __construct() { 50 | 51 | $this->actions = array(); 52 | $this->filters = array(); 53 | 54 | } 55 | 56 | /** 57 | * Add a new action to the collection to be registered with WordPress. 58 | * 59 | * @since 1.1.2 60 | * @param string $hook The name of the WordPress action that is being registered. 61 | * @param object $component A reference to the instance of the object on which the action is defined. 62 | * @param string $callback The name of the function definition on the $component. 63 | * @param int $priority Optional. he priority at which the function should be fired. Default is 10. 64 | * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1. 65 | */ 66 | public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { 67 | $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args ); 68 | } 69 | 70 | /** 71 | * Add a new filter to the collection to be registered with WordPress. 72 | * 73 | * @since 1.1.2 74 | * @param string $hook The name of the WordPress filter that is being registered. 75 | * @param object $component A reference to the instance of the object on which the filter is defined. 76 | * @param string $callback The name of the function definition on the $component. 77 | * @param int $priority Optional. he priority at which the function should be fired. Default is 10. 78 | * @param int $accepted_args Optional. The number of arguments that should be passed to the $callback. Default is 1 79 | */ 80 | public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { 81 | $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args ); 82 | } 83 | 84 | /** 85 | * A utility function that is used to register the actions and hooks into a single 86 | * collection. 87 | * 88 | * @since 1.1.2 89 | * @access private 90 | * @param array $hooks The collection of hooks that is being registered (that is, actions or filters). 91 | * @param string $hook The name of the WordPress filter that is being registered. 92 | * @param object $component A reference to the instance of the object on which the filter is defined. 93 | * @param string $callback The name of the function definition on the $component. 94 | * @param int $priority The priority at which the function should be fired. 95 | * @param int $accepted_args The number of arguments that should be passed to the $callback. 96 | * @return array The collection of actions and filters registered with WordPress. 97 | */ 98 | private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) { 99 | 100 | $hooks[] = array( 101 | 'hook' => $hook, 102 | 'component' => $component, 103 | 'callback' => $callback, 104 | 'priority' => $priority, 105 | 'accepted_args' => $accepted_args 106 | ); 107 | 108 | return $hooks; 109 | 110 | } 111 | 112 | /** 113 | * Register the filters and actions with WordPress. 114 | * 115 | * @since 1.1.2 116 | */ 117 | public function run() { 118 | 119 | foreach ( $this->filters as $hook ) { 120 | add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); 121 | } 122 | 123 | foreach ( $this->actions as $hook ) { 124 | add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); 125 | } 126 | 127 | } 128 | 129 | } -------------------------------------------------------------------------------- /includes/class-sft.php: -------------------------------------------------------------------------------- 1 | 14 | */ 15 | 16 | /** 17 | * The core plugin class. 18 | * 19 | * This is used to define internationalization, admin-specific hooks, and 20 | * public-facing site hooks. 21 | * 22 | * Also maintains the unique identifier of this plugin as well as the current 23 | * version of the plugin. 24 | * 25 | * @since 1.1.2 26 | * @package simple-fading-testimonials-widget 27 | * @subpackage simple-fading-testimonials-widget/admin 28 | * @author Stephen Kempin 29 | */ 30 | class Simple_Fading_Testimonials { 31 | 32 | /** 33 | * The loader that's responsible for maintaining and registering all hooks that power 34 | * the plugin. 35 | * 36 | * @since 1.1.2 37 | * @access protected 38 | * @var Plugin_Name_Loader $loader Maintains and registers all hooks for the plugin. 39 | */ 40 | protected $loader; 41 | 42 | /** 43 | * The unique identifier of this plugin. 44 | * 45 | * @since 1.1.2 46 | * @access protected 47 | * @var string $plugin_name The string used to uniquely identify this plugin. 48 | */ 49 | protected $plugin_name; 50 | 51 | /** 52 | * The current version of the plugin. 53 | * 54 | * @since 1.1.2 55 | * @access protected 56 | * @var string $version The current version of the plugin. 57 | */ 58 | protected $version; 59 | 60 | /** 61 | * Define the core functionality of the plugin. 62 | * 63 | * Set the plugin name and the plugin version that can be used throughout the plugin. 64 | * Load the dependencies, define the locale, and set the hooks for the admin area and 65 | * the public-facing side of the site. 66 | * 67 | * @since 1.1.2 68 | */ 69 | public function __construct() { 70 | 71 | $this->plugin_name = 'plugin-name'; 72 | $this->version = '1.1.2'; 73 | 74 | $this->load_dependencies(); 75 | $this->set_locale(); 76 | $this->define_admin_hooks(); 77 | $this->define_public_hooks(); 78 | 79 | } 80 | 81 | /** 82 | * Load the required dependencies for this plugin. 83 | * 84 | * Include the following files that make up the plugin: 85 | * 86 | * - Plugin_Name_Loader. Orchestrates the hooks of the plugin. 87 | * - Plugin_Name_i18n. Defines internationalization functionality. 88 | * - Plugin_Name_Admin. Defines all hooks for the admin area. 89 | * - Plugin_Name_Public. Defines all hooks for the public side of the site. 90 | * 91 | * Create an instance of the loader which will be used to register the hooks 92 | * with WordPress. 93 | * 94 | * @since 1.1.2 95 | * @access private 96 | */ 97 | private function load_dependencies() { 98 | 99 | /** 100 | * The class responsible for orchestrating the actions and filters of the 101 | * core plugin. 102 | */ 103 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-sft-loader.php'; 104 | 105 | /** 106 | * The class responsible for defining internationalization functionality 107 | * of the plugin. 108 | */ 109 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'includes/class-sft-i18n.php'; 110 | 111 | /** 112 | * The class responsible for defining all actions that occur in the admin area. 113 | */ 114 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'admin/sft-admin.php'; 115 | 116 | /** 117 | * The class responsible for defining all actions that occur in the public-facing 118 | * side of the site. 119 | */ 120 | require_once plugin_dir_path( dirname( __FILE__ ) ) . 'public/sft-public.php'; 121 | 122 | $this->loader = new Simple_Fading_Testimonials_Loader(); 123 | 124 | } 125 | 126 | /** 127 | * Define the locale for this plugin for internationalization. 128 | * 129 | * Uses the Plugin_Name_i18n class in order to set the domain and to register the hook 130 | * with WordPress. 131 | * 132 | * @since 1.1.2 133 | * @access private 134 | */ 135 | private function set_locale() { 136 | 137 | $plugin_i18n = new Simple_Fading_Testimonials_i18n(); 138 | 139 | $this->loader->add_action( 'plugins_loaded', $plugin_i18n, 'load_plugin_textdomain' ); 140 | 141 | } 142 | 143 | /** 144 | * Register all of the hooks related to the admin area functionality 145 | * of the plugin. 146 | * 147 | * @since 1.1.2 148 | * @access private 149 | */ 150 | private function define_admin_hooks() { 151 | 152 | $plugin_admin = new Simple_Fading_Testimonials_Admin( $this->get_plugin_name(), $this->get_version() ); 153 | 154 | $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_styles' ); 155 | $this->loader->add_action( 'admin_enqueue_scripts', $plugin_admin, 'enqueue_scripts' ); 156 | 157 | } 158 | 159 | /** 160 | * Register all of the hooks related to the public-facing functionality 161 | * of the plugin. 162 | * 163 | * @since 1.1.2 164 | * @access private 165 | */ 166 | private function define_public_hooks() { 167 | 168 | $plugin_public = new Simple_Fading_Testimonials_Public( $this->get_plugin_name(), $this->get_version() ); 169 | 170 | $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' ); 171 | $this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' ); 172 | 173 | } 174 | 175 | /** 176 | * Run the loader to execute all of the hooks with WordPress. 177 | * 178 | * @since 1.1.2 179 | */ 180 | public function run() { 181 | $this->loader->run(); 182 | } 183 | 184 | /** 185 | * The name of the plugin used to uniquely identify it within the context of 186 | * WordPress and to define internationalization functionality. 187 | * 188 | * @since 1.1.2 189 | * @return string The name of the plugin. 190 | */ 191 | public function get_plugin_name() { 192 | return $this->plugin_name; 193 | } 194 | 195 | /** 196 | * The reference to the class that orchestrates the hooks with the plugin. 197 | * 198 | * @since 1.1.2 199 | * @return Plugin_Name_Loader Orchestrates the hooks of the plugin. 200 | */ 201 | public function get_loader() { 202 | return $this->loader; 203 | } 204 | 205 | /** 206 | * Retrieve the version number of the plugin. 207 | * 208 | * @since 1.1.2 209 | * @return string The version number of the plugin. 210 | */ 211 | public function get_version() { 212 | return $this->version; 213 | } 214 | 215 | } -------------------------------------------------------------------------------- /admin/partials/widget.php: -------------------------------------------------------------------------------- 1 | 31 | 32 | 33 | 34 |

Simple Fading Testimonials by Stephen Kempin

35 |
36 | 37 | 38 |

39 | 40 |
41 |

42 | 43 | 44 |

45 | 60 | 68 |

69 | 70 | 71 |

72 | 73 | 74 |

75 | 76 | 77 |

78 | 79 | 80 |

81 | 82 | 83 |

84 | 85 | 100 |

101 | 102 | 103 |

104 | 105 | 106 |

107 | 108 | 109 | 110 |

111 | 112 | 113 |

114 | 115 | 116 | 117 | $number_testimonials, 146 | 'post_type' => 'testimonial' 147 | ); 148 | // The Query 149 | query_posts( $args ); 150 | if ($widget_custom_title) { // check if field is set 151 | echo "

$widget_custom_title

"; 152 | }; 153 | echo '
    '; 154 | // The Loop 155 | while ( have_posts() ) : the_post(); 156 | $testimonial_author = get_the_title(); // grab the title 157 | $testimonial_content = get_the_content(); // grab the content 158 | echo '
  • '; 159 | if ($testimonial_content) { // check if field is set 160 | echo ''.$testimonial_content.''; 161 | }; 162 | if ($testimonial_author) { // check if field is set 163 | echo ''; 164 | if($author_prefix) { // check if field is set 165 | echo $author_prefix.' '; 166 | }; 167 | echo $testimonial_author. ''; 168 | }; 169 | echo '
  • '; 170 | endwhile; 171 | echo '
'.$after_widget; 172 | // Reset Query 173 | wp_reset_query(); 174 | }} 175 | 176 | // register widget 177 | add_action('widgets_init', create_function('', 'return register_widget("wp_simple_fading_testimonials");')); 178 | 179 | ?> 180 | 181 | 182 | 183 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. --------------------------------------------------------------------------------