SlideShare una empresa de Scribd logo
1 de 66
Descargar para leer sin conexión
Workshop: Taichung

Hsiao-Ting Yu “Littlebtc”
MozTW member / Jetpack Ambassador
Mozilla
What is Mozilla?



• Non-profit organization
• Support for better Internet: an open web
 • Open Source Software
 • Open Web Standard
• Major Products: Firefox & Thunderbird
Mozilla Labs?

• “Labs” in Mozilla
• Crazy ideas
• Explore future of the web
Jetpack Ambassadors
MozTW?



  •   Mozilla communities in Taiwan


  •   Group for Mozilla “fans”


  •   Localize Mozilla products


  •   Promote Mozilla product & web
      standard


  •   Our mascot: Foxmosa
Jetpack Introduction
Your Firefox, customized
Old-type Mozilla Extension

• XUL: user interface
• JavaScript: code
• CSS: styling
• XBL: binding
• XPCOM: core

• ... So much hard things :(
Faster, faster and faster
What is Jetpack?



   •   Simple-to-use API to develop
       new-type extensions


   •   HTML, CSS and JavaScript


   •   JavaScript libraries available


   •   Fast to develop, test and deploy


   •   Extensible API
                                          Photo by www.rocketman.org, CC-BY-2.5
                                          http://en.wikipedia.org/wiki/File:Rose-4.jpg
Jetpack: Now and Future

• Old: Jetpack Prototype 0.8 (standalone extension)
 • Experimental Prototype
 • Jetpack as single JavaScript file
• Very Near Future: Jetpack SDK (Jetpack Reboot)
 • Distributed as a development kit
 • Jetpack as XPI extension bundle
 • Future version of Firefox will have Jetpack API
    supported included
Jetpack Prototype 0.8
Guides
Jetpack Prototype extension
https://addons.mozilla.org/zh-TW/firefox/addon/12025
Firebug
https://addons.mozilla.org/zh-TW/firefox/addon/1843
Go about:jetpack
Try it out!
Prepare a testing
extension
Procedure

• Prepare a .js file and a .htm file in the same folder
• in .htm file, add the following data:
  <html>
  <head>
    <title>Jetpack Workshop Example</title>
    <link rel="jetpack" href="example.js">
  </head>
  <body>
  </body>
  </html>


• in the .js file: add oneworld!');
  console.log('Hello
                           line


• Open the .htm file to "Install" the Jetpack
Refresh?
Refresh: the dirty way




• For local files only(?)
• Go to or refresh the about:jetpack page
Jetpack 0.8 APIs:
UI Related
Everyone needs a “Hello World”

• Log: Use Error Console (preferred) or Firebug Console
• Go “Develop” Tab
• Type
  • console.log("Hello   World!");
Notifications



• Simple Type
  jetpack.notifications.show("Hello World!");


• Complex Type
  jetpack.notifications.show( {
    title: "Hi Jetpack!",
    body: "         ",
    icon: "https://jetpack.mozillalabs.com/images/jetpack.png"

  } );
Menu (I)

• Import from future:
  jetpack.future.import("menu");


• Create new menu to a dummy menu object
  (does nothing)
  jetpack.menu.add("Aloha!");


• Create new menu to tools
  jetpack.menu.tools.add("Aloha!");
Menu (II)
•   What menu?

    •   jetpack.menu.file

    •   jetpack.menu.edit

    •   jetpack.menu.view

    •   jetpack.menu.history

    •   jetpack.menu.bookmarks

    •   jetpack.menu.tools

•   Context Menu: Somehow complex

    •   jetpack.menu.context.browser for browser UI

    •   jetpack.menu.context.page for page
Menu (III)
•   Object-type to allow more options

•   How about command? => command

•   Submenu? => menu

•   Details: https://developer.mozilla.org/en/Jetpack/UI/Menu


 jetpack.future.import("menu");
 jetpack.menu.context.page.add({
   label: "Ice Cream",
   icon: "https://jetpack.mozillalabs.com/images/
 jetpack.png",
   menu: new jetpack.Menu(["Vanilla", "Chocolate",
 "Pistachio", null, "None"]),
   command: function (menuitem)
 { jetpack.notifications.show(menuitem.label) }
 });
Slidebar (I)

• It is not the sidebar! :D
• Import from future:
  jetpack.future.import("slideBar");


• Append the slidebar with HTML content:
  jetpack.slideBar.append(
  {
    icon: "https://jetpack.mozillalabs.com/images/jetpack.png",
    html: "<html><body>Hello!</body></html>"
  });



• Or a given URL:
  jetpack.slideBar.append(
  {
    icon: "https://jetpack.mozillalabs.com/images/jetpack.png",
    url: "http://moztw.org"

  });
Slidebar (II)


• Events:
 • onReady: when feature("slidebar page") is loaded
 • onClick: when its icon is clicked
 • onSelect: when featured is selected
• Options:
 • autoReload: reload every time selected
Slidebar (III): Tips


• onReady, onSelect:
 • Will have a slider object as a parameter
 • You can use slider.contentDocument to access
    the document

  • Jetpack 0.8 is jQuery enabled, so:
    function ready(slider) {
      var _doc = slider.contentDocument;
      $("body", _doc).html("..."); // Have fun!
    }
    jetpack.slider.append( {... , 'onReady': ready})
Slidebar (IV): Tips again

• You can use E4X hack to write HTML code:
  var html = <>
  <html>
  <head>
    <style type="text/css">
    <![CDATA[
    ...
    ]]>
    </style>
    <base target="_blank" /> <!-- Dirty Hack, very dirty -->
  </head>
  <body>
  ...
  </body></html></>.toXMLString();
  jetpack.slideBar.append({html: html});


• Another dirty hack: set target to _blank to make
  links to open in the new tab, instead of in the
  slidebar content
Toolbar
•   https://wiki.mozilla.org/Labs/Jetpack/JEP/21#Initial_Implementation_API

•   Import from future
    jetpack.future.import("toolbar");


•   Which Toolbar?

    •   jetpack.toolbar.navigation

    •   jetpack.toolbar.bookmarks

•   Toolbar options
    var myButton = {
      id: "goMozTW",
      label: "Go MozTW",
      tooltip: "Access MozTW Website",
      image: "http://www.mozilla.org/favicon.ico",
      onclick: function(event) { jetpack.tabs.open('http://moztw.org/'); }
    }


•   Append And Remove
    jetpack.toolbar.navigation.append(myButton);
    jetpack.toolbar.navigation.remove("goMozTW");
Statusbar
•   Somehow like slidebar, HTML-based

•   Parameters: width, html

•   onReady when HTML item is loaded

    •   widget, its HTML document as a parameter

•   Example
    jetpack.statusBar.append({
      html: "<strong>Hi!</strong>",
      width: 100,
      onReady: function(widget) {
        $("strong", widget).text("Jetpack rocks?");
        $(widget).click(function()
        { jetpack.notifications.show("Yes!"); }
        );
      }
    });
A complex slidebar
example
The Target
In RSS
Code and result

• http://gist.github.com/323081
Hacks in the code



• $("<a />") to create element: not working
 • Use _doc.createElement("a") instead
• Some Regex to fetch the real title
• jQuery.ajax to fetch the content:
  http://api.jquery.com/jQuery.ajax/
Another example:
JetPlurk by irvinfly
http://go.sto.tw/jetplurk
Jetpack 0.8 APIs:
Not (so much) UI
related
Selection
•   https://developer.mozilla.org/en/Jetpack/UI/Selection

•   Import from future
    jetpack.future.import("selection");


•   Get Selection

    •   jetpack.selection.text as plain text

    •   jetpack.selection.html as HTML


•   Event: onSelection

•   Example
    jetpack.future.import("selection");
    jetpack.selection.onSelection(function(){
        jetpack.notifications.show(jetpack.selection.text);
        jetpack.selection.html = "<b>" + jetpack.selection.html +
    "</b>";
    });
Tabs (I)


• jetpack.tabs
• open(): open new tab
  jetpack.tabs.open("http://www.example.com");


• Array-like operations:
 • jetpack.tabs[0]: first tab
 • length: number of tabs
Tabs (II)

• Events:
 • onReady: (inherited document is fully loaded)
 • onFocus: focus changed
• Example
  jetpack.tabs.onReady(
    function(doc) {
      console.log('ok');
    }
  );
Simple Storage
• Simple Storage: implemented as JSON files
• Future namespace should be used:
  jetpack.future.import("storage.simple");  
  var myStorage = jetpack.storage.simple; 


• You can put some simple items: string, number, array,
  into myStorage:
  myStorage.group = 'moztw';
  myStorage.members = ['littlebtc', 'bobchao', 'irvinfly'];


• So
  console.log(myStorage.members[0])

  is littlebtc!

• sync() to force writing, open() to force reading
  (beware!)
Settings (I)

• Import from future is needed
• Need some manifest:
 • https://developer.mozilla.org/en/Jetpack/Storage/
    Settings

• Resulting interface in about:jetpack:
Settings (II)



• Setting types: text, password, boolean, range
• Available options: default, min (for range), max (for
  range)

• Read/Write the setting is simple:
  jetpack.storage.settings.facebook.username =
  'jen';
  music.volume = jetpack.storage.settings.volume;
Me, the extension



• Use "me":
  jetpack.future.import("me");  


• For first run purpose:
  jetpack.me.onFirstRun(function () {  
    jetpack.tabs.open("http://moztw.org/");
    jetpack.notifications.show('Welcome!');   
  });  
more...
https://wiki.mozilla.org/Labs/Jetpack/
JEP
https://developer.mozilla.org/en/Jetpack
After finished...
Go Jetpack Gallery!
http://jetpackgallery.mozillalabs.com/
Jetpack SDK:
Jetpack rebooted
Review of Jetpack Prototype
    https://                   •   Wrong things
    jetpack.mozillalabs.com/
    prototype.html
                                    •   Scope

•   Right things
                                    •   Quality

     •   Usability
                                    •   Non-Systemic API

     •   Web Technologies
                                    •   Document

     •   JEPs
                                    •   jQuery only

     •   Quick Release


     •   Tools integration
New "Jetpack" Architecture


   Before                         After
    jetpack   jetpack   jetpack      jetpack             jetpack


                                    Jetpack          Jetpack
         Jetpack API                 Core             Core




              Firefox                          Firefox
New "Jetpack SDK"

• Python SDK, with features enabled:
 • Testing
 • XPI Packaging
• "Package-based"
• CommonJS based scripting
• http://mozillalabs.com/jetpack/2010/03/09/
  announcing-the-jetpack-sdk/

• https://jetpack.mozillalabs.com/sdk/0.1/docs/
"Packaging"



• One package, one directory
• Every package directory should contain a
  mainfest.json at least

  • Description, Dependency, ...
• JS files, known as "module", used for some reusable
  code, can be pulled in lib/xxx.js
"Packaging" (II): CommonJS
•   Export a functions in my-module.js:
    exports.foo = function() {
      return "work!"
    }
    exports.add = funciton(a, b) {
      return a + b;
    }

•   Use and test it in main.js:
    var myModule = require("my-module");
    exports.main = function(options, callbacks) {
      myModule.foo();
      callbacks.quit();
    }

•   "main" function exported from "main" module (main.js)
    will be called as your program "activate"s
Testing


• Create lib/test-my-module.js:
    var myModule = require("my-module");
    exports.ensureAdditionWorks = function
    (test) {
      test.assertEqual(myModule.add(1, 1), 2, "1
    + 1 = 2");
    };

•   cfx test --verbose to test!
cfx works!

• After grab the SDK, run in OSX/Linux:
    source bin/activate
    In Windows
    (Python and Python for Windows extension is required):
    source bin/activate

•   cfx testall      : Sanity Check

• Run in the package directory:
•   cfx test --verbose         : test module

•   cfx xpi     : make Jetpack XPI
Jetpack-based extensions

• Jetpack as an API
• Jetpack-based extension will:
 • Require no restart to take effect
 • Have automatic update
 • And better security model
• No difference for users compared with traditional
  extensions

• Hosted on AMO too
Extension manager redesign
FlightDeck
Instant development!
What about JEPs?
https://wiki.mozilla.org/Labs/Jetpack/Reboot/JEP
Future: it's your turn!

Más contenido relacionado

La actualidad más candente

Play framework 2 : Peter Hilton
Play framework 2 : Peter HiltonPlay framework 2 : Peter Hilton
Play framework 2 : Peter HiltonJAX London
 
Drupal 8 - Build Week Update
Drupal 8 - Build Week UpdateDrupal 8 - Build Week Update
Drupal 8 - Build Week UpdateAngela Byron
 
Lessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGLLessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGLLior Tal
 
Dojo javascript toolkit
Dojo javascript toolkit Dojo javascript toolkit
Dojo javascript toolkit Predhin Sapru
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIOliver Busse
 
Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019Laurent Guérin
 
Introducing CrossWorlds for IBM Domino
Introducing CrossWorlds for IBM DominoIntroducing CrossWorlds for IBM Domino
Introducing CrossWorlds for IBM DominoDaniele Vistalli
 
Beyond Domino Designer
Beyond Domino DesignerBeyond Domino Designer
Beyond Domino DesignerPaul Withers
 
Heroes of Paragon: publishing Unity WebGL game on Facebook
Heroes of Paragon: publishing Unity WebGL game on FacebookHeroes of Paragon: publishing Unity WebGL game on Facebook
Heroes of Paragon: publishing Unity WebGL game on FacebookDevGAMM Conference
 
How To Build a Multi-Field Search Page For Your XPages Application
How To Build a Multi-Field Search Page For Your XPages ApplicationHow To Build a Multi-Field Search Page For Your XPages Application
How To Build a Multi-Field Search Page For Your XPages ApplicationMichael McGarel
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersTeng Shiu Huang
 
Drupal 8 Vocab Lesson
Drupal 8 Vocab LessonDrupal 8 Vocab Lesson
Drupal 8 Vocab LessonMediacurrent
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOsNgoc Dao
 
CollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPagesCollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPagesJesse Gallagher
 
Dojo, from scratch to result
Dojo, from scratch to resultDojo, from scratch to result
Dojo, from scratch to resultNikolai Onken
 
Deview 2013 mobile browser internals and trends_20131022
Deview 2013 mobile browser internals and trends_20131022Deview 2013 mobile browser internals and trends_20131022
Deview 2013 mobile browser internals and trends_20131022NAVER D2
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on WindowsWO Community
 

La actualidad más candente (20)

Play framework 2 : Peter Hilton
Play framework 2 : Peter HiltonPlay framework 2 : Peter Hilton
Play framework 2 : Peter Hilton
 
Drupal 8 - Build Week Update
Drupal 8 - Build Week UpdateDrupal 8 - Build Week Update
Drupal 8 - Build Week Update
 
How Browser Works?
How Browser Works?How Browser Works?
How Browser Works?
 
Lessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGLLessons Learned with Unity and WebGL
Lessons Learned with Unity and WebGL
 
Dojo javascript toolkit
Dojo javascript toolkit Dojo javascript toolkit
Dojo javascript toolkit
 
Automated ui-testing
Automated ui-testingAutomated ui-testing
Automated ui-testing
 
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019Telosys project booster Paris Open Source Summit 2019
Telosys project booster Paris Open Source Summit 2019
 
Introducing CrossWorlds for IBM Domino
Introducing CrossWorlds for IBM DominoIntroducing CrossWorlds for IBM Domino
Introducing CrossWorlds for IBM Domino
 
Beyond Domino Designer
Beyond Domino DesignerBeyond Domino Designer
Beyond Domino Designer
 
Heroes of Paragon: publishing Unity WebGL game on Facebook
Heroes of Paragon: publishing Unity WebGL game on FacebookHeroes of Paragon: publishing Unity WebGL game on Facebook
Heroes of Paragon: publishing Unity WebGL game on Facebook
 
How To Build a Multi-Field Search Page For Your XPages Application
How To Build a Multi-Field Search Page For Your XPages ApplicationHow To Build a Multi-Field Search Page For Your XPages Application
How To Build a Multi-Field Search Page For Your XPages Application
 
Play! Framework for JavaEE Developers
Play! Framework for JavaEE DevelopersPlay! Framework for JavaEE Developers
Play! Framework for JavaEE Developers
 
Drupal 8 Vocab Lesson
Drupal 8 Vocab LessonDrupal 8 Vocab Lesson
Drupal 8 Vocab Lesson
 
Xitrum HOWTOs
Xitrum HOWTOsXitrum HOWTOs
Xitrum HOWTOs
 
CollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPagesCollabSphere 2018 - Java in Domino After XPages
CollabSphere 2018 - Java in Domino After XPages
 
Dojo, from scratch to result
Dojo, from scratch to resultDojo, from scratch to result
Dojo, from scratch to result
 
Deview 2013 mobile browser internals and trends_20131022
Deview 2013 mobile browser internals and trends_20131022Deview 2013 mobile browser internals and trends_20131022
Deview 2013 mobile browser internals and trends_20131022
 
Deploying WO on Windows
Deploying WO on WindowsDeploying WO on Windows
Deploying WO on Windows
 
Django
DjangoDjango
Django
 

Similar a MozTW Jetpack Workshop: Taichung

How to start developing apps for Firefox OS
How to start developing apps for Firefox OSHow to start developing apps for Firefox OS
How to start developing apps for Firefox OSbenko
 
Porting Flashblock to Jetpack Platform (draft)
Porting Flashblock to Jetpack Platform (draft)Porting Flashblock to Jetpack Platform (draft)
Porting Flashblock to Jetpack Platform (draft)Thomas Bassetto
 
How dojo works
How dojo worksHow dojo works
How dojo worksAmit Tyagi
 
Masterin Large Scale Java Script Applications
Masterin Large Scale Java Script ApplicationsMasterin Large Scale Java Script Applications
Masterin Large Scale Java Script ApplicationsFabian Jakobs
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)Doris Chen
 
e10sとアプリ間通信
e10sとアプリ間通信e10sとアプリ間通信
e10sとアプリ間通信Makoto Kato
 
JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)jeresig
 
Hacking iBooks and ePub3 with JavaScript!
Hacking iBooks and ePub3 with JavaScript!Hacking iBooks and ePub3 with JavaScript!
Hacking iBooks and ePub3 with JavaScript!Jim McKeeth
 
Dojo: Beautiful Web Apps, Fast
Dojo: Beautiful Web Apps, FastDojo: Beautiful Web Apps, Fast
Dojo: Beautiful Web Apps, FastGabriel Hamilton
 
HTML5, just another presentation :)
HTML5, just another presentation :)HTML5, just another presentation :)
HTML5, just another presentation :)François Massart
 
Html5 Brown Bag
Html5 Brown BagHtml5 Brown Bag
Html5 Brown Bagstuplum
 
How to make Ajax Libraries work for you
How to make Ajax Libraries work for youHow to make Ajax Libraries work for you
How to make Ajax Libraries work for youSimon Willison
 
JavaScript Libraries (Ajax Exp 2006)
JavaScript Libraries (Ajax Exp 2006)JavaScript Libraries (Ajax Exp 2006)
JavaScript Libraries (Ajax Exp 2006)jeresig
 
JavaScript!
JavaScript!JavaScript!
JavaScript!RTigger
 
The Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQueryThe Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQuerycolinbdclark
 
Intro JavaScript
Intro JavaScriptIntro JavaScript
Intro JavaScriptkoppenolski
 
Advancing JavaScript with Libraries (Yahoo Tech Talk)
Advancing JavaScript with Libraries (Yahoo Tech Talk)Advancing JavaScript with Libraries (Yahoo Tech Talk)
Advancing JavaScript with Libraries (Yahoo Tech Talk)jeresig
 

Similar a MozTW Jetpack Workshop: Taichung (20)

How to start developing apps for Firefox OS
How to start developing apps for Firefox OSHow to start developing apps for Firefox OS
How to start developing apps for Firefox OS
 
Porting Flashblock to Jetpack Platform (draft)
Porting Flashblock to Jetpack Platform (draft)Porting Flashblock to Jetpack Platform (draft)
Porting Flashblock to Jetpack Platform (draft)
 
How dojo works
How dojo worksHow dojo works
How dojo works
 
Masterin Large Scale Java Script Applications
Masterin Large Scale Java Script ApplicationsMasterin Large Scale Java Script Applications
Masterin Large Scale Java Script Applications
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
 
e10sとアプリ間通信
e10sとアプリ間通信e10sとアプリ間通信
e10sとアプリ間通信
 
JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)JavaScript Library Overview (Ajax Exp West 2007)
JavaScript Library Overview (Ajax Exp West 2007)
 
Hacking iBooks and ePub3 with JavaScript!
Hacking iBooks and ePub3 with JavaScript!Hacking iBooks and ePub3 with JavaScript!
Hacking iBooks and ePub3 with JavaScript!
 
Dojo: Beautiful Web Apps, Fast
Dojo: Beautiful Web Apps, FastDojo: Beautiful Web Apps, Fast
Dojo: Beautiful Web Apps, Fast
 
HTML5, just another presentation :)
HTML5, just another presentation :)HTML5, just another presentation :)
HTML5, just another presentation :)
 
Html5 Brown Bag
Html5 Brown BagHtml5 Brown Bag
Html5 Brown Bag
 
How to make Ajax Libraries work for you
How to make Ajax Libraries work for youHow to make Ajax Libraries work for you
How to make Ajax Libraries work for you
 
JavaScript Libraries (Ajax Exp 2006)
JavaScript Libraries (Ajax Exp 2006)JavaScript Libraries (Ajax Exp 2006)
JavaScript Libraries (Ajax Exp 2006)
 
JavaScript!
JavaScript!JavaScript!
JavaScript!
 
Selenium with java
Selenium with javaSelenium with java
Selenium with java
 
Jquery fundamentals
Jquery fundamentalsJquery fundamentals
Jquery fundamentals
 
The Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQueryThe Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQuery
 
Intro JavaScript
Intro JavaScriptIntro JavaScript
Intro JavaScript
 
Advancing JavaScript with Libraries (Yahoo Tech Talk)
Advancing JavaScript with Libraries (Yahoo Tech Talk)Advancing JavaScript with Libraries (Yahoo Tech Talk)
Advancing JavaScript with Libraries (Yahoo Tech Talk)
 
bcgr3-jquery
bcgr3-jquerybcgr3-jquery
bcgr3-jquery
 

Más de littlebtc

FURP12-Snappy
FURP12-SnappyFURP12-Snappy
FURP12-Snappylittlebtc
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學littlebtc
 
Jetpack and Jetpack Reboot
Jetpack and Jetpack RebootJetpack and Jetpack Reboot
Jetpack and Jetpack Rebootlittlebtc
 
COSCUP Jetpack Lighting Talk
COSCUP Jetpack Lighting TalkCOSCUP Jetpack Lighting Talk
COSCUP Jetpack Lighting Talklittlebtc
 
090807social
090807social090807social
090807sociallittlebtc
 
MoZH propose
MoZH proposeMoZH propose
MoZH proposelittlebtc
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basiclittlebtc
 
MozTW YZU CSE Lecture
MozTW YZU CSE LectureMozTW YZU CSE Lecture
MozTW YZU CSE Lecturelittlebtc
 
Something about Wikipedia
Something about WikipediaSomething about Wikipedia
Something about Wikipedialittlebtc
 

Más de littlebtc (10)

FURP12-Snappy
FURP12-SnappyFURP12-Snappy
FURP12-Snappy
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學
 
Jetpack and Jetpack Reboot
Jetpack and Jetpack RebootJetpack and Jetpack Reboot
Jetpack and Jetpack Reboot
 
COSCUP Jetpack Lighting Talk
COSCUP Jetpack Lighting TalkCOSCUP Jetpack Lighting Talk
COSCUP Jetpack Lighting Talk
 
090807social
090807social090807social
090807social
 
MoZH propose
MoZH proposeMoZH propose
MoZH propose
 
Ext 0523
Ext 0523Ext 0523
Ext 0523
 
Mozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: BasicMozilla Firefox Extension Development, Course 1: Basic
Mozilla Firefox Extension Development, Course 1: Basic
 
MozTW YZU CSE Lecture
MozTW YZU CSE LectureMozTW YZU CSE Lecture
MozTW YZU CSE Lecture
 
Something about Wikipedia
Something about WikipediaSomething about Wikipedia
Something about Wikipedia
 

Último

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 

Último (20)

DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 

MozTW Jetpack Workshop: Taichung

  • 1. Workshop: Taichung Hsiao-Ting Yu “Littlebtc” MozTW member / Jetpack Ambassador
  • 3. What is Mozilla? • Non-profit organization • Support for better Internet: an open web • Open Source Software • Open Web Standard • Major Products: Firefox & Thunderbird
  • 4. Mozilla Labs? • “Labs” in Mozilla • Crazy ideas • Explore future of the web
  • 6.
  • 7. MozTW? • Mozilla communities in Taiwan • Group for Mozilla “fans” • Localize Mozilla products • Promote Mozilla product & web standard • Our mascot: Foxmosa
  • 10. Old-type Mozilla Extension • XUL: user interface • JavaScript: code • CSS: styling • XBL: binding • XPCOM: core • ... So much hard things :(
  • 12. What is Jetpack? • Simple-to-use API to develop new-type extensions • HTML, CSS and JavaScript • JavaScript libraries available • Fast to develop, test and deploy • Extensible API Photo by www.rocketman.org, CC-BY-2.5 http://en.wikipedia.org/wiki/File:Rose-4.jpg
  • 13. Jetpack: Now and Future • Old: Jetpack Prototype 0.8 (standalone extension) • Experimental Prototype • Jetpack as single JavaScript file • Very Near Future: Jetpack SDK (Jetpack Reboot) • Distributed as a development kit • Jetpack as XPI extension bundle • Future version of Firefox will have Jetpack API supported included
  • 20. Procedure • Prepare a .js file and a .htm file in the same folder • in .htm file, add the following data: <html> <head> <title>Jetpack Workshop Example</title> <link rel="jetpack" href="example.js"> </head> <body> </body> </html> • in the .js file: add oneworld!'); console.log('Hello line • Open the .htm file to "Install" the Jetpack
  • 22. Refresh: the dirty way • For local files only(?) • Go to or refresh the about:jetpack page
  • 24. Everyone needs a “Hello World” • Log: Use Error Console (preferred) or Firebug Console • Go “Develop” Tab • Type • console.log("Hello World!");
  • 25. Notifications • Simple Type jetpack.notifications.show("Hello World!"); • Complex Type jetpack.notifications.show( { title: "Hi Jetpack!", body: " ", icon: "https://jetpack.mozillalabs.com/images/jetpack.png" } );
  • 26. Menu (I) • Import from future: jetpack.future.import("menu"); • Create new menu to a dummy menu object (does nothing) jetpack.menu.add("Aloha!"); • Create new menu to tools jetpack.menu.tools.add("Aloha!");
  • 27. Menu (II) • What menu? • jetpack.menu.file • jetpack.menu.edit • jetpack.menu.view • jetpack.menu.history • jetpack.menu.bookmarks • jetpack.menu.tools • Context Menu: Somehow complex • jetpack.menu.context.browser for browser UI • jetpack.menu.context.page for page
  • 28. Menu (III) • Object-type to allow more options • How about command? => command • Submenu? => menu • Details: https://developer.mozilla.org/en/Jetpack/UI/Menu jetpack.future.import("menu"); jetpack.menu.context.page.add({ label: "Ice Cream", icon: "https://jetpack.mozillalabs.com/images/ jetpack.png", menu: new jetpack.Menu(["Vanilla", "Chocolate", "Pistachio", null, "None"]), command: function (menuitem) { jetpack.notifications.show(menuitem.label) } });
  • 29. Slidebar (I) • It is not the sidebar! :D • Import from future: jetpack.future.import("slideBar"); • Append the slidebar with HTML content: jetpack.slideBar.append( { icon: "https://jetpack.mozillalabs.com/images/jetpack.png", html: "<html><body>Hello!</body></html>" }); • Or a given URL: jetpack.slideBar.append( { icon: "https://jetpack.mozillalabs.com/images/jetpack.png", url: "http://moztw.org" });
  • 30. Slidebar (II) • Events: • onReady: when feature("slidebar page") is loaded • onClick: when its icon is clicked • onSelect: when featured is selected • Options: • autoReload: reload every time selected
  • 31. Slidebar (III): Tips • onReady, onSelect: • Will have a slider object as a parameter • You can use slider.contentDocument to access the document • Jetpack 0.8 is jQuery enabled, so: function ready(slider) { var _doc = slider.contentDocument; $("body", _doc).html("..."); // Have fun! } jetpack.slider.append( {... , 'onReady': ready})
  • 32. Slidebar (IV): Tips again • You can use E4X hack to write HTML code: var html = <> <html> <head> <style type="text/css"> <![CDATA[ ... ]]> </style> <base target="_blank" /> <!-- Dirty Hack, very dirty --> </head> <body> ... </body></html></>.toXMLString(); jetpack.slideBar.append({html: html}); • Another dirty hack: set target to _blank to make links to open in the new tab, instead of in the slidebar content
  • 33. Toolbar • https://wiki.mozilla.org/Labs/Jetpack/JEP/21#Initial_Implementation_API • Import from future jetpack.future.import("toolbar"); • Which Toolbar? • jetpack.toolbar.navigation • jetpack.toolbar.bookmarks • Toolbar options var myButton = { id: "goMozTW", label: "Go MozTW", tooltip: "Access MozTW Website", image: "http://www.mozilla.org/favicon.ico", onclick: function(event) { jetpack.tabs.open('http://moztw.org/'); } } • Append And Remove jetpack.toolbar.navigation.append(myButton); jetpack.toolbar.navigation.remove("goMozTW");
  • 34. Statusbar • Somehow like slidebar, HTML-based • Parameters: width, html • onReady when HTML item is loaded • widget, its HTML document as a parameter • Example jetpack.statusBar.append({ html: "<strong>Hi!</strong>", width: 100, onReady: function(widget) { $("strong", widget).text("Jetpack rocks?"); $(widget).click(function() { jetpack.notifications.show("Yes!"); } ); } });
  • 38. Code and result • http://gist.github.com/323081
  • 39. Hacks in the code • $("<a />") to create element: not working • Use _doc.createElement("a") instead • Some Regex to fetch the real title • jQuery.ajax to fetch the content: http://api.jquery.com/jQuery.ajax/
  • 40. Another example: JetPlurk by irvinfly http://go.sto.tw/jetplurk
  • 41. Jetpack 0.8 APIs: Not (so much) UI related
  • 42. Selection • https://developer.mozilla.org/en/Jetpack/UI/Selection • Import from future jetpack.future.import("selection"); • Get Selection • jetpack.selection.text as plain text • jetpack.selection.html as HTML • Event: onSelection • Example jetpack.future.import("selection"); jetpack.selection.onSelection(function(){ jetpack.notifications.show(jetpack.selection.text); jetpack.selection.html = "<b>" + jetpack.selection.html + "</b>"; });
  • 43. Tabs (I) • jetpack.tabs • open(): open new tab jetpack.tabs.open("http://www.example.com"); • Array-like operations: • jetpack.tabs[0]: first tab • length: number of tabs
  • 44. Tabs (II) • Events: • onReady: (inherited document is fully loaded) • onFocus: focus changed • Example jetpack.tabs.onReady( function(doc) { console.log('ok'); } );
  • 45. Simple Storage • Simple Storage: implemented as JSON files • Future namespace should be used: jetpack.future.import("storage.simple");   var myStorage = jetpack.storage.simple;  • You can put some simple items: string, number, array, into myStorage: myStorage.group = 'moztw'; myStorage.members = ['littlebtc', 'bobchao', 'irvinfly']; • So console.log(myStorage.members[0]) is littlebtc! • sync() to force writing, open() to force reading (beware!)
  • 46. Settings (I) • Import from future is needed • Need some manifest: • https://developer.mozilla.org/en/Jetpack/Storage/ Settings • Resulting interface in about:jetpack:
  • 47. Settings (II) • Setting types: text, password, boolean, range • Available options: default, min (for range), max (for range) • Read/Write the setting is simple: jetpack.storage.settings.facebook.username = 'jen'; music.volume = jetpack.storage.settings.volume;
  • 48. Me, the extension • Use "me": jetpack.future.import("me");   • For first run purpose: jetpack.me.onFirstRun(function () {   jetpack.tabs.open("http://moztw.org/"); jetpack.notifications.show('Welcome!');    });  
  • 53. Review of Jetpack Prototype https:// • Wrong things jetpack.mozillalabs.com/ prototype.html • Scope • Right things • Quality • Usability • Non-Systemic API • Web Technologies • Document • JEPs • jQuery only • Quick Release • Tools integration
  • 54. New "Jetpack" Architecture Before After jetpack jetpack jetpack jetpack jetpack Jetpack Jetpack Jetpack API Core Core Firefox Firefox
  • 55. New "Jetpack SDK" • Python SDK, with features enabled: • Testing • XPI Packaging • "Package-based" • CommonJS based scripting • http://mozillalabs.com/jetpack/2010/03/09/ announcing-the-jetpack-sdk/ • https://jetpack.mozillalabs.com/sdk/0.1/docs/
  • 56. "Packaging" • One package, one directory • Every package directory should contain a mainfest.json at least • Description, Dependency, ... • JS files, known as "module", used for some reusable code, can be pulled in lib/xxx.js
  • 57. "Packaging" (II): CommonJS • Export a functions in my-module.js: exports.foo = function() { return "work!" } exports.add = funciton(a, b) { return a + b; } • Use and test it in main.js: var myModule = require("my-module"); exports.main = function(options, callbacks) { myModule.foo(); callbacks.quit(); } • "main" function exported from "main" module (main.js) will be called as your program "activate"s
  • 58. Testing • Create lib/test-my-module.js: var myModule = require("my-module"); exports.ensureAdditionWorks = function (test) { test.assertEqual(myModule.add(1, 1), 2, "1 + 1 = 2"); }; • cfx test --verbose to test!
  • 59. cfx works! • After grab the SDK, run in OSX/Linux: source bin/activate In Windows (Python and Python for Windows extension is required): source bin/activate • cfx testall : Sanity Check • Run in the package directory: • cfx test --verbose : test module • cfx xpi : make Jetpack XPI
  • 60. Jetpack-based extensions • Jetpack as an API • Jetpack-based extension will: • Require no restart to take effect • Have automatic update • And better security model • No difference for users compared with traditional extensions • Hosted on AMO too
  • 61.