master
Harald Wolff 2019-04-27 16:41:03 +02:00
parent 632112ba87
commit ca10e62a53
5 changed files with 122 additions and 63 deletions

View File

@ -12,6 +12,7 @@
<script type="text/javascript" src="/dist/jquery.min.js"></script>
<script type="text/javascript" src="/dist/jquery-ui.min.js"></script>
<script type="text/javascript" src="/js/jquery.mask.min.js"></script>
<script type="text/javascript" src="/js/chosen.jquery.min.js"></script>
<script type="text/javascript" src="/js/popper.min.js"></script>
<script type="text/javascript" src="/js/bootstrap.bundle.min.js"></script>

19
www/js/jquery.mask.min.js vendored 100644
View File

@ -0,0 +1,19 @@
// jQuery Mask Plugin v1.14.15
// github.com/igorescobar/jQuery-Mask-Plugin
var $jscomp={scope:{},findInternal:function(a,l,d){a instanceof String&&(a=String(a));for(var p=a.length,h=0;h<p;h++){var b=a[h];if(l.call(d,b,h,a))return{i:h,v:b}}return{i:-1,v:void 0}}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(a,l,d){if(d.get||d.set)throw new TypeError("ES3 does not support getters and setters.");a!=Array.prototype&&a!=Object.prototype&&(a[l]=d.value)};
$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);$jscomp.polyfill=function(a,l,d,p){if(l){d=$jscomp.global;a=a.split(".");for(p=0;p<a.length-1;p++){var h=a[p];h in d||(d[h]={});d=d[h]}a=a[a.length-1];p=d[a];l=l(p);l!=p&&null!=l&&$jscomp.defineProperty(d,a,{configurable:!0,writable:!0,value:l})}};
$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,d){return $jscomp.findInternal(this,a,d).v}},"es6-impl","es3");
(function(a,l,d){"function"===typeof define&&define.amd?define(["jquery"],a):"object"===typeof exports?module.exports=a(require("jquery")):a(l||d)})(function(a){var l=function(b,e,f){var c={invalid:[],getCaret:function(){try{var a,r=0,g=b.get(0),e=document.selection,f=g.selectionStart;if(e&&-1===navigator.appVersion.indexOf("MSIE 10"))a=e.createRange(),a.moveStart("character",-c.val().length),r=a.text.length;else if(f||"0"===f)r=f;return r}catch(C){}},setCaret:function(a){try{if(b.is(":focus")){var c,
g=b.get(0);g.setSelectionRange?g.setSelectionRange(a,a):(c=g.createTextRange(),c.collapse(!0),c.moveEnd("character",a),c.moveStart("character",a),c.select())}}catch(B){}},events:function(){b.on("keydown.mask",function(a){b.data("mask-keycode",a.keyCode||a.which);b.data("mask-previus-value",b.val());b.data("mask-previus-caret-pos",c.getCaret());c.maskDigitPosMapOld=c.maskDigitPosMap}).on(a.jMaskGlobals.useInput?"input.mask":"keyup.mask",c.behaviour).on("paste.mask drop.mask",function(){setTimeout(function(){b.keydown().keyup()},
100)}).on("change.mask",function(){b.data("changed",!0)}).on("blur.mask",function(){d===c.val()||b.data("changed")||b.trigger("change");b.data("changed",!1)}).on("blur.mask",function(){d=c.val()}).on("focus.mask",function(b){!0===f.selectOnFocus&&a(b.target).select()}).on("focusout.mask",function(){f.clearIfNotMatch&&!h.test(c.val())&&c.val("")})},getRegexMask:function(){for(var a=[],b,c,f,n,d=0;d<e.length;d++)(b=m.translation[e.charAt(d)])?(c=b.pattern.toString().replace(/.{1}$|^.{1}/g,""),f=b.optional,
(b=b.recursive)?(a.push(e.charAt(d)),n={digit:e.charAt(d),pattern:c}):a.push(f||b?c+"?":c)):a.push(e.charAt(d).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"));a=a.join("");n&&(a=a.replace(new RegExp("("+n.digit+"(.*"+n.digit+")?)"),"($1)?").replace(new RegExp(n.digit,"g"),n.pattern));return new RegExp(a)},destroyEvents:function(){b.off("input keydown keyup paste drop blur focusout ".split(" ").join(".mask "))},val:function(a){var c=b.is("input")?"val":"text";if(0<arguments.length){if(b[c]()!==a)b[c](a);
c=b}else c=b[c]();return c},calculateCaretPosition:function(){var a=b.data("mask-previus-value")||"",e=c.getMasked(),g=c.getCaret();if(a!==e){var f=b.data("mask-previus-caret-pos")||0,e=e.length,d=a.length,m=a=0,h=0,l=0,k;for(k=g;k<e&&c.maskDigitPosMap[k];k++)m++;for(k=g-1;0<=k&&c.maskDigitPosMap[k];k--)a++;for(k=g-1;0<=k;k--)c.maskDigitPosMap[k]&&h++;for(k=f-1;0<=k;k--)c.maskDigitPosMapOld[k]&&l++;g>d?g=10*e:f>=g&&f!==d?c.maskDigitPosMapOld[g]||(f=g,g=g-(l-h)-a,c.maskDigitPosMap[g]&&(g=f)):g>f&&
(g=g+(h-l)+m)}return g},behaviour:function(f){f=f||window.event;c.invalid=[];var e=b.data("mask-keycode");if(-1===a.inArray(e,m.byPassKeys)){var e=c.getMasked(),g=c.getCaret();setTimeout(function(){c.setCaret(c.calculateCaretPosition())},a.jMaskGlobals.keyStrokeCompensation);c.val(e);c.setCaret(g);return c.callbacks(f)}},getMasked:function(a,b){var g=[],d=void 0===b?c.val():b+"",n=0,h=e.length,q=0,l=d.length,k=1,r="push",p=-1,t=0,y=[],v,z;f.reverse?(r="unshift",k=-1,v=0,n=h-1,q=l-1,z=function(){return-1<
n&&-1<q}):(v=h-1,z=function(){return n<h&&q<l});for(var A;z();){var x=e.charAt(n),w=d.charAt(q),u=m.translation[x];if(u)w.match(u.pattern)?(g[r](w),u.recursive&&(-1===p?p=n:n===v&&n!==p&&(n=p-k),v===p&&(n-=k)),n+=k):w===A?(t--,A=void 0):u.optional?(n+=k,q-=k):u.fallback?(g[r](u.fallback),n+=k,q-=k):c.invalid.push({p:q,v:w,e:u.pattern}),q+=k;else{if(!a)g[r](x);w===x?(y.push(q),q+=k):(A=x,y.push(q+t),t++);n+=k}}d=e.charAt(v);h!==l+1||m.translation[d]||g.push(d);g=g.join("");c.mapMaskdigitPositions(g,
y,l);return g},mapMaskdigitPositions:function(a,b,e){a=f.reverse?a.length-e:0;c.maskDigitPosMap={};for(e=0;e<b.length;e++)c.maskDigitPosMap[b[e]+a]=1},callbacks:function(a){var h=c.val(),g=h!==d,m=[h,a,b,f],q=function(a,b,c){"function"===typeof f[a]&&b&&f[a].apply(this,c)};q("onChange",!0===g,m);q("onKeyPress",!0===g,m);q("onComplete",h.length===e.length,m);q("onInvalid",0<c.invalid.length,[h,a,b,c.invalid,f])}};b=a(b);var m=this,d=c.val(),h;e="function"===typeof e?e(c.val(),void 0,b,f):e;m.mask=
e;m.options=f;m.remove=function(){var a=c.getCaret();m.options.placeholder&&b.removeAttr("placeholder");b.data("mask-maxlength")&&b.removeAttr("maxlength");c.destroyEvents();c.val(m.getCleanVal());c.setCaret(a);return b};m.getCleanVal=function(){return c.getMasked(!0)};m.getMaskedVal=function(a){return c.getMasked(!1,a)};m.init=function(d){d=d||!1;f=f||{};m.clearIfNotMatch=a.jMaskGlobals.clearIfNotMatch;m.byPassKeys=a.jMaskGlobals.byPassKeys;m.translation=a.extend({},a.jMaskGlobals.translation,f.translation);
m=a.extend(!0,{},m,f);h=c.getRegexMask();if(d)c.events(),c.val(c.getMasked());else{f.placeholder&&b.attr("placeholder",f.placeholder);b.data("mask")&&b.attr("autocomplete","off");d=0;for(var l=!0;d<e.length;d++){var g=m.translation[e.charAt(d)];if(g&&g.recursive){l=!1;break}}l&&b.attr("maxlength",e.length).data("mask-maxlength",!0);c.destroyEvents();c.events();d=c.getCaret();c.val(c.getMasked());c.setCaret(d)}};m.init(!b.is("input"))};a.maskWatchers={};var d=function(){var b=a(this),e={},f=b.attr("data-mask");
b.attr("data-mask-reverse")&&(e.reverse=!0);b.attr("data-mask-clearifnotmatch")&&(e.clearIfNotMatch=!0);"true"===b.attr("data-mask-selectonfocus")&&(e.selectOnFocus=!0);if(p(b,f,e))return b.data("mask",new l(this,f,e))},p=function(b,e,f){f=f||{};var c=a(b).data("mask"),d=JSON.stringify;b=a(b).val()||a(b).text();try{return"function"===typeof e&&(e=e(b)),"object"!==typeof c||d(c.options)!==d(f)||c.mask!==e}catch(t){}},h=function(a){var b=document.createElement("div"),d;a="on"+a;d=a in b;d||(b.setAttribute(a,
"return;"),d="function"===typeof b[a]);return d};a.fn.mask=function(b,d){d=d||{};var e=this.selector,c=a.jMaskGlobals,h=c.watchInterval,c=d.watchInputs||c.watchInputs,t=function(){if(p(this,b,d))return a(this).data("mask",new l(this,b,d))};a(this).each(t);e&&""!==e&&c&&(clearInterval(a.maskWatchers[e]),a.maskWatchers[e]=setInterval(function(){a(document).find(e).each(t)},h));return this};a.fn.masked=function(a){return this.data("mask").getMaskedVal(a)};a.fn.unmask=function(){clearInterval(a.maskWatchers[this.selector]);
delete a.maskWatchers[this.selector];return this.each(function(){var b=a(this).data("mask");b&&b.remove().removeData("mask")})};a.fn.cleanVal=function(){return this.data("mask").getCleanVal()};a.applyDataMask=function(b){b=b||a.jMaskGlobals.maskElements;(b instanceof a?b:a(b)).filter(a.jMaskGlobals.dataMaskAttr).each(d)};h={maskElements:"input,td,span,div",dataMaskAttr:"*[data-mask]",dataMask:!0,watchInterval:300,watchInputs:!0,keyStrokeCompensation:10,useInput:!/Chrome\/[2-4][0-9]|SamsungBrowser/.test(window.navigator.userAgent)&&
h("input"),watchDataMask:!1,byPassKeys:[9,16,17,18,36,37,38,39,40,91],translation:{0:{pattern:/\d/},9:{pattern:/\d/,optional:!0},"#":{pattern:/\d/,recursive:!0},A:{pattern:/[a-zA-Z0-9]/},S:{pattern:/[a-zA-Z]/}}};a.jMaskGlobals=a.jMaskGlobals||{};h=a.jMaskGlobals=a.extend(!0,{},h,a.jMaskGlobals);h.dataMask&&a.applyDataMask();setInterval(function(){a.jMaskGlobals.watchDataMask&&a.applyDataMask()},h.watchInterval)},window.jQuery,window.Zepto);

View File

@ -4,20 +4,70 @@
$.extend($, { sky: {} } );
$.extend($.sky, { controls: {} });
function IPPool_create(){
$.widget( "sky.IPPool", {
options: {
url: "/DHCP/collections/IPPool",
},
}
_create: function(){
this.refresh();
},
refresh: function(){
var element = this.element;
$.ajax( this.options.url, {
error: function(x,status,error){
alert(`sky.IPPool: Error fetching list of IPPools from Server ${status} ${error}`);
},
success: function(data,status,x){
data.forEach( function(e){
$("<option></option>")
.attr("value", e.Name)
.text( e.Name )
.appendTo( element );
} );
},
});
},
_destroy: function(){
},
});
$.widget( "sky.IPv4", {
options: {
mask: '099.099.099.099',
placeholder: '000.000.000.000',
},
_create: function(){
this.element.mask( this.options.mask, {
placeholder: this.options.placeholder,
} );
},
value: function(v){
if (arguments.length == 0){
return this.element.val();
}
this.element.val(v);
},
_destroy: function(){
},
});
$.fn.IPPool = function( opts ){
alert(this);
var select = this.find("select")[0];
$.fn.___IPPool = function( opts ){
var select = this.filter("select")[0];
if (!select)
throw "IPPool needs an <select> element to be instantiated on";
alert(select);
return $(select);
}
@ -26,21 +76,18 @@
var ctrl = this;
var pools = skyapi().getJson("/DHCP/collections/IPPool");
pools.forEach( function(e){
$("<option></option>")
.attr("value", e.Name)
.text( e.Name )
.appendTo( ctrl );
} );
ctrl.val = function(v){ alert(v); }
return ctrl;
});
}
$.sky.controls.IPPool = function(type,key){
return $("<select></select>").IPPool().attr( "id", key );
};
$.sky.controls.IPPool = function(type,key){
return $("<select></select>").attr( "id", key ).IPPool();
};
$.sky.controls.IPv4 = function(type,key){
return $("<input></input>").attr( "id", key ).IPv4();
};

View File

@ -3,47 +3,20 @@
function editIPPool(ippool, editable)
{
var content = $(`<div>
<fieldset>
<label>Bezeichnung</label>
<input type="text" id="Name">
<label>Erste IP</label>
<input type="text" id="FirstIP">
<label>Letzte IP</label>
<input type="text" id="LastIP">
<label>Standard Gültigkeit</label>
<input type="text" id="DefaultLeaseTime">
</fieldset>
</div>`);
$("#FirstIP", content).ipAddress();
$("#LastIP", content).ipAddress();
skyapi().getJson( "/DHCP/collections/IPPool/" + ippool, function(ippool){
PopulateForm( ippool, {
top: content,
});
content.dialog( "open" );
} );
content.dialog({
modal: true,
closeOnEscape: true,
draggable: false,
title: "IP Pool",
minWidth: 600,
autoOpen: false,
buttons: [
{
text: "abbrechen",
click: function(){ $(this).dialog( "close" ); },
skyapi().getJson( "/DHCP/collections/IPPool/" + ippool, function(pool){
$.skyForm( pool, {
title: "DHCP IP Pool",
fields: [
{ key: "Name", label: "Bezeichnung", },
{ key: "FirstIP", label: "Erste IP", type: "IPv4", },
{ key: "LastIP", label: "Letzte IP", type: "IPv4", },
{ key: "DefaultLeaseTime", label: "Standard Gültigkeit", }
],
accept: function(pool){
alert("OK: " + pool);
},
{
text: "OK",
click: function(){ $(this).dialog( "close" ); },
},
]
});
} );
} );
}
@ -54,7 +27,7 @@ function editDHCPServerInterface(intf, editable){
fields: [
{ key: "Name", label: "Bezeichnung", },
{ key: "InterfaceAddress", label: "Interface IP", },
{ key: "IPPool", label: "IP Pool", type: "IPPool" },
{ key: "IPPool", label: "IP Pool", type: "IPPool", toEditor: function(p){ return p.Name; } },
]
} );

View File

@ -21,7 +21,14 @@
ajax: {
url: null, // ajax collection URLSchnuff17
},
},
accept: function(o){
},
cancel: function(o){
},
};
var defaultDialogOptions = {
modal: true,
@ -33,11 +40,11 @@
buttons: [
{
text: "abbrechen",
click: function(){ $(this).dialog( "close" ); },
click: null,
},
{
text: "OK",
click: function(){ $(this).dialog( "close" ); },
click: null,
},
]
};
@ -77,8 +84,7 @@
}
$.skyForm = function(o, options = {} ){
var opts = Object.assign(defaultOptions, options);
var opts = Object.assign(defaultOptions, options);
var fieldSet = $("<fieldset></fieldset>");
var fields = (opts.fields.length) ? opts.fields : log(Object.keys(o)).map( function(k){ return { key: k, label: k }; } );
@ -91,7 +97,20 @@
});
var dlgOptions = Object.assign( {}, defaultDialogOptions );
dlgOptions.title = opts.title;
dlgOptions.title = opts.title;
dlgOptions.buttons[0].click = function(){
if (options.cancel)
options.cancel(o);
$(this).dialog("close");
};
dlgOptions.buttons[1].click = function(){
if (options.accept)
options.accept(o);
$(this).dialog("close");
};
fieldSet.dialog( dlgOptions );
fieldSet.dialog( "open" );