SlideShare una empresa de Scribd logo
1 de 111
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

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 2008Caleb Jenkins
 
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 developmentRandy Connolly
 
Benefits of the CodeIgniter Framework
Benefits of the CodeIgniter FrameworkBenefits of the CodeIgniter Framework
Benefits of the CodeIgniter FrameworkToby Beresford
 
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 browsersSarah Dutkiewicz
 
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 itEric Overfield
 
Developing an ASP.NET Web Application
Developing an ASP.NET Web ApplicationDeveloping an ASP.NET Web Application
Developing an ASP.NET Web ApplicationRishi Kothari
 
HTML5 Bootcamp: Essential HTML, CSS, & JavaScript
HTML5 Bootcamp: Essential HTML, CSS, & JavaScriptHTML5 Bootcamp: Essential HTML, CSS, & JavaScript
HTML5 Bootcamp: Essential HTML, CSS, & JavaScriptTodd Anglin
 
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 FrameworkSt. Petersburg College
 
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 GlueMike North
 
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 AEMconnectwebex
 
Build APIs With Kapow Mashup Server
Build APIs With Kapow Mashup ServerBuild APIs With Kapow Mashup Server
Build APIs With Kapow Mashup ServerAndreas Krohn
 
Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Progressive Enhancement 2.0 (Conference Agnostic)
Progressive Enhancement 2.0 (Conference Agnostic)Nicholas Zakas
 
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 DevelopmentEvan Mullins
 
Flex vs. HTML5 for RIAS
Flex vs. HTML5 for RIASFlex vs. HTML5 for RIAS
Flex vs. HTML5 for RIASPamela Fox
 
How to develop asp web applications
How to develop asp web applicationsHow to develop asp web applications
How to develop asp web applicationsDeepankar Pathak
 

La actualidad más candente (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?
 

Similar a 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 boxRyan 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 GadgetsAtlassian
 
Developing and testing ajax components
Developing and testing ajax componentsDeveloping and testing ajax components
Developing and testing ajax componentsIgnacio Coloma
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesJohn Brunswick
 
JSP Standart Tag Lİbrary - JSTL
JSP Standart Tag Lİbrary - JSTLJSP Standart Tag Lİbrary - JSTL
JSP Standart Tag Lİbrary - JSTLseleciii44
 
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 SolrJsWildan Maulana
 
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 VictoriaJeff Richards
 
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 2Matt Raible
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Phpfunkatron
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentationipolevoy
 
CiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklumJavaSat_15112011:Alex Kruk VMForce
CiklumJavaSat_15112011:Alex Kruk VMForceCiklum Ukraine
 
Migration testing framework
Migration testing frameworkMigration testing framework
Migration testing frameworkIndicThreads
 
Wai Aria - An Intro
Wai Aria - An IntroWai Aria - An Intro
Wai Aria - An IntroMatt Machell
 
Testing persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitTesting persistence in PHP with DbUnit
Testing persistence in PHP with DbUnitPeter Wilcsinszky
 
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{item:foo}
 
Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2Javascript: Ajax & DOM Manipulation v1.2
Javascript: Ajax & DOM Manipulation v1.2borkweb
 
Html and i_phone_mobile-2
Html and i_phone_mobile-2Html and i_phone_mobile-2
Html and i_phone_mobile-2tonvanbart
 

Similar a 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
 

Más de Atlassian

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020Atlassian
 
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 2020Atlassian
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App ShowcaseAtlassian
 
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 UIAtlassian
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge RuntimeAtlassian
 
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 ExperienceAtlassian
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge TriggersAtlassian
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeAtlassian
 
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 ModelAtlassian
 
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 SystemAtlassian
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the HoodAtlassian
 
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 APIsAtlassian
 
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 PluginAtlassian
 
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 BuildingAtlassian
 
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 MatterAtlassian
 
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 MindAtlassian
 
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...Atlassian
 
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 TeamsAtlassian
 
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 TeamAtlassian
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in MindAtlassian
 

Más 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
 

Último

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
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
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
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
 
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
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
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
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
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
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 

Último (20)

What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
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
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
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
 
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
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
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
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
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
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
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
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 

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!!