SlideShare a Scribd company logo
Hacking iBooks and EPUB
with JavaScript!
Jim McKeeth
jim@mckeeth.org
@JimMcKeeth
What 400 Level Means
• Assumed understanding of JavaScript and HTML5 web technologies.
• More examples and less explanation.
• Please ask questions as we go.
About Jim McKeeth
• Lead Developer Evangelist for EmbarcaderoTechnologies
• Delphi XE5 creates native iOS & Android apps from same code
• Improvisational performer with ComedySportz Boise
• Inventor of pattern and swipe to unlock
• US Patent #s 6,766,456 & 8,352,745 . . . (First patented in 2000)
• Used on iOS,Android and Windows 8
Why Put JavaScript in a Book?
• Provide updated data to go
along with book topic
• Allow real time collaboration
between readers / students
• Create interactive story books
• Customize story to the reader
• Collect quiz responses
• Interesting animation effects
• Add games & bonuses
• Engage your readers
• Track readers
• Gather feedback
• Sky’s the limit!
Overview
• JavaScript Interactive Widgets
• Dashcode
• Tumult Hype
• Creating Widgets from Scratch
• Creating ePub from Scratch
• Cracking ePub
More Information
• 4 Part Series on iBooks JavaScript Widgets
• http://sn.im/ibooksjs
iBooks Author 2
• Free in the Mac App Store
• Extension on ePub 3 standard (non-compatible)
• DRM and license only for iBooks on the iPad
• Nice powerful and easy interface for building books
• Be aware of orientations
iBooks / ePub Technical Details
• Zip file of HTML5 content adhering to specific spec.
• 2 GB technical book size limit
• 200 MB recommended size
• iBooks IBA files encrypt the page content
• All resources must be included!
3D Models
• 20,000 to 50,000 moderately textured polygons
• Textures <= 1024x1024
• Use COLLADA (.dae) file format
• Specify a camera
• Simple lighting
• http://support.apple.com/kb/ht5093
3D Models
• Trimble SketchUp Make
• www.sketchup.com
• Free version creates .dae 3D models that
work in iBooks Author
• http://www.sketchup.com/products/3D-warehouse
3D Model Demo
Dashcode
Dashcode
• JavaScript, HTML and CSS Editor
from Apple
• For creating Dashboard widgets
• Part of Xcode until Xcode 4.3
• Now a separate download: http://
bit.ly/Dashcode
Latest:“Late July” for
Aug 7, 2012 - 3.0.5
Demo Dashcode
Things to Remember
1. Backwards compatibility on, or parts disappear.
2. The back of the widget never gets displayed.
3. Text doesn’t show up in the default image unless
you change the option in the inspector.
4. Dashcode text parts layout odd on the iPad.
5. Java and other plugins don’t work on the iPad.
Posting to Web Services
• External web services must implement CORS
• (Cross-Origin Resource Sharing) headers.
• enable-cors.org
• www.w3.org/TR/cors
Tumult Hype 2
• HTML5 & JavaScript Multimedia Studio
• Create JavaScript Powered Animations and Interactions
• Creates Widgets Directly
• Compatible with iBooks Author & the iPad
• $59.99 in Mac App Store (on sale $29.99 through Sept 10th)
Tumult Hype Demo
Creating from Scratch
• Required files:
• Main.html - Main HTML file (any name
will work).
• Default.png – Preview image and place
holder.
• Info.plist – Property list describing
widget. References main HTML.
http://support.apple.com/kb/HT5068
Required Properties
• CFBundleIdentifier - Unique identifier
• CFBundleName - Friendly name
• MainHTML -The main HTML file
Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://
www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
! <key>CFBundleIdentifier</key>
! <string>com.360idev.gallery</string>
! <key>CFBundleName</key>
! <string>Gallery</string>
! <key>MainHTML</key>
! <string>index.html</string>
</dict>
</plist>
Making a Package
• Put all files in a directory - Subdirectories are
OK (use relative paths for references).
• Rename root directory .wdgt
• Don’t Install Package! It gets deleted. Use
Duplicate to test.
• Context / Show Package Contents to edit.
Supported HTML5 Features
• localStorage (per book - between widgets)
• Geolocation (requests permission)
• Canvas
• CSS Animations
• Others . . .
Prevent Flicker
1. Add a IBNotifiesOnReady item set to true in the Dashboard widget's
info.plist file, so iBooks knows this Dashboard widget will tell it when to switch to
displaying the running HTML widget.
2. Set your Dashboard widget to load the Apple javascript library.
3. In javascript call widget.notifyContentIsReady() to notify iBooks it can
switch from showing the Default.png file to displaying the running HTML widget.
http://support.apple.com/kb/HT5068
From Scratch Demos
Things to Remember
1. Double clicking a widget on desktop deletes it
(installs it into the library).
2. The aspect ratio of your Default.png
determine the aspect ratio of your widget.
3. All JavaScript libraries must be referenced from
the Main HTML file, and in the package.
bookry.com
• Custom Sliding Puzzle
• LiveTwitter Feed
• InteractiveTimeline Images
• YouTubeVideo
• VimeoVideo
• Google Maps
• Live Polling
• More to come . . .
• Auto-generated customized widgets ready to add to iBooks (or look
at the code to figure out how they did it.)
• Free license includes “branding”
See also ibooksgenerator.com
Live Twitter feed in iBooks
Live Google Maps in iBooks
Creating an ePub from Scratch
No iBooks Author, no Dashcode, just text editing!
Disclaimer
• So far I have been unable to access online content
without using iBooks Author.
International Digital
Publishing Forum
• Develops and maintains the EPUB
content publication standard
• idpf.org/epub
• ePub 3.0 is current standard
• October 2011
• Official support for JavaScript
Progressive Enhancements
& Fallbacks
2.4.1 Scripting Contexts
• container-constrained
• An instance of the [HTML5]
script element included in an
EPUB Content Document
that is embedded in a parent
Content Document using
one of the [HTML5] object,
iframe or embed elements.
• spine-level
• An instance of the [HTML5]
script element included in a
Top-level Content Document.
• JavaScript on the page itself!
•
iBooks Author widgets are
container-constrained
2.4.2 Content Conformance
• A container-constrained script must not contain instructions to:
• modify the DOM of the parent Content Document
• modify other contents in the Publication
• manipulate the size of its containing rectangle
• Container-constrained scripts
2.4.2 Content Conformance
• EPUB Content Documents that include spine-level scripting must
utilize the progressive enhancement technique:
• When rendered without scripting support document must retain
its integrity, remaining consumable by the User without any
information loss or other significant deterioration.
• Use fallbacks!
• iBooks doesn’t seem to allow network communications at spine-level
• Spine-level scripts
The JavaScript epubReadingSystem
Object
• Syntax:
• ReadingSystem = navigator.epubReadingSystem;
• Properties: name, version, layoutStyle
• Method: hasFeature(feature)
• dom-manipulation, layout-changes, touch-
events, mouse-events, keyboard-events,
spine-scripting
Appendix B 
preventDefault
• Use to “override” the default behavior of the reading system.
• If you have a touch zone near the edge of the screen, this gives you
the touch event instead of turning the page.
• Turn off for whole document:
• document.addEventListener('touchmove', function (e) {e.preventDefault();},
false);
• In individual event handler:
• event.preventDefault();
ePub Samples
• Repository of ePub 3.0 sample documents
• http://code.google.com/p/epub-samples/
• See “Scripted Content Documents” under the “Feature Matrix”
ePub Format
• A zip file with epub extension
• mimetype must be the first file
in the zip
• Container.xml references the
opf file (which can be named
anything)
• All content files must be listed
in the opf file
• mimetype
• iTunesMetadata.plist
• META-INF
• container.xml
• OPS
• content.opf
• content files
Automatically
added by iTunes
but not needed.
mimetype
• First file in zip - uncompressed
• No Unicode signature or byte order mark
• Only contain
• application/epub+zip
container.xml
<?xml version="1.0" encoding="UTF-8"?>
<container
xmlns="urn:oasis:names:tc:opendocument:xmlns:container"
version="1.0">
<rootfiles>
<rootfile
full-path="OPS/content.opf"
media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
Content OPF
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="3.0"
xml:lang="en"
unique-identifier="uid" prefix="rendition: http://www.idpf.org/
vocab/rendition/#
cc: http://creativecommons.org/ns#">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:xxx>. . .</dc:xxx>
</metadata>
<manifest>
<item>. . .</item>
</manifest>
<spine>
<itemref ... />
</spine>
</package>
Content OPF
metadata
•The metadata section describes the book
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title id="title">JavaScript Test Book</dc:title>
<dc:description>Test of spine-level scripting</dc:description>
<dc:creator>Jim McKeeth</dc:creator>
<dc:identifier id="uid">8181AEF2-CD21-4FE6-9AE8-9A83572FF4D</dc:identifier>
<dc:language>en-US</dc:language>
<meta property="dcterms:modified">2012-09-11T12:47:00Z</meta>
<dc:rights>
Licensed under a Creative Commons Attribution 3.0 License.
</dc:rights>
<link
rel="cc:license" href="http://creativecommons.org/licenses/by-sa/3.0/"/>
</metadata>
Content OPF
manifest
•The manifest section must list all other files in the ePub.
•There must be exactly one with property “nav” and up to one “cover-image”
•The “scripted” property indicates the page executes JavaScript.
<manifest>
<item id="i" href="main.xhtml" media-type="application/xhtml+xml"
properties="scripted"/>
<item id="nav" href="nav.xhtml" media-type="application/xhtml+xml"
properties="nav"/>
<item id="prt" href="default.png" media-type="image/png"
properties="cover-image"/>
<item id="first" href="first.jpg" media-type="image/jpeg"/>
<item id="css" href="ro.css" media-type="text/css"/>
<item id="scrpt" href="main.js" media-type="application/javascript"/>
<item id="jq" href="jQuery.js" media-type="application/javascript"/>
</manifest>
Content OPF
spine
•Must list all “sections” on the spine. Includes chapters, preface, glossary, etc.
•The idref value is defined in the manifest section
<spine>
<itemref idref="i"
properties="rendition:layout-reflowable
rendition:spread-auto"/>
</spine>
Zipping an ePub
• zip -X ../epubfile.epub mimetype
• zip ../epubfile.epub META-INF/*
• zip -r ../epubfile.epub OPS/*
• unzip -l ../epubfile.epub
http://idpf.org/epub/30/spec/epub30-ocf.html
mimetype must be the
first file (uncompressed).
Any folder(s) with
“content”
Lists the contents for
verification
ePubValidator
• EpubCheck
• validator.idpf.org (web based)
• code.google.com/p/epubcheck/ (download - Java)
Download and include call in
your script to zip your ePub!
iBooks Fixed Layout Format
• Use a separate XHTML document for each Fixed Layout page.
• Use CSS relative and/or absolute positioning to place text and images
on a page.
• Include the height and width of the page in a viewport meta tag in
the head of each XHTML document. (used for aspect ratio)
<head>  
        <title>Fixed Layout Example</title>
        <meta content="text/html; charset=UTF-8"/>
        <link href="css/stylesheet.css" type="text/css" rel="stylesheet"/>
        <meta name="viewport" content="width=575, height=432"/>
</head>
From Scratch ePub Demo
Cracking ePub
iBooks DRM Decrypt
• iTunes 10.5.3.3 x64 (as close as possible)
• http://www.oldversion.com/windows/itunes/
• Requiem 3.3.6
• https://tag3ulp55xczs3pn.onion.to/ (viaTor)
M
ustbe
these
versionsworkingtogether.
Run
itin
an
XPVirtualM
achine.
Other ePub Books
• Calibre
• http://calibre-ebook.com/ (eBook conversion and management)
• DeDRM plugins
• http://apprenticealf.wordpress.com/ 6.05 is latest
Other Possible Resources
• Threepress Consulting Blog
• http://blog.threepress.org/
• ePub Straight to the Point by Elizabeth Castro
• http://www.elizabethcastro.com/epub/
Have not read, but
was recommended.
More Information
• 4 Part Series on iBooks JavaScript Widgets
• http://sn.im/ibooksjs
• Might become an iBook
• jim@mckeeth.org or @JimMcKeeth

More Related Content

PPTX
Microsoft hololens
PDF
Metaverse White Paper by TENTUPLAY
PPTX
The foundations of metaverse
PDF
Building the Metaverse
PPTX
DITA, HTML5, and EPUB3 (Content Agility, June 2013)
PDF
EPUB3 Now! at IDPF 2013 Digital Book
PDF
EPUB3で変わる電子書籍の表現力
Microsoft hololens
Metaverse White Paper by TENTUPLAY
The foundations of metaverse
Building the Metaverse
DITA, HTML5, and EPUB3 (Content Agility, June 2013)
EPUB3 Now! at IDPF 2013 Digital Book
EPUB3で変わる電子書籍の表現力

Viewers also liked (18)

PDF
HTML5와 전자책, 융합 서비스로 발전 현황
PDF
북페이스 사업계획서 20150708
PDF
ePUB 3 and Publishing e-books
PDF
세계 전자책 시장은 어떻게 움직이는가
ODP
Getting started with Clojure
PDF
Epub3 potential (dbw2013)
PDF
Quality limited
PDF
進化するオープンソース・エンタープライズCMSがWeb戦略を変える
PPTX
Powerpoint Egipto y MP
PPT
Timmy's Tea Shop Photo Essay
PPT
Web conferencing
PPTX
Developer skills levels
PDF
Be safe on Facebook
PDF
ODP
Presentacion tic 2
HTML5와 전자책, 융합 서비스로 발전 현황
북페이스 사업계획서 20150708
ePUB 3 and Publishing e-books
세계 전자책 시장은 어떻게 움직이는가
Getting started with Clojure
Epub3 potential (dbw2013)
Quality limited
進化するオープンソース・エンタープライズCMSがWeb戦略を変える
Powerpoint Egipto y MP
Timmy's Tea Shop Photo Essay
Web conferencing
Developer skills levels
Be safe on Facebook
Presentacion tic 2

Similar to Hacking iBooks and ePub3 with JavaScript! (20)

PPSX
ePubs-RollYourOwn(for_supercon2012)
PDF
Dreamweaver CS6, jQuery, PhoneGap, mobile design
PDF
Cm i padwebdev_lunch_learn
PDF
MCN Pro - ePublishing: What you need to know
PDF
Anatomy of an HTML 5 mobile web app
PDF
Web Apps and Responsive Design for Libraries
PPT
Creating Fixed-Layout EPUBs
PPTX
Presentation
PPTX
I padagogy
PDF
Smau milano 2012 arena social media emanuele-bolognesi
ZIP
Christopher Allen's Presentation at eComm 2009
KEY
Fake it 'til you make it
PDF
Web or SDK Development
PPTX
Basic ebooks vs interactive iBooks: How to choose
PDF
Gestalt, design & technology of the touch ebook
KEY
Mobile ECM with JavaScript - JSE 2011
PPTX
2011 code camp
PDF
Nuovi Scenari di Sviluppo: il Mondo degli Ebook
PDF
Introduction to HTML5 magazine apps
PPTX
SmartPhone Design and Delivery
ePubs-RollYourOwn(for_supercon2012)
Dreamweaver CS6, jQuery, PhoneGap, mobile design
Cm i padwebdev_lunch_learn
MCN Pro - ePublishing: What you need to know
Anatomy of an HTML 5 mobile web app
Web Apps and Responsive Design for Libraries
Creating Fixed-Layout EPUBs
Presentation
I padagogy
Smau milano 2012 arena social media emanuele-bolognesi
Christopher Allen's Presentation at eComm 2009
Fake it 'til you make it
Web or SDK Development
Basic ebooks vs interactive iBooks: How to choose
Gestalt, design & technology of the touch ebook
Mobile ECM with JavaScript - JSE 2011
2011 code camp
Nuovi Scenari di Sviluppo: il Mondo degli Ebook
Introduction to HTML5 magazine apps
SmartPhone Design and Delivery

More from Jim McKeeth (17)

PDF
Memory Safety with Delphi - Jim McKeeth - Webinar June 2024
PDF
Announcing Codolex 2.0 from GDK Software
PDF
Smart Contracts - The Blockchain Beyond Bitcoin
PDF
Rapid Prototyping Mobile IoT Projects with Arduino and Open Hardware
PDF
Day 3 of C++ Boot Camp - C++11 Language Deep Dive
PDF
Day 5 of C++ Boot Camp - Stepping Up to Mobile
PDF
Android Services Skill Sprint
PDF
Creating Android Services with Delphi and RAD Studio 10 Seattle
PDF
Building a Thought Controlled Drone
PDF
Deep Dive into Futures and the Parallel Programming Library
PDF
Embarcadero's Connected Development
PDF
The Internet of Things and You - A Developers Guide to IoT
PDF
Accessing REST & Backend as a Service (BaaS) - Developer Direct - Mobile Summ...
PDF
Android voice skill sprint
PDF
Exploring the Brain Computer Interface
PDF
Introduction to Android Development with Java
PDF
Inventing merit badge
Memory Safety with Delphi - Jim McKeeth - Webinar June 2024
Announcing Codolex 2.0 from GDK Software
Smart Contracts - The Blockchain Beyond Bitcoin
Rapid Prototyping Mobile IoT Projects with Arduino and Open Hardware
Day 3 of C++ Boot Camp - C++11 Language Deep Dive
Day 5 of C++ Boot Camp - Stepping Up to Mobile
Android Services Skill Sprint
Creating Android Services with Delphi and RAD Studio 10 Seattle
Building a Thought Controlled Drone
Deep Dive into Futures and the Parallel Programming Library
Embarcadero's Connected Development
The Internet of Things and You - A Developers Guide to IoT
Accessing REST & Backend as a Service (BaaS) - Developer Direct - Mobile Summ...
Android voice skill sprint
Exploring the Brain Computer Interface
Introduction to Android Development with Java
Inventing merit badge

Recently uploaded (20)

PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
KodekX | Application Modernization Development
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Empathic Computing: Creating Shared Understanding
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Digital-Transformation-Roadmap-for-Companies.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
MYSQL Presentation for SQL database connectivity
Per capita expenditure prediction using model stacking based on satellite ima...
sap open course for s4hana steps from ECC to s4
Review of recent advances in non-invasive hemoglobin estimation
Mobile App Security Testing_ A Comprehensive Guide.pdf
KodekX | Application Modernization Development
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Understanding_Digital_Forensics_Presentation.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Network Security Unit 5.pdf for BCA BBA.
Empathic Computing: Creating Shared Understanding
Spectral efficient network and resource selection model in 5G networks
Unlocking AI with Model Context Protocol (MCP)
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton

Hacking iBooks and ePub3 with JavaScript!

  • 1. Hacking iBooks and EPUB with JavaScript! Jim McKeeth jim@mckeeth.org @JimMcKeeth
  • 2. What 400 Level Means • Assumed understanding of JavaScript and HTML5 web technologies. • More examples and less explanation. • Please ask questions as we go.
  • 3. About Jim McKeeth • Lead Developer Evangelist for EmbarcaderoTechnologies • Delphi XE5 creates native iOS & Android apps from same code • Improvisational performer with ComedySportz Boise • Inventor of pattern and swipe to unlock • US Patent #s 6,766,456 & 8,352,745 . . . (First patented in 2000) • Used on iOS,Android and Windows 8
  • 4. Why Put JavaScript in a Book? • Provide updated data to go along with book topic • Allow real time collaboration between readers / students • Create interactive story books • Customize story to the reader • Collect quiz responses • Interesting animation effects • Add games & bonuses • Engage your readers • Track readers • Gather feedback • Sky’s the limit!
  • 5. Overview • JavaScript Interactive Widgets • Dashcode • Tumult Hype • Creating Widgets from Scratch • Creating ePub from Scratch • Cracking ePub
  • 6. More Information • 4 Part Series on iBooks JavaScript Widgets • http://sn.im/ibooksjs
  • 7. iBooks Author 2 • Free in the Mac App Store • Extension on ePub 3 standard (non-compatible) • DRM and license only for iBooks on the iPad • Nice powerful and easy interface for building books • Be aware of orientations
  • 8. iBooks / ePub Technical Details • Zip file of HTML5 content adhering to specific spec. • 2 GB technical book size limit • 200 MB recommended size • iBooks IBA files encrypt the page content • All resources must be included!
  • 9. 3D Models • 20,000 to 50,000 moderately textured polygons • Textures <= 1024x1024 • Use COLLADA (.dae) file format • Specify a camera • Simple lighting • http://support.apple.com/kb/ht5093
  • 10. 3D Models • Trimble SketchUp Make • www.sketchup.com • Free version creates .dae 3D models that work in iBooks Author • http://www.sketchup.com/products/3D-warehouse
  • 13. Dashcode • JavaScript, HTML and CSS Editor from Apple • For creating Dashboard widgets • Part of Xcode until Xcode 4.3 • Now a separate download: http:// bit.ly/Dashcode Latest:“Late July” for Aug 7, 2012 - 3.0.5
  • 15. Things to Remember 1. Backwards compatibility on, or parts disappear. 2. The back of the widget never gets displayed. 3. Text doesn’t show up in the default image unless you change the option in the inspector. 4. Dashcode text parts layout odd on the iPad. 5. Java and other plugins don’t work on the iPad.
  • 16. Posting to Web Services • External web services must implement CORS • (Cross-Origin Resource Sharing) headers. • enable-cors.org • www.w3.org/TR/cors
  • 17. Tumult Hype 2 • HTML5 & JavaScript Multimedia Studio • Create JavaScript Powered Animations and Interactions • Creates Widgets Directly • Compatible with iBooks Author & the iPad • $59.99 in Mac App Store (on sale $29.99 through Sept 10th)
  • 19. Creating from Scratch • Required files: • Main.html - Main HTML file (any name will work). • Default.png – Preview image and place holder. • Info.plist – Property list describing widget. References main HTML. http://support.apple.com/kb/HT5068
  • 20. Required Properties • CFBundleIdentifier - Unique identifier • CFBundleName - Friendly name • MainHTML -The main HTML file
  • 21. Info.plist <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http:// www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> ! <key>CFBundleIdentifier</key> ! <string>com.360idev.gallery</string> ! <key>CFBundleName</key> ! <string>Gallery</string> ! <key>MainHTML</key> ! <string>index.html</string> </dict> </plist>
  • 22. Making a Package • Put all files in a directory - Subdirectories are OK (use relative paths for references). • Rename root directory .wdgt • Don’t Install Package! It gets deleted. Use Duplicate to test. • Context / Show Package Contents to edit.
  • 23. Supported HTML5 Features • localStorage (per book - between widgets) • Geolocation (requests permission) • Canvas • CSS Animations • Others . . .
  • 24. Prevent Flicker 1. Add a IBNotifiesOnReady item set to true in the Dashboard widget's info.plist file, so iBooks knows this Dashboard widget will tell it when to switch to displaying the running HTML widget. 2. Set your Dashboard widget to load the Apple javascript library. 3. In javascript call widget.notifyContentIsReady() to notify iBooks it can switch from showing the Default.png file to displaying the running HTML widget. http://support.apple.com/kb/HT5068
  • 26. Things to Remember 1. Double clicking a widget on desktop deletes it (installs it into the library). 2. The aspect ratio of your Default.png determine the aspect ratio of your widget. 3. All JavaScript libraries must be referenced from the Main HTML file, and in the package.
  • 27. bookry.com • Custom Sliding Puzzle • LiveTwitter Feed • InteractiveTimeline Images • YouTubeVideo • VimeoVideo • Google Maps • Live Polling • More to come . . . • Auto-generated customized widgets ready to add to iBooks (or look at the code to figure out how they did it.) • Free license includes “branding” See also ibooksgenerator.com
  • 28. Live Twitter feed in iBooks
  • 29. Live Google Maps in iBooks
  • 30. Creating an ePub from Scratch No iBooks Author, no Dashcode, just text editing!
  • 31. Disclaimer • So far I have been unable to access online content without using iBooks Author.
  • 32. International Digital Publishing Forum • Develops and maintains the EPUB content publication standard • idpf.org/epub • ePub 3.0 is current standard • October 2011 • Official support for JavaScript
  • 34. 2.4.1 Scripting Contexts • container-constrained • An instance of the [HTML5] script element included in an EPUB Content Document that is embedded in a parent Content Document using one of the [HTML5] object, iframe or embed elements. • spine-level • An instance of the [HTML5] script element included in a Top-level Content Document. • JavaScript on the page itself! • iBooks Author widgets are container-constrained
  • 35. 2.4.2 Content Conformance • A container-constrained script must not contain instructions to: • modify the DOM of the parent Content Document • modify other contents in the Publication • manipulate the size of its containing rectangle • Container-constrained scripts
  • 36. 2.4.2 Content Conformance • EPUB Content Documents that include spine-level scripting must utilize the progressive enhancement technique: • When rendered without scripting support document must retain its integrity, remaining consumable by the User without any information loss or other significant deterioration. • Use fallbacks! • iBooks doesn’t seem to allow network communications at spine-level • Spine-level scripts
  • 37. The JavaScript epubReadingSystem Object • Syntax: • ReadingSystem = navigator.epubReadingSystem; • Properties: name, version, layoutStyle • Method: hasFeature(feature) • dom-manipulation, layout-changes, touch- events, mouse-events, keyboard-events, spine-scripting Appendix B 
  • 38. preventDefault • Use to “override” the default behavior of the reading system. • If you have a touch zone near the edge of the screen, this gives you the touch event instead of turning the page. • Turn off for whole document: • document.addEventListener('touchmove', function (e) {e.preventDefault();}, false); • In individual event handler: • event.preventDefault();
  • 39. ePub Samples • Repository of ePub 3.0 sample documents • http://code.google.com/p/epub-samples/ • See “Scripted Content Documents” under the “Feature Matrix”
  • 40. ePub Format • A zip file with epub extension • mimetype must be the first file in the zip • Container.xml references the opf file (which can be named anything) • All content files must be listed in the opf file • mimetype • iTunesMetadata.plist • META-INF • container.xml • OPS • content.opf • content files Automatically added by iTunes but not needed.
  • 41. mimetype • First file in zip - uncompressed • No Unicode signature or byte order mark • Only contain • application/epub+zip
  • 43. Content OPF <?xml version="1.0" encoding="UTF-8"?> <package xmlns="http://www.idpf.org/2007/opf" version="3.0" xml:lang="en" unique-identifier="uid" prefix="rendition: http://www.idpf.org/ vocab/rendition/# cc: http://creativecommons.org/ns#"> <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:xxx>. . .</dc:xxx> </metadata> <manifest> <item>. . .</item> </manifest> <spine> <itemref ... /> </spine> </package>
  • 44. Content OPF metadata •The metadata section describes the book <metadata xmlns:dc="http://purl.org/dc/elements/1.1/"> <dc:title id="title">JavaScript Test Book</dc:title> <dc:description>Test of spine-level scripting</dc:description> <dc:creator>Jim McKeeth</dc:creator> <dc:identifier id="uid">8181AEF2-CD21-4FE6-9AE8-9A83572FF4D</dc:identifier> <dc:language>en-US</dc:language> <meta property="dcterms:modified">2012-09-11T12:47:00Z</meta> <dc:rights> Licensed under a Creative Commons Attribution 3.0 License. </dc:rights> <link rel="cc:license" href="http://creativecommons.org/licenses/by-sa/3.0/"/> </metadata>
  • 45. Content OPF manifest •The manifest section must list all other files in the ePub. •There must be exactly one with property “nav” and up to one “cover-image” •The “scripted” property indicates the page executes JavaScript. <manifest> <item id="i" href="main.xhtml" media-type="application/xhtml+xml" properties="scripted"/> <item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/> <item id="prt" href="default.png" media-type="image/png" properties="cover-image"/> <item id="first" href="first.jpg" media-type="image/jpeg"/> <item id="css" href="ro.css" media-type="text/css"/> <item id="scrpt" href="main.js" media-type="application/javascript"/> <item id="jq" href="jQuery.js" media-type="application/javascript"/> </manifest>
  • 46. Content OPF spine •Must list all “sections” on the spine. Includes chapters, preface, glossary, etc. •The idref value is defined in the manifest section <spine> <itemref idref="i" properties="rendition:layout-reflowable rendition:spread-auto"/> </spine>
  • 47. Zipping an ePub • zip -X ../epubfile.epub mimetype • zip ../epubfile.epub META-INF/* • zip -r ../epubfile.epub OPS/* • unzip -l ../epubfile.epub http://idpf.org/epub/30/spec/epub30-ocf.html mimetype must be the first file (uncompressed). Any folder(s) with “content” Lists the contents for verification
  • 48. ePubValidator • EpubCheck • validator.idpf.org (web based) • code.google.com/p/epubcheck/ (download - Java) Download and include call in your script to zip your ePub!
  • 49. iBooks Fixed Layout Format • Use a separate XHTML document for each Fixed Layout page. • Use CSS relative and/or absolute positioning to place text and images on a page. • Include the height and width of the page in a viewport meta tag in the head of each XHTML document. (used for aspect ratio) <head>           <title>Fixed Layout Example</title>         <meta content="text/html; charset=UTF-8"/>         <link href="css/stylesheet.css" type="text/css" rel="stylesheet"/>         <meta name="viewport" content="width=575, height=432"/> </head>
  • 52. iBooks DRM Decrypt • iTunes 10.5.3.3 x64 (as close as possible) • http://www.oldversion.com/windows/itunes/ • Requiem 3.3.6 • https://tag3ulp55xczs3pn.onion.to/ (viaTor) M ustbe these versionsworkingtogether. Run itin an XPVirtualM achine.
  • 53. Other ePub Books • Calibre • http://calibre-ebook.com/ (eBook conversion and management) • DeDRM plugins • http://apprenticealf.wordpress.com/ 6.05 is latest
  • 54. Other Possible Resources • Threepress Consulting Blog • http://blog.threepress.org/ • ePub Straight to the Point by Elizabeth Castro • http://www.elizabethcastro.com/epub/ Have not read, but was recommended.
  • 55. More Information • 4 Part Series on iBooks JavaScript Widgets • http://sn.im/ibooksjs • Might become an iBook • jim@mckeeth.org or @JimMcKeeth