Anchor directive functionality
gitea/salix/pipeline/head There was a failure building this commit
Details
gitea/salix/pipeline/head There was a failure building this commit
Details
This commit is contained in:
parent
6412f29685
commit
cf8ed6f8d3
|
@ -7,26 +7,63 @@ import ngModule from '../module';
|
||||||
* @param {Object} $state
|
* @param {Object} $state
|
||||||
* @return {Object} The directive
|
* @return {Object} The directive
|
||||||
*/
|
*/
|
||||||
export function directive($parse, $state) {
|
export function directive($state, $window) {
|
||||||
|
let ctrlPressed = false;
|
||||||
|
|
||||||
|
$window.addEventListener('keydown', event => {
|
||||||
|
if (event.key == 'Control')
|
||||||
|
ctrlPressed = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
$window.addEventListener('keyup', event => {
|
||||||
|
if (event.key == 'Control')
|
||||||
|
ctrlPressed = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
function changeState(event, state) {
|
||||||
|
const params = stringifyParams(state);
|
||||||
|
$state.go(state.url, params);
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
|
function newTab(event, state) {
|
||||||
|
const params = stringifyParams(state);
|
||||||
|
const url = $state.href(state.url, params);
|
||||||
|
$window.open(url);
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
}
|
||||||
|
|
||||||
|
function stringifyParams(state) {
|
||||||
|
const params = Object.assign({}, state.params);
|
||||||
|
for (let param in params)
|
||||||
|
params[param] = JSON.stringify(params[param]);
|
||||||
|
|
||||||
|
return params;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
restrict: 'A',
|
restrict: 'A',
|
||||||
link: function($scope, $element, $attrs) {
|
link: function($scope, $element, $attrs) {
|
||||||
const state = $scope.$eval($attrs.vnAnchor);
|
const state = $scope.$eval($attrs.vnAnchor);
|
||||||
// const element = $element[0];
|
|
||||||
$element.on('click', event => {
|
$element.on('click', event => {
|
||||||
const params = [];
|
if (ctrlPressed)
|
||||||
|
newTab(event, state);
|
||||||
|
else
|
||||||
|
changeState(event, state);
|
||||||
|
});
|
||||||
|
|
||||||
for (let param in state.params)
|
$element.on('mousedown', event => {
|
||||||
console.log(param);
|
if (event.button == 1)
|
||||||
|
newTab(event, state);
|
||||||
// $state.go(state.url, state.params);
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
directive.$inject = ['$parse', '$state'];
|
directive.$inject = ['$state', '$window'];
|
||||||
|
|
||||||
ngModule.directive('vnAnchor', directive);
|
ngModule.directive('vnAnchor', directive);
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
fdescribe('Directive vnAnchor', () => {
|
||||||
|
let $scope;
|
||||||
|
let $element;
|
||||||
|
let compile;
|
||||||
|
|
||||||
|
beforeEach(ngModule('vnCore'));
|
||||||
|
|
||||||
|
compile = _element => {
|
||||||
|
inject(($compile, $rootScope) => {
|
||||||
|
$scope = $rootScope.$new();
|
||||||
|
$element = angular.element(_element);
|
||||||
|
$compile($element)($scope);
|
||||||
|
$scope.$digest();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
it(`should throw an error when there's no id defined`, () => {
|
||||||
|
let html = `<vn-icon-button vn-id=""></vn-icon-button>`;
|
||||||
|
compile(html);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue