Plugin Directory

Changeset 1156521


Ignore:
Timestamp:
05/08/2015 09:44:03 PM (11 years ago)
Author:
eroux
Message:

Updated to version 4; use Google Books API; Tested to WordPress 4.2.2

Location:
currently-reading/trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • currently-reading/trunk/CurrentlyReading.php

    r1143052 r1156521  
    11<?php
    22/*
    3     Plugin Name: Currently Reading
    4     Plugin URI: http://blog.damn.org.za/widgets/
    5     Description: Display a Currently Reading widget using an image from (and linking to) the Google Books Website
    6     Author: Eugéne Roux
    7     Version: 3.4
    8     Author URI: http://damn.org.za/
     3    Plugin Name: Currently Reading
     4    Plugin URI: http://blog.damn.org.za/widgets/
     5    Description: Display a Currently Reading widget using the Google Books API
     6    Author: Eugéne Roux
     7    Version: 4.0
     8    Author URI: http://damn.org.za/
    99 */
    1010
    1111//
    12 //  CurrentlyReading Class
     12//  CurrentlyReading Class
    1313//
    1414class CurrentlyReading extends WP_Widget {
    15     /** constructor */
    16     function CurrentlyReading() {
    17         $widget_ops = array( 'classname' => 'widget_reading', 'description' => __( 'Display a Currently Reading widget using an image from (and linking to) the Google Books website' ), 'internalcss' => true );
    18         $this->WP_Widget( 'reading', __( 'Reading', 'reading_widget' ), $widget_ops );
    19         $this->widget_defaults = array(
    20             'internalcss' => true,
    21             'boxshadow' => true,
    22         );
    23     }
    24 
    25     //
    26     //  @see WP_Widget::widget
    27     //
    28     function widget( $args, $instance ) {
    29         $args = wp_parse_args( $args, $this->widget_defaults );
    30         extract( $args );
     15    function CurrentlyReading() {
     16        $widget_ops = array( 'classname' => 'widget_reading', 'description' => __( 'Display a Currently Reading widget using the Google Books API' ), 'internalcss' => true );
     17        $this->WP_Widget( 'reading', __( 'Reading', 'reading_widget' ), $widget_ops );
     18        $this->widget_defaults = [
     19            'internalcss' => true,
     20            'boxshadow' => true,
     21            'domain' => 'google.co.za',
     22        ];
     23    }
     24
     25    //
     26    //  @see WP_Widget::widget
     27    //
     28    function widget( $args, $instance ) {
     29        $args = wp_parse_args( $args, $this->widget_defaults );
     30        extract( $args );
    3131        //$widget_options = wp_parse_args( $instance, $this->widget_defaults );
    3232
    33         $title = apply_filters('widget_title', $instance['title']);
    34         $internalcss = $instance["internalcss"] ? true : false;
    35         $boxshadow = $instance["boxshadow"] ? true : false;
    36 
    37         if ( $instance['isbn'] != "" ) {      // No point in a "Currently Reading" if you aren't, is there?
    38 
    39             echo $before_widget;
    40 
    41             if ( $title )
    42                 echo $before_title . $title . $after_title; // This way we get to choose a "No Title" scenario...
    43 
    44             $spacechars = array(' ', '-', '_');
    45             $myisbn = str_replace($spacechars, "", $instance['isbn']);
    46 
    47             print("\n\t<!-- ISBN: " . $instance['isbn'] . " -->\n");
    48 
    49             print("\t\t<div");
    50             if ( $internalcss ) {
    51                 print(" style='margin: 1em; padding: 2ex;'");
    52             }
    53             print( " class='currentlyreading' id='currenlyreading-ISBN" . $myisbn . "'>\n");
    54 
    55             print( "\t\t\t<a href='http://books.google.com/books?vid=ISBN$myisbn'>");
    56             print( "<img class='currentlyreading' id='currenlyreading-ISBN" . $myisbn . "-img' " );
    57             if ( $boxshadow ) {
    58                 print( "style='-moz-box-shadow: #CCC 5px 5px 5px; -webkit-box-shadow: #CCC 5px 5px 5px; " );
    59                 print( "-khtml-box-shadow: #CCC 5px 5px 5px; box-shadow: #CCC 5px 5px 5px;' " );
    60             }
    61             print( "src='http://books.google.com/books?vid=ISBN$myisbn&printsec=frontcover&img=1&zoom=1' ");
    62             print( "alt='ISBN: " . $instance['isbn'] . "' title='ISBN: " . $instance['isbn'] . "'/></a>\n");
    63             print( "\t\t</div>\n");
    64 
    65             echo $after_widget;
    66         }
    67     }
    68 
    69     //
    70     //  @see WP_Widget::update
    71     //
    72     function update( $new_instance, $old_instance ) {
    73         $instance = $old_instance;
    74         $instance['title'] = strip_tags( $new_instance['title'] );
    75         $instance['isbn'] = strip_tags( $new_instance['isbn'] );
    76         $instance['internalcss'] = $new_instance['internalcss'] ? 1 : 0;
    77         $instance['boxshadow'] = $new_instance['boxshadow'] ? 1 : 0;
    78         return $instance;
    79     }
    80 
    81     //
    82     //  @see WP_Widget::form
    83     //
    84     function form( $instance ) {
    85         $instance = wp_parse_args( $instance, $this->widget_defaults );
    86         extract( $instance );
    87 
    88         $title = esc_attr( $instance['title'] );
    89         $isbn = esc_attr( $instance['isbn'] );
    90         $internalcss = $instance['internalcss'] ? "checked='checked'" : "";
    91         $boxshadow = $instance['boxshadow'] ? "checked='checked'" : "";
    92 
    93         print( "\t<p>\n\t\t<label for='" . $this->get_field_id("title") . "'>" ); _e( "Title:" );
    94         print( "\n\t\t\t<input class='widefat' id='" . $this->get_field_id('title') . "' name='" );
    95         print( $this->get_field_name('title') . "' type='text' value='" . $title );
    96         print( "' />\n\t\t</label>\n\t\t<em>Leave blank for no title</em>\n\t</p>\n" );
    97 
    98         print( "\t<p>\n\t\t<label for='" . $this->get_field_id("isbn") . "'>" ); _e( "ISBN:" );
    99         print( "\n\t\t\t<input class='widefat' id='" . $this->get_field_id("isbn") . "' name='" );
    100         print( $this->get_field_name("isbn") . "' type='text' value='" . $isbn . "' />\n\t\t</label>\n\t</p>\n" );
    101 
    102         print( "\t<p>\n" );
    103         print( "\t\t<input class='checkbox' type='checkbox' " . $internalcss );
    104         print( " id='" . $this->get_field_id("internalcss") . "' name='" . $this->get_field_name("internalcss") . "'/>\n" );
    105         print( "\t\t<label for='" . $this->get_field_id("internalcss") . "'>" ); _e( "Pad the Image" );
    106         print( "\n\t\t<br />\n" );
    107         print( "\t\t<input class='checkbox' type='checkbox' " . $boxshadow );
    108         print( " id='" . $this->get_field_id("boxshadow") . "' name='" . $this->get_field_name("boxshadow") . "'/>\n" );
    109         print( "\t\t<label for='" . $this->get_field_id("boxshadow") . "'>" ); _e( "Display a Box-Shadow" );
    110         print( "</label>\n\t</p>\n" );
    111 
    112     }
     33        $title = apply_filters( 'widget_title', $instance[ 'title' ]);
     34        $internalcss = $instance[ "internalcss" ] ? true : false;
     35        $boxshadow   = $instance[ "boxshadow" ]   ? true : false;
     36        $localdomain = $instance[ "domain" ]      ? $instance[ "domain" ] : "google.co.za";
     37
     38        if ( $instance['isbn'] != "" ) {      // No point in a "Currently Reading" if you aren't, is there?
     39
     40            $spacechars = array( ' ', '-', '_' );
     41            $myisbn = str_replace( $spacechars, "", $instance[ 'isbn' ]);
     42            $isbnjson = json_decode( file_get_contents( "https://www.googleapis.com/books/v1/volumes?q=isbn:" . $myisbn ), true );
     43
     44            if ( $isbnjson[ "totalItems" ] > 0 ) {
     45
     46                echo $before_widget;
     47
     48                if ( $title )
     49                    echo $before_title . $title . $after_title; // This way we get to choose a "No Title" scenario...
     50
     51
     52                print("\n\t<!-- ISBN: " . $myisbn . " / Title: " . $isbnjson[ 'items' ][0][ 'volumeInfo' ][ 'title' ] . " -->\n");
     53
     54                print( "\t\t<div" );
     55                if ( $internalcss ) {
     56                    print( " style='margin: 1em; padding: 2ex;'" );
     57                }
     58                print( " class='currentlyreading' id='currenlyreading-ISBN" . $myisbn . "'>\n");
     59
     60                $googlelink = $isbnjson[ 'items' ][0][ 'volumeInfo' ][ 'canonicalVolumeLink' ];
     61                print("\n\t<!-- Google Link: " . $googlelink . " -->\n");
     62
     63                print( "\t\t\t<a href='" . str_replace( "google.com", $localdomain, $googlelink ) . "'>");
     64                print( "<img class='currentlyreading' id='currenlyreading-ISBN" . $myisbn . "-img' " );
     65                if ( $boxshadow ) {
     66                    print( "style='-moz-box-shadow: #CCC 5px 5px 5px; -webkit-box-shadow: #CCC 5px 5px 5px; " );
     67                    print( "-khtml-box-shadow: #CCC 5px 5px 5px; box-shadow: #CCC 5px 5px 5px;' " );
     68                }
     69                print( "src='"   . $isbnjson[ 'items' ][0][ 'volumeInfo' ][ 'imageLinks' ][ 'thumbnail' ]   . "' " );
     70                print( "alt='"   . $isbnjson[ 'items' ][0][ 'volumeInfo' ][ 'title' ]                       . "' ");
     71                print( "title='" . $isbnjson[ 'items' ][0][ 'volumeInfo' ][ 'title' ]                       . "'/></a>\n");
     72                print( "\t\t</div>\n");
     73
     74                echo $after_widget;
     75            }
     76        }
     77    }
     78
     79    //
     80    //  @see WP_Widget::update
     81    //
     82    function update( $new_instance, $old_instance ) {
     83        $instance = $old_instance;
     84        $instance[ 'title' ]        = strip_tags( $new_instance[ 'title' ]);
     85        $instance[ 'isbn' ]         = strip_tags( $new_instance[ 'isbn' ]);
     86        $instance[ 'internalcss' ]  = $new_instance[ 'internalcss' ] ? 1 : 0;
     87        $instance[ 'boxshadow' ]    = $new_instance[ 'boxshadow'   ] ? 1 : 0;
     88        $instance[ "domain" ]       = $new_instance[ "domain" ]      ? $new_instance[ "domain" ] : "google.co.za";
     89        return $instance;
     90    }
     91
     92    //
     93    //  @see WP_Widget::form
     94    //
     95    function form( $instance ) {
     96        $instance = wp_parse_args( $instance, $this->widget_defaults );
     97        extract( $instance );
     98
     99        $title       = esc_attr( $instance[ 'title' ]);
     100        $isbn        = esc_attr( strip_tags( $instance[ 'isbn' ]));
     101        $internalcss = $instance[ 'internalcss' ] ? "checked='checked'" : "";
     102        $boxshadow   = $instance[ 'boxshadow' ]   ? "checked='checked'" : "";
     103        $activedom   = $instance[ 'domain' ];
     104
     105        $googledomains = [
     106            'Worldwide' => 'google.com',
     107            'Afghanistan' => 'google.com.af',
     108            'Albania' => 'google.al',
     109            'Algeria' => 'google.dz',
     110            'American Samoa' => 'google.as',
     111            'Andorra' => 'google.ad',
     112            'Angola' => 'google.co.ao',
     113            'Anguilla' => 'google.com.ai',
     114            'Antigua and Barbuda' => 'google.com.ag',
     115            'Argentina' => 'google.com.ar',
     116            'Armenia' => 'google.am',
     117            'Ascension Island' => 'google.ac',
     118            'Australia' => 'google.com.au',
     119            'Austria' => 'google.at',
     120            'Azerbaijan' => 'google.az',
     121            'Bahamas' => 'google.bs',
     122            'Bahrain' => 'google.com.bh',
     123            'Bangladesh' => 'google.com.bd',
     124            'Belarus' => 'google.by',
     125            'Belgium' => 'google.be',
     126            'Belize' => 'google.com.bz',
     127            'Benin' => 'google.bj',
     128            'Bhutan' => 'google.bt',
     129            'Bolivia' => 'google.com.bo',
     130            'Bosnia and Herzegovina' => 'google.ba',
     131            'Botswana' => 'google.co.bw',
     132            'Brazil' => 'google.com.br',
     133            'British Indian Ocean Territory' => 'google.io',
     134            'British Virgin Islands' => 'google.vg',
     135            'Brunei' => 'google.com.bn',
     136            'Bulgaria' => 'google.bg',
     137            'Burkina Faso' => 'google.bf',
     138            'Burma' => 'google.com.mm',
     139            'Burundi' => 'google.bi',
     140            'Cambodia' => 'google.com.kh',
     141            'Cameroon' => 'google.cm',
     142            'Canada' => 'google.ca',
     143            'Cape Verde' => 'google.cv',
     144            'Catalonia Catalan Countries' => 'google.cat',
     145            'Central African Republic' => 'google.cf',
     146            'Chad' => 'google.td',
     147            'Chile' => 'google.cl',
     148            'China' => 'g.cn',
     149            'China' => 'google.cn',
     150            'Cocos (Keeling) Islands' => 'google.cc',
     151            'Colombia' => 'google.com.co',
     152            'Cook Islands' => 'google.co.ck',
     153            'Costa Rica' => 'google.co.cr',
     154            'Croatia' => 'google.hr',
     155            'Cuba' => 'google.com.cu',
     156            'Cyprus' => 'google.com.cy',
     157            'Czech Republic' => 'google.cz',
     158            'Democratic Republic of the Congo' => 'google.cd',
     159            'Denmark' => 'google.dk',
     160            'Djibouti' => 'google.dj',
     161            'Dominica' => 'google.dm',
     162            'Dominican Republic' => 'google.com.do',
     163            'Ecuador' => 'google.com.ec',
     164            'Egypt' => 'google.com.eg',
     165            'El Salvador' => 'google.com.sv',
     166            'Estonia' => 'google.ee',
     167            'Ethiopia' => 'google.com.et',
     168            'Federated States of Micronesia' => 'google.fm',
     169            'Fiji' => 'google.com.fj',
     170            'Finland' => 'google.fi',
     171            'France' => 'google.fr',
     172            'French Guiana' => 'google.gf',
     173            'Gabon' => 'google.ga',
     174            'Gambia' => 'google.gm',
     175            'Georgia' => 'google.ge',
     176            'Germany' => 'google.de',
     177            'Ghana' => 'google.com.gh',
     178            'Gibraltar' => 'google.com.gi',
     179            'Greece' => 'google.gr',
     180            'Greenland' => 'google.gl',
     181            'Guadeloupe' => 'google.gp',
     182            'Guatemala' => 'google.com.gt',
     183            'Guernsey' => 'google.gg',
     184            'Guyana' => 'google.gy',
     185            'Haiti' => 'google.ht',
     186            'Honduras' => 'google.hn',
     187            'Hong Kong' => 'google.com.hk',
     188            'Hungary' => 'google.hu',
     189            'Iceland' => 'google.is',
     190            'India' => 'google.co.in',
     191            'Indonesia' => 'google.co.id',
     192            'Iran' => 'google.ir',
     193            'Iraq' => 'google.iq',
     194            'Ireland' => 'google.ie',
     195            'Isle of Man' => 'google.im',
     196            'Israel' => 'google.co.il',
     197            'Italy' => 'google.it',
     198            'Ivory Coast' => 'google.ci',
     199            'Jamaica' => 'google.com.jm',
     200            'Japan' => 'google.co.jp',
     201            'Jersey' => 'google.je',
     202            'Jordan' => 'google.jo',
     203            'Kazakhstan' => 'google.kz',
     204            'Kenya' => 'google.co.ke',
     205            'Kiribati' => 'google.ki',
     206            'Kuwait' => 'google.com.kw',
     207            'Kyrgyzstan' => 'google.kg',
     208            'Laos' => 'google.la',
     209            'Latvia' => 'google.lv',
     210            'Lebanon' => 'google.com.lb',
     211            'Lesotho' => 'google.co.ls',
     212            'Libya' => 'google.com.ly',
     213            'Liechtenstein' => 'google.li',
     214            'Lithuania' => 'google.lt',
     215            'Luxembourg' => 'google.lu',
     216            'Macedonia' => 'google.mk',
     217            'Madagascar' => 'google.mg',
     218            'Malawi' => 'google.mw',
     219            'Malaysia' => 'google.com.my',
     220            'Maldives' => 'google.mv',
     221            'Mali' => 'google.ml',
     222            'Malta' => 'google.com.mt',
     223            'Mauritius' => 'google.mu',
     224            'Mexico' => 'google.com.mx',
     225            'Moldova' => 'google.md',
     226            'Mongolia' => 'google.mn',
     227            'Montenegro' => 'google.me',
     228            'Montserrat' => 'google.ms',
     229            'Morocco' => 'google.co.ma',
     230            'Mozambique' => 'google.co.mz',
     231            'Namibia' => 'google.com.na',
     232            'Nauru' => 'google.nr',
     233            'Nepal' => 'google.com.np',
     234            'Netherlands' => 'google.nl',
     235            'New Zealand' => 'google.co.nz',
     236            'Nicaragua' => 'google.com.ni',
     237            'Niger' => 'google.ne',
     238            'Nigeria' => 'google.com.ng',
     239            'Niue' => 'google.nu',
     240            'Norfolk Island' => 'google.com.nf',
     241            'Norway' => 'google.no',
     242            'Oman' => 'google.com.om',
     243            'Pakistan' => 'google.com.pk',
     244            'Palestine' => 'google.ps',
     245            'Panama' => 'google.com.pa',
     246            'Papua New Guinea' => 'google.com.pg',
     247            'Paraguay' => 'google.com.py',
     248            'Peru' => 'google.com.pe',
     249            'Philippines' => 'google.com.ph',
     250            'Pitcairn Islands' => 'google.pn',
     251            'Poland' => 'google.pl',
     252            'Portugal' => 'google.pt',
     253            'Puerto Rico' => 'google.com.pr',
     254            'Qatar' => 'google.com.qa',
     255            'Republic of the Congo' => 'google.cg',
     256            'Romania' => 'google.ro',
     257            'Russia' => 'google.ru',
     258            'Rwanda' => 'google.rw',
     259            'Saint Helena, Ascension, Tristan da Cunha' => 'google.sh',
     260            'Saint Lucia' => 'google.com.lc',
     261            'Saint Vincent and the Grenadines' => 'google.com.vc',
     262            'Samoa' => 'google.ws',
     263            'San Marino' => 'google.sm',
     264            'Saudi Arabia' => 'google.com.sa',
     265            'Senegal' => 'google.sn',
     266            'Serbia' => 'google.rs',
     267            'Seychelles' => 'google.sc',
     268            'Sierra Leone' => 'google.com.sl',
     269            'Singapore' => 'google.com.sg',
     270            'Slovakia' => 'google.sk',
     271            'Slovenia' => 'google.si',
     272            'Solomon Islands' => 'google.com.sb',
     273            'Somalia' => 'google.so',
     274            'South Africa' => 'google.co.za',
     275            'South Korea' => 'google.co.kr',
     276            'Spain' => 'google.es',
     277            'Sri Lanka' => 'google.lk',
     278            'Sweden' => 'google.se',
     279            'Switzerland' => 'google.ch',
     280            'São Tomé and Príncipe' => 'google.st',
     281            'Taiwan' => 'google.com.tw',
     282            'Tajikistan' => 'google.com.tj',
     283            'Tanzania' => 'google.co.tz',
     284            'Thailand' => 'google.co.th',
     285            'Timor-Leste' => 'google.tl',
     286            'Togo' => 'google.tg',
     287            'Tokelau' => 'google.tk',
     288            'Tonga' => 'google.to',
     289            'Trinidad and Tobago' => 'google.tt',
     290            'Tunisia' => 'google.com.tn',
     291            'Tunisia' => 'google.tn',
     292            'Turkey' => 'google.com.tr',
     293            'Turkmenistan' => 'google.tm',
     294            'Uganda' => 'google.co.ug',
     295            'Ukraine' => 'google.com.ua',
     296            'United Arab Emirates' => 'google.ae',
     297            'United Kingdom' => 'google.co.uk',
     298            'United States Virgin Islands' => 'google.co.vi',
     299            'United States' => 'google.us',
     300            'Uruguay' => 'google.com.uy',
     301            'Uzbekistan' => 'google.co.uz',
     302            'Vanuatu' => 'google.vu',
     303            'Venezuela' => 'google.co.ve',
     304            'Vietnam' => 'google.com.vn',
     305            'Zambia' => 'google.co.zm',
     306            'Zimbabwe' => 'google.co.zw',
     307        ];
     308
     309        print( "\t<p>\n\t\t<label for='" . $this->get_field_id("title") . "'>" ); _e( "Title:" );
     310        print( "\n\t\t\t<input class='widefat' id='" . $this->get_field_id('title') . "' name='" );
     311        print( $this->get_field_name( 'title' ) . "' type='text' value='" . $title );
     312        print( "' />\n\t\t</label>\n\t\t<em>Leave blank for no title</em>\n\t</p>\n" );
     313
     314        print( "\t<p>\n\t\t<label for='" . $this->get_field_id( "isbn" ) . "'>" ); _e( "ISBN:" );
     315        print( "\n\t\t\t<input class='widefat' id='" . $this->get_field_id( 'isbn' ) . "' name='" );
     316        print( $this->get_field_name( "isbn" ) . "' type='text' value='" . $isbn . "' />\n\t\t</label>\n\t</p>\n" );
     317
     318        print( "\t<p>\n" );
     319        print( "\t\t<input class='checkbox' type='checkbox' " . $internalcss );
     320        print( " id='" . $this->get_field_id( "internalcss" ) . "' name='" . $this->get_field_name( "internalcss" ) . "'/>\n" );
     321        print( "\t\t<label for='" . $this->get_field_id( "internalcss" ) . "'>" ); _e( "Pad the Image" );
     322        print( "\n\t\t<br />\n" );
     323        print( "\t\t<input class='checkbox' type='checkbox' " . $boxshadow );
     324        print( " id='" . $this->get_field_id( "boxshadow" ) . "' name='" . $this->get_field_name( "boxshadow" ) . "'/>\n" );
     325        print( "\t\t<label for='" . $this->get_field_id( "boxshadow" ) . "'>" ); _e( "Display a Box-Shadow" );
     326        print( "</label>\n\t</p>\n" );
     327
     328        print( "\t<p>\n" );
     329        _e( "Choose Alternate Google Country" );
     330        print( "\t\t<select class='select' type='select' id='" . $this->get_field_id( "domain" ) . "' name='" . $this->get_field_name( "domain" ) . "'>\n");
     331        foreach ( $googledomains as $country => $domain ) {
     332            if ( $domain == $activedom )
     333                print( "\t\t\t<option value='$domain' selected>$country</option>\n" );
     334            else
     335                print( "\t\t\t<option value='$domain'>$country</option>\n" );
     336        }
     337        print( "\t\t</select>\n");
     338        print( "\t\t<br /><em>Please change if your audience gets a Google '500' error</em>\n\t</p>\n" );
     339    }
    113340}
    114341
    115342//
    116 //  register CurrentlyReading widget
     343//  register CurrentlyReading widget
    117344//
    118 add_action('widgets_init', create_function('', 'return register_widget( "CurrentlyReading" );'));
     345add_action( 'widgets_init', create_function( '', 'return register_widget( "CurrentlyReading" );' ));
     346add_action( 'admin_menu', 'currently_reading_menu' );
     347
     348function currently_reading_menu() {
     349    add_options_page( 'Currently Reading', 'Currently Reading', 'manage_options', "CurrentlyReading.php", "CurrentlyReading->form" );
     350}
     351?>
  • currently-reading/trunk/readme.txt

    r1143052 r1156521  
    33Tags: books, read, reading, admin, administration, jadb
    44Requires at least: 2.8
    5 Tested up to: 4.2
     5Tested up to: 4.2.2
    66Stable tag: trunk
    77
     
    99
    1010== Description ==
    11 Supplying an [ISBN](http://en.wikipedia.org/wiki/International_Standard_Book_Number) (and, optionally, a Title) will display a cover image of the relevant book with a link to that book's page on [Google Books](http://http://books.google.com/).
     11Supplying an [ISBN](http://en.wikipedia.org/wiki/International_Standard_Book_Number) (and, optionally, a Title) will display a cover image of the relevant book with a link to that book's page on [Google Books](http://http://books.google.com/) using the Google Books API.
    1212
    1313Using the Widget you can choose whether to:
     
    4444
    45451. The Configuration of a "Currently Reading" section, with the "UL" marker suppressed.
    46 2. Multiple Widgets, the first marking them as "Recently Read".
    47 3. The previous configuration as rendered by Chrome.
     462. Multiple Widgets, the first marking them as "Finished Reading".
     473. The previous configuration as rendered by Safari.
     484. The difference between Padding and Box-Shadow Enabled and Disabled.
    4849
    4950== Changelog ==
     
    7273
    7374* Moved to a '&lt;div&gt;' based layout instead of using Lists (Kudos to James Sumners for the suggestion)
     75
     76= 3.4 =
     77
     78* Minor fixes to ensure WordPress compatibility
     79
     80= 4.0 =
     81
     82* Use the Google Books API instead of previous deep-linking
     83* Fix display of ISBN when updating the widget
     84* Allow the selection of Alternate Google Domains (books.google.com causes issues in some countries)
     85* Display book's Title instead of ISBN on mouse-over
Note: See TracChangeset for help on using the changeset viewer.