This commit is contained in:
2024-07-31 23:30:21 -04:00
parent 0a857f8de4
commit e38504457c
5 changed files with 91 additions and 46 deletions
+27 -4
View File
@@ -68,6 +68,7 @@ MIT license
//re-factor element index's
for(var i = 0; i < this.length; i++){
if( i >= index){
this[i].__jq_$el.attr( 'jq-repeat-index', i+shift );
}
}
@@ -81,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, toAdd[I]);
//set call name and index keys to DOM element
var $render = $( render ).addClass( 'jq-repeat-'+ this.__jqRepeatId ).attr( 'jq-repeat-index', key );
@@ -195,15 +196,28 @@ MIT license
return [];
}
var object = $.extend( true, {}, this[index], update );
return this.splice( index, 1, object )[0];
var $render = $(Mustache.render(this.__jqTemplate, object));
$render.attr('jq-repeat-index', index);
this[index].__jq_$el.replaceWith($render);
this[index].__jq_$el = $render;
this.__update(this[index].__jq_$el, this[index], this);
};
result.__put = function($el, item, list){
$el.show();
};
result.__take = function($el, item, list){
$el.remove();
};
result.__update = function($el, item, list){
console.log('here', $el)
$el.show();
};
result.__setPut = function(fn) {
Object.defineProperty(this, '__put', {
value: fn,
@@ -211,7 +225,7 @@ MIT license
enumerable: false,
configurable: true
});
}
};
result.__setTake = function(fn) {
Object.defineProperty(this, '__take', {
@@ -220,7 +234,16 @@ MIT license
enumerable: false,
configurable: true
});
}
};
result.__setUpdate = function(fn) {
Object.defineProperty(this, '__update', {
value: fn,
writable: true,
enumerable: false,
configurable: true
});
};
var $this = $( element );
result.__jqRepeatId = $this.attr( 'jq-repeat' );
+1 -1
View File
@@ -11,7 +11,7 @@ class LetsEncrypt{
static AcmeClient = AcmeClient;
constructor(options){
this.loadAccountKey(options.accountKeyPath || '~/le_key', (key)=>{
this.loadAccountKey(options.accountKeyPath || './le_key.cert', (key)=>{
this.client = new AcmeClient.Client({
directoryUrl: options.directoryUrl || AcmeClient.directory.letsencrypt.production,
accountKey: key,
+2 -2
View File
@@ -25,11 +25,11 @@ function ModelPs(model){
},
get(target, propKey, receiver) {
if(propKey == 'constructor') return target.constructor;
if(propKey === 'isproxy') return 'YESSSSSSSSS'
const targetValue = Reflect.get(target, propKey, receiver);
if (typeof targetValue === 'function') {
return function(...args){
let res = targetValue.apply(this, args); // (A)
// let res = targetValue.apply(this, args); // (A)
let res = Reflect.apply(targetValue, this, args);
if(targetValue.constructor.name === 'AsyncFunction'){
res.then(function(res){
publish(propKey, res, ...args);
+25 -29
View File
@@ -127,36 +127,33 @@ class Table{
try{
// Check to see if entry name changed.
if(data[this.constructor._key] && data[this.constructor._key] !== this[this.constructor._key]){
// Remove the index key from the tables members list.
await client.SREM(
redisPrefix(this.constructor.name),
this[this.constructor._key]
);
// Merge the current data into with the updated data
let newData = Object.assign({}, this, data);
// Add the key to the members for this redis table
await client.SADD(
redisPrefix(this.constructor.name),
data[this.constructor._key]
);
// Remove the updated failed so it doesnt keep it
delete newData.updated;
// Create a new record for the updated entry. If that succeeds,
// delete the old recored
let newObject = await this.constructor.create(newData);
if(newObject){
await this.remove();
return newObject;
}
}else{
// Update what ever fields that where passed.
// Validate the passed data, ignoring required fields.
data = objValidate.processKeys(this.constructor._keyMap, data, true);
// Loop over the data fields and apply them to redis
for(let key of Object.keys(data)){
this[key] = data[key];
await client.HSET(
redisPrefix(`${this.constructor.name}_${this[this.constructor._key]}`),
key, String(data[key])
);
}
}
// Update what ever fields that where passed.
// Validate the passed data, ignoring required fields.
data = objValidate.processKeys(this.constructor._keyMap, data, true);
// Loop over the data fields and apply them to redis
for(let key of Object.keys(data)){
this[key] = data[key];
await client.HSET(
redisPrefix(`${this.constructor.name}_${this[this.constructor._key]}`),
key, String(data[key])
);
}
return this;
@@ -171,7 +168,6 @@ class Table{
try{
// Remove the index key from the tables members list.
await client.SREM(
redisPrefix(this.constructor.name),
this[this.constructor._key]
@@ -183,7 +179,7 @@ class Table{
);
// Return the number of removed values to the caller.
return count;
return this;
} catch(error) {
throw error;
+36 -10
View File
@@ -54,9 +54,9 @@
}
$.scope.hosts.__setPut(function($el, item, list){
$el.addClass('bg-success');
$el.fadeIn(1000, function(){
$el.removeClass('bg-success');
$el.addClass('table-success');
$el.fadeIn(2000, function(){
$el.removeClass('table-success');
});
});
});
@@ -64,7 +64,6 @@
function cancleHostEdit(){
$('#hostsTable').find('tr').each(function(idx, el){
console.log('here?')
$(el).removeClass('table-warning');
});
$('.editWindow').slideUp('fast');
@@ -104,7 +103,7 @@
populateHosts(); //populate the table
$.scope.hosts.__setTake(function($el, item, list){
$el.addClass('bg-danger');
$el.addClass('table-danger');
$el.fadeOut(1000, function(){
$el.remove()
});
@@ -114,6 +113,33 @@
console.log(topic, data);
});
app.subscribe(/^model:Host:create/, function(data, topic){
let [a,b, action, host] = topic.split(':');
if($.scope.hosts.indexOf(host) >= 0){
$.scope.hosts.update(host, parseHostRow(data));
}else{
$.scope.hosts.splice(0,0, parseHostRow(data))
}
});
app.subscribe(/^model:Host:update/, function(data, topic){
let [a,b, action, host] = topic.split(':');
if($.scope.hosts.indexOf(host) >= 0){
$.scope.hosts.update(host, parseHostRow(data));
}else{
$.scope.hosts.splice(0,0, parseHostRow(data))
}
});
app.subscribe(/^model:Host:remove/, function(data, topic){
let [a,b, action, host] = topic.split(':');
$.scope.hosts.remove(host);
});
//search bar html event logic stolen from here
// https://github.com/WebDevSimplified/js-search-bar/blob/main/script.js
$('[host-search]').on("input", function() {
@@ -150,11 +176,11 @@
return;
}
if($.scope.hosts.indexOf(data.__requestedHost) >= 0){
$.scope.hosts.update(data.__requestedHost, parseHostRow(data));
}else{
$.scope.hosts.splice(0,0, parseHostRow(data))
}
// if($.scope.hosts.indexOf(data.__requestedHost) >= 0){
// $.scope.hosts.update(data.__requestedHost, parseHostRow(data));
// }else{
// // $.scope.hosts.splice(0,0, parseHostRow(data))
// }
if(action == 'edit') $('.editWindow').slideUp('fast');