diff --git a/.gitignore b/.gitignore index 97d6f02..afcefc1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /src/logs/ tts_framework/ /src/tmp/ +public/assets/mockup/js/tts.min.js +public/assets/mockup/js/tts.min.map diff --git a/public/assets/mockup/css/style.css b/public/assets/mockup/css/style.css new file mode 100644 index 0000000..af26fae --- /dev/null +++ b/public/assets/mockup/css/style.css @@ -0,0 +1,3 @@ +h2 { + color: red; +} \ No newline at end of file diff --git a/public/assets/mockup/js/testing.js b/public/assets/mockup/js/testing.js index fcf1cb9..3429236 100644 --- a/public/assets/mockup/js/testing.js +++ b/public/assets/mockup/js/testing.js @@ -1 +1,8 @@ -//alert('hi'); + +tts.Router.get('Testing/:filter?', function(req) { + //console.log(req); + tts.getAsset({name: 'testing.js', path: '/assets/mockup/ajax/'}); +}); + +tts(function() { +}); \ No newline at end of file diff --git a/public/assets/mockup/js/tts.min.js b/public/assets/mockup/js/tts.min.js deleted file mode 100644 index 255cb98..0000000 --- a/public/assets/mockup/js/tts.min.js +++ /dev/null @@ -1,2 +0,0 @@ -var prefData=window.performance.timing;(function(root,window,document,pref_data,undefined){var tts=function(arg,doc){if(doc=doc&&doc.first||doc||document,"function"!=typeof arg){var match,ret=Object.create(tts.fn);if("object"==typeof arg)if("length"in arg){ret.length=arg.length;for(var o=0;o/))ret[0]=doc.createElement(match[1]),ret.length=1;else{var els=doc.querySelectorAll(arg);ret.length=els.length;for(var w=0;w=0?classes.splice(existingIndex,1):classes.push(cls),this[i].className=classes.join(" ")}return this}},addClass:{value:function(cls){for(var i=0;i=1&&(clearInterval(timer.i),opacity.i=1),elem.opacity=opacity.i,elem.filter="alpha(opacity="+100*opacity.i+")"}),50)}}},fadeOut:{value:function(ms){for(var tms=void 0===ms?600:ms,i=0;i{resolve(values)})).catch((errors=>{reject(errors)}))}))},tts.grab_form=function(form_id){try{let myForm=document.getElementById(form_id),arr={};for(var i=0;i{var request=new XMLHttpRequest;request.open("POST",url,!0),request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),request.onload=function(d){resolve(d.currentTarget.responseText)};try{request.send(data)}catch(err){reject(err)}}))},tts.lastAjax=!1;tts.ajax=function(url,options){return void 0===options&&(options={}),new Promise((function(resolve,reject){!function(url,resolve,reject,options){var doCache=tts.getValue(options.useCache,!1),eventName=tts.getValue(options.eventName,!1),elementID=tts.getValue(options.elementID,!1),ts=tts.getValue(options.ts,"");if(doCache){var myCache=new tts.store;if(myCache){let stored_data=myCache.get(url+ts),done=tts.getValue(stored_data,!1);if(!tts.isEmpty(done))return tts.logger("Used cache, on "+url+" !"),tts.lastAjax=!1,doProgress(eventName,{lengthComputable:!0,loaded:100,total:100}),elementID&&setHTML(elementID,stored_data),resolve(stored_data);tts.logger("Adding to cache, for "+url+" !")}else tts.logger("No Cache Engine enabled, for "+url+" !")}else tts.logger("No Caching, for "+url);var xmlHttp=new XMLHttpRequest;if(tts.lastAjax=xmlHttp,xmlHttp.upload.addEventListener("progress",(function(evt){doProgress(eventName,evt)})),xmlHttp.addEventListener("progress",(function(evt){doProgress(eventName,evt)})),xmlHttp.onreadystatechange=function(){var result;if(4==xmlHttp.readyState)if(200==xmlHttp.status){switch(options.dataType){case"xml":result=xmlHttp.responseXML;break;case"json":result=JSON.parse(xmlHttp.responseText);break;default:result=xmlHttp.responseText}myCache&&doCache&&myCache.set(url+ts,result),elementID&&setHTML(elementID,result),resolve(result)}else reject&&reject("Ajax error: "+xmlHttp.status+" url: "+url)},xmlHttp.open(options.method||"GET",url,!0),options.headers)for(var key in options.headers)xmlHttp.setRequestHeader(key,options.headers[key]);xmlHttp.send(options.data||"")}(url,resolve,reject,options)}))};var pluses=/\+/g;function encode(s){return config.raw?s:encodeURIComponent(s)}function decode(s){return config.raw?s:decodeURIComponent(s)}function stringifyCookieValue(value){return encode(config.json?JSON.stringify(value):String(value))}function read(s,converter){var value=config.raw?s:function parseCookieValue(s){0===s.indexOf('"')&&(s=s.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return s=decodeURIComponent(s.replace(pluses," ")),config.json?JSON.parse(s):s}catch(e){}}(s);return tts.isFunction(converter)?converter(value):value}var config=tts.cookie=function(key,value,options){if(arguments.length>1&&!tts.isFunction(value)){if("number"==typeof(options=tts.extend(config.defaults,options)).expires){var days=options.expires,t=options.expires=new Date;t.setMilliseconds(t.getMilliseconds()+864e5*days)}return document.cookie=[encode(key),"=",stringifyCookieValue(value),options.expires?"; expires="+options.expires.toUTCString():"",options.path?"; path="+options.path:"",options.domain?"; domain="+options.domain:"",options.secure?"; secure":""].join("")}var result=key?undefined:{},cookies=document.cookie?document.cookie.split("; "):[],l=cookies.length;for(let i=0;i2?Array.prototype.slice.call(arguments,1,-1):[],handler=Array.prototype.slice.call(arguments,-1)[0],prefix="/"!==context.slice(-1)&&"/"!==value&&""!==value?context+"/":context,path="/"!==value.substr(0,1)?value:value.substr(1),pattern=prefix+path;return self.add.apply(self,[pattern].concat(middleware).concat(submiddleware).concat([handler]))}},MyRouter.prototype.navigate=function(path){return this.path(path).trigger("navigate")},MyRouter.prototype.path=function(pathname){var frag;return"string"==typeof pathname?("pushState"===this.options.mode?(frag=this.options.root?this.options.root+pathname:pathname,root.history.pushState({},null,frag)):root.location?root.location.hash=(this.options.hashBang?"!":"")+pathname:root._pathname=pathname||"",this):void 0===pathname?frag="pushState"===this.options.mode?root.location.pathname.replace(this.options.root,""):"pushState"!==this.options.mode&&root.location?root.location.hash?root.location.hash.split(this.options.hashBang?"#!":"#")[1]:"":root._pathname||"":!1===pathname?("pushState"===this.options.mode?root.history.pushState({},null,this.options.root||"/"):root.location&&(root.location.hash=this.options.hashBang?"!":""),this):void 0},MyRouter.listen=function(){var opts,routes;return arguments[0]&&arguments[1]?(opts=arguments[0],routes=arguments[1]):routes=arguments[0],function(){for(var key in routes)this.add.call(this,key,routes[key]);return this}.call(new MyRouter(opts||{}))};class CallStack{constructor(router,extendObj){for(var key in this.stack=CallStack.global.slice(0),this.router=router,this.runCallback=!0,this.callbackRan=!1,this.propagateEvent=!0,this.value=router.path(),extendObj)this[key]=extendObj[key];return this}}function Request(route){this.route=route,this.keys=[],this.regex=MyRouter.regexRoute(route,this.keys)}CallStack.global=[],CallStack.prototype.preventDefault=function(){this.runCallback=!1},CallStack.prototype.stopPropagation=function(){this.propagateEvent=!1},CallStack.prototype.parent=function(){return!!!(!this.previousState||!this.previousState.value||this.previousState.value!=this.value)&&this.previousState},CallStack.prototype.callback=function(){this.callbackRan=!0,this.timeStamp=Date.now(),this.next()},CallStack.prototype.enqueue=function(handler,atIndex){for(var handlers=Array.isArray(handler)?atIndex(void 0===options&&(options={}),new Promise(((resolve,reject)=>{var defaults_caching=tts.getValue(DO_CACHE_ON_ASSETS,!0),file=source.name,kind=file.split(".").pop(),doCache=tts.getValue(source.useCache,defaults_caching),full_file=tts.getValue(source.path,"")+file,ts=tts.getValue(source.ts,"");if(-1!==assets_loaded_once.indexOf(full_file))resolve("Already Loaded..."+full_file);else if(assets_loaded_once.push(full_file),"css"===kind){var dataType=tts.getValue(source.dataType,"text/css"),style=document.createElement("style"),elm=tts.getValue(options.element,document.getElementsByTagName("style")[0]||document.getElementsByTagName("head")[0]);(loaded=tts.ajax(full_file,{dataType:"text/css",useCache:doCache,ts})).then((function(code){style.type=dataType,style.innerText=code,elm.parentNode.insertBefore(style,elm.nextSibling),setTimeout((function(){resolve()}),12)})),loaded.catch((function(e){reject(e)}))}else{dataType=tts.getValue(source.dataType,"text/javascript");var loaded,script=document.createElement("script");elm=tts.getValue(options.element,document.getElementsByTagName("script")[0]||document.getElementsByTagName("head")[0]);(loaded=tts.ajax(full_file,{dataType:"text/javascript",useCache:doCache,ts})).then((function(code){script.type=dataType,script.text=code,elm.parentNode.insertBefore(script,elm),setTimeout((function(){resolve()}),12)})),loaded.catch((function(e){reject(e)}))}}))),tts.mergeOptions=function(sources,options){let keys=Object.keys(options);for(let key of keys)for(var x=0;x{void 0===options&&(options={});var prArr=[];return sources.forEach((function(source){!function(source){prArr.push(new Promise((function(resolve,reject){tts.getAsset(source,options).then((function(){resolve()})).catch((function(e){reject(e)}))})))}(source)})),Promise.all(prArr,(function(){return!0}))},store.prototype.set=function(name,data){try{if("undefined"!=typeof Storage){var d=JSON.stringify(data);return!1===this.temp?localStorage.setItem(name,d):sessionStorage.setItem(name,d),!0}return!1}catch(er){return!1}},store.prototype.get=function(name){return"undefined"!=typeof Storage&&(!1===this.temp?JSON.parse(localStorage.getItem(name)):JSON.parse(sessionStorage.getItem(name)))},store.prototype.remove=function(name){return"undefined"!=typeof Storage&&(!1===this.temp?localStorage.removeItem(name):sessionStorage.removeItem(name),!0)},store.prototype.clear=function(){return"undefined"!=typeof Storage&&(!1===this.temp?localStorage.clear():sessionStorage.clear(),!0)},tts.store=store,tts.time=function(){var now=new Date;return(now.getHours()%12||12)+":"+now.getMinutes()+":"+now.getSeconds()+" "+(now.getHours()<12?"AM":"PM")},tts.debugMode=!0,tts.doTrace=!1;var startTimer=[],endTimer=[],time=[],beginCodeTimer=0,loggerData=[{message:navigator.userAgent,kind:"userAgent",option:""}];tts.allowedElapsedTime=4e3,tts.completedCodeTimer=0,tts.startCodeTimer=function(){beginCodeTimer=Date.now()},tts.endCodeTimer=function(){tts.completedCodeTimer=Date.now()-beginCodeTimer,loggerData.push({message:"Toal Code Time Elapsed",kind:"MainTimer",option:tts.completedCodeTimer}),tts.completedCodeTimer>tts.allowedElapsedTime&&tts.sendReport()},tts.getLoggerData=loggerData,tts.logger=function(message,level,option){if(void 0===level&&(level="info"),void 0===option&&(option=""),!1===tts.debugMode||!window.console)return!1;if(message="object"==typeof message?`[ ${tts.time()} ] `+JSON.stringify(message):`[ ${tts.time()} ] ${message}`,"microStart"===level||"start"===level?console.group(message,option):"microStop"===level||"stop"===level?console.groupEnd(message,option):loggerData.push({message,kind:level,option}),!tts.doTrace||"warn"!==level&&"error"!==level||console.trace(),"info"===level&&console.info)console.info(message);else if("microStart"===level&&performance.now)startTimer[option]=performance.now();else if("microStop"===level&&performance.now){endTimer[option]=performance.now();var data=endTimer[option]-startTimer[option];console.info(data),loggerData.push({message,kind:level,option:data})}else if("warn"===level&&console.warn)console.warn(message);else if("error"===level&&console.error)console.error(message);else if("table"===level&&console.table)console.table(message,option);else if("group"===level&&console.group)console.group(message,option);else if("end"===level&&console.groupEnd)console.groupEnd(message,option);else if("trace"===level&&console.trace)console.trace();else if("start"===level&&console.time)console.time(option),time[option]=Date.now();else if("stop"===level&&console.timeEnd){console.timeEnd(option);data=Date.now()-time[option];loggerData.push({message,kind:level,option:data})}else console.log&&console.log(message)},tts.ReportsURL="",tts.sendReport=function(markComplete){return new Promise(((resolve,reject)=>{if(""===tts.ReportsURL)reject();else{var strValues="&logs="+encodeURI(JSON.stringify(loggerData));!1===sent_errors_yet&&(void 0===markComplete&&(markComplete=!1),!0===markComplete&&(sent_errors_yet=!0),tts.Post(tts.ReportsURL,strValues).then((values=>{resolve(values)})).catch((errors=>{reject(errors)})))}}))};var sent_errors_yet=!1;try{window.onerror=function errorReports(errorMsg,url,lineNumber,column,errorObj){if(""===tts.ReportsURL)return!1;if(!(errorMsg.indexOf("Script error.")>-1||"null"==typeof errorMsg)){var strValues="errMessage="+encodeURI(errorMsg);strValues+="&errLine="+encodeURI(lineNumber),"undeinfed"!=typeof column&&"null"!=typeof column&&(strValues+="&errColumn="+encodeURI(column)),"undeinfed"!=typeof errorObj&&"null"!=typeof errorObj&&(strValues+="&errObject="+encodeURI(errorObj)),strValues+="&queryString="+encodeURI(location.search),strValues+="&Url="+encodeURI(url),strValues+="&Path="+encodeURI(location.pathname),strValues+="&Hash="+encodeURI(location.hash),strValues+="&HTTPRef="+encodeURI(document.referrer),strValues+="&logs="+encodeURI(JSON.stringify(loggerData)),!1===sent_errors_yet&&tts.Post(tts.ReportsURL,strValues),sent_errors_yet=!0}}}catch(er){}var array_of_frames=[],printFrameID=0;function donePrintFrame(){var frm=document.getElementById(printFrameID).contentWindow;frm.focus(),frm.print()}tts.printFrame=function(id,src){try{for(var i=0;i '', // SMTP Hosts - seperated by ; -// 'username' => '', -// 'password' => '', - 'send_emails' => false, // Enable emails - 'email_on_errors' => false, - 'admin_emails' => array('Bob'=>'bob@localost', 'Chris'=>'chris@localhost'), // Email Admins on error -)); -/* Contents of : on_html.php */ - -\tts\main\configure::set('html', array( - 'title' => 'In Mockup...', - 'author' => 'Robert Strutts', - 'javascript' => array('js/error_handler.js'=>'tts', 'js/store.js'=>'tts'), //'js/analytics.js'=>'project' - 'robots' => 'noindex', - 'keywords' => '', - 'description' => '', -)); -/* Contents of : on_http_request.php */ - -\tts\main\configure::set('http_request', array( - 'use' => 'sockets', // curl or sockets -)); - -/* Contents of : on_security.php */ - -\tts\main\configure::set('security', array( - 'show_dumps' => true, - 'key' => 'y8+HSfrO8wFknxND8SA2mQZBoYpPDeK+2FmIzdxFU9EmTsZ2rdo7GED0nt4DsKoHmbiBBIoNTMAfl+eEMv6qeA==', - 'main_salt' => 'e6fde23484881a29f7b6c6459456f3e1', - 'csrf_security_level' => 'high', // Stop Attacks at what cost?? - 'retries_allowed_before_throttling' => 3, // Reties attempts allowed for login, before it throttles it... - 'throttling_login_seconds' => 20, // Seconds to deny more login attempts - 'password_hash' => PASSWORD_BCRYPT, - 'password_hash_options' => ['cost' => 10], // Default=10. This is a good baseline cost, but you may want to consider increasing it depending on your hardware. -)); - -/* Contents of : on_sessions.php */ - -\tts\main\configure::set('sessions', array( - 'engine' => 'php', // php, db - 'type' => 'none', // Session Type: files, database, or cache - 'session_variable' => 'ses_app_aaa_', // set session variable name for project - 'session_name' => 'aaa_sys_342_', // More secure then PHPSESSID - 'session_table' => false, // DB PHP Session Table name, false = USE FILES - 'session_security_level' => 'blaze', // Faster Reqests keep at: blaze - 'session_key' => '6cb0d56f2345917624f2c5473e4d32cd', -)); -/* Contents of : on_tts.php */ - -\tts\main\configure::set_key('important', 'private_ip_as_local', false); - -\tts\main\configure::set('tts', array( - 'error_page' => 'tts', // or project - '404_page' => 'tts', // or project - 'ui_kit' => 'tts', // or project - 'site_name' => 'Testing', - 'short_url' => true, - 'default_project' => 'home', - 'check_HTML_tags' => true, - 'live' => false, //(! \tts\security::is_localhost() ) // Is this Production?? -)); - -/* Contents of : on_view_mode.php */ - -\tts\main\configure::set('view_mode', array( - 'default_paths' => array('json', 'common', 'flexbox', 'default') + +/* Contents of : on_email.php */ + +\tts\main\configure::set('email', array( +// 'host' => '', // SMTP Hosts - seperated by ; +// 'username' => '', +// 'password' => '', + 'send_emails' => false, // Enable emails + 'email_on_errors' => false, + 'admin_emails' => array('Bob'=>'bob@localost', 'Chris'=>'chris@localhost'), // Email Admins on error +)); +/* Contents of : on_html.php */ + +\tts\main\configure::set('html', array( + 'title' => 'In Mockup...', + 'author' => 'Robert Strutts', + 'javascript' => array('js/tts.min.js'=>'project'), //'js/analytics.js'=>'project' + 'css' => array('css/style.css'=>['path'=>'project', 'media'=>'all']), + 'robots' => 'noindex', + 'keywords' => '', + 'description' => '', +)); +/* Contents of : on_http_request.php */ + +\tts\main\configure::set('http_request', array( + 'use' => 'sockets', // curl or sockets +)); + +/* Contents of : on_security.php */ + +\tts\main\configure::set('security', array( + 'show_dumps' => true, + 'key' => 'y8+HSfrO8wFknxND8SA2mQZBoYpPDeK+2FmIzdxFU9EmTsZ2rdo7GED0nt4DsKoHmbiBBIoNTMAfl+eEMv6qeA==', + 'main_salt' => 'e6fde23484881a29f7b6c6459456f3e1', + 'csrf_security_level' => 'high', // Stop Attacks at what cost?? + 'retries_allowed_before_throttling' => 3, // Reties attempts allowed for login, before it throttles it... + 'throttling_login_seconds' => 20, // Seconds to deny more login attempts + 'password_hash' => PASSWORD_BCRYPT, + 'password_hash_options' => ['cost' => 10], // Default=10. This is a good baseline cost, but you may want to consider increasing it depending on your hardware. +)); + +/* Contents of : on_sessions.php */ + +\tts\main\configure::set('sessions', array( + 'engine' => 'php', // php, db + 'type' => 'none', // Session Type: files, database, or cache + 'session_variable' => 'ses_app_aaa_', // set session variable name for project + 'session_name' => 'aaa_sys_342_', // More secure then PHPSESSID + 'session_table' => false, // DB PHP Session Table name, false = USE FILES + 'session_security_level' => 'blaze', // Faster Reqests keep at: blaze + 'session_key' => '6cb0d56f2345917624f2c5473e4d32cd', +)); +/* Contents of : on_tts.php */ + +\tts\main\configure::set_key('important', 'private_ip_as_local', false); + +\tts\main\configure::set('tts', array( + 'error_page' => 'tts', // or project + '404_page' => 'tts', // or project + 'ui_kit' => 'tts', // or project + 'site_name' => 'Testing', + 'short_url' => true, + 'default_project' => 'home', + 'check_HTML_tags' => true, + 'live' => false, //(! \tts\security::is_localhost() ) // Is this Production?? +)); + +/* Contents of : on_view_mode.php */ + +\tts\main\configure::set('view_mode', array( + 'default_paths' => array('json', 'common', 'flexbox', 'default') )); \ No newline at end of file diff --git a/src/configs/mockup/on_html.php b/src/configs/mockup/on_html.php index 91a52f9..91a3eca 100644 --- a/src/configs/mockup/on_html.php +++ b/src/configs/mockup/on_html.php @@ -3,7 +3,8 @@ \tts\main\configure::set('html', array( 'title' => 'In Mockup...', 'author' => 'Robert Strutts', - 'javascript' => array('js/error_handler.js'=>'tts', 'js/store.js'=>'tts'), //'js/analytics.js'=>'project' + 'javascript' => array('js/tts.min.js'=>'project'), //'js/analytics.js'=>'project' + 'css' => array('css/style.css'=>'project'), 'robots' => 'noindex', 'keywords' => '', 'description' => '', diff --git a/src/mockup/views/default/app/footer.php b/src/mockup/views/default/app/footer.php index a1e095b..ac42d2e 100644 --- a/src/mockup/views/default/app/footer.php +++ b/src/mockup/views/default/app/footer.php @@ -1,5 +1,5 @@ [], @@ -9,12 +9,12 @@ const JS_FILES = [ "js/testing.js" => [], ]; -$JS = "tts_set_project(\"" . rtrim(\tts\site_helper::get_project(), '/') ."\");" . PHP_EOL; /* Set JS Error Handler */ -$JS .= "var ajax_folder = \"" . $AJAX_FOLDER . "\"" . PHP_EOL; /* assets AJAX foldername and path */ +///$JS = "tts_set_project(\"" . rtrim(\tts\site_helper::get_project(), '/') ."\");" . PHP_EOL; /* Set JS Error Handler */ +$JS = "var ajax_folder = \"" . $AJAX_FOLDER . "\"" . PHP_EOL; /* assets AJAX foldername and path */ $JS .= "var debug = 1; /* Debug mode 1 = true */" . PHP_EOL; $JS .= "function debug_print(msg) { if (debug === 1) console.log(msg); }" . PHP_EOL; -$JS .= \tts\assets::get_ajax_files(PROJECT_ASSETS_DIR . $AJAX_FOLDER . "/"); +$JS .= \tts\assets::get_ajax_files(PROJECT_ASSETS_DIR . '/' . $AJAX_FOLDER . "/"); $html->add_to_javascript($JS); $html->set_assets_from_array(JS_CDN_FILES, 'main_js', 'cdn'); -//$html->set_assets_from_array(JS_FILES, 'main_js'); \ No newline at end of file +$html->set_assets_from_array(JS_FILES, 'js', 'project'); \ No newline at end of file