Skip to content

Commit

Permalink
Update gadgetlib.js
Browse files Browse the repository at this point in the history
  • Loading branch information
Brandon Dougherty committed Feb 23, 2016
1 parent 417076f commit 188cb92
Showing 1 changed file with 221 additions and 8 deletions.
229 changes: 221 additions & 8 deletions gadgetlib.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,6 @@
Changes in 1.0.7.1:
- gadgetlib.min.js is now offered.
Changes in 1.0.7:
- Added oucGetWYSIWYGSelection method which returns the current WYSIWYG selection.
(supported in both the JustEdit Editor and the WYSIWYG Editor, requires OU Campus 10.3.2 or above)
- Added oucGetWYSIWYGContent method which returns the entire WYSIWYG contents.
(supported in both the JustEdit Editor and the WYSIWYG Editor, requires OU Campus 10.3.2 or above)
Changes in 1.0.6.1:
- Reintroduced the `Gadget` object, which was dropped in version 1.0.4, for backward
Expand Down Expand Up @@ -112,7 +105,7 @@
left = pieces[0];
right = pieces[1];
data[left] = right;
};
}
gadget.set(data);
}
// private function
Expand Down Expand Up @@ -350,18 +343,237 @@
*/
return sendMessageToTop('set-location', route);
},
oucRefreshLocation: function () {
return sendMessageToTop('refresh-location');
},
oucGetWYSIWYGSelection: function () {
return sendMessageToTop('get-wysiwyg-selection');
},
oucGetWYSIWYGContent: function () {
return sendMessageToTop('get-wysiwyg-content');
},
oucGetSourceContent: function () {
return sendMessageToTop('get-source-content');
}
};

// bind all methods to the gadget object
for (var method in gadget) {
gadget[method] = gadget[method].bind(gadget);
}

var MetadataAPI = {
/*
* MetaData API
*
* @description :: API to interact with OU Campus gadget Metadata backend
* @documentation :: https://docs
*
* @method Metadata
* @param {object} params Argument 1
* @param {String} params.action Metadata action name.
* @param {string} params.link_type Required if 'link' or 'unlink' actions are called.
* @return {promise} Ajax promise object.
*
*/
gadget : gadget,
//Param Validation
paramValidation : function (params) {
if(!params){ throw 'Missing parameters for Metadata API request.'; }
if (!params.action) { throw 'Missing \'action\' property in options object'; }
if ( ((params.action === 'update' || params.action === 'delete' || params.action === 'view') && !params.id) ||
(params.action === 'create' && (!params.mime_type || !params.metadata)) ||
(params.action === 'link' && (!params.item || !params.id) ) ||
(params.action === 'unlink' && !params.item) ||
(params.action === 'grouplink' && (!params.id || !params.groups)) ||
(params.action === 'groupunlink' && (!params.id || !params.groups)) ||
(params.action === 'list' && !params.mime_type)) {
throw 'Missing required parameter for \'' + params.action + '\' Metadata API request';
}
},
cleanProps : function (params, defaults) {
for (var prop in params) {
var metadataProp;
switch (prop) {
case 'mime_type' : metadataProp = true; break;
case 'metadata' : metadataProp = true; break;
case 'metadatas' : metadataProp = true; break;
case 'scope' : metadataProp = true; break;
case 'groups' : metadataProp = true; break;
case 'item' : metadataProp = true; break;
case 'item_type' : metadataProp = true; break;
case 'id' : metadataProp = true; break;
case 'ids' : metadataProp = true; break;
case 'asset' : metadataProp = true; break;
case 'page' : metadataProp = true; break;
case 'directory' : metadataProp = true; break;
case 'site' : metadataProp = true; break;
case 'ou_site' : metadataProp = true; break;
default : metadataProp = false;
}
if (metadataProp) {
defaults.data[prop] = params[prop];
delete params[prop];
}
}
return defaults;
},
create : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'create';
this.paramValidation(params);
var ajaxParams = {
type : 'POST',
dataType : 'json',
url : this.gadget.apihost + '/metadata/new',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
update : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'update';
this.paramValidation(params);
var ajaxParams = {
type : 'POST',
dataType : 'json',
url : this.gadget.apihost + '/metadata/save',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
delete : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'delete';
this.paramValidation(params);
var ajaxParams = {
type : 'POST',
dataType : 'json',
url : this.gadget.apihost + '/metadata/delete',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
list : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'list';
this.paramValidation(params);
var ajaxParams = {
type : 'GET',
dataType : 'json',
url : this.gadget.apihost + '/metadata/list',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
view : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'view';
this.paramValidation(params);
var ajaxParams = {
type : 'GET',
dataType : 'json',
url : this.gadget.apihost + '/metadata/view',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
link : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'link';
this.paramValidation(params);
var ajaxParams = {
type : 'POST',
dataType : 'json',
url : this.gadget.apihost + '/metadata/'+ params.link_type + 'link',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
unlink : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'unlink';
this.paramValidation(params);
var ajaxParams = {
type : 'POST',
dataType : 'json',
url : this.gadget.apihost + '/metadata/'+ params.link_type + 'unlink',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
groupLink : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'grouplink';
this.paramValidation(params);
var ajaxParams = {
type : 'POST',
dataType : 'json',
url : this.gadget.apihost + '/metadata/grouplink',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
},
groupUnlink : function (params, options) {
if (!params) { params = {}; }
if (!options) { options = {}; }
params.action = 'groupunlink';
this.paramValidation(params);
var ajaxParams = {
type : 'POST',
dataType : 'json',
url : this.gadget.apihost + '/metadata/groupunlink',
data : {
site : params.ou_site || this.gadget.site,
authorization_token : this.gadget.token
}
};
ajaxParams = this.cleanProps(params, ajaxParams);
return $.ajax($.extend(ajaxParams, options));
}
};

gadget.Metadata = MetadataAPI;

gadget.set(getDataFromUrl());
getEnvironment().then(function (response) {
Expand All @@ -381,3 +593,4 @@
window.Gadget = function () {};
window.Gadget.prototype = gadget;
})();

0 comments on commit 188cb92

Please sign in to comment.