diff --git a/app.js b/app.js index 474a3a4..3e3496f 100644 --- a/app.js +++ b/app.js @@ -17,7 +17,7 @@ const app = express(); // List of front end node modules to be served const frontEndModules = [ - 'jquery', 'jquery-ui', 'moment', 'mustache', + 'jquery', 'jquery-ui', 'moment', 'mustache', 'jq-repeat', // 'bootstrap', '@fortawesome', ]; diff --git a/package-lock.json b/package-lock.json index f518f30..8467121 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,6 +13,7 @@ "express": "^4.18.2", "extend": "^3.0.2", "http-proxy-middleware": "^0.20.0", + "jq-repeat": "^2.2.1", "jquery": "^3.7.1", "jquery-ui": "^1.13.2", "ldapts": "^7.0.7", @@ -2128,6 +2129,19 @@ "node": ">=10" } }, + "node_modules/jq-repeat": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jq-repeat/-/jq-repeat-2.2.1.tgz", + "integrity": "sha512-1M0jRo7rJKO2mHbeENNjUx9YMOCobUuG4XElKt2NWDc4+j22wrZELqt7Twy95BBEkZQuwDteoPTd1etupZZPtQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "jquery": ">=3.0.0", + "mustache": ">=4.0.0" + } + }, "node_modules/jquery": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", diff --git a/package.json b/package.json index bfd8ca4..744e1db 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "express": "^4.18.2", "extend": "^3.0.2", "http-proxy-middleware": "^0.20.0", + "jq-repeat": "^2.2.1", "jquery": "^3.7.1", "jquery-ui": "^1.13.2", "ldapts": "^7.0.7", diff --git a/public/lib/js/jq-repeat.js b/public/lib/js/jq-repeat.js deleted file mode 100644 index ca1a2fe..0000000 --- a/public/lib/js/jq-repeat.js +++ /dev/null @@ -1,302 +0,0 @@ -(function($, Mustache){ -'use strict'; - if (!$.scope) { - $.scope = {}; - } - - var make = function( element ){ - - //construct array - function makeArray( input , index ){ - - var result = []; - - Object.defineProperty( result, "__repeatId", { - value: repeatId, - writable: true, - enumerable: false, - configurable: true - } ); - - Object.defineProperty( result, "__rq_template", { - value: '', - writable: true, - enumerable: false, - configurable: true - } ); - - Object.defineProperty( result, "__jq_index", { - value: index, - writable: true, - enumerable: false, - configurable: true - } ); - - function removeEmpty(){ - if(result.__jq_empty){ - result.__jq_empty.remove(); - delete result.__jq_empty; - } - } - - result.splice = function(inputValue, ...args){ - //splice does all the heavy lifting by interacting with the DOM elements. - - var toProto = [...args] - - var index; - //if a string is submitted as the index, try to match it to index number - if( typeof arguments[0] === 'string' ){ - index = this.indexOf( arguments[0] );//set where to start - if ( index === -1 ) { - return []; - } - }else{ - index = arguments[0]; //set where to start - } - - toProto.unshift(index) - - - var howMany = arguments[1]; //sets the amount of fields to remove - var args = Array.prototype.slice.call( arguments ); // coverts arguments into array - var toAdd = args.slice(2); // only keeps fields to add to array - - // if the starting point is higher then the total index count, start at the end - if( index > this.length ) { - index = this.length; - } - // if the starting point is negative, start form the end of the array, minus the start point - if( index < 0 ) { - index = this.length - Math.abs( index ); - } - - // if there are things to add, figure out the how many new indexes we need - if( !howMany && howMany !== 0 ) { - howMany = this.length - index; - } - //not sure why i put this here... but it does matter! - if( howMany > this.length - index ) { - howMany = this.length - index; - } - - //figure out how many positions we need to shift the current elements - var shift = toAdd.length - howMany; - - // figure out how big the new array will be - // var newLength = this.length + shift; - - //removes fields from array based on howMany needs to be removed - for( var i = index; i < +index+howMany; i++ ) { - this.__take.apply( this[index].__jq_$el ); - // this.__take.apply( $( '.jq-repeat-'+ this.__repeatId +'[jq-repeat-index="'+ ( i + index ) +'"]' ) ); - } - - //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 ); - } - } - - //if there are fields to add to the array, add them - if( toAdd.length > 0 ){ - removeEmpty() - - //$.each( toAdd, function( key, value ){ - for(var I = 0; I < toAdd.length; I++){ - - //figure out new elements index - var key = I + index; - // apply values to template - var render = Mustache.render( this.__rq_template, {__id:I, ...toAdd[I]} ); - - //set call name and index keys to DOM element - var $render = $( render ).addClass( 'jq-repeat-'+ this.__repeatId ).attr( 'jq-repeat-index', key ); - - - //if add new elements in proper stop, or after the place holder. - if( key === 0 ){ - $( '.jq-repeat-'+ this.__repeatId +'[jq-repeat-index="holder"]' ).after( $render ); - }else{ - $( '.jq-repeat-'+ this.__repeatId +'[jq-repeat-index="' + ( key -1 ) + '"]' ).after( $render ); - } - - Object.defineProperty( toAdd[I], "__jq_$el", { - value: $render, - writable: true, - enumerable: false, - configurable: true - } ); - - //animate element - this.__put.apply($render, [toAdd[I]]); - } - } - - //set and return new array - return Array.prototype.splice.apply(this, toProto); - }; - result.push = function(){ - //add one or more objects to the array - - //set the index value, if none is set make it zero - var index = this.length || 0; - - //loop each passed object and pass it to slice - for (var i = 0 ; i < arguments.length; ++i) { - this.splice( ( index + i ), 0, arguments[i] ); - } - - //return new array length - return this.length; - }; - - result.unshift = function(item){ - return this.splice(0, 0, item); - }; - - result.pop = function(){ - //remove and return array element - - return this.splice( -1, 1 )[0]; - }; - result.reverse = function() { - var temp = this.splice( 0 ); - Array.prototype.reverse.apply( temp ); - - for( var i = 0; i < temp.length; i++ ){ - this.push( temp[i] ); - } - - return this; - }; - result.shift = function() { - return this.splice( 0, 1 )[0]; - }; - result.loop = function(){ - var temp = this[0]; - this.splice( 0,1 ); - this.push( temp ); - - return temp; - }; - result.loopUp = function(){ - var temp = this[this.length-1]; - this.splice( -1, 1 ); - this.splice( 0, 0, temp ); - return temp; - }; - result.indexOf = function( key, value ){ - if( !value ){ - value = arguments[0]; - key = this.__jq_index; - } - for ( var index = 0; index < this.length; ++index ) { - if( this[index][key] === value ){ - - return index; - } - } - return -1; - }; - result.update = function( key, value, update ){ - //set variables using sting for index - - // If update is called with no index/key, assume its the 0 - if(typeof key === 'object'){ - if(this[0]){ - return this.update(0, key); - } - return this.splice(0, 1, key); - } - - if( !update ){ - update = arguments[1]; - value = arguments[0]; - key = this.__jq_index; - } - - var index = this.indexOf( key, value ); - - if(index === -1) { - return []; - } - var object = $.extend( true, {}, this[index], update ); - return this.splice( index, 1, object )[0]; - }; - result.__put = function(){ - this.show(); - }; - result.__take = function(){ - this.remove(); - }; - - if(!input) { - return result; - } - $.each( input, function( key, value ){ - var type = typeof value; - if( type === 'object' ){ - result.push( value ); - }else if( type === 'string' ){ - Object.defineProperty( result, "__jq_index", { - value: value, - writable: true, - enumerable: false, - configurable: true - } ); - } else if ( type === 'function'){ - Object.defineProperty( result, value.name, { - value: value, - writable: true, - enumerable: false, - configurable: true - } ); - } - } ); - - return result; - } - - - var $this = $( element ); - var repeatId = $this.attr( 'jq-repeat' ); - var index = $this.attr( 'jq-repeat-index' ); - var tempId = repeatId + 'Template'; - var templateId = $( '#' + tempId ).html(); - var empty = $(`[jq-repeat-defualt="${repeatId}"]`); - - - $this.removeAttr( 'jq-repeat' ); - $this.removeAttr( 'jq-repeat-index' ); - var template = element.outerHTML - - $this.replaceWith( ' - +