|
requirejs.config({ |
|
paths: { |
|
ramda: '../Scripts/vendor/ramda.min', |
|
jquery: '../Scripts/vendor/jquery-1.12.4.min', |
|
} |
|
}); |
|
|
|
require(['ramda', 'jquery'], function (R, $) { |
|
|
|
$.ajaxSetup({ |
|
headers: { |
|
'Accept': 'application/json; odata=verbose', |
|
'Content-Type': 'application/json; odata=verbose' |
|
} |
|
}); |
|
|
|
// listFields :: a -> b |
|
var listFields = function (url) { |
|
return url + '/items?$select=Id,Title,URL&$expand=&$skiptoken='; |
|
} |
|
|
|
// side effects |
|
var Impure = { |
|
getList: R.curry(function (callback, url) { |
|
return $.get(url, function (data, status) { |
|
callback({ data: data, status: status }); |
|
}); |
|
}), |
|
setHtml: R.curry(function (sel, html) { |
|
return $(sel).html(html) |
|
}), |
|
listUrl: function (name) { |
|
return window['_spPageContextInfo'].webAbsoluteUrl + "/_api/web/lists/getByTitle('" + name + "')"; |
|
} |
|
}; |
|
|
|
// ul :: string -> jqueryDOM |
|
var ul = function (content) { |
|
return $('<ul>' + content + '</ul>'); |
|
}; |
|
|
|
// li :: string -> string |
|
var li = function (url) { |
|
return '<li><a target="_blank" href=' + url.Url + '>' + url.Description + '</a></li>'; |
|
}; |
|
|
|
// safePath :: a[] -> b |
|
var safePath = function (path) { |
|
return path != null ? path : []; |
|
}; |
|
|
|
// url :: string -> string |
|
var url = R.compose(listFields, Impure.listUrl) |
|
|
|
// extractLinks :: a -> b[] |
|
var extractLinks = R.compose(R.map(R.prop('URL')), safePath, R.path(['data', 'd', 'results'])); |
|
|
|
// renderLinks :: a[] -> ~ html |
|
var renderLinks = R.compose(Impure.setHtml('#want-to-app .content'), ul, R.join(''), R.map(li), extractLinks) |
|
|
|
// app :: string -> (a -> b) |
|
var app = R.compose(Impure.getList(renderLinks), url); |
|
|
|
// start app with list name |
|
app("wantToList"); |
|
}); |