SlideShare une entreprise Scribd logo
1  sur  111
Télécharger pour lire hors ligne
Intro to Atlassian
    Dashboards and
       OpenSocial

Tim Moore, Atlassian Developer
What Is the New
Atlassian Dashboard?
New Dashboard
 for JIRA 4.0
New Dashboard
 for JIRA 4.0
New Dashboard
 for JIRA 4.0
New Dashboard
 for JIRA 4.0
New Dashboard
 for JIRA 4.0
New Dashboard
 for JIRA 4.0
Integration with
Non-Atlassian apps
Solution:
OpenSocial Gadgets
What is OpenSocial?
Social Data Model
Web Service APIs
Gadgets
Seem Familiar?
Seem Familiar?
Gadgets are a Great
Solution for Dashboards
Built for Sharing Content
Open Standards,
Industry Support
Apache Shindig
Transitioning
    from
  Portlets
Why Write Gadgets?
Why Write Gadgets?

Easy!
Why Write Gadgets?

Easy!
Safe
Why Write Gadgets?

Easy!
Safe
Write Once, Display Everywhere
Why Write Gadgets?

Easy!
Safe
Write Once, Display Everywhere
Non-Atlassian Containers, Too!
What Do You
Need to Know?
What Do You
   Need to Know?
A Dashboard Dissected
What Do You
   Need to Know?
A Dashboard Dissected
Anatomy of a Gadget
What Do You
   Need to Know?
A Dashboard Dissected
Anatomy of a Gadget
Requesting Data from Web
Services
What Do You
    Need to Know?
A Dashboard Dissected
Anatomy of a Gadget
Requesting Data from Web
Services
Gadgets in an Atlassian Plugin
What Do You
    Need to Know?
A Dashboard Dissected
Anatomy of a Gadget
Requesting Data from Web
Services
Gadgets in an Atlassian Plugin
Where to Go to Learn More
A Dashboard Dissected
Anatomy of a Gadget
Anatomy of a Gadget

XML Spec File
•   Metadata, HTML Content, and JavaScript
Anatomy of a Gadget

XML Spec File
•   Metadata, HTML Content, and JavaScript

Core JavaScript API
•   Access Preferences, Make Requests
Anatomy of a Gadget

XML Spec File
•   Metadata, HTML Content, and JavaScript

Core JavaScript API
•   Access Preferences, Make Requests

Gadget Features
•   Additional, Optional Capabilities & APIs
XML Spec File
<ModulePrefs>
<ModulePrefs>
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<Module>
  <ModulePrefs
    title=quot;JIRA Issuesquot;
    author=quot;Atlassianquot;
    thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/
trunk/jira-issues/basic/jira-issues-thumbnail.pngquot;
    description=quot;A list of recently created Issuesquot;>

    <Require feature=quot;minimessagequot; />
    <Require feature=quot;dynamic-heightquot; />

  </ModulePrefs>
<ModulePrefs>
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<Module>
  <ModulePrefs
    title=quot;JIRA Issuesquot;
    author=quot;Atlassianquot;
    thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/
trunk/jira-issues/basic/jira-issues-thumbnail.pngquot;
    description=quot;A list of recently created Issuesquot;>

    <Require feature=quot;minimessagequot; />
    <Require feature=quot;dynamic-heightquot; />

  </ModulePrefs>
<ModulePrefs>
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<Module>
  <ModulePrefs
    title=quot;JIRA Issuesquot;
    author=quot;Atlassianquot;
    thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/
trunk/jira-issues/basic/jira-issues-thumbnail.pngquot;
    description=quot;A list of recently created Issuesquot;>

    <Require feature=quot;minimessagequot; />
    <Require feature=quot;dynamic-heightquot; />

  </ModulePrefs>
<UserPref>
<UserPref
  name=quot;show_datequot;
  display_name=quot;Show Dates?quot;
  datatype=quot;boolquot;
  default_value=quot;truequot;/>
<UserPref
  name=quot;show_summquot;
  display_name=quot;Show Summaries?quot;
  datatype=quot;boolquot;
  default_value=quot;truequot;/>
<UserPref
  name=quot;num_entriesquot;
  display_name=quot;Number of Entries:quot;
  default_value=quot;5quot;
  required=quot;truequot;/>
<UserPref>
<UserPref
  name=quot;show_datequot;
  display_name=quot;Show Dates?quot;
  datatype=quot;boolquot;
  default_value=quot;truequot;/>
<UserPref
  name=quot;show_summquot;
  display_name=quot;Show Summaries?quot;
  datatype=quot;boolquot;
  default_value=quot;truequot;/>
<UserPref
  name=quot;num_entriesquot;
  display_name=quot;Number of Entries:quot;
  default_value=quot;5quot;
  required=quot;truequot;/>
<UserPref>
<UserPref
  name=quot;show_datequot;
  display_name=quot;Show Dates?quot;
  datatype=quot;boolquot;
  default_value=quot;truequot;/>
<UserPref
  name=quot;show_summquot;
  display_name=quot;Show Summaries?quot;
  datatype=quot;boolquot;
  default_value=quot;truequot;/>
<UserPref
  name=quot;num_entriesquot;
  display_name=quot;Number of Entries:quot;
  default_value=quot;5quot;
  required=quot;truequot;/>
<Content>
  <Content type=quot;htmlquot;><![CDATA[
    <link rel=quot;stylesheetquot;
      href=quot;http://labs.atlassian.com/svn/GADGETS/trunk/
jira-issues/basic/jira-issues.cssquot;>

    <div id=quot;content_divquot;></div>

    <script type=quot;text/javascriptquot;
      src=quot;http://labs.atlassian.com/svn/GADGETS/trunk/
jira-issues/basic/jira-issues.jsquot;></script>
  ]]></Content>
</Module>
JavaScript
// Create minimessage factory
var msg = new gadgets.MiniMessage();
// Show a small loading message to the user
var loadMessage = msg.createStaticMessage(quot;loading...quot;);

// Get configured user prefs
var prefs = new gadgets.Prefs();
var showDate = prefs.getBool(quot;show_datequot;);
var showSummary = prefs.getBool(quot;show_summquot;);
var numEntries = prefs.getInt(quot;num_entriesquot;);

// Fetch issues when the gadget loads
gadgets.util.registerOnLoadHandler(fetchIssues);
JavaScript
// Create minimessage factory
var msg = new gadgets.MiniMessage();
// Show a small loading message to the user
var loadMessage = msg.createStaticMessage(quot;loading...quot;);

// Get configured user prefs
var prefs = new gadgets.Prefs();
var showDate = prefs.getBool(quot;show_datequot;);
var showSummary = prefs.getBool(quot;show_summquot;);
var numEntries = prefs.getInt(quot;num_entriesquot;);

// Fetch issues when the gadget loads
gadgets.util.registerOnLoadHandler(fetchIssues);
JavaScript
// Create minimessage factory
var msg = new gadgets.MiniMessage();
// Show a small loading message to the user
var loadMessage = msg.createStaticMessage(quot;loading...quot;);

// Get configured user prefs
var prefs = new gadgets.Prefs();
var showDate = prefs.getBool(quot;show_datequot;);
var showSummary = prefs.getBool(quot;show_summquot;);
var numEntries = prefs.getInt(quot;num_entriesquot;);

// Fetch issues when the gadget loads
gadgets.util.registerOnLoadHandler(fetchIssues);
Requesting Data from
   Web Services
Requesting Data from
   Web Services

AJAX + DOM
Requesting Data from
   Web Services

AJAX + DOM
Request Proxy
Requesting Data from
   Web Services

AJAX + DOM
Request Proxy
Trusted Apps + OAuth
gadgets io
       . .makeRequest )
                     (
What Can You Call?
What Can You Call?

Any URL
What Can You Call?

Any URL
XML and JSON are the most
useful
What Can You Call?

Any URL
XML and JSON are the most
useful
REST-style APIs are the most
convenient
Fetching Issues
function fetchIssues() {
  var url = quot;http://jira.atlassian.com/sr/quot; +
    quot;jira.issueviews:searchrequest-xmlquot; +
    quot;/temp/SearchRequest.xml?quot; +
    quot;created%3Aprevious=-1w&resolution=-1quot; +
    quot;&sorter/field=issuekey&sorter/order=DESCquot; +
    quot;&sorter/field=created&sorter/order=DESCquot; +
    quot;&tempMax=20quot;;

      var params = {};
      params[gadgets.io.RequestParameters.CONTENT_TYPE] =
        gadgets.io.ContentType.DOM;

    gadgets.io.makeRequest(url, handleResponse, params);
}
Handling the Response
function handleResponse(obj) {
  var domData = obj.data;

    var jiraIssues = {
        title : getTitle(domData),
        items : getItems(domData)
    };
    renderJiraIssues(jiraIssues);

    msg.dismissMessage(loadMessage);
    gadgets.window.adjustHeight();
}
Handling the Response
function handleResponse(obj) {
  var domData = obj.data;

    var jiraIssues = {
        title : getTitle(domData),
        items : getItems(domData)
    };
    renderJiraIssues(jiraIssues);

    msg.dismissMessage(loadMessage);
    gadgets.window.adjustHeight();
}
Questions?
Gadgets in an
Atlassian Plugin
Gadgets in an
   Atlassian Plugin

Package into a Plugin JAR
Gadgets in an
   Atlassian Plugin

Package into a Plugin JAR
Add <gadget> plugin module
Gadgets in an
    Atlassian Plugin

Package into a Plugin JAR
Add <gadget> plugin module
Install
Directory Structure
atlassian-plugin.xml
atlassian-plugin.xml
<atlassian-plugin
  key=quot;com.atlassian.jira.issues-gadgetquot;
  name=quot;JIRA Issues Gadget Pluginquot;
  pluginsVersion=quot;2quot;>
  <plugin-info>
    <version>1.0</version>
  </plugin-info>
Resources
<resource
  type=quot;downloadquot;
  name=quot;jira-issues-thumbnail.pngquot;
  location=quot;jira-issues-thumbnail.pngquot;/>

<web-resource key=quot;resourcesquot;>
  <resource
    type=quot;downloadquot;
    name=quot;jira-issues.jsquot;
    location=quot;jira-issues.jsquot;/>
  <resource
    type=quot;downloadquot;
    name=quot;jira-issues.cssquot;
    location=quot;jira-issues.cssquot;/>
</web-resource>
atlassian-plugin.xml
<gadget
  key=quot;jira-issuesquot;
  location=quot;jira-issues.xmlquot;/>
Gadget Pre-Processing
Gadget Pre-Processing

 __ATLASSIAN_BASE_URL__
Gadget Pre-Processing

 __ATLASSIAN_BASE_URL__
 “#-directives”
Gadget Pre-Processing

 __ATLASSIAN_BASE_URL__
 “#-directives”
• #staticResourceUrl
Gadget Pre-Processing

 __ATLASSIAN_BASE_URL__
 “#-directives”
• #staticResourceUrl
• #requireResource, & #includeResources
Gadget Pre-Processing

 __ATLASSIAN_BASE_URL__
 “#-directives”
• #staticResourceUrl
• #requireResource, & #includeResources
 More in the docs…
Modified Gadget
Modified Gadget
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<Module>
  <ModulePrefs
    title=quot;JIRA Issuesquot;
    author=quot;Atlassianquot;
    thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/
trunk/jira-issues/basic/jira-issues-thumbnail.pngquot;
    description=quot;A list of recently created Issuesquot;>

    <Require feature=quot;minimessagequot; />
    <Require feature=quot;dynamic-heightquot; />

  </ModulePrefs>
Modified Gadget
<?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?>
<Module>
  <ModulePrefs
    title=quot;JIRA Issuesquot;
    author=quot;Atlassianquot;
    thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/
    thumbnail=
trunk/jira-issues/basic/jira-issues-thumbnail.pngquot;
      '#staticResourceUrl(quot;com.atlassian.jira.issues-
gadget:jira-issuesquot;, quot;jira-issues-thumbnail.pngquot;)'
    description=quot;A list of recently created Issuesquot;>
    description=quot;A list of recently created Issuesquot;>
    <Require feature=quot;minimessagequot; />
    <Require feature=quot;dynamic-heightquot; />
             feature=quot;minimessagequot; />
    <Require feature=quot;dynamic-heightquot; />
  </ModulePrefs>
  </ModulePrefs>
Modified <Content>
  <Content type=quot;htmlquot;><![CDATA[
    <link rel=quot;stylesheetquot;
      href=quot;http://labs.atlassian.com/svn/GADGETS/trunk/
jira-issues/basic/jira-issues.cssquot;>

    <div id=quot;content_divquot;></div>

    <script type=quot;text/javascriptquot;
      src=quot;http://labs.atlassian.com/svn/GADGETS/trunk/
jira-issues/basic/jira-issues.jsquot;></script>
  ]]></Content>
</Module>
Modified <Content>
  <Content type=quot;htmlquot;><![CDATA[
    #requireResource(quot;com.atlassian.jira.issues-
gadget:resourcesquot;)
    #includeResources()

    <div id=quot;content_divquot;></div>
  ]]></Content>
</Module>
Modified <Content>
  <Content type=quot;htmlquot;><![CDATA[
    #requireResource(quot;com.atlassian.jira.issues-
gadget:resourcesquot;)
    <script>
    #includeResources()
      var url = quot;__ATLASSIAN_BASE_URL__/sr/quot; +
    <divquot;jira.issueviews:searchrequest-xmlquot; +
          id=quot;content_divquot;></div>
        quot;/temp/SearchRequest.xml?quot; +
  ]]></Content>
        quot;created%3Aprevious=-1w&resolution=-1quot; +
</Module>
        quot;&sorter/field=issuekey&sorter/order=DESCquot; +
        quot;&sorter/field=created&sorter/order=DESCquot; +
        quot;&tempMax=20quot;;
    </script>
    #includeResources()

    <div id=quot;content_divquot;></div>
What Can You Call from
  a Gadget Plugin?
What Can You Call from
  a Gadget Plugin?
 Existing URLs and REST APIs —
 no Java needed!
What Can You Call from
  a Gadget Plugin?
 Existing URLs and REST APIs —
 no Java needed!
 Custom servlet or WebWork
 plugins
What Can You Call from
  a Gadget Plugin?
 Existing URLs and REST APIs —
 no Java needed!
 Custom servlet or WebWork
 plugins
 Atlassian REST Plugin Module
 Type
OAuth
Whatʼs Next?
Whatʼs Next?

JavaScript Helper Libraries
Whatʼs Next?

JavaScript Helper Libraries
Dashboard in More Atlassian Apps
Whatʼs Next?

JavaScript Helper Libraries
Dashboard in More Atlassian Apps
Gadgets Everywhere!
Whatʼs Next?

JavaScript Helper Libraries
Dashboard in More Atlassian Apps
Gadgets Everywhere!
More OpenSocial
If You Donʼt Remember
    Anything Else…
Atlassian Dashboards are composed of Gadgets

Atlassian Gadgets are OpenSocial Gadgets

Gadgets are HTML, CSS, & JavaScript mini-apps that
can be displayed in many containers

Gadgets are defined by a static XML spec file

Gadgets make use of web services via
gadgets.io.makeRequest

Gadgets can be packaged in Atlassian Plugins for
improved portability and integration
haveasec.com/summit
       SURVEY!!
www.atlassian.com/opensocial

Contenu connexe

Tendances

A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...
A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...
A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...
GoogleTecTalks
 
Debugging tools in web browsers
Debugging tools in web browsersDebugging tools in web browsers
Debugging tools in web browsers
Sarah Dutkiewicz
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
connectwebex
 
How to develop asp web applications
How to develop asp web applicationsHow to develop asp web applications
How to develop asp web applications
Deepankar Pathak
 

Tendances (20)

ASP.NET AJAX with Visual Studio 2008
ASP.NET AJAX with Visual Studio 2008ASP.NET AJAX with Visual Studio 2008
ASP.NET AJAX with Visual Studio 2008
 
Web II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side developmentWeb II - 01 - Introduction to server-side development
Web II - 01 - Introduction to server-side development
 
You Know WebOS
You Know WebOSYou Know WebOS
You Know WebOS
 
Benefits of the CodeIgniter Framework
Benefits of the CodeIgniter FrameworkBenefits of the CodeIgniter Framework
Benefits of the CodeIgniter Framework
 
A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...
A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...
A World Beyond Ajax Accessing Googles Ap Is From Flash And Non Java Script En...
 
Selenium for-ops
Selenium for-opsSelenium for-ops
Selenium for-ops
 
Debugging tools in web browsers
Debugging tools in web browsersDebugging tools in web browsers
Debugging tools in web browsers
 
Ionic by Example
Ionic by ExampleIonic by Example
Ionic by Example
 
Share point 2013 apps and i mean it
Share point 2013 apps and i mean itShare point 2013 apps and i mean it
Share point 2013 apps and i mean it
 
Developing an ASP.NET Web Application
Developing an ASP.NET Web ApplicationDeveloping an ASP.NET Web Application
Developing an ASP.NET Web Application
 
HTML5 Bootcamp: Essential HTML, CSS, & JavaScript
HTML5 Bootcamp: Essential HTML, CSS, & JavaScriptHTML5 Bootcamp: Essential HTML, CSS, & JavaScript
HTML5 Bootcamp: Essential HTML, CSS, & JavaScript
 
Building a Simple Mobile-optimized Web App Using the jQuery Mobile Framework
Building a Simple Mobile-optimized Web App Using the jQuery Mobile FrameworkBuilding a Simple Mobile-optimized Web App Using the jQuery Mobile Framework
Building a Simple Mobile-optimized Web App Using the jQuery Mobile Framework
 
A Debugging Adventure: Journey through Ember.js Glue
A Debugging Adventure: Journey through Ember.js GlueA Debugging Adventure: Journey through Ember.js Glue
A Debugging Adventure: Journey through Ember.js Glue
 
Build single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEMBuild single page applications using AngularJS on AEM
Build single page applications using AngularJS on AEM
 
Build APIs With Kapow Mashup Server
Build APIs With Kapow Mashup ServerBuild APIs With Kapow Mashup Server
Build APIs With Kapow Mashup Server
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)
 
WordCamp Greenville 2018 - Beware the Dark Side, or an Intro to Development
WordCamp Greenville 2018 - Beware the Dark Side, or an Intro to DevelopmentWordCamp Greenville 2018 - Beware the Dark Side, or an Intro to Development
WordCamp Greenville 2018 - Beware the Dark Side, or an Intro to Development
 
Flex vs. HTML5 for RIAS
Flex vs. HTML5 for RIASFlex vs. HTML5 for RIAS
Flex vs. HTML5 for RIAS
 
How to develop asp web applications
How to develop asp web applicationsHow to develop asp web applications
How to develop asp web applications
 
What is jQuery?
What is jQuery?What is jQuery?
What is jQuery?
 

Similaire à Intro Open Social and Dashboards

Open social 2.0 sandbox ee and breaking out of the gadget box
Open social 2.0 sandbox  ee and breaking out of the gadget boxOpen social 2.0 sandbox  ee and breaking out of the gadget box
Open social 2.0 sandbox ee and breaking out of the gadget box
Ryan Baxter
 
Getting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial GadgetsGetting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial Gadgets
Atlassian
 
Solr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJsSolr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJs
Wildan Maulana
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
funkatron
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForce
Ciklum Ukraine
 
Testing persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitTesting persistence in PHP with DbUnit
Testing persistence in PHP with DbUnit
Peter Wilcsinszky
 
Html and i_phone_mobile-2
Html and i_phone_mobile-2Html and i_phone_mobile-2
Html and i_phone_mobile-2
tonvanbart
 

Similaire à Intro Open Social and Dashboards (20)

Open social 2.0 sandbox ee and breaking out of the gadget box
Open social 2.0 sandbox  ee and breaking out of the gadget boxOpen social 2.0 sandbox  ee and breaking out of the gadget box
Open social 2.0 sandbox ee and breaking out of the gadget box
 
Getting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial GadgetsGetting the Most Out of OpenSocial Gadgets
Getting the Most Out of OpenSocial Gadgets
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax components
 
I Feel Pretty
I Feel PrettyI Feel Pretty
I Feel Pretty
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server Pages
 
JSP Standart Tag Lİbrary - JSTL
JSP Standart Tag Lİbrary - JSTLJSP Standart Tag Lİbrary - JSTL
JSP Standart Tag Lİbrary - JSTL
 
Solr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJsSolr and symfony in Harmony with SolrJs
Solr and symfony in Harmony with SolrJs
 
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp VictoriaWidgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
Widgets: Making Your Site Great and Letting Others Help - WordCamp Victoria
 
Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2Migrating from Struts 1 to Struts 2
Migrating from Struts 1 to Struts 2
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
Opensocial Codelab
Opensocial CodelabOpensocial Codelab
Opensocial Codelab
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForce
 
Migration testing framework
Migration testing frameworkMigration testing framework
Migration testing framework
 
Wai Aria - An Intro
Wai Aria - An IntroWai Aria - An Intro
Wai Aria - An Intro
 
Testing persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitTesting persistence in PHP with DbUnit
Testing persistence in PHP with DbUnit
 
Itemscript, a specification for RESTful JSON integration
Itemscript, a specification for RESTful JSON integrationItemscript, a specification for RESTful JSON integration
Itemscript, a specification for RESTful JSON integration
 
Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2
 
Jsp
JspJsp
Jsp
 
Html and i_phone_mobile-2
Html and i_phone_mobile-2Html and i_phone_mobile-2
Html and i_phone_mobile-2
 

Plus de Atlassian

Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
Atlassian
 

Plus de Atlassian (20)

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App Showcase
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UI
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User Experience
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge Triggers
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in Forge
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy Model
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI System
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the Hood
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the Building
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that Matter
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in Mind
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced Teams
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in Mind
 

Dernier

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Dernier (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 

Intro Open Social and Dashboards

  • 1. Intro to Atlassian Dashboards and OpenSocial Tim Moore, Atlassian Developer
  • 2. What Is the New Atlassian Dashboard?
  • 3. New Dashboard for JIRA 4.0
  • 4. New Dashboard for JIRA 4.0
  • 5. New Dashboard for JIRA 4.0
  • 6. New Dashboard for JIRA 4.0
  • 7. New Dashboard for JIRA 4.0
  • 8. New Dashboard for JIRA 4.0
  • 9.
  • 10.
  • 12.
  • 13.
  • 14.
  • 15.
  • 21.
  • 24. Gadgets are a Great Solution for Dashboards
  • 25. Built for Sharing Content
  • 28. Transitioning from Portlets
  • 32. Why Write Gadgets? Easy! Safe Write Once, Display Everywhere
  • 33. Why Write Gadgets? Easy! Safe Write Once, Display Everywhere Non-Atlassian Containers, Too!
  • 34. What Do You Need to Know?
  • 35. What Do You Need to Know? A Dashboard Dissected
  • 36. What Do You Need to Know? A Dashboard Dissected Anatomy of a Gadget
  • 37. What Do You Need to Know? A Dashboard Dissected Anatomy of a Gadget Requesting Data from Web Services
  • 38. What Do You Need to Know? A Dashboard Dissected Anatomy of a Gadget Requesting Data from Web Services Gadgets in an Atlassian Plugin
  • 39. What Do You Need to Know? A Dashboard Dissected Anatomy of a Gadget Requesting Data from Web Services Gadgets in an Atlassian Plugin Where to Go to Learn More
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49. Anatomy of a Gadget
  • 50. Anatomy of a Gadget XML Spec File • Metadata, HTML Content, and JavaScript
  • 51. Anatomy of a Gadget XML Spec File • Metadata, HTML Content, and JavaScript Core JavaScript API • Access Preferences, Make Requests
  • 52. Anatomy of a Gadget XML Spec File • Metadata, HTML Content, and JavaScript Core JavaScript API • Access Preferences, Make Requests Gadget Features • Additional, Optional Capabilities & APIs
  • 55. <ModulePrefs> <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <Module> <ModulePrefs title=quot;JIRA Issuesquot; author=quot;Atlassianquot; thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/ trunk/jira-issues/basic/jira-issues-thumbnail.pngquot; description=quot;A list of recently created Issuesquot;> <Require feature=quot;minimessagequot; /> <Require feature=quot;dynamic-heightquot; /> </ModulePrefs>
  • 56. <ModulePrefs> <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <Module> <ModulePrefs title=quot;JIRA Issuesquot; author=quot;Atlassianquot; thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/ trunk/jira-issues/basic/jira-issues-thumbnail.pngquot; description=quot;A list of recently created Issuesquot;> <Require feature=quot;minimessagequot; /> <Require feature=quot;dynamic-heightquot; /> </ModulePrefs>
  • 57. <ModulePrefs> <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <Module> <ModulePrefs title=quot;JIRA Issuesquot; author=quot;Atlassianquot; thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/ trunk/jira-issues/basic/jira-issues-thumbnail.pngquot; description=quot;A list of recently created Issuesquot;> <Require feature=quot;minimessagequot; /> <Require feature=quot;dynamic-heightquot; /> </ModulePrefs>
  • 58. <UserPref> <UserPref name=quot;show_datequot; display_name=quot;Show Dates?quot; datatype=quot;boolquot; default_value=quot;truequot;/> <UserPref name=quot;show_summquot; display_name=quot;Show Summaries?quot; datatype=quot;boolquot; default_value=quot;truequot;/> <UserPref name=quot;num_entriesquot; display_name=quot;Number of Entries:quot; default_value=quot;5quot; required=quot;truequot;/>
  • 59. <UserPref> <UserPref name=quot;show_datequot; display_name=quot;Show Dates?quot; datatype=quot;boolquot; default_value=quot;truequot;/> <UserPref name=quot;show_summquot; display_name=quot;Show Summaries?quot; datatype=quot;boolquot; default_value=quot;truequot;/> <UserPref name=quot;num_entriesquot; display_name=quot;Number of Entries:quot; default_value=quot;5quot; required=quot;truequot;/>
  • 60. <UserPref> <UserPref name=quot;show_datequot; display_name=quot;Show Dates?quot; datatype=quot;boolquot; default_value=quot;truequot;/> <UserPref name=quot;show_summquot; display_name=quot;Show Summaries?quot; datatype=quot;boolquot; default_value=quot;truequot;/> <UserPref name=quot;num_entriesquot; display_name=quot;Number of Entries:quot; default_value=quot;5quot; required=quot;truequot;/>
  • 61. <Content> <Content type=quot;htmlquot;><![CDATA[ <link rel=quot;stylesheetquot; href=quot;http://labs.atlassian.com/svn/GADGETS/trunk/ jira-issues/basic/jira-issues.cssquot;> <div id=quot;content_divquot;></div> <script type=quot;text/javascriptquot; src=quot;http://labs.atlassian.com/svn/GADGETS/trunk/ jira-issues/basic/jira-issues.jsquot;></script> ]]></Content> </Module>
  • 62. JavaScript // Create minimessage factory var msg = new gadgets.MiniMessage(); // Show a small loading message to the user var loadMessage = msg.createStaticMessage(quot;loading...quot;); // Get configured user prefs var prefs = new gadgets.Prefs(); var showDate = prefs.getBool(quot;show_datequot;); var showSummary = prefs.getBool(quot;show_summquot;); var numEntries = prefs.getInt(quot;num_entriesquot;); // Fetch issues when the gadget loads gadgets.util.registerOnLoadHandler(fetchIssues);
  • 63. JavaScript // Create minimessage factory var msg = new gadgets.MiniMessage(); // Show a small loading message to the user var loadMessage = msg.createStaticMessage(quot;loading...quot;); // Get configured user prefs var prefs = new gadgets.Prefs(); var showDate = prefs.getBool(quot;show_datequot;); var showSummary = prefs.getBool(quot;show_summquot;); var numEntries = prefs.getInt(quot;num_entriesquot;); // Fetch issues when the gadget loads gadgets.util.registerOnLoadHandler(fetchIssues);
  • 64. JavaScript // Create minimessage factory var msg = new gadgets.MiniMessage(); // Show a small loading message to the user var loadMessage = msg.createStaticMessage(quot;loading...quot;); // Get configured user prefs var prefs = new gadgets.Prefs(); var showDate = prefs.getBool(quot;show_datequot;); var showSummary = prefs.getBool(quot;show_summquot;); var numEntries = prefs.getInt(quot;num_entriesquot;); // Fetch issues when the gadget loads gadgets.util.registerOnLoadHandler(fetchIssues);
  • 65. Requesting Data from Web Services
  • 66. Requesting Data from Web Services AJAX + DOM
  • 67. Requesting Data from Web Services AJAX + DOM Request Proxy
  • 68. Requesting Data from Web Services AJAX + DOM Request Proxy Trusted Apps + OAuth
  • 69. gadgets io . .makeRequest ) (
  • 70. What Can You Call?
  • 71. What Can You Call? Any URL
  • 72. What Can You Call? Any URL XML and JSON are the most useful
  • 73. What Can You Call? Any URL XML and JSON are the most useful REST-style APIs are the most convenient
  • 74. Fetching Issues function fetchIssues() { var url = quot;http://jira.atlassian.com/sr/quot; + quot;jira.issueviews:searchrequest-xmlquot; + quot;/temp/SearchRequest.xml?quot; + quot;created%3Aprevious=-1w&resolution=-1quot; + quot;&sorter/field=issuekey&sorter/order=DESCquot; + quot;&sorter/field=created&sorter/order=DESCquot; + quot;&tempMax=20quot;; var params = {}; params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.DOM; gadgets.io.makeRequest(url, handleResponse, params); }
  • 75. Handling the Response function handleResponse(obj) { var domData = obj.data; var jiraIssues = { title : getTitle(domData), items : getItems(domData) }; renderJiraIssues(jiraIssues); msg.dismissMessage(loadMessage); gadgets.window.adjustHeight(); }
  • 76. Handling the Response function handleResponse(obj) { var domData = obj.data; var jiraIssues = { title : getTitle(domData), items : getItems(domData) }; renderJiraIssues(jiraIssues); msg.dismissMessage(loadMessage); gadgets.window.adjustHeight(); }
  • 79. Gadgets in an Atlassian Plugin Package into a Plugin JAR
  • 80. Gadgets in an Atlassian Plugin Package into a Plugin JAR Add <gadget> plugin module
  • 81. Gadgets in an Atlassian Plugin Package into a Plugin JAR Add <gadget> plugin module Install
  • 84. atlassian-plugin.xml <atlassian-plugin key=quot;com.atlassian.jira.issues-gadgetquot; name=quot;JIRA Issues Gadget Pluginquot; pluginsVersion=quot;2quot;> <plugin-info> <version>1.0</version> </plugin-info>
  • 85. Resources <resource type=quot;downloadquot; name=quot;jira-issues-thumbnail.pngquot; location=quot;jira-issues-thumbnail.pngquot;/> <web-resource key=quot;resourcesquot;> <resource type=quot;downloadquot; name=quot;jira-issues.jsquot; location=quot;jira-issues.jsquot;/> <resource type=quot;downloadquot; name=quot;jira-issues.cssquot; location=quot;jira-issues.cssquot;/> </web-resource>
  • 86. atlassian-plugin.xml <gadget key=quot;jira-issuesquot; location=quot;jira-issues.xmlquot;/>
  • 90. Gadget Pre-Processing __ATLASSIAN_BASE_URL__ “#-directives” • #staticResourceUrl
  • 91. Gadget Pre-Processing __ATLASSIAN_BASE_URL__ “#-directives” • #staticResourceUrl • #requireResource, & #includeResources
  • 92. Gadget Pre-Processing __ATLASSIAN_BASE_URL__ “#-directives” • #staticResourceUrl • #requireResource, & #includeResources More in the docs…
  • 94. Modified Gadget <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <Module> <ModulePrefs title=quot;JIRA Issuesquot; author=quot;Atlassianquot; thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/ trunk/jira-issues/basic/jira-issues-thumbnail.pngquot; description=quot;A list of recently created Issuesquot;> <Require feature=quot;minimessagequot; /> <Require feature=quot;dynamic-heightquot; /> </ModulePrefs>
  • 95. Modified Gadget <?xml version=quot;1.0quot; encoding=quot;UTF-8quot; ?> <Module> <ModulePrefs title=quot;JIRA Issuesquot; author=quot;Atlassianquot; thumbnail=quot;http://labs.atlassian.com/svn/GADGETS/ thumbnail= trunk/jira-issues/basic/jira-issues-thumbnail.pngquot; '#staticResourceUrl(quot;com.atlassian.jira.issues- gadget:jira-issuesquot;, quot;jira-issues-thumbnail.pngquot;)' description=quot;A list of recently created Issuesquot;> description=quot;A list of recently created Issuesquot;> <Require feature=quot;minimessagequot; /> <Require feature=quot;dynamic-heightquot; /> feature=quot;minimessagequot; /> <Require feature=quot;dynamic-heightquot; /> </ModulePrefs> </ModulePrefs>
  • 96. Modified <Content> <Content type=quot;htmlquot;><![CDATA[ <link rel=quot;stylesheetquot; href=quot;http://labs.atlassian.com/svn/GADGETS/trunk/ jira-issues/basic/jira-issues.cssquot;> <div id=quot;content_divquot;></div> <script type=quot;text/javascriptquot; src=quot;http://labs.atlassian.com/svn/GADGETS/trunk/ jira-issues/basic/jira-issues.jsquot;></script> ]]></Content> </Module>
  • 97. Modified <Content> <Content type=quot;htmlquot;><![CDATA[ #requireResource(quot;com.atlassian.jira.issues- gadget:resourcesquot;) #includeResources() <div id=quot;content_divquot;></div> ]]></Content> </Module>
  • 98. Modified <Content> <Content type=quot;htmlquot;><![CDATA[ #requireResource(quot;com.atlassian.jira.issues- gadget:resourcesquot;) <script> #includeResources() var url = quot;__ATLASSIAN_BASE_URL__/sr/quot; + <divquot;jira.issueviews:searchrequest-xmlquot; + id=quot;content_divquot;></div> quot;/temp/SearchRequest.xml?quot; + ]]></Content> quot;created%3Aprevious=-1w&resolution=-1quot; + </Module> quot;&sorter/field=issuekey&sorter/order=DESCquot; + quot;&sorter/field=created&sorter/order=DESCquot; + quot;&tempMax=20quot;; </script> #includeResources() <div id=quot;content_divquot;></div>
  • 99. What Can You Call from a Gadget Plugin?
  • 100. What Can You Call from a Gadget Plugin? Existing URLs and REST APIs — no Java needed!
  • 101. What Can You Call from a Gadget Plugin? Existing URLs and REST APIs — no Java needed! Custom servlet or WebWork plugins
  • 102. What Can You Call from a Gadget Plugin? Existing URLs and REST APIs — no Java needed! Custom servlet or WebWork plugins Atlassian REST Plugin Module Type
  • 103. OAuth
  • 106. Whatʼs Next? JavaScript Helper Libraries Dashboard in More Atlassian Apps
  • 107. Whatʼs Next? JavaScript Helper Libraries Dashboard in More Atlassian Apps Gadgets Everywhere!
  • 108. Whatʼs Next? JavaScript Helper Libraries Dashboard in More Atlassian Apps Gadgets Everywhere! More OpenSocial
  • 109. If You Donʼt Remember Anything Else… Atlassian Dashboards are composed of Gadgets Atlassian Gadgets are OpenSocial Gadgets Gadgets are HTML, CSS, & JavaScript mini-apps that can be displayed in many containers Gadgets are defined by a static XML spec file Gadgets make use of web services via gadgets.io.makeRequest Gadgets can be packaged in Atlassian Plugins for improved portability and integration
  • 110. haveasec.com/summit SURVEY!!