Unofficial JavaScript library for LDS.org
JavaScript
Latest commit 7c536ac Mar 23, 2015 @coolaj86 coolaj86 Update README.md
Permalink
Failed to load latest commit information.
.gitignore
README.md
benchmark.txt
bower.json version bump Jun 30, 2014
browser.js
cache-browser.js
cache.js
hogwarts.js
ldsorg.js
node.js
package.json version bump Jun 30, 2014
stake.js
test-hogwarts.js fixed major bugs (photoUrl/photoNum) and quit leaving chance up to ra… May 28, 2014
test.js
ward.js fixed part of the cache mechanism and added new image methods Apr 3, 2014

README.md

READ THIS FIRST

This library is deprecated.

See https://ldsconnect.org and https://lds.io for the latest OAuth2 API, examples, and documentation.

ldsorg.js

This is a thin layer over the LDS.org api. All of the data is exactly the same with one exception: pictures are included in calls to individuals and households.

Questions? Comments? Leave an issue or join the discussion on Google Groups

Installation

Note that hogwarts.js is for testing and thus optional. If you use hogwarts.js you must also include chance.js.

node.js

npm install ldsorg

browser

via bower

bower install ldsorg
script(src="bower_components/forEachAsync/forEachAsync.js")
script(src="bower_components/forAllAsync/forAllAsync.js")
script(src="bower_components/join/join.js")
script(src="bower_components/lateral/lateral.js")
script(src="bower_components/ldsorgjs/ward.js")
script(src="bower_components/ldsorgjs/stake.js")
script(src="bower_components/ldsorgjs/browser.js")
script(src="bower_components/ldsorgjs/ldsorg.js")
script(src="bower_components/ldsorgjs/cache-browser.js")
script(src="bower_components/chance/chance.js")
script(src="bower_components/ldsorgjs/hogwarts.js")
<script src="bower_components/forAllAsync/forAllAsync.js"></script>
<script src="bower_components/forEachAsync/forEachAsync.js"></script>
<script src="bower_components/join/join.js"></script>
<script src="bower_components/lateral/lateral.js"></script>
<script src="bower_components/ldsorgjs/ward.js"></script>
<script src="bower_components/ldsorgjs/stake.js"></script>
<script src="bower_components/ldsorgjs/browser.js"></script>
<script src="bower_components/ldsorgjs/ldsorg.js"></script>
<script src="bower_components/ldsorgjs/cache-browser.js"></script>
<script src="bower_components/chance/chance.js"></script>
<script src="bower_components/ldsorgjs/hogwarts.js"></script>

via download

wget http://ldsorg.github.io/ldsorgjs/ldsorg.all.js
<script src="ldsorg.all.js"></script>
<script src="bower_components/ldsorgjs/hogwarts.js"></script>
<script src="bower_components/ldsorgjs/hogwarts.js"></script>

Usage

In about 25 seconds you can download all of the data (including pictures) for your entire ward.

Note: You can log in as the user dumbledore with any password and have access to the fake stake Bettendorf from hogwarts.js.

;(function (exports) {
  'use strict';

  var LdsOrg = exports.LdsOrg || require('ldsorg').LdsOrg
      // you should probably create your own cache strategy
    , Cache = exports.LdsOrgCache || require('ldsorg/cache').LdsOrgCache
    , ldsorg
    , ts = Date.now()
    , username
    , password
    , isNode
    ;

  if ('undefined' !== typeof process && process.argv) {
    username = process.argv[2];
    password = process.argv[3];
    isNode = true;
  }

  ldsorg = LdsOrg.create({ node: isNode, Cache: Cache });

  // In the browser you must be already signed in
  ldsorg.signin(
    function (err) {
      console.log('sign-in complete');
      if (err) {
        console.log('failed', err);
        return;
      }

      ldsorg.init(
        function () {
          console.log('User Meta Data Gathered', ((Date.now() - ts) / 1000).toFixed(2) + 's');

          ldsorg.getCurrentStake().getAll(function () {
            console.log(
              'All stake-level data (not including wards) is now cached'
            , ((Date.now() - ts) / 1000).toFixed(2) + 's'
            );
          });
          ldsorg.getCurrentStake().getCurrentWard().getAll(function () {
            console.log(
              'All ward-level data is now cache'
            , ((Date.now() - ts) / 1000).toFixed(2) + 's'
            );
          });
        }
      , function log(event/*, a, b, c, d*/) {
          console.log('[LOG]', event);
          // build a nice big switch statement
        }
      , { node: isNode }
      );
    }
    // in node you must supply the user / pass to sign in
  , { username: username, password: password }
  );

}('undefined' !== typeof exports && exports || new Function('return this')()));

You should provide your own caching strategy with the same api as the provided cache.js or cache-browser.js.

API

TODO list respective urls and link to examples on ldsorg-api-documentation repo

LdsOrg

  • LdsOrg.create(opts) - returns an LdsOrg instance
  • #signin(cb, { username: 'u', password: 'p'}) - cb when signin is complete
    • cb is a function function (err) {}
    • auth is an object { username: 'johndoe', password: 'secret' }
  • #signout(cb)
  • #init(cb, emitFn) - cb when init is complete. emitFn(eventname, arg1, arg2, ...) for each event
  • #getCurrentUserId(fn)
  • #getCurrentUnits(fn)
  • #getCurrentStakes(fn)
  • #getCurrentUserMeta(fn)
  • #getCurrentHousehold(fn)
  • #getStake(stakeUnitNo) - returns an LdsStake instance
  • #getCurrentStake() - returns an LdsStake instance

Options

  • { prefetch: true } - start downloading the whole stake at init
    • current stake
    • current ward
    • other wards in stake
    • other stakes

LdsStake

  • LdsStake.create(opts, ldsOrg)
  • #getPositions(fn)
  • #getLeadership(fn, group)
  • #getWard(wardUnitNo) - returns an LdsWard instance
  • #getCurrentWard() - returns an LdsWard instance
  • #getWards(fn, wardsOrIds, opts)
  • #getAll(fn)

LdsWard

  • LdsWard.create(opts, ldsOrg, ldsStake) - called internally
  • #init(cb)
  • #getMemberList(fn)
  • #getPhotoList(fn)
  • #getOrganization(fn, orgname)
  • #getPositions(fn)
  • #getLeadership(fn, group)
  • #getHouseholdWithPhotos(fn, profileOrId, opts)
  • #getOrganizations(fn, orgnames)
  • #getCallings(fn)
  • #getHouseholds(fn, households, opts)
  • #getAll(fn, opts)
  • #getHousehold(fn, profileOrId)
  • #getHouseholdPhoto(fn, id)
  • #getIndividualPhoto(fn, id)

Build it yourself

mkdir -p bower_components
git clone git@github.com:FuturesJS/forAllAsync.git bower_components/forAllAsync
git clone git@github.com:FuturesJS/forEachAsync.git bower_components/forEachAsync
git clone git@github.com:FuturesJS/join.git bower_components/join
git clone git@github.com:FuturesJS/lateral.git bower_components/lateral
git clone git@github.com:LDSorg/ldsorgjs.git bower_components/ldsorgjs

cat \
  "bower_components/forAllAsync/forAllAsync.js" \
  "bower_components/forEachAsync/forEachAsync.js" \
  "bower_components/join/join.js" \
  "bower_components/lateral/lateral.js" \
  "bower_components/ldsorg/stake.js" \
  "bower_components/ldsorg/ward.js" \
  "bower_components/ldsorg/browser.js" \
  "bower_components/ldsorg/ldsorg.js" \
  "bower_components/ldsorg/cache-browser.js" \
  > ldsorg.all.js

TODO

Be able to serialize / deserialize top-level LdsOrg object so that it can be used between sessions for APIs.