blob: f1491f49fdf44892d93515f4d95552eef73b8ebc [file] [log] [blame]
/*
* Copyright 2015 Open Networking Laboratory
*
* Licensed 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.
*/
/*
ONOS GUI -- SVG mouse over d3 exercise module
*/
(function () {
'use strict';
// injected references
var $log, fs;
// constants
var btnWidth = 175,
btnHeight = 50,
hoverZone = 60,
pageMargin = 20;
// svg elements
var g;
// other variables
var winWidth, winHeight,
mouse;
// ====================================================
// helper functions
function centeredOnWindow(axis, dim) {
return (axis / 2) - (dim / 2);
}
function randomPos() {
return {
x: Math.random() * winWidth,
y: Math.random() * winHeight
}
}
function getPosition() {
var x = randomPos().x + pageMargin,
y = randomPos().y + pageMargin,
x1 = x + btnWidth,
y1 = y + btnHeight,
wwMargin = winWidth - pageMargin,
whMargin = winHeight - pageMargin;
while (x1 >= wwMargin || y1 >= whMargin) {
x = randomPos().x + pageMargin;
y = randomPos().y + pageMargin;
x1 = x + btnWidth;
y1 = y + btnHeight;
}
return {
x: x,
y: y
}
}
function gTranslate(x, y) {
return 'translate(' + x + ',' + y + ')';
}
function moveButton() {
var pos = getPosition(),
x = pos.x,
y = pos.y;
g.transition()
.duration(400)
.ease('cubic-out')
.attr('transform', gTranslate(x, y));
}
angular.module('svgExercise', ['onosUtil'])
.controller('svgExCtrl', ['$log', function (_$log_) {
$log = _$log_;
}])
.directive('improvePerformance', ['FnService', function (_fs_) {
fs = _fs_;
return {
restrict: 'E',
link: function (scope, elem, attrs) {
winWidth = fs.windowSize().width;
winHeight = fs.windowSize().height;
var svg = d3.select(elem[0])
.append('svg')
.attr({
width: winWidth + 'px',
height: winHeight + 'px'
});
g = svg.append('g')
.attr('transform',
gTranslate(centeredOnWindow(winWidth, btnWidth),
centeredOnWindow(winHeight, btnHeight)));
var button = g.append('rect')
.attr({
width: btnWidth + 'px',
height: btnHeight + 'px',
rx: '10px',
'class': 'button'
}),
text = g.append('text')
.style('text-anchor', 'middle')
.text('Click for better performance.')
.attr({
x: btnWidth / 2,
y: (btnHeight / 2) + 5
}),
rect = g.append('rect')
.attr({
fill: 'none',
'pointer-events': 'all',
width: btnWidth + hoverZone + 'px',
height: btnHeight + hoverZone + 'px',
x: -(hoverZone / 2),
y: -(hoverZone / 2)
});
g.on('mousemove', function () {
mouse = d3.mouse(this);
moveButton();
});
}
};
}]);
}());