diff --git a/.jshintrc b/.jshintrc
new file mode 100644
index 00000000..0c734f21
--- /dev/null
+++ b/.jshintrc
@@ -0,0 +1,6 @@
+{
+ "evil": true,
+ "laxcomma": true,
+ "multistr": true,
+ "sub": true
+}
\ No newline at end of file
diff --git a/client/app/dashboard/model/list/ModelList.js b/client/app/dashboard/model/list/ModelList.js
index 96733e88..e7e59afb 100644
--- a/client/app/dashboard/model/list/ModelList.js
+++ b/client/app/dashboard/model/list/ModelList.js
@@ -166,15 +166,16 @@ angular.module('dashboard.Dashboard.Model.List', [
//Setup Columns in Grid
var columnRef = $scope.action.options.columnRef;
var columns = $scope.action.options.columns;
+ var subnav;
if (columnRef && typeof columnRef === 'object' && columnRef.label) {
if (columnRef.path) {
//reference to another main-nav's sub-nav's columns :)
var section = _.find(Config.serverParams.nav, { path: columnRef.path });
- var subnav = _.find(section.subnav, { label: columnRef.label });
+ subnav = _.find(section.subnav, { label: columnRef.label });
columns = subnav.options.columns;
} else {
//reference to another subnav's columns in the same section
- var subnav = _.find($scope.section.subnav, { label: columnRef.label });
+ subnav = _.find($scope.section.subnav, { label: columnRef.label });
columns = subnav.options.columns;
}
@@ -292,6 +293,8 @@ angular.module('dashboard.Dashboard.Model.List', [
function setupPagination() {
//make a copy of config params
var params = angular.copy($scope.action.options.params);
+ var field;
+ var direction;
if (params && params.filter && params.filter.length > 0) {
//use of filter JSON string
@@ -302,8 +305,8 @@ angular.module('dashboard.Dashboard.Model.List', [
if ($scope.sortInfo.fields.length > 0) {
filter.order = "";
for (var i in $scope.sortInfo.fields) {
- var field = $scope.sortInfo.fields[i];
- var direction = $scope.sortInfo.directions[i];
+ field = $scope.sortInfo.fields[i];
+ direction = $scope.sortInfo.directions[i];
if (!direction) direction = "ASC";
if (parseInt(i) > 0) filter.order += ", ";
filter.order += field + " " + direction;
@@ -323,11 +326,11 @@ angular.module('dashboard.Dashboard.Model.List', [
if ($scope.sortInfo.fields.length > 0) {
var sortOrder = "";
- for (var i in $scope.sortInfo.fields) {
- var field = $scope.sortInfo.fields[i];
- var direction = $scope.sortInfo.directions[i];
+ for (var j in $scope.sortInfo.fields) {
+ field = $scope.sortInfo.fields[j];
+ direction = $scope.sortInfo.directions[j];
if (!direction) direction = "ASC";
- if (parseInt(i) > 0) sortOrder += ", ";
+ if (parseInt(j) > 0) sortOrder += ", ";
sortOrder += field + " " + direction;
}
@@ -424,8 +427,7 @@ angular.module('dashboard.Dashboard.Model.List', [
GeneralModelService.list($scope.apiPath, params).then(
function(response) {
if (!response) return; //in case http request was cancelled
- if( $scope.action.options.resultField !== undefined
- && response[$scope.action.options.resultField] !== undefined )
+ if($scope.action.options.resultField !== undefined && response[$scope.action.options.resultField] !== undefined)
$scope.list = response[$scope.action.options.resultField];
else
$scope.list = response;
@@ -440,7 +442,7 @@ angular.module('dashboard.Dashboard.Model.List', [
function(error) {
$scope.errorMessage = 'There was an error while loading...';
console.error(error);
- })
+ });
};
/**
@@ -558,18 +560,18 @@ angular.module('dashboard.Dashboard.Model.List', [
//Remove all relationships to prevent upserting on the server side
var rowKeys = Object.keys(newRow);
- for (var i in rowKeys) {
- var key = rowKeys[i];
- if (newRow[key] && typeof newRow[key] === 'object') {
- delete newRow[key];
+ for (var j in rowKeys) {
+ var rowKey = rowKeys[j];
+ if (newRow[rowKey] && typeof newRow[rowKey] === 'object') {
+ delete newRow[rowKey];
}
}
//insert defaults as specified in config.json
if ($scope.action.options.defaults) {
var keys = Object.keys($scope.action.options.defaults);
- for (var i in keys) {
- var key = keys[i];
+ for (var k in keys) {
+ var key = keys[k];
var property = $scope.action.options.defaults[key];
if (property && (property.foreceDefaultOnSave || !newRow[key])) {
//set the default value (i.e. lastUpdated or lastUpdatedBy)
@@ -584,8 +586,8 @@ angular.module('dashboard.Dashboard.Model.List', [
//check if all required fields are filled in
if ($scope.action.options.columns) {
- for (var i in $scope.action.options.columns) {
- var column = $scope.action.options.columns[i];
+ for (var l in $scope.action.options.columns) {
+ var column = $scope.action.options.columns[l];
if (column.required && !newRow[column.field]) {
alert("Please fill in all required fields: " + column.displayName);
return;
@@ -764,7 +766,7 @@ angular.module('dashboard.Dashboard.Model.List', [
if (direction < 0) {
//scrolling down
- var scrollY = $viewport.scrollTop();
+ scrollY = $viewport.scrollTop();
if (scrollY == 0) scrollY = -direction;
if ($scope.gridContainerTopMargin-scrollY > 0) {
$scope.gridContainerTopMargin -= scrollY;
@@ -792,8 +794,7 @@ angular.module('dashboard.Dashboard.Model.List', [
}
}
$scope.$digest(); //Make sure to refresh UI
-
- }
+ };
//For Mobile let entire page scroll
if (/(iPad|iPhone|iPod|Android)/g.test( navigator.userAgent ) || $scope.action.options.flexibleHeight) {
diff --git a/client/app/register/Register.js b/client/app/register/Register.js
index ca1f448a..33c7b335 100644
--- a/client/app/register/Register.js
+++ b/client/app/register/Register.js
@@ -41,7 +41,7 @@ angular.module('dashboard.Register', [
.catch(function(response) {
alert("Error registering");
});
- }
+ };
init();
})
diff --git a/client/common/directives/DateTimePicker/DateTimePicker.js b/client/common/directives/DateTimePicker/DateTimePicker.js
index 4308f714..bc21b957 100644
--- a/client/common/directives/DateTimePicker/DateTimePicker.js
+++ b/client/common/directives/DateTimePicker/DateTimePicker.js
@@ -43,7 +43,7 @@ angular.module('dashboard.directive.DateTimePicker', [
defaultDate: scope.defaultDate ? moment(scope.defaultDate).toDate() : undefined,
viewMode: scope.viewMode,
widgetPositioning: { horizontal: scope.horizontal ? scope.horizontal : 'auto' }
- }
+ };
if (scope.minDate) options.minDate = scope.minDate;
if (scope.maxDate) options.maxDate = scope.maxDate;
elem.datetimepicker(options);
diff --git a/client/common/directives/ModelField/ModelField.js b/client/common/directives/ModelField/ModelField.js
index 35cac79a..4758a702 100644
--- a/client/common/directives/ModelField/ModelField.js
+++ b/client/common/directives/ModelField/ModelField.js
@@ -156,7 +156,7 @@ angular.module('dashboard.directives.ModelField', [
if (scope.property.display.options instanceof Array) {
//Handle when options is array of objects containing key/value pair
if (typeof scope.property.display.options[0] === 'object' && !Array.isArray(scope.property.display.options[0])) {
- ngOptions = 'item.key as item.value disable when item.disabled for item in display.options'
+ ngOptions = 'item.key as item.value disable when item.disabled for item in display.options';
} else {
//Handle when options is a an array vs key/value pair object
ngOptions = 'value as value for value in display.options';
@@ -175,7 +175,7 @@ angular.module('dashboard.directives.ModelField', [
if (scope.property.display.options instanceof Array) {
//Handle when options is array of objects containing key/value pair
if (typeof scope.property.display.options[0] === 'object' && !Array.isArray(scope.property.display.options[0])) {
- ngRepeat = 'item in display.options'
+ ngRepeat = 'item in display.options';
} else {
//Handle when options is a an array vs key/value pair
ngRepeat = 'text in display.options';
@@ -280,6 +280,7 @@ angular.module('dashboard.directives.ModelField', [
';
break;
case 'text':
+ /* falls through */
default:
template = '\
\
@@ -408,12 +409,12 @@ angular.module('dashboard.directives.ModelField', [
delete scope.display.error;
delete scope.display.errorCode;
if (scope.ngError) scope.ngError({error: null});
- return
+ return;
} else if (e.target.value.length === 0 && property.display.isRequired) {
scope.display.error = "This is a required field.";
if (scope.ngError) scope.ngError({error: new Error(scope.display.error)});
}
- }
+ };
}
if (property.display.type == 'file' && scope.data[scope.key]) {
@@ -452,7 +453,7 @@ angular.module('dashboard.directives.ModelField', [
if (value == undefined || value == null) return property.display.default;
data[key] = value == '1' || value == 1; //Fixes a bug where data[key] changes from bool to string can cause checkbox to get unchecked
return data[key];
- }
+ };
//Make sure boolean (checkbox) values are numeric (below only gets called on init and not when state changes)
if (typeof scope.data[scope.key] === "string") scope.data[scope.key] = parseInt(scope.data[scope.key]);
}
diff --git a/client/common/directives/ModelFieldImage/ModelFieldImage.js b/client/common/directives/ModelFieldImage/ModelFieldImage.js
index 499013fa..ed7545ba 100644
--- a/client/common/directives/ModelFieldImage/ModelFieldImage.js
+++ b/client/common/directives/ModelFieldImage/ModelFieldImage.js
@@ -230,9 +230,10 @@ angular.module('dashboard.directives.ModelFieldImage', [
$modal.append($container);
$("body").append($modal);
+ var scale;
if (scope.options.isLightbox) {
//Lightbox only
- var scale = Math.min($container.width() / image.width, $container.height() / image.height);
+ scale = Math.min($container.width() / image.width, $container.height() / image.height);
var width = image.width * scale;
var height = image.height * scale;
$container.css({
@@ -245,7 +246,7 @@ angular.module('dashboard.directives.ModelFieldImage', [
var $zoom = $('
');
$container.append($thumbnail);
$container.append($zoom);
- var scale = Math.min($thumbnail.width() / image.width, $thumbnail.height() / image.height);
+ scale = Math.min($thumbnail.width() / image.width, $thumbnail.height() / image.height);
var thumbnailWidth = image.width * scale;
var thumbnailHeight = image.height * scale;
$thumbnail.css({
diff --git a/client/common/directives/ModelFieldLocation/ModelFieldLocation.js b/client/common/directives/ModelFieldLocation/ModelFieldLocation.js
index 225cde43..737ea86f 100644
--- a/client/common/directives/ModelFieldLocation/ModelFieldLocation.js
+++ b/client/common/directives/ModelFieldLocation/ModelFieldLocation.js
@@ -155,7 +155,7 @@ angular.module('dashboard.directives.ModelFieldLocation', [
});
}, function () {
- console.error("Error loading Google Maps")
+ console.error("Error loading Google Maps");
});
function initMap() {
@@ -201,7 +201,7 @@ angular.module('dashboard.directives.ModelFieldLocation', [
}
});
}
- }
+ };
function initSelectedMarker() {
//update marker
@@ -229,7 +229,7 @@ angular.module('dashboard.directives.ModelFieldLocation', [
} else {
var LatLng = new google.maps.LatLng(scope.data.lat,scope.data.lng);
selectedMarker.setPosition(LatLng);
- selectedMarker.setMap(map)
+ selectedMarker.setMap(map);
map.setCenter(LatLng);
}
}
@@ -237,11 +237,11 @@ angular.module('dashboard.directives.ModelFieldLocation', [
scope.clearSearch = function() {
scope.hasSearched = false;
- }
+ };
scope.revertValue = function() {
if( originalValue ) scope.data = originalValue;
- }
+ };
}
};
})
diff --git a/client/common/directives/ModelFieldMultiSelect/ModelFieldMultiSelect.js b/client/common/directives/ModelFieldMultiSelect/ModelFieldMultiSelect.js
index 0ab04272..1d202abb 100644
--- a/client/common/directives/ModelFieldMultiSelect/ModelFieldMultiSelect.js
+++ b/client/common/directives/ModelFieldMultiSelect/ModelFieldMultiSelect.js
@@ -52,6 +52,8 @@ angular.module('dashboard.directives.ModelFieldMultiSelect', [])
*/
function initOptions() {
var options = scope.options || property.display.options;
+ var option;
+ var key;
if (typeof options === 'string') {
//Check if options on new line
if (options.indexOf('\n') > -1) {
@@ -71,12 +73,12 @@ angular.module('dashboard.directives.ModelFieldMultiSelect', [])
var item = options[i];
if (typeof item === 'string') {
//string option
- var option = {key: item, value: item};
+ option = { key: item, value: item };
scope.multiSelectOptions.push(option);
} else if (item && typeof item === 'object') {
//Objects (key/value pair)
- var key = item[keyOverride] || i; //fallback to index if no key
- var option = { key: key, value: item[valueOverride], item: item };
+ key = item[keyOverride] || i; //fallback to index if no key
+ option = { key: key, value: item[valueOverride], item: item };
scope.multiSelectOptions.push(option);
}
}
@@ -85,8 +87,8 @@ angular.module('dashboard.directives.ModelFieldMultiSelect', [])
//Assume object containing key/value pair
var keys = Object.keys(options);
for (var k in keys) {
- var key = keys[k];
- var option = { key: key, value: options[key] };
+ key = keys[k];
+ option = { key: key, value: options[key] };
scope.multiSelectOptions.push(option);
}
}
@@ -96,6 +98,7 @@ angular.module('dashboard.directives.ModelFieldMultiSelect', [])
* Initial data load by checking desired output as comma, array, or object
*/
function initData() {
+ var index;
if (typeof property.display.output === 'undefined') {
var options = scope.options || property.display.options;
property.display.output = options instanceof Array ? "comma" : "object";
@@ -107,14 +110,14 @@ angular.module('dashboard.directives.ModelFieldMultiSelect', [])
var item = items[i];
if (item[0] == '"') item = item.substring(1, item.length);
if (item[item.length-1] == '"') item = item.substring(0, item.length-1);
- var index = _.findIndex(scope.multiSelectOptions, {key: item});
+ index = _.findIndex(scope.multiSelectOptions, { key: item });
if (index > -1) scope.selected[index] = true;
}
} else if (Array.isArray(scope.data)) {
if (!scope.data) scope.data = [];
- for (var i in scope.data) {
- var value = scope.data[i];
- var index = _.findIndex(scope.multiSelectOptions, {key: value});
+ for (var j in scope.data) {
+ var value = scope.data[j];
+ index = _.findIndex(scope.multiSelectOptions, { key: value });
if (index > -1) scope.selected[index] = true;
}
} else if (scope.data && typeof scope.data === 'object') {
@@ -122,7 +125,7 @@ angular.module('dashboard.directives.ModelFieldMultiSelect', [])
var keys = Object.keys(scope.data);
for (var k in keys) {
var key = keys[k];
- var index = _.findIndex(scope.multiSelectOptions, {key: key});
+ index = _.findIndex(scope.multiSelectOptions, { key: key });
if (index > -1) scope.selected[index] = true;
}
}
diff --git a/client/common/directives/ModelFieldNumber/ModelFieldNumber.js b/client/common/directives/ModelFieldNumber/ModelFieldNumber.js
index ad5d2a9f..d3343ed2 100644
--- a/client/common/directives/ModelFieldNumber/ModelFieldNumber.js
+++ b/client/common/directives/ModelFieldNumber/ModelFieldNumber.js
@@ -83,40 +83,40 @@ angular.module('dashboard.directives.ModelFieldNumber', [])
} else if (scope.ngError) {
scope.ngError({error: null});
}
- return
+ return;
}
if (property.display.allowDecimal === true) {
var decimalString = $filter('decimalWithScale')(e.target.value, property.display.scaleValue);
if (isNaN(decimalString) && scope.ngError) {
scope.ngError({error: new Error('Please enter a valid number')});
- return
+ return;
} else {
scope.data = decimalString; /*scope.data.scale is to handle parsing the field while scale data is being entered - formEdit */
}
if (property.display.minValue !== undefined && isFirstDecLarger(property.display.minValue, e.target.value)) {
if (scope.ngError) scope.ngError({error: new Error('Value is less than the minimum allowed value (' + property.display.minValue + ').')});
- return
+ return;
}
if (property.display.maxValue !== undefined && isFirstDecLarger(e.target.value, property.display.maxValue)) {
if (scope.ngError) scope.ngError({error: new Error('Value is greater than the maximum allowed value (' + property.display.maxValue + ').')});
- return
+ return;
}
if (scope.ngError) scope.ngError({error: null});
} else if (property.display.allowDecimal === false) { /*handle when don't allow decimals - needs to be explicitly implied*/
if (isNaN(_.round(e.target.value)) || isNaN(parseInt(e.target.value))) {
if (scope.ngError) scope.ngError({error: new Error('Please enter a valid number')});
- return
+ return;
}
var roundedValue = _.round(e.target.value, 0);
scope.data = roundedValue;
if (property.display.minValue !== undefined && property.display.minValue > parseFloat(e.target.value)) {
if (scope.ngError) scope.ngError({error: new Error('Value is less than the minimum allowed value (' + property.display.minValue + ').')});
- return
+ return;
}
if (property.display.maxValue !== undefined && property.display.maxValue < parseFloat(e.target.value)) {
if (scope.ngError) scope.ngError({error: new Error('Value is greater than the maximum allowed value (' + property.display.maxValue + ').')});
- return
+ return;
}
if (scope.ngError) scope.ngError({error: null});
}
@@ -134,11 +134,11 @@ angular.module('dashboard.directives.ModelFieldNumber', [])
var dec1Components = dec1.split('.');
var dec2Components = dec2.split('.');
if (parseInt(dec1Components[0]) > parseInt(dec2Components[0])) {
- return true
+ return true;
} else if (parseInt(dec1Components[0]) < parseInt(dec2Components[0])) {
- return false
+ return false;
} else { /*equal so look at decimal spots */
- var areBothPositive = (parseInt(dec1Components[0]) >= 0 && parseInt(dec2Components[0]) >= 0)
+ var areBothPositive = (parseInt(dec1Components[0]) >= 0 && parseInt(dec2Components[0]) >= 0);
for (var i = 0; i < Math.max(dec1Components[1].length, dec2Components[1].length); i++) {
if (dec1Components[1].charAt(i) === '') dec1Components[1] += '0';
if (dec2Components[1].charAt(i) === '') dec2Components[1] += '0';
@@ -149,7 +149,7 @@ angular.module('dashboard.directives.ModelFieldNumber', [])
}
}
}
- };
+ }
init();
}
diff --git a/client/common/directives/ModelFieldPointsOfInterest/ModelFieldPointsOfInterest.js b/client/common/directives/ModelFieldPointsOfInterest/ModelFieldPointsOfInterest.js
index 01433028..203cc4eb 100644
--- a/client/common/directives/ModelFieldPointsOfInterest/ModelFieldPointsOfInterest.js
+++ b/client/common/directives/ModelFieldPointsOfInterest/ModelFieldPointsOfInterest.js
@@ -193,7 +193,7 @@ angular.module('dashboard.directives.ModelFieldPointsOfInterest', [
scope.doSearch();
}, function () {
- console.error("Error loading Google Maps")
+ console.error("Error loading Google Maps");
});
function initMap() {
@@ -298,16 +298,19 @@ angular.module('dashboard.directives.ModelFieldPointsOfInterest', [
var text = "Location: " + results[i].name;
var marker = new google.maps.Marker({
map: map,
- position: results[i].geometry.location,
+ position: results[i].geometry.location
});
+ /* jshint ignore: start */
google.maps.event.addListener(marker, 'click', (function(marker, text) {
return function() {
markerLocation = marker.getPosition();
infowindow.setContent(text);
infowindow.open(map, marker);
scope.getClickedMarker(markerLocation);
- }
+ };
})(marker, text));
+ /* jshint ignore:end */
+
scope.markers.push(marker);
}
}
@@ -412,7 +415,7 @@ angular.module('dashboard.directives.ModelFieldPointsOfInterest', [
} else {
console.log('The selection made does not exist');
}
- })
+ });
};
scope.getSelectResultData = function (item) {
diff --git a/client/common/directives/ModelFieldReference/ModelFieldReference.js b/client/common/directives/ModelFieldReference/ModelFieldReference.js
index 13377340..41f91016 100644
--- a/client/common/directives/ModelFieldReference/ModelFieldReference.js
+++ b/client/common/directives/ModelFieldReference/ModelFieldReference.js
@@ -73,8 +73,9 @@ angular.module('dashboard.directives.ModelFieldReference', [
var session = JSON.parse($cookies.get('session')); //needed for eval() below
var searchString = "{session.";
var startPos = string.indexOf(searchString);
+ var endPos;
while (startPos > -1) {
- var endPos = string.indexOf("}", startPos);
+ endPos = string.indexOf("}", startPos);
if (endPos == -1) {
console.error("ModelList session parsing malformed for string");
break;
@@ -87,7 +88,7 @@ angular.module('dashboard.directives.ModelFieldReference', [
searchString = "{";
startPos = string.indexOf(searchString);
while (startPos > -1) {
- var endPos = string.indexOf("}", startPos);
+ endPos = string.indexOf("}", startPos);
if (endPos == -1) {
console.error("ModelList session parsing malformed for string");
break;
@@ -119,33 +120,36 @@ angular.module('dashboard.directives.ModelFieldReference', [
var model = Config.serverParams.models[scope.options.model];
var params = { 'filter[limit]': 100 }; //limit only 100 items in drop down list
params['filter[where]['+scope.options.searchField+'][like]'] = "%" + search + "%";
+ var keys;
+ var key;
if (scope.options.where) {
//Add additional filtering on reference results
- var keys = Object.keys(scope.options.where);
+ keys = Object.keys(scope.options.where);
for (var i in keys) {
- var key = keys[i];
+ key = keys[i];
params['filter[where][' + key + ']'] = replaceSessionVariables(scope.options.where[key]);
}
}
if (scope.options.filters) {
- var keys = Object.keys(scope.options.filters);
- for (var i in keys) {
- var key = keys[i];
+ keys = Object.keys(scope.options.filters);
+ for (var j in keys) {
+ key = keys[j];
params[key] = replaceSessionVariables(scope.options.filters[key]);
}
}
var apiPath = model.plural;
+ var addNewItem;
if (scope.options.api) apiPath = replaceSessionVariables(scope.options.api);
GeneralModelService.list(apiPath, params, {preventCancel: true}).then(function(response) {
if (!response) return; //in case http request was cancelled by newer request
scope.list = response;
if (scope.options.allowInsert) {
- var addNewItem = {};
+ addNewItem = {};
addNewItem[scope.options.searchField] = "[Add New Item]";
scope.list.push(addNewItem);
}
if (scope.options.allowClear) {
- var addNewItem = {};
+ addNewItem = {};
addNewItem[scope.options.searchField] = "[clear]";
scope.list.unshift(addNewItem);
@@ -281,11 +285,11 @@ angular.module('dashboard.directives.ModelFieldReference', [
var textValue = item[scope.options.searchField];
if (item && item[scope.options.searchField] == "[Add New Item]") {
//console.log("should add " + $select.search);
- var value = element.find("input.ui-select-search").val();
- scope.data = value;
+ var input = element.find("input.ui-select-search").val();
+ scope.data = input;
var newItem = {};
- newItem[scope.options.key] = value;
- newItem[scope.options.searchField] = value;
+ newItem[scope.options.key] = input;
+ newItem[scope.options.searchField] = input;
scope.selected.item = newItem;
scope.list.push(newItem);
} else if (item && item[scope.options.searchField] == "[clear]") {
@@ -334,11 +338,11 @@ angular.module('dashboard.directives.ModelFieldReference', [
//Remove item previously loaded using object key
var where = {};
where[scope.options.key] = item[scope.options.key];
- var index = _.findIndex(scope.modelData[scope.options.relationship], where);
+ index = _.findIndex(scope.modelData[scope.options.relationship], where);
if (index > -1) scope.modelData[scope.options.relationship].splice(index, 1);
}
//Look for direct reference match
- var index = scope.modelData[scope.options.relationship].indexOf(item);
+ index = scope.modelData[scope.options.relationship].indexOf(item);
if (index > -1) scope.modelData[scope.options.relationship].splice(index, 1);
mergeArray(scope.selected.items, scope.modelData[scope.options.relationship]); //make sure to merge in any items previously selected
} else {
diff --git a/client/common/directives/ModelFieldReference/ModelFieldReferenceSort.js b/client/common/directives/ModelFieldReference/ModelFieldReferenceSort.js
index b408c3b6..ce695043 100644
--- a/client/common/directives/ModelFieldReference/ModelFieldReferenceSort.js
+++ b/client/common/directives/ModelFieldReference/ModelFieldReferenceSort.js
@@ -63,7 +63,7 @@ angular.module('dashboard.directives.ModelFieldReferenceSort', [
scope.sortableOptions = {
placeholder: 'sortable-placeholder',
disabled: scope.disabled
- }
+ };
function replaceSessionVariables(string) {
if (typeof string !== 'string') return string;
@@ -72,8 +72,9 @@ angular.module('dashboard.directives.ModelFieldReferenceSort', [
var session = JSON.parse($cookies.get('session')); //needed for eval() below
var searchString = "{session.";
var startPos = string.indexOf(searchString);
+ var endPos;
while (startPos > -1) {
- var endPos = string.indexOf("}", startPos);
+ endPos = string.indexOf("}", startPos);
if (endPos == -1) {
console.error("ModelList session parsing malformed for string");
break;
@@ -86,7 +87,7 @@ angular.module('dashboard.directives.ModelFieldReferenceSort', [
searchString = "{";
startPos = string.indexOf(searchString);
while (startPos > -1) {
- var endPos = string.indexOf("}", startPos);
+ endPos = string.indexOf("}", startPos);
if (endPos == -1) {
console.error("ModelList session parsing malformed for string");
break;
@@ -105,18 +106,20 @@ angular.module('dashboard.directives.ModelFieldReferenceSort', [
var model = Config.serverParams.models[scope.options.model];
var params = { 'filter[limit]': 100 }; //limit only 100 items in drop down list
params['filter[where]['+scope.options.searchField+'][like]'] = "%" + search + "%";
+ var keys;
+ var key;
if (scope.options.where) {
//Add additional filtering on reference results
- var keys = Object.keys(scope.options.where);
+ keys = Object.keys(scope.options.where);
for (var i in keys) {
- var key = keys[i];
+ key = keys[i];
params['filter[where][' + key + ']'] = replaceSessionVariables(scope.options.where[key]);
}
}
if (scope.options.filters) {
- var keys = Object.keys(scope.options.filters);
- for (var i in keys) {
- var key = keys[i];
+ keys = Object.keys(scope.options.filters);
+ for (var j in keys) {
+ key = keys[j];
params[key] = replaceSessionVariables(scope.options.filters[key]);
}
}
diff --git a/client/common/directives/ModelFieldWYSIWYG/ModelFieldWYSIWYG.js b/client/common/directives/ModelFieldWYSIWYG/ModelFieldWYSIWYG.js
index 7c35d7ef..250c0586 100644
--- a/client/common/directives/ModelFieldWYSIWYG/ModelFieldWYSIWYG.js
+++ b/client/common/directives/ModelFieldWYSIWYG/ModelFieldWYSIWYG.js
@@ -156,7 +156,7 @@ angular.module('dashboard.directives.ModelFieldWYSIWYG', [
function initWysiwygEditor() {
// check for multiple instances
var instances = $('.wysiwyg-editor');
- var instanceIdx = 0
+ var instanceIdx = 0;
if(instances && instances.length > 0) {
instanceIdx = instances.length;
}
diff --git a/client/common/filters/filters.js b/client/common/filters/filters.js
index 84016690..5a995355 100644
--- a/client/common/filters/filters.js
+++ b/client/common/filters/filters.js
@@ -26,7 +26,7 @@ angular.module('dashboard.filters', [
value = parseInt(valueComponents[0]) + '.';
}
if (valueComponents[1].match(/[\D]/) !== null) {
- return NaN
+ return NaN;
} else if (valueComponents[1].length > scale) {
//Truncate value
value += valueComponents[1].substring(0, scale);
diff --git a/client/common/services/CacheService.js b/client/common/services/CacheService.js
index b22f74a1..53f3dcdf 100644
--- a/client/common/services/CacheService.js
+++ b/client/common/services/CacheService.js
@@ -37,11 +37,11 @@ angular.module('dashboard.services.Cache', [
if (action.options.api) key = action.options.api;
if(params) key += this.KEY_DELIMITER + JSON.stringify(params);
return key;
- }
+ };
this.clear = function(model) {
var key = model;
- var regex = new RegExp('^'+key)
+ var regex = new RegExp('^'+key);
for(var k in localStorage)
{
if(regex.test(k))
@@ -51,10 +51,9 @@ angular.module('dashboard.services.Cache', [
}
};
- this.reset = function()
- {
+ this.reset = function() {
localStorage.clear();
- }
+ };
})
;
diff --git a/client/common/services/FileUploadService.js b/client/common/services/FileUploadService.js
index 51fad01f..f4b1f9c8 100644
--- a/client/common/services/FileUploadService.js
+++ b/client/common/services/FileUploadService.js
@@ -110,7 +110,9 @@ angular.module('dashboard.services.FileUpload', [
if (!deferred) deferred = $q.defer();
var fileKey = null; //the file key represents the model (table) column key used for reference
var exportKey = null; //the export key represents the various sizes of the image
+ var exportKeys = null;
var file = null;
+ var imageFile = null;
var currentUploadedSize = 0;
var totalUploadSize = 0;
@@ -135,7 +137,7 @@ angular.module('dashboard.services.FileUpload', [
if (!imageUploadResults) imageUploadResults = []; //initialize results object
//Calculate File Size
for (var i = 0; i < imageFiles.length; i++) {
- var imageFile = imageFiles[i].file ? imageFiles[i].file : imageFiles[i];
+ imageFile = imageFiles[i].file ? imageFiles[i].file : imageFiles[i];
if (i < fileIndex) currentUploadedSize += imageFile.size;
totalUploadSize += imageFile.size;
}
@@ -157,7 +159,7 @@ angular.module('dashboard.services.FileUpload', [
file = exports; //the case where no exports are specified in options
} else {
//exports contains various export file objects
- var exportKeys = Object.keys(exports);
+ exportKeys = Object.keys(exports);
if (exportIndex >= exportKeys.length) {
//Processed all export keys so move to next file
fileIndex++;
@@ -177,19 +179,19 @@ angular.module('dashboard.services.FileUpload', [
if (!imageUploadResults) imageUploadResults = {}; //initialize results object
//Calculate File Size
- for (var i = 0; i < fileKeys.length; i++) {
- var fkey = fileKeys[i];
- var exports = imageFiles[fkey];
+ for (var j = 0; j < fileKeys.length; j++) {
+ var fkey = fileKeys[j];
+ exports = imageFiles[fkey];
if (exports && exports.type && exports.size) {
//exports is a file object
- var imageFile = exports;
- if (i < fileIndex) {
+ imageFile = exports;
+ if (j < fileIndex) {
currentUploadedSize += imageFile.size;
}
totalUploadSize += imageFile.size;
} else if (exports && exports.file) {
- var imageFile = exports.file;
- if (i < fileIndex) {
+ imageFile = exports.file;
+ if (j < fileIndex) {
currentUploadedSize += imageFile.size;
}
totalUploadSize += imageFile.size;
@@ -197,8 +199,8 @@ angular.module('dashboard.services.FileUpload', [
//exports contains various export file objects
for (var k = 0; k < exportKeys.length; k++) {
var ekey = exportKeys[k];
- var imageFile = exports[ekey].file ? exports[ekey].file : exports[ekey];
- if (i < fileIndex || (i == fileIndex && k < exportIndex)) {
+ imageFile = exports[ekey].file ? exports[ekey].file : exports[ekey];
+ if (j < fileIndex || (j == fileIndex && k < exportIndex)) {
currentUploadedSize += imageFile.size;
}
totalUploadSize += imageFile.size;
@@ -752,6 +754,6 @@ angular.module('dashboard.services.FileUpload', [
}
return '';
- }
+ };
});
diff --git a/client/common/services/GeneralModelService.js b/client/common/services/GeneralModelService.js
index 55b4ffdd..32862e8e 100644
--- a/client/common/services/GeneralModelService.js
+++ b/client/common/services/GeneralModelService.js
@@ -13,8 +13,8 @@ angular.module('dashboard.services.GeneralModel', [
/**
* Returns a list of models given filter params (see loopback.io filters)
*/
- this.list = function(apiPath, params, options) {
- var apiPath = apiPath + (apiPath.indexOf('?')>-1 ? '&' : '?') + 'access_token=' + $cookies.get('accessToken');
+ this.list = function(path, params, options) {
+ var apiPath = path + (path.indexOf('?')>-1 ? '&' : '?') + 'access_token=' + $cookies.get('accessToken');
if (!options || !options.preventCancel) Utils.apiCancel('GET', apiPath); //cancels any prior calls to method + path
return Utils.apiHelper('GET', apiPath, params);
};
diff --git a/client/common/services/ImageService.js b/client/common/services/ImageService.js
index 284e7aab..e6e490a9 100644
--- a/client/common/services/ImageService.js
+++ b/client/common/services/ImageService.js
@@ -26,6 +26,7 @@ angular.module('dashboard.services.Image', [])
var width = options.width ? options.width : image.width;
var height = options.height ? options.height : image.height;
var aspect = options.aspect ? options.aspect : 'fit';
+ var scale;
switch(aspect) {
case "stretch":
canvas.width = width;
@@ -34,13 +35,14 @@ angular.module('dashboard.services.Image', [])
case "fill":
canvas.width = width;
canvas.height = height;
- var scale = Math.max(width / image.width, height / image.height);
+ scale = Math.max(width / image.width, height / image.height);
width = image.width * scale;
height = image.height * scale;
break;
case "fit":
+ /* falls through */
default:
- var scale = Math.min(width / image.width, height / image.height);
+ scale = Math.min(width / image.width, height / image.height);
if (scale > 1.0) scale = 1.0; //don't enlarge the image
width = image.width * scale;
height = image.height * scale;
diff --git a/client/common/services/SessionService.js b/client/common/services/SessionService.js
index c0ea5f0b..1149b31a 100644
--- a/client/common/services/SessionService.js
+++ b/client/common/services/SessionService.js
@@ -90,9 +90,10 @@ angular.module('dashboard.services.Session', [
var path = toParams.model; // model = config.nav[].path
var label = toParams.action;// action = config.nav[].label
var roles = angular.fromJson($cookies.get('roles'));
+ var found;
if(!_.isEmpty(path)) { //check subnavs
- var found = _.find(nav, { path: path });
+ found = _.find(nav, { path: path });
if(found) {
if(!DashboardService.hasAccess(roles, found)) return false;
if(_.isArray(found.subnav) && !_.isEmpty(label)) {
@@ -101,7 +102,7 @@ angular.module('dashboard.services.Session', [
}
}
} else { // check top nav using state
- var found = _.find(nav, { state: state });
+ found = _.find(nav, { state: state });
if(found) return DashboardService.hasAccess(roles, found);
}
diff --git a/index.js b/index.js
index 44c20628..377c6e67 100644
--- a/index.js
+++ b/index.js
@@ -38,7 +38,6 @@ var express = require('express')
, customSort = require('./server/sort')
, aws = require('./server/aws.js')
, package = require('./package.json');
- ;
var environment = process.env.NODE_ENV || 'development'
@@ -273,7 +272,7 @@ function cms(loopbackApplication, options) {
//force browser cache refresh on custom UI modules after deployment (when service restarts)
if (config.public.customModules) {
- var version = Math.ceil((new Date).getTime()/300000)*300000; //unique code within 5min window (for multi-web server instances)
+ var version = Math.ceil((new Date()).getTime()/300000)*300000; //unique code within 5min window (for multi-web server instances)
for (var i in config.public.customModules) {
var customModule = config.public.customModules[i];
if (!customModule.files) continue;
diff --git a/server/aws.js b/server/aws.js
index 1600a5ce..cae8b02b 100644
--- a/server/aws.js
+++ b/server/aws.js
@@ -81,7 +81,7 @@ function getS3Credentials(path, fileType, callback) {
signature: signature
};
callback(null, credentials);
-};
+}
module.exports = {
setConfig: function(config) {
diff --git a/server/relational-upsert.js b/server/relational-upsert.js
index f3ad90b2..5e567bba 100644
--- a/server/relational-upsert.js
+++ b/server/relational-upsert.js
@@ -191,8 +191,9 @@ function next(processRelationshipType, model, data, index, callback) {
* @param callback
*/
function upsertManyToMany(model, data, relationshipKey, relationshipData, relationSettings, callback) {
+ var message = "";
if (!relationSettings.through) {
- var message = "upsertManyToMany cannot proceed as no relations." + relationshipKey + ".through exists in " + model.name + " JSON definition";
+ message = "upsertManyToMany cannot proceed as no relations." + relationshipKey + ".through exists in " + model.name + " JSON definition";
console.error("ERROR: " + message);
//callback({ error: message });
callback();
@@ -202,7 +203,7 @@ function upsertManyToMany(model, data, relationshipKey, relationshipData, relati
var junctionSettings = model.settings.relations[relationSettings.through];
if (!junctionSettings) junctionSettings = model.settings.relations[inflection.pluralize(relationSettings.through)];
if (!junctionSettings) {
- var message = "upsertManyToMany cannot proceed as no model.settings.relations." + relationSettings.through + " or "+ inflection.pluralize(relationSettings.through) +" exists in " + model.name + " JSON definition";
+ message = "upsertManyToMany cannot proceed as no model.settings.relations." + relationSettings.through + " or "+ inflection.pluralize(relationSettings.through) +" exists in " + model.name + " JSON definition";
console.error("ERROR: " + message);
//callback({ error: message });
callback();
@@ -214,8 +215,9 @@ function upsertManyToMany(model, data, relationshipKey, relationshipData, relati
var junctionRelations = junctionModel.settings.relations;
var junctionRelationIdKey = null;
var keys = Object.keys(junctionRelations);
+ var key;
for (var i in keys) {
- var key = keys[i];
+ key = keys[i];
var junctionRelationshipSettings = junctionRelations[key];
if (junctionRelationshipSettings.model == relationSettings.model) {
junctionRelationIdKey = junctionRelationshipSettings.foreignKey;
@@ -224,7 +226,7 @@ function upsertManyToMany(model, data, relationshipKey, relationshipData, relati
}
if (!junctionRelationIdKey) {
- var message = "upsertManyToMany cannot proceed as no relation named '" + relationSettings.model + "' exists in " + junctionSettings.model + " JSON definition";
+ message = "upsertManyToMany cannot proceed as no relation named '" + relationSettings.model + "' exists in " + junctionSettings.model + " JSON definition";
console.error("ERROR: " + message);
callback({ error: message });
return;
@@ -236,7 +238,7 @@ function upsertManyToMany(model, data, relationshipKey, relationshipData, relati
var modelId = data[modelIdKey];
if (!modelId) {
- var message = "upsertManyToMany cannot proceed as no data[modelIdKey] found for modelIdKey = '" + modelIdKey + "'";
+ message = "upsertManyToMany cannot proceed as no data[modelIdKey] found for modelIdKey = '" + modelIdKey + "'";
console.error("ERROR: " + message);
callback({ error: message });
return;
@@ -249,15 +251,15 @@ function upsertManyToMany(model, data, relationshipKey, relationshipData, relati
//FIRST Delete Any existing Primary Model's records from junction table
var where = {};
where[junctionModelIdKey] = modelId;
- for (var i in relationshipData) {
- var junctionData = relationshipData[i];
+ for (var j in relationshipData) {
+ var junctionData = relationshipData[j];
if (junctionData && junctionData[relationIdKey]) {
//delete only the junction table records matching the junction meta (this is import as not to delete records
//that should not be deleted (i.e. when 2 ModelFieldReference fields exists with different junctionMeta values)
if (junctionData.junctionMeta) {
- var keys = Object.keys(junctionData.junctionMeta);
- for (var i in keys) {
- var key = keys[i];
+ keys = Object.keys(junctionData.junctionMeta);
+ for (var k in keys) {
+ key = keys[k];
if (typeof where[key] !== 'undefined' && where[key] != junctionData.junctionMeta[key]) {
if (typeof where[key] === 'string' || typeof where[key] === 'number') {
where[key] = {inq: [where[key]]};