diff --git a/nodejs/models/dnsProvider.js b/nodejs/models/dnsProvider.js index afbade9..43e16d6 100644 --- a/nodejs/models/dnsProvider.js +++ b/nodejs/models/dnsProvider.js @@ -135,7 +135,9 @@ class DnsProvider extends Table{ toJSON(){ return { ...super.toJSON(), - domains: this.domains, + displayName: this.provider.constructor.displayName, + displayIconHtml: this.provider.constructor.displayIconHtml, + displayIconUni: this.provider.constructor.displayIconUni, }; } } diff --git a/nodejs/models/dns_provider/digitalocean.js b/nodejs/models/dns_provider/digitalocean.js index 25c7aaf..8b32add 100644 --- a/nodejs/models/dns_provider/digitalocean.js +++ b/nodejs/models/dns_provider/digitalocean.js @@ -9,7 +9,12 @@ class DigitalOcean{ } static displayName = 'DigitalOcean' - static displayIconHtml = '' + static displayIconHtml = ` +` + // '' static displayIconUni = '' constructor(token){ diff --git a/nodejs/models/dns_provider/porkbun.js b/nodejs/models/dns_provider/porkbun.js index 9e072ea..fd0e336 100644 --- a/nodejs/models/dns_provider/porkbun.js +++ b/nodejs/models/dns_provider/porkbun.js @@ -10,6 +10,23 @@ class PorkBun{ 'secretApiKey': {isRequired: true, type: 'string', isPrivate: true, displayName: 'API Secret key'}, } + static displayName = 'DigitalOcean'; + static displayIconHtml = ` +` + // ''; + static displayIconUni = ''; + baseUrl = 'https://api.porkbun.com/api/json/v3'; constructor(args){ diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json index 1c6c0ed..75092d5 100644 --- a/nodejs/package-lock.json +++ b/nodejs/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "@fortawesome/fontawesome-free": "^6.4.2", + "@popperjs/core": "^2.11.8", "acme-client": "^5.4.0", "axios": "^1.7.2", "bcrypt": "^5.1.1", @@ -197,7 +198,6 @@ "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" diff --git a/nodejs/package.json b/nodejs/package.json index 709de97..24e6fb0 100755 --- a/nodejs/package.json +++ b/nodejs/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^6.4.2", + "@popperjs/core": "^2.11.8", "acme-client": "^5.4.0", "axios": "^1.7.2", "bcrypt": "^5.1.1", diff --git a/nodejs/public/lib/js/jq-repeat_new.js b/nodejs/public/lib/js/jq-repeat_new.js index fb8e16e..f5663ee 100644 --- a/nodejs/public/lib/js/jq-repeat_new.js +++ b/nodejs/public/lib/js/jq-repeat_new.js @@ -10,7 +10,7 @@ MIT license $.scope = {}; } - var make = function(element){ + var make = function(element, template){ var result = []; result.splice = function(inputValue, ...args){ @@ -82,7 +82,7 @@ MIT license //figure out new elements index var key = I + index; // apply values to template - var render = Mustache.render(this.__jqTemplate, toAdd[I]); + var render = Mustache.render(this.__jqTemplate, this.__buildData(i, toAdd[I])); //set call name and index keys to DOM element var $render = $( render ).addClass( 'jq-repeat-'+ this.__jqRepeatId ).attr( 'jq-repeat-index', key ); @@ -217,7 +217,7 @@ MIT license } this[index] = $.extend( true, this[index], data ); - var $render = $(Mustache.render(this.__jqTemplate, this[index])); + var $render = $(Mustache.render(this.__jqTemplate, this.__buildData(index, this[index]))); $render.attr('jq-repeat-index', index); this.__update(this[index].__jq_$el, $render, this[index], this); @@ -228,6 +228,8 @@ MIT license return this[this.indexOf(key, value)]; } + // User definable helper methods + result.__put = function($el, item, list){ $el.show(); }; @@ -241,6 +243,58 @@ MIT license $el.show(); }; + result.__parseData = function(data){ + return data; + } + + // internal helper methods + + result.__buildData = function(index, data){ + + return { + ...this.__parseData(data), + nestedTemplates: this.__parseNestedTemplates(index, data), + _parent: this.__jqParent ? $.scope[this.__jqParent][this.__jqParentIndex] : undefined, + }; + }; + + result.__parseNestedTemplates = function(index, data){ + let templates = [] + let tempData = { + ...data, + _parent: data, + }; + + for(let idx in this.nestedTemplates){ + let $el = $(`${this.nestedTemplates[idx]}`); + + $el.attr('jq-repeat', Mustache.render($el.attr('jq-repeat'), tempData)); + $el.attr('jq-repeat-index', Mustache.render($el.attr('jq-repeat-index'), tempData)); + $el.attr('jq-repeat-parent', this.__jqRepeatId); + $el.attr('jq-repeat-parent-index', index); + templates[idx] = $el[0].outerHTML; + } + + return templates; + } + + for(let prop of ['put', 'take', 'update', 'parseData']){ + Object.defineProperty(result, prop, { + enumerable: false, + get(){ + return this[`__${prop}`] + }, + set(value) { + this[`__${prop}`] = value; + }, + }); + } + + + + + + result.__setPut = function(fn) { Object.defineProperty(this, '__put', { value: fn, @@ -268,10 +322,25 @@ MIT license }); }; - var $this = $( element ); + var $this = $(element); + result.nestedTemplates = []; result.__jqRepeatId = $this.attr( 'jq-repeat' ); $this.removeAttr('jq-repeat'); result.__index = $this.attr('jq-repeat-index'); + + if($this.attr('jq-repeat-parent')){ + result.__jqParent = $this.attr('jq-repeat-parent'); + result.__jqParentIndex = $this.attr('jq-repeat-parent-index'); + } + + + $this.find('[jq-repeat]').each((idx, el)=>{ + let templateIdx = result.nestedTemplates.length; + let template = `${el.outerHTML}`; + result.nestedTemplates.push(template); + $(el).replaceWith(`{{{ nestedTemplates.${templateIdx} }}}`); + }); + result.__jqTemplate = $this[0].outerHTML; $this.replaceWith( ' diff --git a/nodejs/views/hosts.ejs b/nodejs/views/hosts.ejs index 255aa10..67d16e5 100755 --- a/nodejs/views/hosts.ejs +++ b/nodejs/views/hosts.ejs @@ -359,7 +359,7 @@ -
| @@ -379,7 +379,7 @@ | - +
|---|