"),s=a.stateContext?e(a.stateContext):e(r),c="object"==typeof this?e(r):s,l=c.data(a.metadata.action)||a.action||!1,u=a.className,d=a.metadata,m=a.errors;return i={initialize:function(){var r,m,f,p,g,h,v,b=!1,y=(new Date).getTime(),x={},w={},C=a.errors;return a.serializeForm&&e(this).toJSON()!==o&&(x=c.closest("form").toJSON(),e.extend(!0,a.data,x),i.debug("Adding form data to API Request",x)),r=e.proxy(a.beforeSend,c)(a),r===o||r?(l&&(i.debug("Initializing API Request for: ",l),a.api[l]!==o?p=a.api[l]:i.error(C.missingAction)),a.url&&(p=a.url,i.debug("Using specified url: ",p)),p||(i.error(C.missingURL),i.reset()),g=p.match(a.regExpTemplate),g&&(i.debug("Looking for URL variables",g),e.each(g,function(t,r){var s=r.substr(2,r.length-3),l=e.isPlainObject(n.urlData)&&n.urlData[s]!==o?n.urlData[s]:c.data(s)!==o?c.data(s):a.urlData[s];i.verbose("Looking for variable",s,c,c.data(s),a.urlData[s]),l===!1?(i.debug("Removing variable from URL",g),p=p.replace("/"+r,"")):l!==o&&l?p=p.replace(r,l):(i.error(C.missingParameter+s),b=!0)})),b?(i.reset(),o):(f=e.Deferred().always(function(){a.stateContext&&s.removeClass(u.loading),e.proxy(a.complete,c)()}).done(function(t){i.debug("API request successful"),"json"==a.dataType?t.error!==o?e.proxy(a.failure,s)(t.error,a,c):e.isArray(t.errors)?e.proxy(a.failure,s)(t.errors[0],a,c):e.proxy(a.success,s)(t,a,c):e.proxy(a.success,s)(t,a,c)}).fail(function(t,n,r){var c,l=a.errors[n]!==o?a.errors[n]:r;if(t!==o)if(t.readyState!==o&&4==t.readyState){if(200!=t.status&&r!==o&&""!==r)i.error(C.statusMessage+r);else if("error"==n&&"json"==a.dataType)try{c=e.parseJSON(t.responseText),c&&c.error!==o&&(l=c.error)}catch(d){i.error(C.JSONParse)}s.removeClass(u.loading).addClass(u.error),a.errorLength>0&&setTimeout(function(){s.removeClass(u.error)},a.errorLength),i.debug("API Request error:",l),e.proxy(a.failure,s)(l,a,this)}else i.debug("Request Aborted (Most likely caused by page change)")}),e.extend(!0,w,a,{success:function(){},failure:function(){},complete:function(){},type:a.method||a.type,data:h,url:p,beforeSend:a.beforeXHR}),a.stateContext&&s.addClass(u.loading),a.progress&&(i.verbose("Adding progress events"),e.extend(!0,w,{xhr:function(){var n=new t.XMLHttpRequest;return n.upload.addEventListener("progress",function(t){var n;t.lengthComputable&&(n=Math.round(1e4*(t.loaded/t.total))/100+"%",e.proxy(a.progress,s)(n,t))},!1),n.addEventListener("progress",function(t){var n;t.lengthComputable&&(n=Math.round(1e4*(t.loaded/t.total))/100+"%",e.proxy(a.progress,s)(n,t))},!1),n}})),i.verbose("Creating AJAX request with settings: ",w),v=e.ajax(w).always(function(){m=a.loadingLength-((new Date).getTime()-y),a.loadingDelay=0>m?0:m}).done(function(e){var t=this;setTimeout(function(){f.resolveWith(t,[e])},a.loadingDelay)}).fail(function(e,t,n){var o=this;"abort"!=t?setTimeout(function(){f.rejectWith(o,[e,t,n])},a.loadingDelay):s.removeClass(u.error).removeClass(u.loading)}),a.stateContext&&c.data(d.promise,f).data(d.xhr,v),o)):(i.error(C.beforeSend),i.reset(),o)},reset:function(){c.data(d.promise,!1).data(d.xhr,!1),s.removeClass(u.error).removeClass(u.loading),i.error(m.exitConditions)},setting:function(e,t){return t===o?a[e]:(a[e]=t,o)},verbose:function(){a.verbose&&i.debug.apply(this,arguments)},debug:function(){var e=[],t=a.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};o=Function.prototype.bind.call(o,console),a.debug&&(e.push(t),o.apply(console,e.concat(n)))},error:function(){var e=[],t=a.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.warn||console.log||function(){};o=Function.prototype.bind.call(o,console),a.debug&&(e.push(t),e.concat(n),o.apply(console,e.concat(n)))}},i.initialize(),this},e.fn.apiButton=function(t){return e(this).each(function(){var n,o=e(this),i=e(this).selector||"",a=e.isFunction(t)?e.extend(!0,{},e.api.settings,e.fn.apiButton.settings,{stateContext:this,success:t}):e.extend(!0,{},e.api.settings,e.fn.apiButton.settings,{stateContext:this},t);n={initialize:function(){a.context&&""!==i?e(a.context).on(i,"click."+a.namespace,n.click):o.on("click."+a.namespace,n.click)},click:function(){a.filter&&0!==e(this).filter(a.filter).size()||e.proxy(e.api,this)(a)}},n.initialize()}),this},e.api.settings={moduleName:"API Module",namespace:"api",verbose:!0,debug:!0,api:{},beforeSend:function(e){return e},beforeXHR:function(){},success:function(){},complete:function(){},failure:function(){},progress:!1,errors:{missingAction:"API action used but no url was defined",missingURL:"URL not specified for the API action",missingParameter:"Missing an essential URL parameter: ",timeout:"Your request timed out",error:"There was an error with your request",parseError:"There was an error parsing your request",JSONParse:"JSON could not be parsed during error handling",statusMessage:"Server gave an error: ",beforeSend:"The before send function has aborted the request",exitConditions:"API Request Aborted. Exit conditions met"},className:{loading:"loading",error:"error"},metadata:{action:"action",promise:"promise",xhr:"xhr"},regExpTemplate:/\{\$([A-z]+)\}/g,action:!1,url:!1,urlData:!1,serializeForm:!1,stateContext:!1,method:"get",data:{},dataType:"json",cache:!0,loadingLength:200,errorLength:2e3},e.fn.apiButton.settings={filter:".disabled, .loading",context:!1,stateContext:!1}}(jQuery,window,document),function(e,t,n,o){e.fn.colorize=function(t){var n=e.extend(!0,{},e.fn.colorize.settings,t),i=arguments||!1;return e(this).each(function(t){var a,r,s,c,l,u,d,m,f=e(this),p=e("")[0],g=e("")[0],h=e("")[0],v=new Image,b=n.colors,y=(n.paths,n.namespace),x=n.errors,w=f.data("module-"+y);return m={checkPreconditions:function(){return m.debug("Checking pre-conditions"),!e.isPlainObject(b)||e.isEmptyObject(b)?(m.error(x.undefinedColors),!1):!0},async:function(e){n.async?setTimeout(e,0):e()},getMetadata:function(){m.debug("Grabbing metadata"),c=f.data("image")||n.image||o,l=f.data("name")||n.name||t,u=n.width||f.width(),d=n.height||f.height(),(0===u||0===d)&&m.error(x.undefinedSize)},initialize:function(){m.debug("Initializing with colors",b),m.checkPreconditions()&&m.async(function(){m.getMetadata(),m.canvas.create(),m.draw.image(function(){m.draw.colors(),m.canvas.merge()}),f.data("module-"+y,m)})},redraw:function(){m.debug("Redrawing image"),m.async(function(){m.canvas.clear(),m.draw.colors(),m.canvas.merge()})},change:{color:function(e,t){return m.debug("Changing color",e),b[e]===o?(m.error(x.missingColor),!1):(b[e]=t,m.redraw(),o)}},canvas:{create:function(){m.debug("Creating canvases"),p.width=u,p.height=d,g.width=u,g.height=d,h.width=u,h.height=d,a=p.getContext("2d"),r=g.getContext("2d"),s=h.getContext("2d"),f.append(p),a=f.children("canvas")[0].getContext("2d")},clear:function(){m.debug("Clearing canvas"),s.fillStyle="#FFFFFF",s.fillRect(0,0,u,d)},merge:function(){return e.isFunction(a.blendOnto)?(a.putImageData(r.getImageData(0,0,u,d),0,0),s.blendOnto(a,"multiply"),o):(m.error(x.missingPlugin),o)}},draw:{image:function(e){m.debug("Drawing image"),e=e||function(){},c?(v.src=c,v.onload=function(){r.drawImage(v,0,0),e()}):(m.error(x.noImage),e())},colors:function(){m.debug("Drawing color overlays",b),e.each(b,function(e,t){n.onDraw(s,l,e,t)})}},debug:function(e,t){n.debug&&(t!==o?console.info(n.moduleName+": "+e,t):console.info(n.moduleName+": "+e))},error:function(e){console.warn(n.moduleName+": "+e)},invoke:function(t,i,a){var r;return a=a||Array.prototype.slice.call(arguments,2),"string"==typeof t&&w!==o&&(t=t.split("."),e.each(t,function(t,o){return e.isPlainObject(w[o])?(w=w[o],!0):e.isFunction(w[o])?(r=w[o],!0):(m.error(n.errors.method),!1)})),e.isFunction(r)?r.apply(i,a):!1}},w!==o&&i?("invoke"==i[0]&&(i=Array.prototype.slice.call(i,1)),m.invoke(i[0],this,Array.prototype.slice.call(i,1))):(m.initialize(),o)}),this},e.fn.colorize.settings={moduleName:"Image Colorizer",debug:!0,namespace:"colorize",onDraw:function(){},async:!0,colors:{},metadata:{image:"image",name:"name"},errors:{noImage:"No tracing image specified",undefinedColors:"No default colors specified.",missingColor:"Attempted to change color that does not exist",missingPlugin:"Blend onto plug-in must be included",undefinedHeight:"The width or height of image canvas could not be automatically determined. Please specify a height."}}}(jQuery,window,document),function(e){e.fn.defaultText=function(t){var n="string"==typeof t?e.extend({},e.fn.defaultText.settings,{defaultValue:t}):e.extend(!0,{},e.fn.defaultText.settings,t);return"string"==typeof t&&(t={defaultValue:t}),e.extend(n,t),e(this).each(function(){var t=e(this),o={checkDefault:function(){t.val().toLowerCase()!=n.defaultValue.toLowerCase()&&t.addClass(n.filledClass)},placeholder:{add:function(){0===t.filter(n.disabledClassList).size()&&(t.val()==n.replaceValue?n.alwaysReplace?t.removeClass(n.filledClass).val(t.attr("last")).removeAttr("last"):t.removeClass(n.filledClass).val(n.defaultValue):t.addClass(n.filledClass))},remove:function(){0===t.filter(n.disabledClassList).size()&&(n.alwaysReplace?t.attr("last",t.val()).val(n.replaceValue):t.val().toLowerCase()==n.defaultValue.toLowerCase()&&t.val(n.replaceValue))}}};"auto"==n.defaultValue&&(n.defaultValue=e(this).val()),t.on("focus",o.placeholder.remove).on("blur",o.placeholder.add),o.checkDefault()}),this},e.fn.defaultText.settings={defaultValue:"auto",replaceValue:"",alwaysReplace:!1,disabledClassList:".readonly, .disabled",filledClass:"filled"}}(jQuery,window,document),function(e,t,n,o){e.fn.form=function(t,n){var i,a=e(this),r=e.extend(!0,{},e.fn.form.settings,n),s=e.extend({},e.fn.form.settings.defaults,t),c="."+r.namespace,l=("module-"+r.namespace,a.selector||""),u=(new Date).getTime(),d=[],m=arguments[0],f="string"==typeof m,p=[].slice.call(arguments,1);return a.each(function(){var t,n=e(this),g=e(this).find(r.selector.field),h=e(this).find(r.selector.group),v=e(this).find(r.selector.message),b=(e(this).find(r.selector.prompt),e(this).find(r.selector.submit)),y=[],x=this,w=n.data("module-"+r.namespace),C=r.namespace,k=r.metadata,T=r.className,z=r.error;t={initialize:function(){t.verbose("Initializing form validation",n,s,r),r.keyboardShortcuts&&g.on("keydown"+c,t.event.field.keydown),n.on("submit"+c,t.validate.form),g.on("blur"+c,t.event.field.change),b.on("click"+c,t.submit)},destroy:function(){n.off(C)},refresh:function(){g=n.find(r.selector.field)},submit:function(){t.verbose("Submitting form",n),n.submit()},event:{field:{keydown:function(n){var i=e(this),a=n.which,s={enter:13,escape:27};return a==s.escape&&(t.verbose("Escape key pressed blurring field"),i.blur()),a==s.enter&&i.is(r.selector.input)?(t.debug("Enter key pressed, submitting form"),b.addClass(T.down),i.one("keyup"+c,t.event.field.keyup),n.preventDefault(),!1):o},keyup:function(){t.verbose("Doing keyboard shortcut form submit"),b.removeClass(T.down),t.submit()},change:function(){var n=e(this),o=n.closest(h);console.log("here",r.on),o.hasClass(T.error)?(t.debug("Revalidating field",n,t.get.validation(n)),t.validate.field(t.get.validation(n))):"change"==r.on&&t.validate.field(t.get.validation(n))}}},get:{field:function(n){return t.verbose("Finding field with identifier",n),g.filter("#"+n).size()>0?g.filter("#"+n):g.filter('[name="'+n+'"]').size()>0?g.filter('[name="'+n+'"]'):g.filter("[data-"+k.validate+'="'+n+'"]').size()>0?g.filter("[data-"+k.validate+'="'+n+'"]'):e("")},validation:function(n){var o;return e.each(s,function(e,i){t.get.field(i.identifier).get(0)==n.get(0)&&(o=i)}),o||!1}},has:{field:function(e){return t.verbose("Checking for existence of a field with identifier",e),g.filter("#"+e).size()>0?!0:g.filter('[name="'+e+'"]').size()>0?!0:g.filter("[data-"+k.validate+'="'+e+'"]').size()>0?!0:!1}},add:{prompt:function(e,n){var o=t.get.field(e.identifier),i=o.closest(h),a=i.find(r.selector.prompt),s=0!==a.size();t.verbose("Adding inline validation prompt"),i.addClass(T.error),r.inlineError&&(s||(a=r.templates.prompt(n),a.appendTo(i).hide()),a.html(n[0]),a.is(":not(:visible)")&&a.fadeIn(r.animateSpeed))},errors:function(e){t.debug("Adding form error messages",e),v.html(r.templates.error(e))}},remove:{prompt:function(e){var n=t.get.field(e.identifier),o=n.closest(h),i=o.find(r.selector.prompt);o.removeClass(T.error),r.inlineError&&i.hide()}},validate:{form:function(o){var i=!0;y=[],e.each(s,function(e,n){t.validate.field(n)||(i=!1)}),i?(n.removeClass(T.error).addClass(T.success),e.proxy(r.onSuccess,this)(o)):(n.addClass(T.error),r.inlineError||t.add.errors(y),e.proxy(r.onFailure,this)(y))},field:function(n){var i=t.get.field(n.identifier),a=!0,s=[];return n.rules!==o&&e.each(n.rules,function(e,o){t.has.field(n.identifier)&&!t.validate.rule(n,o)&&(t.debug("Field is invalid",n.identifier,o.type),s.push(o.prompt),a=!1)}),a?(t.remove.prompt(n,s),e.proxy(r.onValid,i)(),!0):(y=y.concat(s),t.add.prompt(n,s),e.proxy(r.onInvalid,i)(s),!1)},rule:function(i,a){var s,c,l=t.get.field(i.identifier),u=a.type,d=l.val(),m=/\[(.*?)\]/i,f=m.exec(u),p=!0;return f!==o&&null!=f?(s=f[1],c=u.replace(f[0],""),p=e.proxy(r.rules[c],n)(d,s)):p="checked"==u?l.filter(":checked").size()>0:r.rules[u](d),p}},setting:function(t,n){return n===o?r[t]:(e.isPlainObject(t)?e.extend(!0,r,t):r[t]=n,o)},internal:function(n,i){return i===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=i,o)},debug:function(){r.debug&&(r.performance?t.performance.log(arguments):t.debug=Function.prototype.bind.call(console.info,console,r.moduleName+":"))},verbose:function(){r.verbose&&r.debug&&(r.performance?t.performance.log(arguments):t.verbose=Function.prototype.bind.call(console.info,console,r.moduleName+":"))},error:function(){t.error=Function.prototype.bind.call(console.log,console,r.moduleName+":")},performance:{log:function(e){var n,o,i;r.performance&&(n=(new Date).getTime(),i=u||n,o=n-i,u=n,d.push({Element:x,Name:e[0],Arguments:e[1]||"None","Execution Time":o}),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100))},display:function(){var t=r.moduleName,n=(r.moduleName+": "+l+"("+a.size()+" elements)",0);l&&(t+=" Performance ("+l+")"),(console.group!==o||console.table!==o)&&d.length>0&&(console.groupCollapsed(t),console.table?(e.each(d,function(e,t){n+=t["Execution Time"]}),console.table(d)):e.each(d,function(e,t){n+=t["Execution Time"],console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),d=[],u=!1)}},invoke:function(n,i,a){var r,s;return i=i||p,a=x||a,"string"==typeof n&&w!==o&&(n=n.split("."),r=n.length-1,e.each(n,function(n,i){e.isPlainObject(w[i])&&n!=r?w=w[i]:w[i]!==o?s=w[i]:t.error(z.method)})),e.isFunction(s)?(w.verbose("Executing invoked function",s),s.apply(a,i)):s||!1}},f?(w===o&&t.initialize(),i=t.invoke(m)):(w!==o&&t.destroy(),t.initialize())}),i?i:this},e.fn.form.settings={moduleName:"Form",debug:!0,verbose:!0,performance:!1,namespace:"validate",keyboardShortcuts:!0,on:"submit",animateSpeed:150,inlineError:!1,onValid:function(){},onInvalid:function(){},onSuccess:function(){return!0},onFailure:function(){return!1},metadata:{validate:"validate"},selector:{message:".error.message",field:"input, textarea, select",group:".field",input:"input",prompt:".prompt",submit:".submit"},className:{error:"error",success:"success",down:"down",label:"ui label prompt"},error:{method:"The method you called is not defined."},templates:{error:function(t){var n='
';return e.each(t,function(e,t){n+="
"+t+"
"}),n+="
",e(n)},prompt:function(t){return e("").addClass("ui red pointing prompt label").html(t[0])}},rules:{empty:function(e){return!(e===o||""===e)},email:function(e){var t=RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");return t.test(e)},length:function(e,t){return e!==o?e.length>=t:!1},not:function(e,t){return e!=t},is:function(e,t){return e==t},maxLength:function(e,t){return e!==o?t>=e.length:!1},match:function(t,n){var i,a=e(this);return a.find("#"+n).size()>0?i=a.find("#"+n).val():a.find("[name="+n+"]").size()>0?i=a.find("[name="+n+"]").val():a.find('[data-validate="'+n+'"]').size()>0&&(i=a.find('[data-validate="'+n+'"]').val()),i!==o?""+t==""+i:!1},url:function(e){var t=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)}}}}(jQuery,window,document),function(e,t,n,o){e.fn.state=function(t){var n,i=e(this),a=i.selector||"",r=arguments[0],s=[].slice.call(arguments,1),c=(new Date).getTime(),l=[];return i.each(function(){var u,d=e(this),m=e.extend(!0,{},e.fn.state.settings,t),f=this,p=d.data("module-"+m.namespace),g="string"==typeof r,h=m.namespace,v=m.metadata,b=m.className,y=m.states,x=m.text;u={initialize:function(){u.verbose("Initializing module",f),m.automatic&&u.add.defaults(),m.context&&""!==a?(u.allows("hover")&&e(f,m.context).on(a,"mouseenter."+h,u.hover.enable).on(a,"mouseleave."+h,u.hover.disable),u.allows("pressed")&&e(f,m.context).on(a,"mousedown."+h,u.pressed.enable).on(a,"mouseup."+h,u.pressed.disable),u.allows("focus")&&e(f,m.context).on(a,"focus."+h,u.focus.enable).on(a,"blur."+h,u.focus.disable),e(m.context).on(a,"mouseenter."+h,u.text.change).on(a,"mouseleave."+h,u.text.reset).on(a,"click."+h,u.toggle)):(u.allows("hover")&&d.on("mouseenter."+h,u.hover.enable).on("mouseleave."+h,u.hover.disable),u.allows("pressed")&&d.on("mousedown."+h,u.pressed.enable).on("mouseup."+h,u.pressed.disable),u.allows("focus")&&d.on("focus."+h,u.focus.enable).on("blur."+h,u.focus.disable),d.on("mouseenter."+h,u.text.change).on("mouseleave."+h,u.text.reset).on("click."+h,u.toggle)),d.data("module-"+h,u)},destroy:function(){u.verbose("Destroying previous module",f),d.off("."+h)},refresh:function(){u.verbose("Refreshing selector cache",f),d=e(f)},add:{defaults:function(){var n=t&&e.isPlainObject(t.states)?t.states:{};e.each(m.defaults,function(t,i){u.is[t]!==o&&u.is[t]()&&(u.verbose("Adding default states",t,f),e.extend(m.states,i,n))})}},is:{active:function(){return d.hasClass(b.active)},loading:function(){return d.hasClass(b.loading)},inactive:function(){return!d.hasClass(b.active)},enabled:function(){return!d.is(m.filter.active)},disabled:function(){return d.is(m.filter.active)},textEnabled:function(){return!d.is(m.filter.text)},button:function(){return d.is(".button:not(a, .submit)")},input:function(){return d.is("input")}},allows:function(e){return y[e]||!1},enable:function(e){u.allows(e)&&d.addClass(b[e])},disable:function(e){u.allows(e)&&d.removeClass(b[e])},textFor:function(e){return x[e]||!1},focus:{enable:function(){d.addClass(b.focus)},disable:function(){d.removeClass(b.focus)}},hover:{enable:function(){d.addClass(b.hover)},disable:function(){d.removeClass(b.hover)}},pressed:{enable:function(){d.addClass(b.pressed).one("mouseleave",u.pressed.disable)},disable:function(){d.removeClass(b.pressed)}},toggle:function(){var e=d.data(v.promise);u.allows("active")&&u.is.enabled()&&(u.refresh(),e!==o?u.listenTo(e):u.change())},listenTo:function(t){u.debug("API request detected, waiting for state signal",t),t?(x.loading&&u.text.update(x.loading),e.when(t).then(function(){"resolved"==t.state()?(u.debug("API request succeeded"),m.activateTest=function(){return!0},m.deactivateTest=function(){return!0}):(u.debug("API request failed"),m.activateTest=function(){return!1},m.deactivateTest=function(){return!1}),u.change()})):(m.activateTest=function(){return!1},m.deactivateTest=function(){return!1})},change:function(){u.debug("Determining state change direction"),u.is.inactive()?u.activate():u.deactivate(),m.sync&&u.sync(),m.onChange()},activate:function(){e.proxy(m.activateTest,f)()&&(u.debug("Setting state to active"),d.addClass(b.active),u.text.update(x.active))},deactivate:function(){e.proxy(m.deactivateTest,f)()&&(u.debug("Setting state to inactive"),d.removeClass(b.active),u.text.update(x.inactive))},sync:function(){u.verbose("Syncing other buttons to current state"),u.is.active()?i.not(d).state("activate"):i.not(d).state("deactivate")},text:{get:function(){return m.selector.text?d.find(m.selector.text).text():d.html()},flash:function(e,t){var n=u.text.get();e=e||m.text.flash,t=t||m.flashDuration,u.text.update(e),setTimeout(function(){u.text.update(n)},t)},change:function(){u.verbose("Checking if text should be changed"),u.is.textEnabled()&&(u.is.active()?x.hover?(u.verbose("Changing text to hover text",x.hover),u.text.update(x.hover)):x.disable&&(u.verbose("Changing text to disable text",x.disable),u.text.update(x.disable)):x.hover?(u.verbose("Changing text to hover text",x.disable),u.text.update(x.hover)):x.enable&&(u.verbose("Changing text to enable text",x.disable),u.text.update(x.enable)))},reset:function(){var e=x.active||d.data(v.storedText),t=x.inactive||d.data(v.storedText);u.is.textEnabled()&&(u.is.active()&&e?(u.verbose("Resetting active text",e),u.text.update(e)):t&&(u.verbose("Resetting inactive text",e),u.text.update(t)))},update:function(e){var t=u.text.get();e&&e!==t&&(u.debug("Updating text",e),m.selector.text?d.data(v.storedText,e).find(m.selector.text).text(e):d.data(v.storedText,e).html(e))}},setting:function(e,t){return t===o?m[e]:(m[e]=t,o)},performance:{log:function(e){var t,n;m.performance&&(t=(new Date).getTime(),n=t-c,c=t,l.push({Name:e,"Execution Time":n}),clearTimeout(u.performance.timer),u.performance.timer=setTimeout(u.performance.display,100))},display:function(){var t=m.moduleName+" Performance ("+a+")";m.moduleName+": "+a+"("+i.size()+" elements)",console.group!==o&&l.length>0&&(console.groupCollapsed(t),console.table?console.table(l):e.each(l,function(e,t){console.log(t.Name+":"+t["Execution Time"])}),console.groupEnd(),l=[])}},verbose:function(){m.verbose&&m.debug&&(u.performance.log(arguments[0]),u.verbose=Function.prototype.bind.call(console.info,console,m.moduleName+":"))},debug:function(){m.debug&&(u.performance.log(arguments[0]),u.debug=Function.prototype.bind.call(console.info,console,m.moduleName+":"))},error:function(){console.log!==o&&(u.error=Function.prototype.bind.call(console.log,console,m.moduleName+":"))},invoke:function(t,n,i){var a,r;return i=i||[].slice.call(arguments,2),"string"==typeof t&&p!==o&&(t=t.split("."),a=t.length-1,e.each(t,function(t,n){return e.isPlainObject(p[n])&&t!=a?(p=p[n],!0):p[n]!==o?(r=p[n],!0):(u.error(m.errors.method),!1)})),e.isFunction(r)?r.apply(n,i):r}},g?n=u.invoke(r,this,s):(p!==o&&u.destroy(),u.initialize())}),n!==o?n:this},e.fn.state.settings={moduleName:"State Module",debug:!0,verbose:!1,namespace:"state",performance:!0,onChange:function(){},activateTest:function(){return!0},deactivateTest:function(){return!0},automatic:!0,sync:!1,flashDuration:3e3,filter:{text:".loading, .disabled",active:".disabled"},context:!1,errors:{method:"The method you called is not defined."},metadata:{promise:"promise",storedText:"stored-text"},className:{focus:"focus",hover:"hover",pressed:"down",active:"active",loading:"loading"},selector:{text:!1},defaults:{input:{hover:!0,focus:!0,pressed:!0,loading:!1,active:!1},button:{hover:!0,focus:!1,pressed:!0,active:!1,loading:!0}},states:{hover:!0,focus:!0,pressed:!0,loading:!1,active:!1},text:{flash:!1,hover:!1,active:!1,inactive:!1,enable:!1,disable:!1}}}(jQuery,window,document),function(e,t,n,o){e.fn.carousel=function(t){var n,i=e(this),a=e.extend(!0,{},e.fn.carousel.settings,t),r=("."+a.namespace,"module-"+a.namespace,i.selector||""),s=(new Date).getTime(),c=[],l=arguments[0],u="string"==typeof l,d=[].slice.call(arguments,1);return i.each(function(){var t,m=e(this),f=(e(a.selector.arrows),e(a.selector.leftArrow)),p=e(a.selector.rightArrow),g=e(a.selector.content),h=(e(a.selector.navigation),e(a.selector.navItem)),v=(m.selector||"",this),b=m.data("module-"+a.namespace),y=a.className,x=a.namespace,w=a.errors;t={initialize:function(){t.openingAnimation(),t.marquee.autoAdvance(),f.on("click",t.marquee.left),p.on("click",t.marquee.right),h.on("click",t.marquee.change)},destroy:function(){t.verbose("Destroying previous module for",m),m.off(x)},left:function(){var e=g.filter("."+y.active),t=g.index(e),n=g.size(),o=-1!=t-1?t-1:n-1;h.eq(o).trigger("click")},right:function(){var e=g.filter("."+y.active),t=g.index(e),n=g.size(),o=t+1!=n?t+1:0;h.eq(o).trigger("click")},change:function(){var n=e(this),o=h.index(n),i=g.eq(o);t.marquee.autoAdvance(),n.addClass("active").siblings().removeClass("active"),i.addClass("active animated fadeIn").siblings("."+y.active).removeClass("animated fadeIn scaleIn").animate({opacity:0},500,function(){e(this).removeClass("active").removeAttr("style")})},autoAdvance:function(){clearInterval(t.timer),t.timer=setInterval(t.marquee.right,a.duration)},setting:function(n,i){return i===o?a[n]:(e.isPlainObject(n)?(t.verbose("Modifying settings object",n,i),e.extend(!0,a,n)):(t.verbose("Modifying setting",n,i),a[n]=i),o)},internal:function(n,i){return i===o?t[n]:(e.isPlainObject(n)?(t.verbose("Modifying internal property",n,i),e.extend(!0,t,n)):(t.verbose("Changing internal method to",i),t[n]=i),o)},debug:function(){a.debug&&(a.performance?t.performance.log(arguments):t.debug=Function.prototype.bind.call(console.info,console,a.moduleName+":"))},verbose:function(){a.verbose&&a.debug&&(a.performance?t.performance.log(arguments):t.verbose=Function.prototype.bind.call(console.info,console,a.moduleName+":"))},error:function(){t.error=Function.prototype.bind.call(console.log,console,a.moduleName+":")},performance:{log:function(e){var n,o,i;a.performance&&(n=(new Date).getTime(),i=s||n,o=n-i,s=n,c.push({Element:v,Name:e[0],Arguments:e[1]||"None","Execution Time":o}),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100))},display:function(){var t=a.moduleName,n=(a.moduleName+": "+r+"("+i.size()+" elements)",0);r&&(t+=" Performance ("+r+")"),(console.group!==o||console.table!==o)&&c.length>0&&(console.groupCollapsed(t),console.table?(e.each(c,function(e,t){n+=t["Execution Time"]}),console.table(c)):e.each(c,function(e,t){n+=t["Execution Time"],console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),c=[],s=!1)}},invoke:function(n,i,a){var r,s;return i=i||d,a=v||a,"string"==typeof n&&b!==o&&(n=n.split("."),r=n.length-1,e.each(n,function(n,i){return e.isPlainObject(b[i])&&n!=r?(b=b[i],!0):b[i]!==o?(s=b[i],!0):(t.error(w.method),!1)})),e.isFunction(s)?(b.verbose("Executing invoked function",s),s.apply(a,i)):s||!1}},u?(b===o&&t.initialize(),n=t.invoke(l)):(b!==o&&t.destroy(),t.initialize())}),n?n:this},e.fn.carousel.settings={moduleName:"Carousel Module",namespace:"carousel",verbose:!0,debug:!0,performance:!0,duration:5e3,errors:{method:"The method you called is not defined."},selector:{arrows:".arrow",leftArrow:".left.arrow",rightArrow:".right.arrow",content:".content",navigation:".navigation",navItem:".navigation .icon"},className:{active:"active"}}}(jQuery,window,document),function(e,t,n,o){e.fn.chat=function(t,n,i){var a=e.extend(!0,{},e.fn.chat.settings,i),r=arguments||!1;return e(this).each(function(){var i,s,c,l,u,d,m=e(this),f=m.find(a.selector.expandButton),p=m.find(a.selector.userListButton),g=m.find(a.selector.userList),h=(m.find(a.selector.room),m.find(a.selector.userCount)),v=m.find(a.selector.log),b=(m.find(a.selector.message),m.find(a.selector.messageInput)),y=m.find(a.selector.messageButton),x=m.data("module"),w=a.className,C=a.namespace,k="",T={};return d={channel:!1,width:{log:v.width(),userList:g.outerWidth()},initialize:function(){return Pusher===o&&d.error(a.errors.pusher),t===o||n===o?(d.error(a.errors.key),!1):a.endpoint.message||a.endpoint.authentication?(u=new Pusher(t),Pusher.channel_auth_endpoint=a.endpoint.authentication,d.channel=u.subscribe(n),d.channel.bind("pusher:subscription_succeeded",d.user.list.create),d.channel.bind("pusher:subscription_error",d.error),d.channel.bind("pusher:member_added",d.user.joined),d.channel.bind("pusher:member_removed",d.user.left),d.channel.bind("update_messages",d.message.receive),e.each(a.customEvents,function(e,t){d.channel.bind(e,t)
}),e.fn.hoverClass!==o&&e.fn.downClass!==o&&(f.hoverClass().downClass(),p.hoverClass().downClass(),y.hoverClass().downClass()),p.on("click."+C,d.event.toggleUserList),f.on("click."+C,d.event.toggleExpand),b.on("keydown."+C,d.event.input.keydown).on("keyup."+C,d.event.input.keyup),y.on("mouseenter."+C,d.event.hover).on("mouseleave."+C,d.event.hover).on("click."+C,d.event.submit),v.animate({scrollTop:v.prop("scrollHeight")},400),m.data("module",d).addClass(w.loading),o):(d.error(a.errors.endpoint),!1)},refresh:function(){p.removeClass(w.active),d.width={log:v.width(),userList:g.outerWidth()},p.hasClass(w.active)&&d.user.list.hide(),m.data("module",d)},user:{updateCount:function(){a.userCount&&(T=m.data("users"),c=0,e.each(T,function(){c++}),h.html(a.templates.userCount(c)))},joined:function(t){T=m.data("users"),"anonymous"!=t.id&&T[t.id]===o&&(T[t.id]=t.info,a.randomColor&&t.info.color===o&&(t.info.color=a.templates.color(t.id)),k=a.templates.userList(t.info),t.info.isAdmin?e(k).prependTo(g).preview({type:"user",placement:"left"}):e(k).appendTo(g).preview({type:"user",placement:"left"}),e.fn.preview!==o&&g.children().last().preview({type:"user",placement:"left"}),a.partingMessages&&(v.append(a.templates.joined(t.info)),d.message.scroll.test()),d.user.updateCount())},left:function(e){T=m.data("users"),e!==o&&"anonymous"!==e.id&&(delete T[e.id],m.data("users",T),g.find("[data-id="+e.id+"]").remove(),a.partingMessages&&(v.append(a.templates.left(e.info)),d.message.scroll.test()),d.user.updateCount())},list:{create:function(t){T={},t.each(function(e){"anonymous"!==e.id&&"undefined"!==e.id&&(a.randomColor&&e.info.color===o&&(e.info.color=a.templates.color(e.id)),k=e.info.isAdmin?a.templates.userList(e.info)+k:k+a.templates.userList(e.info),T[e.id]=e.info)}),m.data("users",T).data("user",T[t.me.id]).removeClass(w.loading),g.html(k),e.fn.preview!==o&&g.children().preview({type:"user",placement:"left"}),d.user.updateCount(),e.proxy(a.onJoin,g.children())()},show:function(){v.animate({width:d.width.log-d.width.userList},{duration:a.speed,easing:a.easing,complete:d.message.scroll.move})},hide:function(){v.stop().animate({width:d.width.log},{duration:a.speed,easing:a.easing,complete:d.message.scroll.move})}}},message:{scroll:{test:function(){l=v.prop("scrollHeight")-v.height(),Math.abs(v.scrollTop()-l)',t+=''):t+='
"}}}}(jQuery,window,document),function(e,t,n,o){e.fn.checkbox=function(t){var n,i=e(this),a=e.extend(!0,{},e.fn.checkbox.settings,t),r="."+a.namespace,s="module-"+a.namespace,c=i.selector||"",l=(new Date).getTime(),u=[],d=arguments[0],m="string"==typeof d,f=[].slice.call(arguments,1);return i.each(function(){var t,i=e(this),p=e(this).find(a.selector.input),g=i.selector||"",h=this,v=i.data("module-"+a.namespace),b=a.className,y=a.namespace,x=a.errors;t={initialize:function(){a.context&&""!==g?(t.verbose("Initializing checkbox with delegated events",i),e(h,a.context).on(g,"click"+r,t.toggle).data(s,t)):(t.verbose("Initializing checkbox with bound events",i),i.on("click"+r,t.toggle).data(s,t))},destroy:function(){t.verbose("Destroying previous module for",i),i.off(y)},is:{radio:function(){return i.hasClass(b.radio)}},can:{disable:function(){return"boolean"==typeof a.required?a.required:!t.is.radio()}},enable:function(){t.debug("Enabling checkbox"),i.addClass(b.active),p.prop("checked",!0),e.proxy(a.onChange,p.get())(),e.proxy(a.onEnable,p.get())()},disable:function(){t.debug("Disabling checkbox"),i.removeClass(b.active),p.prop("checked",!1),e.proxy(a.onChange,p.get())(),e.proxy(a.onDisable,p.get())()},toggle:function(){t.verbose("Toggling checkbox state"),p.prop("checked")!==o&&p.prop("checked")?t.can.disable()&&t.disable():t.enable()},setting:function(n,i){return i===o?a[n]:(e.isPlainObject(n)?(t.verbose("Modifying settings object",n,i),e.extend(!0,a,n)):(t.verbose("Modifying setting",n,i),a[n]=i),o)},internal:function(n,i){return i===o?t[n]:(e.isPlainObject(n)?(t.verbose("Modifying internal property",n,i),e.extend(!0,t,n)):(t.verbose("Changing internal method to",i),t[n]=i),o)},debug:function(){a.debug&&(a.performance?t.performance.log(arguments):t.debug=Function.prototype.bind.call(console.info,console,a.moduleName+":"))},verbose:function(){a.verbose&&a.debug&&(a.performance?t.performance.log(arguments):t.verbose=Function.prototype.bind.call(console.info,console,a.moduleName+":"))},error:function(){t.error=Function.prototype.bind.call(console.log,console,a.moduleName+":")},performance:{log:function(e){var n,o,i;a.performance&&(n=(new Date).getTime(),i=l||n,o=n-i,l=n,u.push({Element:h,Name:e[0],Arguments:e[1]||"","Execution Time":o})),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100)},display:function(){var t=a.moduleName+":",n=0;l=!1,e.each(u,function(e,t){n+=t["Execution Time"]}),t+=" "+n+"ms",c&&(t+=" '"+c+"'"),(console.group!==o||console.table!==o)&&u.length>0&&(console.groupCollapsed(t),console.table?console.table(u):e.each(u,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),u=[]}},invoke:function(n,i,a){var r,s;return i=i||f,a=h||a,"string"==typeof n&&v!==o&&(n=n.split("."),r=n.length-1,e.each(n,function(n,i){return e.isPlainObject(v[i])&&n!=r?(v=v[i],!0):v[i]!==o?(s=v[i],!0):(t.error(x.method),!1)})),e.isFunction(s)?(v.verbose("Executing invoked function",s),s.apply(a,i)):s||!1}},m?(v===o&&t.initialize(),n=t.invoke(d)):(v!==o&&t.destroy(),t.initialize())}),n?n:this},e.fn.checkbox.settings={moduleName:"Checkbox",namespace:"checkbox",verbose:!0,debug:!0,performance:!0,context:!1,required:"auto",onChange:function(){},onEnable:function(){},onDisable:function(){},errors:{method:"The method you called is not defined."},selector:{input:"input"},className:{active:"active",radio:"radio"}}}(jQuery,window,document),function(e,t,n,o){e.fn.dimmer=function(t){var n,i=e(this),a=e.isPlainObject(t)?e.extend(!0,{},e.fn.dimmer.settings,t):e.fn.dimmer.settings,r=("."+a.namespace,"module-"+a.namespace,i.selector||""),s=(i.size(),(new Date).getTime()),c=[],l=arguments[0],u="string"==typeof l,d=[].slice.call(arguments,1),m=a.selector,f=a.namespace,p=a.className,g=a.error;return i.each(function(){var t,i=e(this),h=i.children(m.dimmer).first(),v="animationend msAnimationEnd oAnimationEnd webkitAnimationEnd",b=this,y=h.data("module-"+f);t={initialize:function(){t.is.dimmer()?(h=i,i=h.parent(),t.debug("Module initialized as dimmer",h)):t.has.dimmer()?(h=i.find(m.dimmer),t.debug("Module initialized with found dimmer",h)):(h=a.template.dimmer(),h.appendTo(i),t.debug("Module initialized with created dimmer",h)),i.addClass(p.dimmable),a.closable&&h.on("click",t.event.click),t.instantiate()},instantiate:function(){t.verbose("Storing instance of module"),y=t,h.data("module-"+f,y)},destroy:function(){t.verbose("Destroying previous module for",i),i.off(f)},event:{click:function(n){t.verbose("Determining if event occured on dimmer",n),console.log(n.target,m.content,e(n.target).is(m.content)),(0===h.find(n.target).size()||e(n.target).is(m.content))&&t.hide()}},animate:{show:function(){t.set.dimmed(),"css"==a.animation.show?(t.verbose("Showing dimmer animation with css"),h.one(v,function(){t.set.active(),h.removeClass(p.show)}).addClass(p.show)):"fade"==a.animation.show&&(t.verbose("Showing dimmer animation with javascript"),h.stop().css({opacity:0,width:"100%",height:"100%"}).fadeTo(a.duration,1,function(){h.removeAttr("style"),t.set.active()}))},hide:function(){t.remove.dimmed(),"css"==a.animation.hide?(t.verbose("Hiding dimmer with css"),h.one(v,function(){t.remove.active(),h.removeClass(p.hide)}).addClass(p.hide)):"fade"==a.animation.hide?(t.verbose("Hiding dimmer with javascript"),h.stop().fadeOut(a.duration,function(){h.removeAttr("style"),t.remove.active()})):e.isFunction(a.animation.hide)&&e.proxy(a.animation.hide,h)()}},has:{dimmer:function(){return i.children(m.dimmer).size()>0}},is:{animating:function(){return h.hasClass(p.show)||h.hasClass(p.hide)||h.is(":animated")},dimmer:function(){return i.is(m.dimmer)},pageDimmer:function(){return i.is(m.pageDimmer)},dimmable:function(){return i.is(m.dimmable)},enabled:function(){return!i.hasClass(p.disabled)},disabled:function(){return i.hasClass(p.disabled)},active:function(){return h.hasClass(p.active)}},can:{show:function(){return!h.hasClass(p.disabled)}},set:{active:function(){h.addClass(p.active)},dimmed:function(){i.addClass(p.dimmed)},disabled:function(){h.addClass(p.disabled)}},remove:{active:function(){h.removeClass(p.active)},dimmed:function(){i.removeClass(p.dimmed)},disabled:function(){h.removeClass(p.disabled)}},show:function(){t.debug("Showing dimmer",h),!t.is.active()&&t.is.enabled()?(t.animate.show(),e.proxy(a.onShow,b)(),e.proxy(a.onChange,b)()):t.debug("Dimmer is already shown or disabled")},hide:function(){t.is.active()?(t.debug("Hiding dimmer",h),t.animate.hide(),e.proxy(a.onHide,b)(),e.proxy(a.onChange,b)()):t.debug("Dimmer is not visible")},toggle:function(){t.verbose("Toggling dimmer visibility",h),t.is.hidden()?t.show():t.hide()},setting:function(t,n){return n===o?a[t]:(e.isPlainObject(t)?e.extend(!0,a,t):a[t]=n,o)},internal:function(n,i){return i===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=i,o)},debug:function(){a.debug&&(a.performance?t.performance.log(arguments):t.debug=Function.prototype.bind.call(console.info,console,a.moduleName+":"))},verbose:function(){a.verbose&&a.debug&&(a.performance?t.performance.log(arguments):t.verbose=Function.prototype.bind.call(console.info,console,a.moduleName+":"))},error:function(){t.error=Function.prototype.bind.call(console.log,console,a.moduleName+":")},performance:{log:function(e){var n,o,i;a.performance&&(n=(new Date).getTime(),i=s||n,o=n-i,s=n,c.push({Element:b,Name:e[0],Arguments:e[1]||"","Execution Time":o})),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100)},display:function(){var t=a.moduleName+":",n=0;s=!1,e.each(c,function(e,t){n+=t["Execution Time"]}),t+=" "+n+"ms",r&&(t+=" '"+r+"'"),(console.group!==o||console.table!==o)&&c.length>0&&(console.groupCollapsed(t),console.table?console.table(c):e.each(c,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),c=[]}},invoke:function(n,i,a){var r,s;return i=i||d,a=b||a,"string"==typeof n&&y!==o&&(n=n.split("."),r=n.length-1,e.each(n,function(n,i){e.isPlainObject(y[i])&&n!=r?y=y[i]:y[i]!==o?s=y[i]:t.error(g.method)})),e.isFunction(s)?(y.verbose("Executing invoked function",s),s.apply(a,i)):s||!1}},u?(y===o&&t.initialize(),n=t.invoke(l)):(y===o&&t.destroy(),t.initialize())}),n?n:this},e.fn.dimmer.settings={moduleName:"Dimmer",namespace:"dimmer",verbose:!0,debug:!0,performance:!0,animation:{show:"fade",hide:"fade"},closable:!0,duration:500,onChange:function(){},onShow:function(){},onHide:function(){},error:{method:"The method you called is not defined."},selector:{dimmable:".ui.dimmable",dimmer:".ui.dimmer",content:".ui.dimmer > .content"},template:{dimmer:function(){return e("").attr("class","ui dimmer")}},className:{active:"active",animating:"animating",dimmable:"ui dimmable",dimmed:"dimmed",disabled:"disabled",hide:"hide",show:"show"}}}(jQuery,window,document),function(e,t,n,o){e.fn.dropdown=function(t){var i,a=e(this),r=e(n),s=e.isPlainObject(t)?e.extend(!0,{},e.fn.dropdown.settings,t):e.fn.dropdown.settings,c="."+s.namespace,l="module-"+s.namespace,u=a.selector||"",d=(new Date).getTime(),m=[],f=arguments[0],p="string"==typeof f,g=[].slice.call(arguments,1);return a.each(function(){var t,h=e(this),v=e(this).find(s.selector.menu),b=e(this).find(s.selector.item),y=e(this).find(s.selector.text),x=e(this).find(s.selector.input),w="ontouchstart"in n.documentElement,C=(h.selector||"",this),k=h.data("module-"+s.namespace),T=s.className,z=s.metadata,N=s.namespace,P=s.animation,A=s.errors;t={initialize:function(){t.verbose("Initializing dropdown with bound events",h),w?h.on("touchstart"+c,t.event.test.toggle):"click"==s.on?h.on("click"+c,t.event.test.toggle):"hover"==s.on?h.on("mouseenter"+c,t.show).on("mouseleave"+c,t.delayedHide):h.on(s.on+c,t.toggle),"form"==s.action&&t.set.selected(),b.on(t.get.selectEvent()+c,t.event.item.click),h.data(l,t)},destroy:function(){t.verbose("Destroying previous module for",h),h.off(N)},event:{stopPropagation:function(e){e.stopPropagation()},test:{toggle:function(e){t.intent.test(e,t.toggle),e.stopPropagation()},hide:function(e){t.intent.test(e,t.hide),e.stopPropagation()}},item:{click:function(n){var o=e(this),i=o.data(z.text)||o.text(),a=o.data(z.value)||i;t.verbose("Adding active state to selected item"),b.removeClass(T.active),o.addClass(T.active),t.action.determine(i,a),e.proxy(s.onChange,h.get())(a,i),n.stopPropagation()}}},intent:{test:function(n,o){t.debug("Determining whether event occurred in dropdown",n.target),o=o||function(){},0===e(n.target).closest(v).size()?(t.verbose("Triggering event",o),o()):t.verbose("Event occurred in dropdown, canceling callback")},bind:function(){t.verbose("Binding hide intent event to document"),r.on(t.get.selectEvent(),t.event.test.hide)},unbind:function(){t.verbose("Removing hide intent event from document"),r.off(t.get.selectEvent())}},action:{determine:function(n,o){e.isFunction(t.action[s.action])?(t.verbose("Triggering preset action",s.action),t.action[s.action](n,o)):e.isFunction(s.action)?(t.verbose("Triggering user action",s.action),s.action(n,o)):t.error(A.action)},nothing:function(){},hide:function(){t.hide()},changeText:function(e){t.set.text(e),t.hide()},form:function(e,n){t.set.text(e),t.set.value(n),t.hide()}},get:{selectEvent:function(){return w?"touchstart":"click"},text:function(){return y.text()},value:function(){return x.val()},item:function(t){var n;return t=t||x.val(),b.each(function(){e(this).data(z.value)==t&&(n=e(this))}),n||!1}},set:{text:function(e){t.debug("Changing text",e,y),y.text(e)},value:function(e){t.debug("Adding selected value to hidden input",e,x),x.val(e)},selected:function(e){var n,o=(e||x.val(),t.get.item(e));o&&(t.debug("Setting selected menu item to",o),n=o.data(z.text)||o.text(),b.removeClass(T.active),o.addClass(T.active),t.set.text(n))}},is:{visible:function(){return v.is(":visible")},hidden:function(){return v.is(":not(:visible)")}},can:{click:function(){return w||"click"==s.on},show:function(){return!h.hasClass(T.disabled)}},animate:{show:function(){t.verbose("Doing menu showing animation"),"none"==P.show?v.show():"fade"==P.show?v.fadeIn(150):"slide"==P.show?v.clearQueue().children().clearQueue().css("opacity",0).delay(50).animate({opacity:1},200,"easeOutQuad").end().slideDown(100,"easeOutQuad"):t.error(A.animation)},hide:function(){t.verbose("Doing menu hiding animation"),"none"==P.hide?v.hide():"fade"==P.hide?v.fadeOut(150):"slide"==P.hide?v.clearQueue().children().clearQueue().css("opacity",1).animate({opacity:0},100,"easeOutQuad").end().delay(50).slideUp(100,"easeOutQuad"):t.error(A.animation)}},show:function(){t.debug("Checking if dropdown can show"),clearTimeout(t.graceTimer),t.is.visible()||(t.hideOthers(),h.addClass(T.visible),t.animate.show(),t.can.click()&&t.intent.bind(),e.proxy(s.onShow,h.get())())},hide:function(){t.is.hidden()||(t.debug("Hiding dropdown"),h.removeClass(T.visible),t.can.click()&&t.intent.unbind(),t.animate.hide(),e.proxy(s.onHide,h.get())())},delayedHide:function(){t.verbose("User moused away setting timer to hide dropdown"),t.graceTimer=setTimeout(t.hide,s.gracePeriod)},hideOthers:function(){t.verbose("Finding other dropdowns to hide"),a.not(h).has(s.selector.menu+":visible").dropdown("hide")},toggle:function(){t.verbose("Toggling menu visibility"),t.is.hidden()?t.show():t.hide()},setting:function(n,i){return t.debug("Changing setting",n,i),i===o?s[n]:(e.isPlainObject(n)?e.extend(!0,s,n):s[n]=i,o)},internal:function(n,i){return t.debug("Changing internal",n,i),i===o?t[n]:(e.isPlainObject(n)?e.extend(!0,t,n):t[n]=i,o)},debug:function(){s.debug&&(s.performance?t.performance.log(arguments):t.debug=Function.prototype.bind.call(console.info,console,s.moduleName+":"))},verbose:function(){s.verbose&&s.debug&&(s.performance?t.performance.log(arguments):t.verbose=Function.prototype.bind.call(console.info,console,s.moduleName+":"))},error:function(){t.error=Function.prototype.bind.call(console.log,console,s.moduleName+":")},performance:{log:function(e){var n,o,i;s.performance&&(n=(new Date).getTime(),i=d||n,o=n-i,d=n,m.push({Element:C,Name:e[0],Arguments:e[1]||"","Execution Time":o})),clearTimeout(t.performance.timer),t.performance.timer=setTimeout(t.performance.display,100)},display:function(){var t=s.moduleName+":",n=0;d=!1,e.each(m,function(e,t){n+=t["Execution Time"]}),t+=" "+n+"ms",u&&(t+=" '"+u+"'"),(console.group!==o||console.table!==o)&&m.length>0&&(console.groupCollapsed(t),console.table?console.table(m):e.each(m,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),m=[]}},invoke:function(n,i,a){var r,s;return i=i||g,a=C||a,"string"==typeof n&&k!==o&&(n=n.split("."),r=n.length-1,e.each(n,function(n,i){return e.isPlainObject(k[i])&&n!=r?(k=k[i],!0):k[i]!==o?(s=k[i],!0):(t.error(A.method),!1)})),e.isFunction(s)?(k.verbose("Executing invoked function",s),s.apply(a,i)):s||!1}},p?(k===o&&t.initialize(),i=t.invoke(f)):(k!==o&&t.destroy(),t.initialize())}),i?i:this},e.fn.dropdown.settings={moduleName:"Dropdown",namespace:"dropdown",verbose:!0,debug:!0,performance:!0,on:"click",gracePeriod:300,action:"hide",animation:{show:"slide",hide:"slide"},onChange:function(){},onShow:function(){},onHide:function(){},errors:{action:"You called a dropdown action that was not defined",method:"The method you called is not defined.",animation:"The requested animation was not found"},metadata:{text:"text",value:"value"},selector:{menu:".menu",item:".menu > .item",text:"> .text",input:'> input[type="hidden"]'},className:{active:"active",disabled:"disabled",visible:"visible"}}}(jQuery,window,document),function(e,t,n,o){e.fn.form=function(t,i){var a,r=e(this),s=(e(n),e.extend(!0,{},e.fn.form.settings,i)),c=("."+s.namespace,"module-"+s.namespace,r.selector||""),l=(new Date).getTime(),u=[],d=arguments[0],m="string"==typeof d,f=[].slice.call(arguments,1);return r.each(function(){var n,i=e(this),p=e(this).find(s.selector.group),g=e(this).find(s.selector.field),h=(e(this).find(s.selector.prompt),[]),v=this,b=i.data("module-"+s.namespace),y=s.namespace,x=s.metadata,w=s.className,C=s.errors;n={initialize:function(){n.verbose("Initializing form validation"),t===o&&e.isEmptyObject(t)?n.error(C.noFields,i):"submit"==s.on&&i.on("submit."+y,n.validate.form)},destroy:function(){i.off(y)},refresh:function(){g=i.find(s.selector.field)},field:{find:function(t){return n.refresh(),g.filter("#"+t).size()>0?g.filter("#"+t):g.filter('[name="'+t+'"]').size()>0?g.filter('[name="'+t+'"]'):g.filter("[data-"+x.validate+'="'+t+'"]').size()>0?g.filter("[data-"+x.validate+'="'+t+'"]'):e("")},add:{error:function(t,o){var i=n.field.find(t.identifier),a=i.closest(p),r=p.find(r),c=0!==r.size();a.addClass(w.error),s.inlineError&&(c||(r=e("").addClass(w.prompt).insertBefore(i)),r.html(o[0]).fadeIn(s.animateSpeed))}},remove:{error:function(e){var t=n.field.find(e.identifier),o=t.closest(p),i=p.find(i);o.removeClass(w.error),s.inlineError&&i.hide()}}},validate:{form:function(o){var i=!0;return h=[],e.each(t,function(e,t){n.validate.field(t)||(i=!1)}),i?e.proxy(s.onSuccess,this)(o):e.proxy(s.onFailure,this)(h)},field:function(t){var i=n.field.find(t.identifier),a=!0,r=[];return t.rules!==o&&e.each(t.rules,function(e,o){n.validate.rule(t,o)||(n.debug("Field is invalid",t.identifier,o.type),r.push(o.prompt),a=!1)}),a?(n.field.remove.error(t,r),s.onValid(i),!0):(h=h.concat(r),n.field.add.error(t,r),e.proxy(s.onInvalid,i)(r),!1)},rule:function(t,a){var r,c,l=n.field.find(t.identifier),u=a.type,d=l.val(),m=/\[(.*?)\]/i,f=m.exec(u),p=!0;return f!==o&&null!=f?(r=f[1],c=u.replace(f[0],""),p=e.proxy(s.rules[c],i)(d,r)):p="checked"==u?l.filter(":checked").size()>0:s.rules[u](d),p}},setting:function(t,n){return n===o?s[t]:(e.isPlainObject(t)?e.extend(!0,s,t):s[t]=n,o)},internal:function(t,i){return i===o?n[t]:(e.isPlainObject(t)?e.extend(!0,n,t):n[t]=i,o)},debug:function(){s.debug&&(n.performance.log(arguments[0]),n.debug=Function.prototype.bind.call(console.log,console,s.moduleName+":"))},verbose:function(){s.verbose&&s.debug&&(n.performance.log(arguments[0]),n.verbose=Function.prototype.bind.call(console.info,console,s.moduleName+":"))},error:function(){n.error=Function.prototype.bind.call(console.log,console,s.moduleName+":")},performance:{log:function(e){var t,o,i;s.performance&&(t=(new Date).getTime(),i=l||t,o=t-i,l=t,u.push({Element:v,Name:e,"Execution Time":o}),clearTimeout(n.performance.timer),n.performance.timer=setTimeout(n.performance.display,100))},display:function(){var t=s.moduleName,n=(s.moduleName+": "+c+"("+r.size()+" elements)",0);c&&(t+="Performance ("+c+")"),(console.group!==o||console.table!==o)&&u.length>0&&(console.groupCollapsed(t),console.table?(e.each(u,function(e,t){n+=t["Execution Time"]}),console.table(u)):e.each(u,function(e,t){n+=t["Execution Time"]}),console.log("Total Execution Time:",n+"ms"),console.groupEnd(),u=[],l=!1)}},invoke:function(t,i,a){var r,s;return i=i||f,a=v||a,"string"==typeof t&&b!==o&&(t=t.split("."),r=t.length-1,e.each(t,function(t,i){return e.isPlainObject(b[i])&&t!=r?(b=b[i],!0):b[i]!==o?(s=b[i],!0):(n.error(C.method),!1)})),e.isFunction(s)?(n.verbose("Executing invoked function",s),s.apply(a,i)):s||!1}},m?(b===o&&n.initialize(),a=n.invoke(d)):(b!==o&&n.destroy(),n.initialize())}),a?a:this},e.fn.form.settings={moduleName:"Validate Form Module",debug:!0,verbose:!1,namespace:"validate",animateSpeed:150,inlineError:!1,on:"submit",onValid:function(){},onInvalid:function(){},onSuccess:function(){return!0},onFailure:function(){return!1},metadata:{validate:"validate"},errors:{method:"The method you called is not defined.",noFields:"No validation object specified."},selector:{group:".field",prompt:".prompt",field:"input, textarea, select"},className:{error:"error",prompt:"prompt"},defaults:{firstName:{identifier:"first-name",rules:[{type:"empty",prompt:"Please enter your first name"}]},lastName:{identifier:"last-name",rules:[{type:"empty",prompt:"Please enter your last name"}]},username:{identifier:"username",rules:[{type:"email",prompt:"Please enter a username"}]},email:{identifier:"email",rules:[{type:"empty",prompt:"Please enter your email"},{type:"email",prompt:"Please enter a valid email"}]},password:{identifier:"password",rules:[{type:"empty",prompt:"Please enter a password"},{type:"length[6]",prompt:"Your password must be at least 6 characters"}]},passwordConfirm:{identifier:"password-confirm",rules:[{type:"empty",prompt:"Please confirm your password"},{identifier:"password-confirm",type:"match[password]",prompt:"Please verify password matches"}]},terms:{identifier:"terms",rules:[{type:"checked",prompt:"You must agree to the terms and conditions"}]}},rules:{empty:function(e){return!(e===o||""===e)},email:function(e){var t=RegExp("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?");return t.test(e)},length:function(e,t){return e!==o?e.length>=t:!1},not:function(e,t){return e!=t},maxLength:function(e,t){return e!==o?t>=e.length:!1},match:function(t,n){var i,a=e(this);return a.find("#"+n).size()>0?i=a.find("#"+n).val():a.find("[name="+n+"]").size()>0?i=a.find("[name="+n+"]").val():a.find('[data-validate="'+n+'"]').size()>0&&(i=a.find('[data-validate="'+n+'"]').val()),i!==o?""+t==""+i:!1},url:function(e){var t=/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;return t.test(e)}}}}(jQuery,window,document),function(e,t,n,o){e.dimScreen=function(t){var n="function"==typeof t?e.extend({},e.fn.modal.settings,{dim:t}):e.extend({},e.fn.modal.settings,t),o=e(n.context),i=o.children(n.selector.dimmer),a=i.size()>0,r=i.css("opacity");return a||(i=e("").attr("id","dimmer").html(''),o.append(i)),r!=n.opacity&&(i.one("click",function(){n.unDim(),e.unDimScreen()}),0===n.duration?(i.css({visibility:"visible"}).find(".content").css({opacity:n.opacity,visibility:"visible"}),n.dim()):i.css({visibility:"visible"}).find(".content").css({opacity:0,visibility:"visible"}).fadeTo(n.duration,n.opacity,n.dim)),this},e.unDimScreen=function(t){var n="function"==typeof t?e.extend({},e.fn.modal.settings,{unDim:t}):e.extend({},e.fn.modal.settings,t),o=e(n.context),i=o.children(n.selector.dimmer),a=i.size()>0;return a&&(n.unDim(),0===n.duration?i.css({visibility:"hidden"}).remove():i.find(".content").fadeTo(n.duration,0,function(){i.remove()})),this},e.fn.modal=function(i){var a,r=e.extend(!0,{},e.fn.modal.settings,i),s=arguments[0],c=[].slice.call(arguments,1);return e(this).each(function(){var i,l=e(this),u=l.find(r.selector.closeButton),d=(e(r.context).find(r.selector.dimmer),e(r.context).children(r.selector.modal)),m=d.not(l),f=l.data("module-"+r.namespace),p="string"==typeof s,g=(r.className,r.namespace);i={initialize:function(){l.on("modalShow."+g,i.show).on("modalHide."+g,i.hide).data("module-"+g,i)},show:function(){var i=l.outerHeight(),a=e(t).height(),s=i>a,c=s?"absolute":"fixed",d=s?"0":"50%",f=s?a/8:-((i-r.closeSpacing)/2),p="absolute"==l.css("position")?f+e(t).prop("pageYOffset"):f,h=p+r.animationOffset;e.fn.popIn!==o?l.addClass(c).css({display:"block",opacity:0,top:d,marginTop:p+"px"}).popIn():l.addClass(c).css({display:"block",opacity:0,top:d,marginTop:h+"px"}).animate({opacity:1,marginTop:p+"px"},r.duration+300,r.easing),m.is(":visible")&&m.filter(":visible").hide(),console.log("zzz"),e.dimScreen({context:r.context,duration:0,dim:function(){console.log("aaa"),e(n).on("keyup."+g,function(e){var t=e.which,n=27;switch(t){case n:l.modal("hide"),e.preventDefault()}}),console.log(u),console.log("attaching click"),u.one("click",function(){l.modal("hide")}),r.dim()},unDim:function(){l.modal("hide"),u.unbind("click")}})},hide:function(){e(n).off("keyup."+g),e.unDimScreen({duration:0,unDim:function(){l.popOut(200),r.unDim()}})},setting:function(e,t){return t===o?r[e]:(r[e]=t,o)},debug:function(){var e=[],t=r.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.info||console.log||function(){};r.debug&&(e.push(t),o.apply(console,e.concat(n)))},error:function(){var e=[],t=r.moduleName+": "+arguments[0],n=[].slice.call(arguments,1),o=console.warn||console.log||function(){};r.debug&&(e.push(t),e.concat(n),o.apply(console,e.concat(n)))},invoke:function(t,n,a){var s,c;return a=a||[].slice.call(arguments,2),"string"==typeof t&&f!==o&&(t=t.split("."),s=t.length-1,e.each(t,function(t,n){return e.isPlainObject(f[n])&&t!=s?(f=f[n],!0):f[n]!==o?(c=f[n],!0):(i.error(r.errors.method),!1)})),e.isFunction(c)?c.apply(n,a):c}},p?a=i.invoke(s,this,c):i.initialize()}),a!==o?a:this},e.fn.modal.settings={moduleName:"Modal",debug:!1,namespace:"modal",errors:{method:"The method you called is not defined"},dim:function(){},unDim:function(){},hide:function(){},show:function(){},context:"body",opacity:.8,closeSpacing:25,animationOffset:15,duration:400,easing:"easeOutExpo",selector:{dimmer:"#dimmer",modal:".modal",closeButton:".close"}}}(jQuery,window,document),function(e,t,n,o){e.fn.nag=function(n){var i=e.extend(!0,{},e.fn.nag.settings,n),a=arguments||!1;return e(this).each(function(){var n,r,s,c,l,u,d,m,f,p=e(this),g=p.find(i.selector.close),h=e(i.context),v=p.data("module"),b=i.className,y=t.requestAnimationFrame||t.mozRequestAnimationFrame||t.webkitRequestAnimationFrame||t.msRequestAnimationFrame||function(e){setTimeout(e,0)};return f={initialize:function(){n=p.offset(),r=p.outerHeight(),s=h.outerWidth(),c=h.outerHeight(),l=h.offset(),p.data("module",f),g.on("mouseenter mouseleave",f.event.hover).on("click",f.dismiss),i.context==t&&"fixed"==i.position&&p.addClass(b.fixed),i.sticky&&("absolute"==i.position?h.on("scroll resize",f.event.scroll):e(t).on("scroll resize",f.event.scroll),e.proxy(f.event.scroll,this)()),i.followLink&&p.on("mouseenter mouseleave",f.event.hover).on("click",f.followLink),i.displayTime>0&&setTimeout(f.hide,i.displayTime),f.should.show()?p.is(":visible")||f.show():f.hide()
diff --git a/node/src/documents/specification/cssguide.html b/node/src/documents/specification/cssguide.html
new file mode 100755
index 000000000..199f95b47
--- /dev/null
+++ b/node/src/documents/specification/cssguide.html
@@ -0,0 +1,195 @@
+ ---
+layout : 'default'
+css : 'guide'
+
+title : 'CSS Tips'
+type : 'UI Specification'
+---
+
+
+
Style Guide
+
+
+
+
+
Writing CSS
+
Here's a set of guidelines that may help make writing UI components easier.
+
+
+
Use Border Box
+
Border box fixes the box model, and allows padding to be included as part of width and height definitions. Using it opens up another world of possibilities for sizing content to fit fluidly
Sometimes bordered content must sit next to other bordered content. If each element uses border the borders will double. Consider using either outline or a box shadow to accomplish the same effect but without overlapping borders.
+
+ // this might not go so well
+ .ui.thingy {
+ border: 1px solid #DDDDDD;
+ }
+ // rgba is great, but keep in mind the overlapping borders will be added together to create a darker shade
+ .ui.thingy {
+ outline: 1px solid rgba(0, 0, 0, 0.1);
+ }
+ // classic but works
+ .ui.thingy {
+ outline: 1px solid #DDDDDD;
+ }
+ // this works too
+ .ui.thingy {
+ -moz-box-shadow: 0px 0px 0px 1px #DDDDDD;
+ -webkit-box-shadow: 0px 0px 0px 1px #DDDDDD;
+ box-shadow: 0px 0px 0px 1px #DDDDDD;
+ }
+
+
+
+
+
Relatively Relative
+
It's often useful to have multiple sizes of an element. One tip that makes creating resizes easier is to use EMs and relative EMs or rems.
+
EMs are defined so that 1em is equal to the current font size inside of an element.
+
+ .ui.thingy {
+ font-size: 14px;
+ }
+ // this is 28 pixels
+ .ui.thingy .thing {
+ font-size: 2em;
+ }
+ // woah this is now 48 pixels
+ .ui.thingy .thing .thing {
+ font-size: 2em;
+ }
+
+
+
+
+
Absolutely Relative
+
REMs are defined so that 1rem is equal to 1 em on the html tag of the page. This is needed to explain how content should be sized related to the overall size of elements on the page
Using EMs however can often be used to your advantage. Instead of defining multiple tiers of a menu system. Consider using ems for its sizing. As you continue to nest menu elements each nested menu will computer its values with smaller proportions.
RGBA colors in css allow you to specify colors with a transparency channel. This is very useful.
+
Consider for example, defining the text states of an element. If the elements color changes, the text might appear more complementary as a shade of black with a portion of the original color. This can be done easily with rgba
CSS floats can create issues with the containing element not receiving the size of its children. Using overflow:hidden to clear floats means that no peice of an element can be shown outside the bounding box of the element, which limits the possibilities in an element. Clearfixes can use up one of two available pseudo class which can often be useful for styling elements.
+
Consider using another means of putting content side by side like inline-block or table-cell. These provide more freedom than floated block elements, and can add additional benefits.
+
To avoid issues with inline-block causing spacing between elements, specify no font size on the group and 1rem on the floated content
+
+ // not the best
+ .ui.thingy {
+ display: block;
+ overflow: hidden;
+ }
+ .ui.thingy .part {
+ display: block;
+ float: left;
+ }
+
+ // these do the same thing
+ .ui.thingy {
+ display: block;
+ font-size: 0rem;
+ }
+ .ui.thingy .part {
+ display: inline-block;
+ font-size: 1rem;
+ }
+
+
+
+
+
+
Onion Skinning
+
One technique that is useful for allowing for infinite color variations of an element, without having to completely reskin each variation and shade, is to use background color and background-image together to define colors.
\ No newline at end of file
diff --git a/node/src/documents/specification/styleguide.html b/node/src/documents/specification/styleguide.html
index 9d1e51a56..f105e0a53 100755
--- a/node/src/documents/specification/styleguide.html
+++ b/node/src/documents/specification/styleguide.html
@@ -2,50 +2,111 @@
layout : 'default'
css : 'guide'
-title : 'Style Guide'
+title : 'Authoring Guide'
type : 'UI Specification'
---
-
Project Roadmap
+
Style Guide
-
-
-
-
- Progress Report
-
-
Current status of work on Semantic UI
+
Creating UI Definitions
+
+
Defining anything will involve some slightly arbitrary decision making. The goal of semantic is not to create code that is free from prescription, but to create code that tends to avoid it if possible.
+
The following are some guidelines which help avoid some common pitfalls in writing UI element definitions.
+
+
+
Commonality
+
Try to use the most obvious names for classes. If you're not sure, prototype the element, then ask a friend or two what they would call it.
-
-
-
- HTML
-
-
- Variations should be defined in one word - if its a class then a word exists for it in english
-
-
- Use Border Box
-
- Use gradients for tinting solid colors
-
- Use ems or rems
-
- Use inline block not float
-
- Use after clear fix
-
- Scale content with ems not pixels
-
- Use box shadow instead of borders for adding borders that dont use box model
-
- Use rgba instead of hexcode unless you dont want color layering to be additive
-
-
+
+
Precision
+
Classes should be defined in one word, if the concept cannot be reduced to a single word then consider factoring it into multiple sub classes
Avoid requiring any specific tags in your definitions. This will allow developers to choose which tags they would like to use with an element.
+
Sometimes however it makes sense to allow for common tags to be used in place of classnames for brevity. Paragraph tags, links, labels, and tables may be useful to use in a UI element definition without classnames.
+
Be cautious though, for example, requiring a form definition to use a form tag limits a developers ability to nest form elements inside other forms. The same is true for anchor tags
+
+
+ // hey how do you know this is the third heading?
+ // and what about all the other possible sizes?
+ .ui.thingy h3 {
+
+ }
+
+ // yay the developer can choose what type of heading tag to use
+ .ui.thingy .header {
+
+ }
+
+ // wow this guy is going to have to do a lot of typing...
+ .ui.table .cell {
+
+ }
+ // this seems like a reasonable assumption, html is a bit strict about these things
+ .ui.table td {
+
+ }
+
+
+
+
+
+ // wow this guy is going to have to do a lot of typing...
+ .ui.table .cell {
+
+ }
+ // this seems like a reasonable assumption, html is a bit strict about these things
+ .ui.table td {
+
+ }
+
+
+
+
Inversion
+
Elements are often inverted to stand out on dark backgrounds. Consider creating a variation of your element defines how the element can invert its colors.
+
Keep in mind you might have to increase the contrast between shades of your element when inverting colors, its much easier to detect in a design between multiple shades of a light color than a dark one.
\ No newline at end of file
diff --git a/node/src/layouts/default.html.eco b/node/src/layouts/default.html.eco
index fc97b0143..16ba0ab77 100755
--- a/node/src/layouts/default.html.eco
+++ b/node/src/layouts/default.html.eco
@@ -75,6 +75,14 @@