http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/app.time.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/app.time.js b/eagle-webservice/src/main/webapp/app/public/js/app.time.js deleted file mode 100644 index d61506a..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/app.time.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// Time Zone -(function() { - "use strict"; - - app.time = { - UTC_OFFSET: 0, - now: function() { - return app.time.offset(); - }, - offset: function(time) { - // Parse string number - if(typeof time === "string" && !isNaN(+time)) { - time = +time; - } - - var _mom = new moment(time); - _mom.utcOffset(app.time.UTC_OFFSET); - return _mom; - }, - /* - * Return the moment object which use server time zone and keep the time. - */ - srvZone: function(time) { - var _timezone = time._isAMomentObject ? time.utcOffset() : new moment().utcOffset(); - var _mom = app.time.offset(time); - _mom.subtract(app.time.UTC_OFFSET, "m").add(_timezone, "m"); - return _mom; - }, - - refreshInterval: 1000 * 10 - }; - - // Moment update - moment.fn.toISO = function() { - return this.format("YYYY-MM-DDTHH:mm:ss.000Z"); - }; - - // Force convert date - var _toDate = moment.fn.toDate; - moment.fn.toDate = function(ignoreTimeZone) { - if(!ignoreTimeZone) return _toDate.bind(this)(); - return new Date( - this.year(), - this.month(), - this.date(), - this.hour(), - this.minute(), - this.second(), - this.millisecond() - ); - }; -})(); \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/app.ui.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/app.ui.js b/eagle-webservice/src/main/webapp/app/public/js/app.ui.js deleted file mode 100644 index ca494d3..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/app.ui.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { - // ================== AdminLTE Update ================== - var _boxSelect = $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors; - - // Box collapse - $(document).on("click", _boxSelect.collapse, function(e) { - if(common.getValueByPath($._data(this), "events.click")) return; - - e.preventDefault(); - $.AdminLTE.boxWidget.collapse($(this)); - }); - - // Box remove - $(document).on("click", _boxSelect.remove, function(e) { - if(common.getValueByPath($._data(this), "events.click")) return; - - e.preventDefault(); - $.AdminLTE.boxWidget.remove($(this)); - }); - - // =================== jQuery Update =================== - // Slide Toggle - var _slideToggle = $.fn.slideToggle; - $.fn.slideToggle = function(showOrHide) { - if(arguments.length === 1 && typeof showOrHide === "boolean") { - if(showOrHide) { - this.slideDown(); - } else { - this.slideUp(); - } - } else { - _slideToggle.apply(this, arguments); - } - }; - - // Fade Toggle - var _fadeToggle = $.fn.fadeToggle; - $.fn.fadeToggle = function(showOrHide) { - if(arguments.length === 1 && typeof showOrHide === "boolean") { - if(showOrHide) { - this.fadeIn(); - } else { - this.fadeOut(); - } - } else { - _fadeToggle.apply(this, arguments); - } - }; - - // Modal - var _modal = $.fn.modal; - $.fn.modal = function() { - setTimeout(function() { - $(this).find("input[type='text'], textarea").filter(':not([readonly]):enabled:visible:first').focus(); - }.bind(this), 500); - _modal.apply(this, arguments); - return this; - }; -})(); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/common.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/common.js b/eagle-webservice/src/main/webapp/app/public/js/common.js deleted file mode 100644 index 4c5e82f..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/common.js +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var common = {}; - -common.template = function (str, list) { - $.each(list, function(key, value) { - var _regex = new RegExp("\\$\\{" + key + "\\}", "g"); - str = str.replace(_regex, value); - }); - return str; -}; - -common.getValueByPath = function (unit, path, defaultValue) { - if(unit === null || unit === undefined) throw "Unit or path can't be empty!"; - if(path === "" || path === null || path === undefined) return unit; - - path = path.replace(/\[(\d+)\]/g, ".$1").replace(/^\./, "").split(/\./); - $.each(path, function(i, path) { - unit = unit[path]; - if(unit === null || unit === undefined) { - unit = null; - return false; - } - }); - if(unit === null && defaultValue !== undefined) { - unit = defaultValue; - } - return unit; -}; - -common.setValueByPath = function(unit, path, value) { - if(!unit || typeof path !== "string" || path === "") throw "Unit or path can't be empty!"; - - var _inArray = false; - var _end = 0; - var _start = 0; - var _unit = unit; - - function _nextPath(array) { - var _key = path.slice(_start, _end); - if(_inArray) { - _key = _key.slice(0, -1); - } - if(!_unit[_key]) { - if(array) { - _unit[_key] = []; - } else { - _unit[_key] = {}; - } - } - _unit = _unit[_key]; - } - - for(; _end < path.length ; _end += 1) { - if(path[_end] === ".") { - _nextPath(false); - _start = _end + 1; - _inArray = false; - } else if(path[_end] === "[") { - _nextPath(true); - _start = _end + 1; - _inArray = true; - } - } - - _unit[path.slice(_start, _inArray ? -1 : _end)] = value; - - return unit; -}; - -common.parseJSON = function (str, defaultVal) { - try { - str = (str + "").trim(); - if(Number(str).toString() === str) throw "Number format"; - return JSON.parse(str); - } catch(err) { - if(defaultVal === undefined) { - console.warn("Can't parse JSON: " + str); - } - } - return defaultVal === undefined ? null : defaultVal; -}; - -common.stringify = function(json) { - return JSON.stringify(json, function(key, value) { - if(/^(_|\$)/.test(key)) return undefined; - return value; - }); -}; - -common.isEmpty = function(val) { - if($.isArray(val)) { - return val.length === 0; - } else { - return val === null || val === undefined; - } -}; - -common.extend = function(target, origin) { - $.each(origin, function(key, value) { - if(/^(_|\$)/.test(key)) return; - - target[key] = value; - }); - return target; -}; - -// ====================== Format ====================== -common.format = {}; - -/* - * Format date to string. Support number, string, Date instance. Will auto convert time zone offset(Moment instance will keep time zone). - */ -common.format.date = function(val, type) { - if(val === undefined || val === null) return ""; - - if(typeof val === "number" || typeof val === "string" || val instanceof Date) { - val = app.time.offset(val); - } - switch(type) { - case 'date': - return val.format("YYYY-MM-DD"); - case 'time': - return val.format("HH:mm:ss"); - case 'datetime': - return val.format("YYYY-MM-DD HH:mm:ss"); - case 'mixed': - return val.format("YYYY-MM-DD HH:mm"); - default: - return val.format("YYYY-MM-DD HH:mm:ss") + (val.utcOffset() === 0 ? '[UTC]' : ''); - } -}; - -// ===================== Property ===================== -common.properties = {}; - -common.properties.parse = function (str, defaultValue) { - var regex = /\s*([\w\.]+)\s*=\s*(.*?)\s*([\r\n]+|$)/g; - var match, props = {}; - var hasValue = false; - while((match = regex.exec(str)) !== null) { - props[match[1]] = match[2]; - hasValue = true; - } - props = hasValue ? props : defaultValue; - props.getValueByPath = function (path) { - if(props[path] !== undefined) return props[path]; - var subProps = {}; - var prefixPath = path + "."; - $.each(props, function (key, value) { - if(typeof value === "string" && key.indexOf(prefixPath) === 0) { - subProps[key.replace(prefixPath, "")] = value; - } - }); - return subProps; - }; - - return props; -}; - -common.properties.check = function (str) { - var pass = true; - var regex = /^\s*[\w\.]+\s*=(.*)$/; - $.each((str || "").trim().split(/[\r\n\s]+/g), function (i, line) { - if(!regex.test(line)) { - pass = false; - return false; - } - }); - return pass; -}; - -// ====================== Array ======================= -common.array = {}; - -common.array.sum = function(list, path) { - var _sum = 0; - if(list) { - $.each(list, function(i, unit) { - var _val = common.getValueByPath(unit, path); - if(typeof _val === "number") { - _sum += _val; - } - }); - } - return _sum; -}; - -common.array.max = function(list, path) { - var _max = null; - if(list) { - $.each(list, function(i, unit) { - var _val = common.getValueByPath(unit, path); - if(typeof _val === "number" && (_max === null || _max < _val)) { - _max = _val; - } - }); - } - return _max; -}; - -common.array.bottom = function(list, path, count) { - var _list = list.slice(); - - _list.sort(function(a, b) { - var _a = common.getValueByPath(a, path, null); - var _b = common.getValueByPath(b, path, null); - - if(_a === _b) return 0; - if(_a < _b || _a === null) { - return -1; - } else { - return 1; - } - }); - return !count ? _list : _list.slice(0, count); -}; -common.array.top = function(list, path, count) { - var _list = common.array.bottom(list, path); - _list.reverse(); - return !count ? _list : _list.slice(0, count); -}; - -common.array.find = function(val, list, path, findAll, caseSensitive) { - path = path || ""; - val = caseSensitive === false ? (val || "").toUpperCase() : val; - - var _list = $.grep(list, function(unit) { - if(caseSensitive === false) { - return val === (common.getValueByPath(unit, path) || "").toUpperCase(); - } else { - return val === common.getValueByPath(unit, path); - } - }); - return findAll ? _list : (_list.length === 0 ? null : _list[0]); -}; - -common.array.filter = function(val, list, path) { - return common.array.find(val, list, path, true); -}; - -common.array.count = function(list, val, path) { - if(arguments.length === 1) { - return list.length; - } else { - return common.array.find(val, list, path, true).length; - } -}; - -common.array.remove = function(val, list) { - for(var i = 0 ; i < list.length ; i += 1) { - if(list[i] === val) { - list.splice(i, 1); - i -= 1; - } - } -}; - -common.array.insert = function(val, list, index) { - list.splice(index, 0, val); -}; - -common.array.moveOffset = function(item, list, offset) { - var _index = $.inArray(item, list); - var _tgtPos = _index + offset; - if(_tgtPos < 0 || _tgtPos >= list.length) return; - - common.array.remove(item, list); - common.array.insert(item, list, _index + offset); -}; - -// ======================= Map ======================== -common.map = {}; - -common.map.toArray = function(map) { - return $.map(map, function(unit) { - return unit; - }); -}; - -// ======================= Math ======================= -common.math = {}; - -common.math.distance = function(x1,y1,x2,y2) { - var a = x1 - x2; - var b = y1 - y2; - return Math.sqrt(a * a + b * b); -}; http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/components/charts/line3d.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/components/charts/line3d.js b/eagle-webservice/src/main/webapp/app/public/js/components/charts/line3d.js deleted file mode 100644 index eb6e6d1..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/components/charts/line3d.js +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -eagleComponents.directive('line3dChart', function($compile) { - 'use strict'; - - return { - restrict : 'AE', - scope : { - title : "@", - data : "=", - - height : "=?height" - }, - controller : function(line3dCharts, $scope, $element, $attrs) { - $scope.height = $scope.height || 200; - - var _chart = line3dCharts($scope); - - var _chartBody = $element.find(".chart-body"); - _chartBody.height($scope.height); - - _chart.gen($element.find(".chart-body"), $attrs.data, { - height : $scope.height, - }); - }, - template : '<div class="chart">' + '<div class="chart-header">' + '<h3>{{title}}</h3>' + '</div>' + '<div class="chart-body">' + '</div>' + '</div>', - replace : true - }; -}); - -eagleComponents.service('line3dCharts', function() { - 'use strict'; - - var charts = function($scope) { - return { - gen : function(ele, series, config) { - // ======================= Initialization ======================= - ele = $(ele); - - series = series || []; - config = config || {}; - - var _bounds = [{min:-10, max: 10},{min:-10, max: 10},{min:-10, max: 10}]; - var _scale = 1; - - // ======================= Set Up D3 View ======================= - var width = ele.innerWidth(), height = config.height; - - var color = ["#7cb5ec", "#f7a35c", "#90ee7e", "#7798BF", "#aaeeee"]; - - var svg = d3.select(ele[0]).append("svg").attr("width", width).attr("height", height); - - // ========================== Function ========================== - var yaw=0.5,pitch=0.5,drag; - var transformPrecalc = []; - - var offsetPoint = function(point) { - var _point = [ - +point[0] - (_bounds[0].max + _bounds[0].min) / 2, - -point[1] + (_bounds[1].max + _bounds[1].min) / 2, - -point[2] + (_bounds[2].max + _bounds[2].min) / 2 - ]; - return [_point[0] * _scale, _point[1] * _scale, _point[2] * _scale]; - }; - - var transfromPointX = function(point) { - point = offsetPoint(point); - return transformPrecalc[0] * point[0] + transformPrecalc[1] * point[1] + transformPrecalc[2] * point[2] + width / 2; - }; - var transfromPointY = function(point) { - point = offsetPoint(point); - return transformPrecalc[3] * point[0] + transformPrecalc[4] * point[1] + transformPrecalc[5] * point[2] + height / 2; - }; - var transfromPointZ = function(point) { - point = offsetPoint(point); - return transformPrecalc[6] * point[0] + transformPrecalc[7] * point[1] + transformPrecalc[8] * point[2]; - }; - var transformPoint2D = function(point) { - var _point = [point[0], point[1], point[2]]; - return transfromPointX(_point).toFixed(10) + "," + transfromPointY(_point).toFixed(10); - }; - - var setTurtable = function(yaw, pitch, update) { - var cosA = Math.cos(pitch); - var sinA = Math.sin(pitch); - var cosB = Math.cos(yaw); - var sinB = Math.sin(yaw); - transformPrecalc[0] = cosB; - transformPrecalc[1] = 0; - transformPrecalc[2] = sinB; - transformPrecalc[3] = sinA * sinB; - transformPrecalc[4] = cosA; - transformPrecalc[5] = -sinA * cosB; - transformPrecalc[6] = -sinB * cosA; - transformPrecalc[7] = sinA; - transformPrecalc[8] = cosA * cosB; - - if(update) _update(); - }; - setTurtable(0.4,0.4); - - // =========================== Redraw =========================== - var _coordinateList = []; - var _axisText = []; - var coordinate = svg.selectAll(".axis"); - var axisText = svg.selectAll(".axis-text"); - var lineList = svg.selectAll(".line"); - - function _redraw(series) { - var _desX, _desY, _desZ, _step; - - // Bounds - if(series) { - _bounds = [{},{},{}]; - $.each(series, function(j, series) { - // Points - $.each(series.data, function(k, point) { - for(var i = 0 ; i < 3 ; i += 1) { - // Minimum - if(_bounds[i].min === undefined || point[i] < _bounds[i].min) { - _bounds[i].min = point[i]; - } - // Maximum - if(_bounds[i].max === undefined || _bounds[i].max < point[i]) { - _bounds[i].max = point[i]; - } - } - }); - }); - } - - _desX = _bounds[0].max - _bounds[0].min; - _desY = _bounds[1].max - _bounds[1].min; - _desZ = _bounds[2].max - _bounds[2].min; - - // Step - (function() { - var _stepX = _desX / 10; - var _stepY = _desY / 10; - var _stepZ = _desZ / 10; - - _step = Math.min(_stepX, _stepY, _stepZ); - _step = Math.max(_step, 0.5); - _step = 0.5; - })(); - - // Scale - (function() { - var _scaleX = width / _desX; - var _scaleY = height / _desY / 2; - var _scaleZ = width / _desZ; - _scale = Math.min(_scaleX, _scaleY, _scaleZ) / 2; - })(); - - // Coordinate - // > Basic - _coordinateList = [ - {color: "rgba(0,0,0,0.1)", data: [[0,0,-100],[0,0,100]]}, - {color: "rgba(0,0,0,0.1)", data: [[0,-100,0],[0,100,0]]}, - {color: "rgba(0,0,0,0.1)", data: [[-100,0,0],[100,0,0]]}, - - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].min,_bounds[1].min,_bounds[2].min],[_bounds[0].max,_bounds[1].min,_bounds[2].min]]}, - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].min,_bounds[1].min,_bounds[2].min],[_bounds[0].min,_bounds[1].min,_bounds[2].max]]}, - - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].min,_bounds[1].min,_bounds[2].max],[_bounds[0].max,_bounds[1].min,_bounds[2].max]]}, - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].max,_bounds[1].min,_bounds[2].min],[_bounds[0].max,_bounds[1].min,_bounds[2].max]]}, - - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].min,_bounds[1].max,_bounds[2].min],[_bounds[0].max,_bounds[1].max,_bounds[2].min]]}, - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].min,_bounds[1].max,_bounds[2].min],[_bounds[0].min,_bounds[1].max,_bounds[2].max]]}, - - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].min,_bounds[1].min,_bounds[2].min],[_bounds[0].min,_bounds[1].max,_bounds[2].min]]}, - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].max,_bounds[1].min,_bounds[2].min],[_bounds[0].max,_bounds[1].max,_bounds[2].min]]}, - {color: "rgba(0,0,255,0.3)", data: [[_bounds[0].min,_bounds[1].min,_bounds[2].max],[_bounds[0].min,_bounds[1].max,_bounds[2].max]]}, - ]; - - _axisText = []; - function _axisPoint(point, dimension, number) { - // Coordinate - if(dimension === 1) { - _coordinateList.push({ - color: "rgba(0,0,0,0.2)", - data:[[_step/5,point[1],0],[0,point[1],0],[0,point[1],_step/5]] - }); - } else { - _coordinateList.push({ - color: "rgba(0,0,0,0.2)", - data:[[point[0],-_step/8,point[2]], [point[0],_step/8,point[2]]] - }); - } - - // Axis Text - if(number.toFixed(0) == number + "") { - point.text = number; - point.dimension = dimension; - _axisText.push(point); - } - } - function _axisPoints(dimension, bound) { - var i, _unit; - for(i = _step ; i < bound.max + _step ; i += _step) { - _unit = [0,0,0]; - _unit[dimension] = i; - _axisPoint(_unit, dimension, i); - } - for(i = -_step ; i > bound.min - _step ; i -= _step) { - _unit = [0,0,0]; - _unit[dimension] = i; - _axisPoint(_unit, dimension, i); - } - } - // > Steps - _axisPoint([0,0,0],1,0); - _axisPoints(0, _bounds[0]); - _axisPoints(1, _bounds[1]); - _axisPoints(2, _bounds[2]); - - // > Draw - coordinate = coordinate.data(_coordinateList); - coordinate.enter() - .append("path") - .attr("fill", "none") - .attr("stroke", function(d) {return d.color;}); - coordinate.exit().remove(); - - // Axis Text - axisText = axisText.data(_axisText); - axisText.enter() - .append("text") - .classed("noSelect", true) - .attr("fill", "rgba(0,0,0,0.5)") - .attr("text-anchor", function(d) {return d.dimension === 1 ? "start" : "middle";}) - .text(function(d) {return d.text;}); - axisText.transition() - .attr("text-anchor", function(d) {return d.dimension === 1 ? "end" : "middle";}) - .text(function(d) {return d.text;}); - axisText.exit().remove(); - - // Lines - lineList = lineList.data(series || []); - lineList.enter() - .append("path") - .attr("fill", "none") - .attr("stroke", function(d) {return d.color;}); - lineList.exit().remove(); - - _update(); - } - - function _update() { - coordinate - .attr("d", function(d) { - var path = ""; - $.each(d.data, function(i, point) { - path += (i === 0 ? "M" : "L") + transformPoint2D(point); - }); - return path; - }); - - axisText - .attr("x", function(d) {return transfromPointX(d) + (d.dimension === 1 ? -3 : 0);}) - .attr("y", function(d) {return transfromPointY(d) + (d.dimension === 1 ? 0 : -5);}); - - lineList - .attr("d", function(d, index) { - var path = ""; - $.each(d.data, function(i, point) { - path += (i === 0 ? "M" : "L") + transformPoint2D(point); - }); - return path; - }); - } - - - svg.on("mousedown", function() { - drag = [d3.mouse(this), yaw, pitch]; - }).on("mouseup", function() { - drag = false; - }).on("mousemove", function() { - if (drag) { - var mouse = d3.mouse(this); - yaw = drag[1] - (mouse[0] - drag[0][0]) / 50; - pitch = drag[2] + (mouse[1] - drag[0][1]) / 50; - pitch = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, pitch)); - setTurtable(yaw, pitch, true); - } - }); - - // =========================== Render =========================== - _redraw(); - - function _render() { - // ======== Parse Data ======== - var _series = typeof series === "string" ? $scope.data : series; - if(!_series) return; - - // Clone - _series = $.map(_series, function(series) { - return { - name: series.name, - color: series.color, - data: series.data - }; - }); - - // Colors - $.each(_series, function(i, series) { - series.color = series.color || color[i % color.length]; - }); - - // Render - _redraw(_series); - } - - // ======================= Dynamic Detect ======================= - if(typeof series === "string") { - $scope.$parent.$watch(series, function() { - _render(); - }, true); - } else { - _render(); - } - - - // ========================== Clean Up ========================== - $scope.$on('$destroy', function() { - svg.remove(); - }); - }, - }; - }; - return charts; -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/components/file.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/components/file.js b/eagle-webservice/src/main/webapp/app/public/js/components/file.js deleted file mode 100644 index 82927a3..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/components/file.js +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -eagleComponents.directive('file', function($compile) { - 'use strict'; - - return { - restrict : 'A', - scope: { - filepath: "=?filepath", - }, - controller: function($scope, $element, $attrs) { - // Watch change(Only support clean the data) - if($attrs.filepath) { - $scope.$parent.$watch($attrs.filepath, function(value) { - if(!value) $element.val(value); - }); - } - - // Bind changed value - $element.on("change", function() { - var _path = $(this).val(); - if($attrs.filepath) { - common.setValueByPath($scope.$parent, $attrs.filepath, _path); - $scope.$parent.$apply(); - } - }); - - $scope.$on('$destroy',function(){ - $element.off("change"); - }); - }, - replace: false - }; -}); http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/components/main.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/components/main.js b/eagle-webservice/src/main/webapp/app/public/js/components/main.js deleted file mode 100644 index 6b0e21f..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/components/main.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var eagleComponents = angular.module('eagle.components', []); http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/components/nvd3.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/components/nvd3.js b/eagle-webservice/src/main/webapp/app/public/js/components/nvd3.js deleted file mode 100644 index 8687c78..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/components/nvd3.js +++ /dev/null @@ -1,418 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -eagleComponents.service('nvd3', function() { - var nvd3 = { - charts: [], - colors: [ - "#7CB5EC", "#F7A35C", "#90EE7E", "#7798BF", "#AAEEEE" - ] - }; - - // ============================================ - // = Format Convert = - // ============================================ - - /*** - * Format: [series:{key:name, value: [{x, y}]}] - */ - - nvd3.convert = {}; - nvd3.convert.eagle = function(seriesList) { - return $.map(seriesList, function(series) { - var seriesObj = $.isArray(series) ? {values: series} : series; - if(!seriesObj.key) seriesObj.key = "value"; - return seriesObj; - }); - }; - - nvd3.convert.druid = function(seriesList) { - var _seriesList = []; - - $.each(seriesList, function(i, series) { - if(!series.length) return; - - // Fetch keys - var _measure = series[0]; - var _keys = $.map(_measure.event, function(value, key) { - return key !== "metric" ? key : null; - }); - - // Parse series - _seriesList.push.apply(_seriesList, $.map(_keys, function(key) { - return { - key: key, - values: $.map(series, function(unit) { - return { - x: new moment(unit.timestamp).valueOf(), - y: unit.event[key] - }; - }) - }; - })); - }); - - return _seriesList; - }; - - // ============================================ - // = UI = - // ============================================ - // Resize with refresh - function chartResize() { - $.each(nvd3.charts, function(i, chart) { - if(chart) chart.nvd3Update(); - }); - } - $(window).on("resize.components.nvd3", chartResize); - $("body").on("collapsed.pushMenu expanded.pushMenu", function() { - setTimeout(chartResize, 300); - }); - - return nvd3; -}); - -/** - * config: - * chart: Defined chart type: line, column, area - * xTitle: Defined x axis title. - * yTitle: Defined y axis title. - * xType: Defined x axis label type: number, decimal, time - * yType: Defined y axis label type - * yMin: Defined minimum of y axis - * yMax: Defined maximum of y axis - * displayType: Defined the chart display type. Each chart has own type. - */ -eagleComponents.directive('nvd3', function(nvd3) { - 'use strict'; - - return { - restrict: 'AE', - scope: { - nvd3: "=", - title: "@?title", // title - chart: "@?chart", // Same as config.chart - config: "=?config", - watching: "@?watching", // Default watching data(nvd3) only. true will also watching chart & config. false do not watching. - - holder: "=?holder" // Container for holder to call the chart function - }, - controller: function($scope, $element, $attrs, $timeout) { - var _config, _chartType; - var _chart; - var _chartCntr; - var _holder, _holder_updateTimes; - - // Destroy - function destroy() { - var _index = $.inArray(_chart, nvd3.charts); - if(!_chartCntr) return _index; - - // Clean events - d3.select(_chartCntr) - .on("touchmove",null) - .on("mousemove",null, true) - .on("mouseout" ,null,true) - .on("dblclick" ,null) - .on("click", null); - - // Clean elements - d3.select(_chartCntr).selectAll("*").remove(); - $element.find(".nvtooltip").remove(); - $(_chartCntr).remove(); - - // Clean chart in nvd3 pool - nvd3.charts[_index] = null; - _chart = null; - - return _index; - } - - // Setup chart environment. Will clean old chart and build new chart if recall. - function initChart() { - // Clean up if already have chart - var _preIndex = destroy(); - - // Initialize - _config = $.extend({}, $scope.config); - _chartType = $scope.chart || _config.chart; - _chartCntr = $(document.createElementNS("http://www.w3.org/2000/svg", "svg")) - .css("min-height", 50) - .attr("_rnd", Math.random()) - .appendTo($element)[0]; - - // Size - if(_config.height) { - $(_chartCntr).css("height", _config.height); - } - - switch(_chartType) { - case "line": - _chart = nv.models.lineChart() - .useInteractiveGuideline(true) - .showLegend(true) - .showYAxis(true) - .showXAxis(true) - .options({ - duration: 350 - }); - break; - case "column": - _chart = nv.models.multiBarChart() - .groupSpacing(0.1) - .options({ - duration: 350 - }); - break; - case "area": - _chart = nv.models.stackedAreaChart() - .useInteractiveGuideline(true) - .showLegend(true) - .showYAxis(true) - .showXAxis(true) - .options({ - duration: 350 - }); - break; - case "pie": - _chart = nv.models.dimensionalPieChart() - .x(function(d) { return d.key; }) - .y(function(d) { return d.values[d.values.length - 1].y; }); - break; - default : - throw "Type not defined: " + _chartType; - } - - // nvd3 display Type - // TODO: support type define - - // Define title - if(_chartType !== 'pie') { - if(_config.xTitle) _chart.xAxis.axisLabel(_config.xTitle); - if(_config.yTitle) _chart.yAxis.axisLabel(_config.yTitle); - } - - // Define label type - var _tickMultiFormat = d3.time.format.multi([ - ["%-I:%M%p", function(d) { return d.getMinutes(); }], - ["%-I%p", function(d) { return d.getHours(); }], - ["%b %-d", function(d) { return d.getDate() != 1; }], - ["%b %-d", function(d) { return d.getMonth(); }], - ["%Y", function() { return true; }] - ]); - - function _defineLabelType(axis, type) { - if(!_chart) return; - - var _axis = _chart[axis + "Axis"]; - if(!_axis) return; - - switch(type) { - case "decimal": - case "decimals": - _axis.tickFormat(d3.format('.02f')); - break; - case "text": - if(axis === "x") { - _chart.rotateLabels(10); - _chart.reduceXTicks(false).staggerLabels(true); - } - _axis.tickFormat(function(d) { - return d; - }); - break; - case "time": - if(_chartType !== 'column') { - _chart[axis + "Scale"](d3.time.scale()); - (function () { - var measureSeries = null; - $.each($scope.nvd3 || [], function(i, series) { - var _len = (series.values || []).length; - if(_len === 0) return; - if(measureSeries === null || measureSeries.values.length < _len) measureSeries = series; - }); - - var width = $element.width() - 35;// Use default nvd3 margin. Hard code. - if(!measureSeries || width <= 0) return; - var count = Math.floor(width / 80); - var countDes = Math.floor(measureSeries.values.length / count); - var tickValues = []; - for(var loc = 0 ; loc < measureSeries.values.length ; loc += countDes) { - tickValues.push(measureSeries.values[loc].x); - } - _chart[axis + "Axis"].tickValues(tickValues); - })(); - } - _axis.tickFormat(function(d) { - return _tickMultiFormat(app.time.offset(d).toDate(true)); - }); - break; - case "number": - /* falls through */ - default: - _axis.tickFormat(d3.format(',r')); - } - } - - if(_chartType !== 'pie') { - _defineLabelType("x", _config.xType || "number"); - _defineLabelType("y", _config.yType || "decimal"); - } - - // Global chart list update - if(_preIndex === -1) { - nvd3.charts.push(_chart); - } else { - nvd3.charts[_preIndex] = _chart; - } - - // Use customize update function to update the view - _chart.nvd3Update = function() { - if(_config.xType === "time") _defineLabelType("x", _config.xType); - _chart.update(); - }; - - updateData(); - } - - // Update chart data - function updateData() { - var _min = null, _max = null; - - // Copy series to prevent Angular loop watching - var _data = $.map($scope.nvd3 || [], function(series, i) { - var _series = $.extend(true, {}, series); - _series.color = _series.color || nvd3.colors[i % nvd3.colors.length]; - return _series; - }); - - // Chart Y value - if(($scope.chart || _config.chart) !== "pie") { - $.each(_data, function(i, series) { - $.each(series.values, function(j, unit) { - if(_min === null || unit.y < _min) _min = unit.y; - if(_max === null || unit.y > _max) _max = unit.y; - }); - }); - - if(_min === 0 && _max === 0) { - _chart.forceY([0, 10]); - } else if(_config.yMin !== undefined || _config.yMax !== undefined) { - _chart.forceY([_config.yMin, _config.yMax]); - } else { - _chart.forceY([]); - } - } - - // Update data - d3.select(_chartCntr) //Select the <svg> element you want to render the chart in. - .datum(_data) //Populate the <svg> element with chart data... - .call(_chart); //Finally, render the chart! - - setTimeout(_chart.nvd3Update, 10); - } - - // ================================================================ - // = Watching = - // ================================================================ - // Ignore initial checking - $timeout(function() { - if ($scope.watching !== "false") { - $scope.$watch(function() { - if(!$scope.nvd3) return []; - - var _hashList = $.map($scope.nvd3, function(series) { - if(!series.values) return 0; - var unit = { - x: 0, - y: 0 - }; - - $.each(series.values, function(j, item) { - unit.x += item.x; - unit.y += item.y; - }); - - return unit; - }); - - return _hashList; - }, function() { - updateData(); - }, true); - - // All watching mode - if ($scope.watching === "true") { - $scope.$watch("[chart, config]", function(newValue, oldValue) { - if(angular.equals(newValue, oldValue)) return; - initChart(); - }, true); - } - } - }); - - // Holder inject - _holder_updateTimes = 0; - _holder = { - element: $element, - refresh: function() { - setTimeout(function() { - updateData(); - }, 0); - }, - refreshAll: function() { - setTimeout(function() { - initChart(); - }, 0); - } - }; - - Object.defineProperty(_holder, 'chart', { - get: function() {return _chart;} - }); - - $scope.$watch("holder", function() { - // Holder times update - setTimeout(function() { - _holder_updateTimes = 0; - }, 0); - _holder_updateTimes += 1; - if(_holder_updateTimes > 100) throw "Holder conflict"; - - $scope.holder = _holder; - }); - - // ================================================================ - // = Start Up = - // ================================================================ - initChart(); - - // ================================================================ - // = Clean Up = - // ================================================================ - $scope.$on('$destroy', function() { - destroy(); - }); - }, - template : - '<div>' + - '<h3 title="{{title || config.title}}">{{title || config.title}}</h3>' + - '</div>', - replace: true - }; -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/components/sortTable.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/components/sortTable.js b/eagle-webservice/src/main/webapp/app/public/js/components/sortTable.js deleted file mode 100644 index 86b89b5..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/components/sortTable.js +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -eagleComponents.directive('sorttable', function($compile) { - 'use strict'; - - return { - restrict : 'AE', - scope: { - source: '=', - search: '=?search', - searchfunc: "=?searchfunc", - - orderKey: "@?sort", - - maxSize: "=?maxSize", - }, - controller: function($scope, $element, $attrs) { - // Initialization - $scope.app = app; - $scope.common = common; - $scope._parent = $scope.$parent; - - $scope.pageNumber = $scope.pageNumber || 1; - $scope.pageSize = $scope.pageSize || 10; - - $scope.maxSize = $scope.maxSize || 10; - - // Search box - if($scope.search !== false) { - var $search = $( - '<div style="overflow:hidden;">' + - '<div class="row">' + - '<div class="col-xs-4">' + - '<div class="search-box">' + - '<input type="search" class="form-control input-sm" placeholder="Search" ng-model="search" />' + - '<span class="fa fa-search"></span>' + - '</div>' + - '</div>' + - '</div>' + - '</div>' - ).prependTo($element); - $compile($search)($scope); - } - - // List head - $scope.doSort = function(path) { - if($scope.orderKey === path) { - $scope.orderKey = "-" + path; - } else { - $scope.orderKey = path; - } - }; - $scope.checkSortClass = function(key) { - if($scope.orderKey === key) { - return "fa fa-sort-asc"; - } else if($scope.orderKey === "-" + key) { - return "fa fa-sort-desc"; - } - return "fa fa-sort"; - }; - - var $listHead = $element.find("thead > tr"); - $listHead.find("> th").each(function() { - var $th = $(this); - $th.addClass("noSelect"); - - var _sortpath = $th.attr("sortpath"); - if(_sortpath) { - $th.attr("ng-click", "doSort('" + _sortpath + "')"); - $th.prepend('<span ng-class="checkSortClass(\'' + _sortpath + '\')"></span>'); - } - }); - $compile($listHead)($scope); - - // List body - var $listBody = $element.find("tbody > tr"); - $listBody.attr("ng-repeat", 'item in (filteredList = (source | filter: ' + ($scope.searchfunc ? 'searchfunc' : 'search') + ' | orderBy: orderKey)).slice((pageNumber - 1) * pageSize, pageNumber * pageSize)'); - $compile($listBody)($scope); - - // Navigation - var $navigation = $( - '<div style="overflow:hidden;">' + - '<div class="row">' + - '<div class="col-xs-5">' + - 'show {{(pageNumber - 1) * pageSize + 1}} to {{pageNumber * pageSize}} of {{filteredList.length}} items' + - '</div>' + - '<div class="col-xs-7 text-right">' + - '<uib-pagination total-items="filteredList.length" ng-model="pageNumber" boundary-links="true" items-per-page="pageSize" num-pages="numPages" max-size="maxSize"></uib-pagination>' + - '</div>' + - '</div>' + - '</div>' - ).appendTo($element); - $compile($navigation)($scope); - }, - replace: false - }; -}); http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/components/sortable.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/components/sortable.js b/eagle-webservice/src/main/webapp/app/public/js/components/sortable.js deleted file mode 100644 index c98c732..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/components/sortable.js +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -eagleComponents.directive('uieSortable', function($rootScope) { - 'use strict'; - - var COLLECTION_MATCH = /^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/; - - var _move = false; - var _selectElement; - var _overElement; - var _mockElement; - var _offsetX, _offsetY; - var _mouseDownPageX, _mouseDownPageY; - - function doMock(element, event) { - var _offset = element.offset(); - if(_mockElement) _mockElement.remove(); - - // Create mock element - _mockElement = element.clone(false).appendTo("body"); - _mockElement.addClass("sortable-mock-element"); - _mockElement.css({ - display: "block", - position: "absolute", - "pointer-events": "none", - "z-index": 10001, - padding: element.css("padding"), - margin: element.css("margin") - }); - _mockElement.width(element.width()); - _mockElement.height(element.height()); - - _mockElement.offset(_offset); - _offsetX = event.pageX - _offset.left; - _offsetY = event.pageY - _offset.top; - } - - $(window).on("mousemove", function(event) { - if(!_move) return; - event.preventDefault(); - - _mockElement.offset({ - left: event.pageX - _offsetX, - top: event.pageY - _offsetY - }); - }); - - $(window).on("mouseup", function() { - if(!_move) { - _overElement = null; - _selectElement = null; - _mockElement = null; - return; - } - _move = false; - - if(_overElement) { - _overElement.removeClass("sortable-enter"); - - if(_overElement[0] !== _selectElement[0]) { - // Process switch - var _oriHolder = _selectElement.holder; - var _tgtHolder = _overElement.holder; - var _oriSortableScope = _oriHolder.scope; - var _tgtSortableScope = _tgtHolder.scope; - var _oriScope = angular.element(_selectElement).scope(); - var _tgtScope = angular.element(_overElement).scope(); - - var _oriRepeat = _selectElement.closest("[ng-repeat]").attr("ng-repeat"); - var _tgtRepeat = _overElement.closest("[ng-repeat]").attr("ng-repeat"); - var _oriMatch = _oriRepeat.match(COLLECTION_MATCH)[2]; - var _tgtMatch = _tgtRepeat.match(COLLECTION_MATCH)[2]; - var _oriCollection = _oriScope.$parent.$eval(_oriMatch); - var _tgtCollection = _tgtScope.$parent.$eval(_tgtMatch); - var _oriIndex = $.inArray(_oriCollection[_oriScope.$index], _oriSortableScope.ngModel); - var _tgtIndex = $.inArray(_tgtCollection[_tgtScope.$index], _tgtSortableScope.ngModel); - - var _oriUnit = _oriSortableScope.ngModel[_oriIndex]; - var _tgtUnit = _tgtSortableScope.ngModel[_tgtIndex]; - _oriSortableScope.ngModel[_oriIndex] = _tgtUnit; - _tgtSortableScope.ngModel[_tgtIndex] = _oriUnit; - - // Trigger event - _oriHolder.change(_oriUnit, _tgtUnit); - if (_oriHolder !== _tgtHolder) _tgtHolder.change(_oriUnit, _tgtUnit); - - $rootScope.$apply(); - } - } - - if(_mockElement) _mockElement.remove(); - - _overElement = null; - _selectElement = null; - _mockElement = null; - }); - - return { - require: 'ngModel', - restrict : 'AE', - scope: { - ngModel: "=", - sortableEnabled: "=?sortableEnabled", - sortableUpdateFunc: "=?sortableUpdateFunc" - }, - link: function($scope, $element, $attrs, $ctrl) { - var _holder = { - scope: $scope, - change: function(source, target) { - if($scope.sortableUpdateFunc) $scope.sortableUpdateFunc(source, target); - } - }; - - $element.on("mousedown", ">", function(event) { - if($scope.sortableEnabled === false) return; - - _selectElement = $(this); - _selectElement.holder = _holder; - - _mouseDownPageX = event.pageX; - _mouseDownPageY = event.pageY; - - event.preventDefault(); - }); - - $element.on("mousemove", ">", function(event) { - if(_selectElement && !_move && common.math.distance(_mouseDownPageX, _mouseDownPageY, event.pageX, event.pageY) > 10) { - _move = true; - _overElement = _selectElement; - _overElement.addClass("sortable-enter"); - - doMock(_selectElement, event); - } - }); - - $element.on("mouseenter", ">", function() { - if(!_move) return; - _overElement = $(this); - _overElement.holder = _holder; - _overElement.addClass("sortable-enter"); - }); - $element.on("mouseleave", ">", function() { - if(!_move) return; - $(this).removeClass("sortable-enter"); - _overElement = null; - }); - }, - replace: false - }; -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/components/tabs.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/components/tabs.js b/eagle-webservice/src/main/webapp/app/public/js/components/tabs.js deleted file mode 100644 index 21c4a4a..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/components/tabs.js +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -eagleComponents.directive('tabs', function() { - 'use strict'; - - return { - restrict: 'AE', - transclude: { - 'header': '?header', - 'pane': 'pane', - 'footer': '?footer' - }, - scope : { - title: "@?title", - icon: "@", - selected: "@?selected", - holder: "=?holder", - sortableModel: "=?sortableModel", - - menuList: "=?menu" - }, - - controller: function($scope, $element, $attrs, $timeout) { - var transDuration = $.fn.tab.Constructor.TRANSITION_DURATION; - var transTimer = null; - var _holder, _holder_updateTimes; - - var $header, $footer; - - $scope.paneList = []; - $scope.selectedPane = null; - $scope.inPane = null; - $scope.activePane = null; - - // ================== Function ================== - $scope.getPaneList = function() { - return !$scope.title ? $scope.paneList : $scope.paneList.slice().reverse(); - }; - - $scope.setSelect = function(pane) { - if(typeof pane === "string") { - pane = common.array.find(pane, $scope.paneList, "title"); - } else if(typeof pane === "number") { - pane = (pane + $scope.paneList.length) % $scope.paneList.length; - pane = $scope.paneList[pane]; - } - - $scope.activePane = $scope.selectedPane || pane; - $scope.selectedPane = pane; - $scope.inPane = null; - - if(transTimer) $timeout.cancel(transTimer); - transTimer = $timeout(function() { - $scope.activePane = $scope.selectedPane; - $scope.inPane = $scope.selectedPane; - }, transDuration); - }; - - $scope.getMenuList = function() { - if($scope.selectedPane && $scope.selectedPane.menuList) { - return $scope.selectedPane.menuList; - } - return $scope.menuList; - }; - - $scope.tabSwitchUpdate = function (src, tgt) { - var _srcIndex = $.inArray(src.data, $scope.sortableModel); - var _tgtIndex = $.inArray(tgt.data, $scope.sortableModel); - - if(_srcIndex !== -1 && _tgtIndex !== -1) { - $scope.sortableModel[_srcIndex] = tgt.data; - $scope.sortableModel[_tgtIndex] = src.data; - } - }; - - // =================== Linker =================== - function _linkerProperties(pane) { - Object.defineProperties(pane, { - selected: { - get: function () { - return $scope.selectedPane === this; - } - }, - active: { - get: function () { - return $scope.activePane === this; - } - }, - in: { - get: function () { - return $scope.inPane === this; - } - } - }); - } - - this.addPane = function(pane) { - $scope.paneList.push(pane); - - // Register properties - _linkerProperties(pane); - - // Update select pane - if(pane.title === $scope.selected || !$scope.selectedPane) { - $scope.setSelect(pane); - } - }; - - this.deletePane = function(pane) { - common.array.remove(pane, $scope.paneList); - - if($scope.selectedPane === pane) { - $scope.selectedPane = $scope.activePane = $scope.inPane = $scope.paneList[0]; - } - }; - - // ===================== UI ===================== - $header = $element.find("> .nav-tabs-custom > .box-body"); - $footer = $element.find("> .nav-tabs-custom > .box-footer"); - - $scope.hasHeader = function() { - return !!$header.children().length; - }; - $scope.hasFooter = function() { - return !!$footer.children().length; - }; - - // ================= Interface ================== - _holder_updateTimes = 0; - _holder = { - scope: $scope, - element: $element, - setSelect: $scope.setSelect - }; - - Object.defineProperty(_holder, 'selectedPane', { - get: function() {return $scope.selectedPane;} - }); - - $scope.$watch("holder", function(newValue, oldValue) { - // Holder times update - setTimeout(function() { - _holder_updateTimes = 0; - }, 0); - _holder_updateTimes += 1; - if(_holder_updateTimes > 100) throw "Holder conflict"; - - $scope.holder = _holder; - }); - }, - - template : - '<div class="nav-tabs-custom">' + - // Menu - '<div class="box-tools pull-right" ng-if="getMenuList() && getMenuList().length">' + - '<div ng-repeat="menu in getMenuList() track by $index" class="inline">' + - // Button - '<button class="btn btn-box-tool" ng-click="menu.func($event)" ng-if="!menu.list"' + - ' uib-tooltip="{{menu.title}}" tooltip-enable="menu.title" tooltip-append-to-body="true">' + - '<span class="fa fa-{{menu.icon}}"></span>' + - '</button>' + - - // Dropdown Group - '<div class="btn-group" ng-if="menu.list">' + - '<button class="btn btn-box-tool dropdown-toggle" data-toggle="dropdown"' + - ' uib-tooltip="{{menu.title}}" tooltip-enable="menu.title" tooltip-append-to-body="true">' + - '<span class="fa fa-{{menu.icon}}"></span>' + - '</button>' + - '<ul class="dropdown-menu left" role="menu">' + - '<li ng-repeat="item in menu.list track by $index" ng-class="{danger: item.danger, disabled: item.disabled}">' + - '<a ng-click="!item.disabled && item.func($event)" ng-class="{strong: item.strong}">' + - '<span class="fa fa-{{item.icon}}"></span> {{item.title}}' + - '</a>' + - '</li>' + - '</ul>' + - '</div>' + - '</div>' + - '</div>' + - - '<ul uie-sortable sortable-enabled="!!sortableModel" sortable-update-func="tabSwitchUpdate" ng-model="paneList" class="nav nav-tabs" ng-class="{\'pull-right\': title}">' + - // Tabs - '<li ng-repeat="pane in getPaneList() track by $index" ng-class="{active: selectedPane === pane}">' + - '<a ng-click="setSelect(pane);">{{pane.title}}</a>' + - '</li>' + - - // Title - '<li class="pull-left header" ng-if="title">' + - '<i class="fa fa-{{icon}}" ng-if="icon"></i> {{title}}' + - '</li>' + - - '</ul>' + - '<div class="box-body" ng-transclude="header" ng-show="paneList.length && hasHeader()"></div>' + - '<div class="tab-content" ng-transclude="pane"></div>' + - '<div class="box-footer" ng-transclude="footer" ng-show="paneList.length && hasFooter()"></div>' + - '</div>' - }; -}).directive('pane', function() { - 'use strict'; - - return { - require : '^tabs', - restrict : 'AE', - transclude : true, - scope : { - title : '@', - data: '=?data', - menuList: "=?menu" - }, - link : function(scope, element, attrs, tabsController) { - tabsController.addPane(scope); - scope.$on('$destroy', function() { - tabsController.deletePane(scope); - }); - }, - template : '<div class="tab-pane fade" ng-class="{active: active, in: in}" ng-transclude></div>', - replace : true - }; -}).directive('footer', function() { - 'use strict'; - - return { - require : '^tabs', - restrict : 'AE', - transclude : true, - scope : {}, - controller: function($scope, $element) { - }, - template : '<div ng-transclude></div>', - replace : true - }; -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/ctrl/authController.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/ctrl/authController.js b/eagle-webservice/src/main/webapp/app/public/js/ctrl/authController.js deleted file mode 100644 index dbdb704..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/ctrl/authController.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function() { - 'use strict'; - - var eagleControllers = angular.module('eagleControllers'); - // ============================================================= - // = User Profile List = - // ============================================================= - eagleControllers.controller('authLoginCtrl', function (PageConfig, Site, Authorization, Application, $scope) { - PageConfig.hideSidebar = true; - PageConfig.hideApplication = true; - PageConfig.hideSite = true; - PageConfig.hideUser = true; - - $scope.username = ""; - $scope.password = ""; - $scope.lock = false; - $scope.loginSuccess = false; - - if(localStorage) { - $scope.rememberUser = localStorage.getItem("rememberUser") !== "false"; - - if($scope.rememberUser) { - $scope.username = localStorage.getItem("username"); - $scope.password = localStorage.getItem("password"); - } - } - - // UI - setTimeout(function () { - $("#username").focus(); - }); - - // Login - $scope.login = function (event, forceSubmit) { - if ($scope.lock) return; - - if (event.which === 13 || forceSubmit) { - $scope.lock = true; - - Authorization.login($scope.username, $scope.password).then(function (success) { - if (success) { - // Check user remember - localStorage.setItem("rememberUser", $scope.rememberUser); - if($scope.rememberUser) { - localStorage.setItem("username", $scope.username); - localStorage.setItem("password", $scope.password); - } else { - localStorage.removeItem("username"); - localStorage.removeItem("password"); - } - - // Initial environment - $scope.loginSuccess = true; - console.log("[Login] Login success! Reload data..."); - Authorization.reload().then(function() {}, function() {console.warn("Site error!");}); - Application.reload().then(function() {}, function() {console.warn("Site error!");}); - Site.reload().then(function() {}, function() {console.warn("Site error!");}); - Authorization.path(true); - } else { - $.dialog({ - title: "OPS", - content: "User name or password not correct." - }).on("hidden.bs.modal", function () { - $("#username").focus(); - }); - } - }).finally(function () { - $scope.lock = false; - }); - } - }; - }); -})(); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/ctrl/configurationController.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/ctrl/configurationController.js b/eagle-webservice/src/main/webapp/app/public/js/ctrl/configurationController.js deleted file mode 100644 index e59198d..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/ctrl/configurationController.js +++ /dev/null @@ -1,377 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function() { - 'use strict'; - - var eagleControllers = angular.module('eagleControllers'); - - // ============================================================= - // = Function = - // ============================================================= - function watchEdit($scope, key) { - $scope.changed = false; - setTimeout(function() { - var _func = $scope.$watch(key, function(newValue, oldValue) { - if(angular.equals(newValue, oldValue)) return; - $scope.changed = true; - _func(); - }, true); - }, 100); - } - - // ============================================================= - // = Configuration = - // ============================================================= - // ========================== Feature ========================== - eagleControllers.controller('configFeatureCtrl', function ($scope, PageConfig, Application, Entities, UI) { - PageConfig.hideApplication = true; - PageConfig.hideSite = true; - $scope._pageLock = false; - - PageConfig - .addNavPath("Home", "/") - .addNavPath("Feature Config"); - - // ================== Feature ================== - // Current feature - $scope.feature = Application.featureList[0]; - $scope.setFeature = function (feature) { - $scope.feature = feature; - }; - - // Feature list - $scope.features = {}; - $.each(Application.featureList, function(i, feature) { - $scope.features[feature.tags.feature] = $.extend({}, feature, true); - }); - - // Create feature - $scope.newFeature = function() { - UI.createConfirm("Feature", {}, [ - {name: "Feature Name", field: "name"} - ], function(entity) { - if(entity.name && $.map($scope.features, function(feature, name) { - return name.toUpperCase() === entity.name.toUpperCase() ? true : null; - }).length) { - return "Feature name conflict!"; - } - }).then(null, null, function(holder) { - Entities.updateEntity( - "FeatureDescService", - {tags: {feature: holder.entity.name}}, - {timestamp: false} - )._promise.then(function() { - holder.closeFunc(); - location.reload(); - }); - }); - }; - - // Delete feature - $scope.deleteFeature = function(feature) { - UI.deleteConfirm(feature.tags.feature).then(null, null, function(holder) { - Entities.delete("FeatureDescService", {feature: feature.tags.feature})._promise.then(function() { - holder.closeFunc(); - location.reload(); - }); - }); - }; - - // Save feature - $scope.saveAll = function() { - $scope._pageLock = true; - var _list = $.map($scope.features, function(feature) { - return feature; - }); - Entities.updateEntity("FeatureDescService", _list, {timestamp: false})._promise.success(function() { - location.reload(); - }).finally(function() { - $scope._pageLock = false; - }); - }; - - // Watch config update - watchEdit($scope, "features"); - }); - - // ======================== Application ======================== - eagleControllers.controller('configApplicationCtrl', function ($scope, $timeout, PageConfig, Application, Entities, Feature, UI) { - PageConfig.hideApplication = true; - PageConfig.hideSite = true; - $scope._pageLock = false; - - PageConfig - .addNavPath("Home", "/") - .addNavPath("Application Config"); - - // ================ Application ================ - // Current application - $scope.application = Application.list[0]; - $scope.setApplication = function (application) { - $scope.application = application; - }; - - // Application list - $scope.applications = {}; - $.each(Application.list, function(i, application) { - var _application = $scope.applications[application.tags.application] = $.extend({}, application, {features: application.features.slice()}, true); - _application.optionalFeatures = $.map(Application.featureList, function(feature) { - var featurePlugin = Feature.get(feature.tags.feature); - if(featurePlugin.config.global) return null; - if(!common.array.find(feature.tags.feature, _application.features)) { - return feature.tags.feature; - } - }); - }); - - // Create application - $scope.newApplication = function() { - UI.createConfirm("Application", {}, [ - {name: "Application Name", field: "name"} - ], function(entity) { - if(entity.name && $.map($scope.applications, function(application, name) { - return name.toUpperCase() === entity.name.toUpperCase() ? true : null; - }).length) { - return "Application name conflict!"; - } - }).then(null, null, function(holder) { - Entities.updateEntity( - "ApplicationDescService", - {tags: {application: holder.entity.name}}, - {timestamp: false} - )._promise.then(function() { - holder.closeFunc(); - location.reload(); - }); - }); - }; - - // Delete application - $scope.deleteApplication = function(application) { - UI.deleteConfirm(application.tags.application).then(null, null, function(holder) { - Entities.delete("ApplicationDescService", {application: application.tags.application})._promise.then(function() { - holder.closeFunc(); - location.reload(); - }); - }); - }; - - // ================= Function ================== - // Configuration check - $scope.configCheck = function(config) { - if(config && !common.parseJSON(config, false)) { - return "Invalid JSON format"; - } - }; - - // Feature - $scope._feature = ""; - function highlightFeature(feature) { - $scope._feature = feature; - - $timeout(function() { - $scope._feature = ""; - }, 100); - } - - $scope.addFeature = function(feature, application) { - application.features.push(feature); - common.array.remove(feature, application.optionalFeatures); - highlightFeature(feature); - $scope.changed = true; - }; - - $scope.removeFeature = function(feature, application) { - application.optionalFeatures.push(feature); - common.array.remove(feature, application.features); - $scope.changed = true; - }; - - $scope.moveFeature = function(feature, list, offset) { - common.array.moveOffset(feature, list, offset); - highlightFeature(feature); - $scope.changed = true; - }; - - // Save feature - $scope.saveAll = function() { - $scope._pageLock = true; - - var _list = $.map($scope.applications, function(application) { - return application; - }); - Entities.updateEntity("ApplicationDescService", _list, {timestamp: false})._promise.success(function() { - location.reload(); - }).finally(function() { - $scope._pageLock = false; - }); - }; - - // Watch config update - watchEdit($scope, "applications"); - }); - - // ============================ Site =========================== - eagleControllers.controller('configSiteCtrl', function ($scope, $timeout, PageConfig, Site, Application, Entities, UI) { - PageConfig.hideApplication = true; - PageConfig.hideSite = true; - $scope._pageLock = false; - - PageConfig - .addNavPath("Home", "/") - .addNavPath("Site Config"); - - // =================== Site ==================== - // Current site - $scope.site = Site.list[0]; - $scope.setSite = function (site) { - $scope.site = site; - }; - - - // Site list - $scope.sites = {}; - $.each(Site.list, function(i, site) { - var _site = $scope.sites[site.tags.site] = $.extend({}, site, true); - var _applications = []; - var _optionalApplications = []; - - Object.defineProperties(_site, { - applications: { - get: function() {return _applications;} - }, - optionalApplications: { - get: function() {return _optionalApplications;} - } - }); - - $.each(Application.list, function(i, application) { - var _application = site.applicationList.set[application.tags.application]; - if(_application && _application.enabled) { - _site.applications.push(_application); - } else { - if(_application) { - _site.optionalApplications.push(_application); - } else { - _site.optionalApplications.push({ - prefix: "eagleSiteApplication", - config: "", - enabled: false, - tags: { - application: application.tags.application, - site: site.tags.site - } - }); - } - } - }); - }); - - // Create site - $scope.newSite = function() { - UI.createConfirm("Site", {}, [ - {name: "Site Name", field: "name"} - ], function(entity) { - if(entity.name && $.map($scope.sites, function(site, name) { - return name.toUpperCase() === entity.name.toUpperCase() ? true : null; - }).length) { - return "Site name conflict!"; - } - }).then(null, null, function(holder) { - Entities.updateEntity( - "SiteDescService", - {enabled: true, tags: {site: holder.entity.name}}, - {timestamp: false} - )._promise.then(function() { - holder.closeFunc(); - location.reload(); - }); - }); - }; - - // Delete site - $scope.deleteSite = function(site) { - UI.deleteConfirm(site.tags.site).then(null, null, function(holder) { - Entities.delete("SiteDescService", {site: site.tags.site})._promise.then(function() { - holder.closeFunc(); - location.reload(); - }); - }); - }; - - // ================= Function ================== - $scope._application = ""; - function highlightApplication(application) { - $scope._application = application; - - $timeout(function() { - $scope._application = ""; - }, 100); - } - - $scope.addApplication = function(application, site) { - site.applications.push(application); - common.array.remove(application, site.optionalApplications); - application.enabled = true; - highlightApplication(application); - $scope.changed = true; - }; - - $scope.removeApplication = function(application, site) { - site.optionalApplications.push(application); - common.array.remove(application, site.applications); - application.enabled = false; - $scope.changed = true; - }; - - $scope.setApplication = function(application) { - var _oriConfig = application.config; - UI.updateConfirm("Application", {config: _oriConfig}, [ - {name: "Configuration", field: "config", type: "blob"} - ], function(entity) { - if(entity.config !== "" && !common.properties.check(entity.config)) { - return "Invalid Properties format"; - } - }).then(null, null, function(holder) { - application.config = holder.entity.config; - holder.closeFunc(); - if(_oriConfig !== application.config) $scope.changed = true; - }); - }; - - // Save feature - $scope.saveAll = function() { - $scope._pageLock = true; - - var _list = $.map($scope.sites, function(site) { - var _clone = $.extend({applications: site.applications.concat(site.optionalApplications)}, site); - return _clone; - }); - - Entities.updateEntity("SiteDescService", _list, {timestamp: false, hook: true})._promise.success(function() { - location.reload(); - }).finally(function() { - $scope._pageLock = false; - }); - }; - - // Watch config update - watchEdit($scope, "sites"); - }); -})(); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/ctrl/main.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/ctrl/main.js b/eagle-webservice/src/main/webapp/app/public/js/ctrl/main.js deleted file mode 100644 index 5064a1d..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/ctrl/main.js +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function() { - 'use strict'; - - var eagleControllers = angular.module('eagleControllers', ['ui.bootstrap', 'eagle.components', 'eagle.service']); - - // =========================================================== - // = Controller = - // =========================================================== - eagleControllers.controller('landingCtrl', function($scope, $wrapState, Site, Application, PageConfig, FeaturePageConfig, Feature) { - var _app = Application.current(); - - PageConfig.pageTitle = _app ? _app.displayName : 'OPS'; - PageConfig.pageSubTitle = Site.current().tags.site; - - $scope.Application = Application; - - var _navItemList = FeaturePageConfig.pageList; - if(_navItemList.length) { - console.log("[Landing] Auto redirect.", FeaturePageConfig); - var _match = _navItemList[0].url.match(/#\/([^\/]+)\/([^\/]+)/); - Feature.go(_match[1], _match[2]); - } - }); -})(); http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/afb89794/eagle-webservice/src/main/webapp/app/public/js/srv/applicationSrv.js ---------------------------------------------------------------------- diff --git a/eagle-webservice/src/main/webapp/app/public/js/srv/applicationSrv.js b/eagle-webservice/src/main/webapp/app/public/js/srv/applicationSrv.js deleted file mode 100644 index 187adb4..0000000 --- a/eagle-webservice/src/main/webapp/app/public/js/srv/applicationSrv.js +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -(function() { - 'use strict'; - - var serviceModule = angular.module('eagle.service'); - var eagleApp = angular.module('eagleApp'); - - serviceModule.service('Application', function($q, $location, $wrapState, Entities) { - var Application = {}; - var _current; - var _featureCache = {};// After loading feature will be in cache. Which will not load twice. - var _deferred; - - Application.list = []; - Application.list.set = {}; - Application.featureList = []; - Application.featureList.set = {}; - - // Set current application - Application.current = function(app, reload) { - if(arguments.length && _current !== app) { - var _prev = _current; - _current = app; - - if(sessionStorage && _current) { - sessionStorage.setItem("application", _current.tags.application); - } - - if(_prev && reload !== false) { - console.log("[Application] Switch. Redirect to landing page."); - $wrapState.go('landing', true); - } - } - return _current; - }; - Application.find = function(appName) { - return common.array.find(appName, Application.list, "tags.application"); - }; - - Application.reload = function() { - _deferred = $q.defer(); - - if(Application.list && Application.list._promise) Application.list._promise.abort(); - if(Application.featureList && Application.featureList._promise) Application.featureList._promise.abort(); - - Application.list = Entities.queryEntities("ApplicationDescService", ''); - Application.list.set = {}; - Application.featureList = Entities.queryEntities("FeatureDescService", ''); - Application.featureList.set = {}; - - Application.featureList._promise.then(function() { - var _promiseList; - // Load feature script - _promiseList = $.map(Application.featureList, function(feature) { - var _ajax_deferred, _script; - if(_featureCache[feature.tags.feature]) return; - - _featureCache[feature.tags.feature] = true; - _ajax_deferred = $q.defer(); - _script = document.createElement('script'); - _script.type = 'text/javascript'; - _script.src = "public/feature/" + feature.tags.feature + "/controller.js?_=" + eagleApp._TRS(); - document.head.appendChild(_script); - _script.onload = function() { - feature._loaded = true; - _ajax_deferred.resolve(); - }; - _script.onerror = function() { - feature._loaded = false; - _featureCache[feature.tags.feature] = false; - _ajax_deferred.reject(); - }; - return _ajax_deferred.promise; - }); - - // Merge application & feature - Application.list._promise.then(function() { - // Fill feature set - $.each(Application.featureList, function(i, feature) { - Application.featureList.set[feature.tags.feature] = feature; - }); - - // Fill application set - $.each(Application.list, function(i, application) { - Application.list.set[application.tags.application] = application; - application.features = application.features || []; - var _configObj = common.parseJSON(application.config, {}); - var _appFeatureList = $.map(application.features, function(featureName) { - var _feature = Application.featureList.set[featureName]; - if(!_feature) { - console.warn("[Application] Feature not mapping:", application.tags.application, "-", featureName); - } else { - return _feature; - } - }); - - // Find feature - _appFeatureList.find = function(featureName) { - return common.array.find(featureName, _appFeatureList, "tags.feature"); - }; - - Object.defineProperties(application, { - featureList: { - get: function () { - return _appFeatureList; - } - }, - // Get format group name. Will mark as 'Others' if no group defined - group: { - get: function () { - return this.groupName || "Others"; - } - }, - configObj: { - get: function() { - return _configObj; - } - }, - displayName: { - get: function() { - return this.alias || this.tags.application; - } - } - }); - }); - - // Set current application - if(!Application.current() && sessionStorage && Application.find(sessionStorage.getItem("application"))) { - Application.current(Application.find(sessionStorage.getItem("application"))); - } - }); - - // Process all promise - $q.all(_promiseList.concat(Application.list._promise)).finally(function() { - _deferred.resolve(Application); - }); - }, function() { - _deferred.reject(Application); - }); - - return _deferred.promise; - }; - - Application._promise = function() { - if(!_deferred) { - Application.reload(); - } - return _deferred.promise; - }; - - return Application; - }); -})(); \ No newline at end of file