NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// has embedded jQuery 2.1.4 // ==UserScript== // @name Keyprism3 Pivotal // @namespace http://mrobbinsassoc.com/ // @version 0.0.3 // @description Allows interaction of Pivotal Tracker, Yodiz, TheBrain and Visual Paradigm // @author Mark Robbins // @match https://www.pivotaltracker.com/n/projects/1997711* // @match https://www.pivotaltracker.com/n/projects/1999485* // @match https://www.pivotaltracker.com/n/projects/2000741* // @grant none // @copyright 2017, Mark Robbins // @homepageURL http://mrobbinsassoc.com/projects/keyprism3/vp/publish/ // @supportURL mailto:mark.robbins@mrobbinsassoc.com // @updateURL https://openuserjs.org/meta/MarkRobbins/Keyprism3_Pivotal.meta.js // @require https://cdnjs.cloudflare.com/ajax/libs/tinycolor/1.4.1/tinycolor.min.js // ==/UserScript== // ==OpenUserJS== // @author MarkRobbins // ==/OpenUserJS== /* globals tinycolor Sass */ //console.log('Keyprism3 Pivotal pushed webhook'); tinycolor=window['tinycolor']; document.documentElement.style.backgroundColor = "black"; const clr={ _name:'clr' ,status:{ accepted:'#008800' ,unscheduled:'#000088' ,unstarted:'#888888' ,started:'#884400' ,finished:'#888800' ,delivered:'#880088' ,rejected:'#880000' } ,chore:{ bg:'#000044' ,b:'#0000aa' ,c:'#4444aa' ,filters:{ section_edit_maximize_before:'invert(1) brightness(0.5) sepia(1) saturate(140) hue-rotate(207deg) brightness(2)' ,model_preview_expander_before:'sepia(1) brightness(0.2) saturate(23) hue-rotate(229deg)' ,model_section_edit_fieldset_name_collapser:'sepia(1) brightness(1) saturate(89) hue-rotate(229deg)' ,meta_after:'sepia(1) brightness(0.2) saturate(23) hue-rotate(229deg)' } ,images:{ model_fieldset_story_name_before:{ url:'//d1x0rkxtisrwrz.cloudfront.net/next/assets/next/b0ea4009-chore.png' ,w:'18' ,h:'14' } } } ,feature:{ bg:'#444400' ,b:'#666600' ,c:'#888833' ,filters:{ section_edit_maximize_before:'invert(1) brightness(0.5) sepia(1) saturate(40) hue-rotate(34deg)' ,model_preview_expander_before:'sepia(1) brightness(0.2) saturate(23) hue-rotate(48deg)' ,model_section_edit_fieldset_name_collapser:'sepia(1) brightness(2) saturate(47) hue-rotate(32deg)' ,meta_after:'sepia(1) brightness(0.2) saturate(23) hue-rotate(52deg)' } ,images:{ model_fieldset_story_name_before:{ url:'//d1x0rkxtisrwrz.cloudfront.net/next/assets/next/902493c4-feature.png' ,w:'18' ,h:'16' } } } ,bug:{ bg:'#440000' ,b:'#660000' ,c:'#882222' ,filters:{ section_edit_maximize_before:'invert(1) brightness(0.5) sepia(1) saturate(40) hue-rotate(0deg)' ,model_preview_expander_before:'sepia(1) brightness(0.2) saturate(23) hue-rotate(0deg)' ,model_section_edit_fieldset_name_collapser:'sepia(1) brightness(1) saturate(85) hue-rotate(0deg)' ,meta_after:'sepia(1) brightness(0.2) saturate(23) hue-rotate(0deg)' } ,images:{ model_fieldset_story_name_before:{ url:'//d1x0rkxtisrwrz.cloudfront.net/next/assets/next/ef3f29e8-bug.png' ,w:'18' ,h:'15' } } } ,release:{ bg:'#004400' ,b:'#006600' ,c:'#228822' ,filters:{ section_edit_maximize_before:'invert(1) brightness(0.5) sepia(1) saturate(40) hue-rotate(85deg)' ,model_preview_expander_before:'sepia(1) brightness(0.2) saturate(23) hue-rotate(85deg)' ,model_section_edit_fieldset_name_collapser:'sepia(1) brightness(2) saturate(23) hue-rotate(85deg)' ,meta_after:'sepia(1) brightness(0.2) saturate(23) hue-rotate(85deg)' } ,images:{ model_fieldset_story_name_before:{ url:'//d1x0rkxtisrwrz.cloudfront.net/next/assets/next/e6974165-release.png' ,w:'18' ,h:'15' } } } ,epic:{ bg:'#2F1B4C' ,b:'#523181' ,c:'#634292' ,filters:{ section_edit_maximize_before:'invert(1) brightness(0.5) sepia(1) saturate(40) hue-rotate(253deg)' ,model_preview_expander_before:'sepia(1) brightness(0.2) saturate(23) hue-rotate(253deg)' ,model_section_edit_fieldset_name_collapser:'sepia(1) brightness(2) saturate(23) hue-rotate(253deg)' ,meta_after:'sepia(1) brightness(0.2) saturate(23) hue-rotate(253deg)' } ,images:{ model_fieldset_story_name_before:{ url:'//d1x0rkxtisrwrz.cloudfront.net/next/assets/next/e6974165-release.png' ,w:'18' ,h:'15' } } } }; const types=[ {_name:'button_std' ,q:function(n){return '.'+n+' button.std';} ,css:'bg b' } ,{_name:'button_std_hover' ,q:function(n){return '.'+n+' button.std:hover';} ,css:'background-color:#000000;' } ,{_name:'editor_std' ,q:function(n){return '.'+n+' .editor.std';} ,css:'b' } ,{_name:'section_edit_maximize' ,q:function(n){return '.'+n+' section.edit .maximize';} ,css:'b bg' } ,{_name:'section_edit_maximize_hover' ,q:function(n){return '.'+n+' section.edit .maximize:hover';} ,css:'b' } ,{_name:'section_edit_maximize_before' ,q:function(n){return '.'+n+' section.edit .maximize:before';} ,css:function(n){return 'filter:'+clr[n].filters[this._name]+';';} } ,{_name:'flyover_header_title_maximize_button' ,q:function(n){return '.flyover.story_flyover .'+n+' header .title .maximize_button, .flyover.epic_flyover .'+n+' header .title .maximize_button';} ,css:'b bg' } ,{_name:'flyover_header_title_maximize_button_hover' ,q:function(n){return '.flyover.story_flyover .'+n+' header .title .maximize_button:hover, .flyover.epic_flyover .'+n+' header .title .maximize_button:hover';} ,css:function(n){return 'background-color:#000000;'+n.clr('b');} } ,{_name:'flyover_header_title_maximize_button_before' ,q:function(n){return '.flyover.story_flyover .'+n+' header .title .maximize_button:before, .flyover.epic_flyover .'+n+' header .title .maximize_button:before';} ,css:function(n){return 'filter:'+clr[n].filters.section_edit_maximize_before+';';} } ,{_name:'section_model_details_actions_button' ,q:function(n){return '.'+n+' section.model_details .actions button';} ,css:'bg b' } ,{_name:'section_model_details_button_with_field_text_value' ,q:function(n){return '.'+n+' section.model_details .button_with_field .text_value';} ,css:'bg b c' } ,{_name:'renderedDescription' ,q:function(n){return '.'+n+' div[data-aid="renderedDescription"]';} ,css:'b' } ,{_name:'story_preview' ,q:function(n){return '.story.'+n+' .preview, section .'+n+'.item .preview';} ,css:'P' } ,{_name:'story_preview_hover' ,q:function(n){return '.story.'+n+' .preview:hover, section .'+n+'.item .preview:hover';} ,css:'PH' } ,{_name:'story_model_section_edit' ,q:function(n){return '.story.model.'+n+' section.edit, .model.'+n+' section.edit';} ,css:'E' } ,{_name:'preview_reveal_button' ,q:function(n){return '.'+n+' .preview .reveal.button';} ,css:'bg b' } ,{_name:'preview_reveal_button_hover' ,q:function(n){return '.'+n+' .preview .reveal.button:hover';} ,css:function(n){return 'background-color:#000000;'+n.clr('b');} } ,{_name:'info_box' ,q:function(n){return '.'+n+' .info_box';} ,css:'b' } ,{_name:'info_box_row_label_wrapper' ,q:function(n){return '.'+n+' .info_box .row.label_wrapper';} ,css:'bb' } ,{_name:'info_box_row_row' ,q:function(n){return '.'+n+' .info_box .row+.row';} ,css:'bt' } ,{_name:'info_box_followers_wrapper_row' ,q:function(n){return '.'+n+' .info_box .followers_wrapper .row';} ,css:'bt' } ,{_name:'info_box_row_timestamp_wrapper' ,q:function(n){return '.'+n+' .info_box .row.timestamp_wrapper';} ,css:'bt bg' } ,{_name:'info_box_row_initials' ,q:function(n){return '.'+n+' .info_box .row .initials';} ,css:'bg b c' } ,{_name:'info_box_row_initials_hover' ,q:function(n){return '.'+n+' .info_box .row .initials:hover';} ,css:function(n){return 'background-color:#000000;'+(n.clr('b c'));} } ,{_name:'info_box_row_owner_a_add_owner' ,q:function(n){return '.'+n+' .info_box .row.owner a.add_owner';} ,css:'b' } ,{_name:'story_story_name' ,q:function(n){return '.story.'+n+' .story_name, .'+n+' .preview .epic_name';} ,css:'N' } ,{_name:'story_preview_hover_story_name' ,q:function(n){return '.story.'+n+' .preview:hover .story_name, .'+n+' .preview:hover .epic_name';} ,css:'NH' } ,{_name:'StoryLabelsMaker_container' ,q:function(n){return '.'+n+' .StoryLabelsMaker__container___3EAb3C9T';} ,css:'b' } ,{_name:'TaskEdit' ,q:function(n){return '.'+n+' .TaskEdit___1Xmiy6lz';} ,css:'b' } ,{_name:'TaskEdit_description' ,q:function(n){return '.'+n+' .TaskEdit__description___2HWb7Rhx';} ,css:'b' } ,{_name:'TaskShow' ,q:function(n){return '.'+n+' .TaskShow___2LNLUMGe';} ,css:'b' } ,{_name:'CommentEdit' ,q:function(n){return '.'+n+' .CommentEdit___3nWNXIac';} ,css:'b' } ,{_name:'CommentEdit_add_comment' ,q:function(n){return '.'+n+' .CommentEdit__add-comment___2chBxqcu';} ,css:'bg b' } ,{_name:'CommentEdit_add_comment_hover' ,q:function(n){return '.'+n+' .CommentEdit__add-comment___2chBxqcu:hover:not(:disabled)';} ,css:function(n){return 'background-color:#000000;'+(n.clr('b'));} } ,{_name:'DescriptionEdit_editor' ,q:function(n){return '.'+n+' .DescriptionEdit___1FO6wKeX .editor___1qKjhI5c';} ,css:'b' } ,{_name:'IconButton_small_not_borderless' ,q:function(n){return '.'+n+' .IconButton___2y4Scyq6:not(.IconButton--borderless___1t-CE8H2)';} ,css:'bg b' } ,{_name:'CommentEdit_initials' ,q:function(n){return '.'+n+' .CommentEdit__initials___149LoK2_';} ,css:function(n){return 'background-color:#000000;'+(n.clr('b'));} } ,{_name:'MentionableTextArea_textarea' ,q:function(n){return '.'+n+' .MentionableTextArea__textarea___2WDXl0X6';} ,css:'b' } ,{_name:'model_preview_expander_before' ,q:function(n){return '.model.'+n+' .preview .expander:before';} ,css:function(n){return 'filter:'+clr[n].filters[this._name]+';';} } ,{_name:'model_section_edit_fieldset_name_collapser' ,q:function(n){return '.model.'+n+' section.edit fieldset.name .collapser';} ,css:function(n){return 'filter:'+clr[n].filters[this._name]+';';} } ,{_name:'model_fieldset_story_name_before' ,q:function(n){return '.model.'+n+' fieldset.story.name:before';} ,css:function(n){ if(n==='epic'){return '';} return 'content: "";margin-left:-1px;margin-top:1px;float: left;margin-right: -'+clr[n].images[this._name].w+'px;height: '+clr[n].images[this._name].h+'px;width: '+clr[n].images[this._name].w+'px;background-size: '+clr[n].images[this._name].w+'px '+clr[n].images[this._name].h+'px;background-repeat: no-repeat;background-image: url('+clr[n].images[this._name].url+');';} } ,{_name:'meta_after' ,q:function(n){return '.'+n+'.comments .meta:after, .'+n+'.description .meta:after, .'+n+'.has_tasks .meta:after';} ,css:function(n){return 'filter:'+clr[n].filters[this._name]+';';} } ,{_name:'point_scale_meta' ,q:'.point_scale_fibonacci .meta, .flyover article.point_scale_fibonacci .meta' ,css:'xfilter:brightness(0.5) sepia(1) saturate(2) brightness(1.2) hue-rotate(10deg);' } ,{_name:'flyover_header_title' ,q:function(n){return '.flyover .'+n+' header .title';} ,css:function(n){return 'background:linear-gradient(to right,#000000,'+clr[n].bg+');';} } ,{_name:'flyover_header_title+h3' ,q:function(n){return '.flyover .'+n+' header .title h3';} ,css:'c' } ]; // //,css:'background:linear-gradient(to bottom,rgba(0,0,0,0.0) 50%,#333300);border-left:2px solid #444400;border-right:2px solid #444400;' //String.prototype.clr= Object.defineProperty(String.prototype,'clr',{ get: function(){ const that=this; return function (items){ // c, bg, b, bt,bl,br; const a=items.split(' '); const me=that.toString(); const m={ c:'color' ,bg:'background-color' ,b:'border' ,bt:'border-top' ,bb:'border-bottom' ,br:'border-right' ,bl:'border-left' }; let s=''; const o=clr[me]; if (o===undefined) { console.error(me+' is not found in clr'); return ''; } if (a.length===1&&a[0]==='P') { s+='background:linear-gradient(to bottom, rgba(0,0,0,0) 50%, '+o.bg+');'; s+='border-left:2px solid '+o.b+';'; s+='border-right:2px solid '+o.b+';'; s+='border-top:1px solid #000000;'; s+='border-bottom:1px solid #000000;'; return s; } if (a.length===1&&a[0]==='PH') { //noinspection JSUnresolvedFunction const bg=tinycolor(o.bg).lighten(20).toHexString(); //noinspection JSUnresolvedFunction const b=tinycolor(o.b).lighten(20).toHexString(); s+='background:linear-gradient(to bottom, #000000 50%, '+bg+');'; s+='border-left:2px solid '+b+';'; s+='border-right:2px solid '+b+';'; return s; } if (a.length===1&&a[0]==='E') { //noinspection JSUnresolvedFunction const bg=tinycolor(o.bg).saturate(20).toHexString(); //noinspection JSUnresolvedFunction const b=tinycolor(o.b).toHexString(); s+='background:linear-gradient(to bottom, '+bg+', #000000);'; s+='box-shadow:inset 0 0 10px '+b+';'; return s; } if (a.length===1&&a[0]==='N') { //noinspection JSUnresolvedFunction const c=tinycolor(o.c).toHexString(); s+='color:'+c+';'; return s; } if (a.length===1&&a[0]==='NH') { //noinspection JSUnresolvedFunction const c=tinycolor(o.c).lighten(5).toHexString(); s+='color:'+c+';'; return s; } for (let x=0;x<a.length;x++) { const kk=a[x];//key let k=kk; if (k==='b'||k==='bt'||k==='bl'||k==='br'||k==='bb') { k='b'; } const v=o[k];//color value const n=m[kk];//css name if (k==='b') { s+=n+':1px solid '+v+';'; }else{ s+=n+':'+v+';'; } } return s; }; } ,set: function() { throw "Cannot set Read Only Property '"+n+"'"; } ,enumerable: true ,configurable: false }); //alert('xxx'.clr('ok')); Sass = window['Sass']; window.__={ _name:'__' ,set:{ _name:'set' ,urls:[ 'https://www.pivotaltracker.com/n/projects/1997711' ,'https://www.pivotaltracker.com/n/projects/1999485' ,'https://www.pivotaltracker.com/n/projects/2000741' ] } //-set ,data:{ _name:'data' ,showkeys:true } //-data ,style:{ //initFnList _name:'style' ,scrollbars:""+ +"::-webkit-scrollbar { background-color:#222; }" +"::-webkit-scrollbar-track:vertical { background-color:#0a0a0a;background:linear-gradient(to bottom,#0a0a0a,#000,#0a0a0a); }" +"::-webkit-scrollbar-track-piece { background-color:#000; }" +"::-webkit-scrollbar-track-piece:vertical { background-color:#0a0a0a;background:linear-gradient(to bottom,#0a0a0a,#000,#0a0a0a); }" +"::-webkit-scrollbar-track-piece:vertical:hover { background-color:#112;background:linear-gradient(to bottom,#112,#000,#112); }" +"::-webkit-scrollbar-track-piece:horizontal { background-color:#0a0a0a;background:linear-gradient(to right,#0a0a0a,#000,#0a0a0a); }" +"::-webkit-scrollbar-track-piece:horizontal:hover { background-color:#112;background:linear-gradient(to right,#112,#000,#112); }" +"::-webkit-scrollbar-button:vertical," +"::-webkit-scrollbar-thumb:vertical { background-color:#111;background:linear-gradient(to right,#000,#111,#000);}" +"::-webkit-scrollbar-button:vertical:hover," +"::-webkit-scrollbar-thumb:vertical:hover { background-color:#334;background:linear-gradient(to right,#222,#334,#222);}" +"::-webkit-scrollbar-button:horizontal," +"::-webkit-scrollbar-thumb:horizontal { background-color:#111;background:linear-gradient(to bottom,#000,#111,#000)}" +"::-webkit-scrollbar-button:horizontal:hover," +"::-webkit-scrollbar-thumb:horizontal:hover{ background-color:#334;background:linear-gradient(to bottom,#222,#334,#222)}" +"::-webkit-scrollbar-corner { background-color:#000; }" +"::-webkit-resizer { background-color:#000; }" ,sass:function(){ let s=''; s+='$back-color:#000000;'; s+='$back-color1:#111111;'; s+='$font-color:#888888;'; s+='$bord-color:#444444;'; s+=''; s+=''; s+='input{'; s+='background-color:$back-color;'; s+='color:$font-color;'; s+='}'; s+=''; s+='.tc_page_header_version-ia{'; s+=' background-color:$back-color1;'; s+='}'; s+=''; s+='.panel .container{'; s+=' background-color:$back-color;'; s+='}'; s+=''; s+='.editor .std{'; s+='background-color:$back-color;'; s+='color:$font-color;'; s+='border:1px solid $bord-color;'; s+='}'; s+=''; return s; } ,_fillTypes:function(n){ for (let x=0;x<types.length;x++) { const t=types[x]; let n1=t._name; if (typeof t._name==='function') { n1=t._name(n); } const name=n1+'__'+n; let q=t.q; if (typeof q==='function') { q=t.q(n); } let css=t.css; if (typeof css==='function') { css=t.css(n); } //noinspection UnnecessaryLocalVariableJS const o={ _name:name ,q:q ,css:css }; __.ui.styles[name]=o; } } ,_writeStyle:function(){ //style. let s = ''; const NL = "\n"; const styles = __.ui.styles; function getClr(i){ if (i.indexOf('__')!==-1) { const a=i.split('__'); return a[a.length-1]; } } for (const i in styles) { //console.log(i); if (!styles.hasOwnProperty(i)) { continue; } const o = styles[i]; if (typeof o!=='object') { continue; } if (o.css) { let css=o.css; const sc=css.indexOf(';')!==-1; const clr=getClr(i); if (!sc&&clr) { css=clr.clr(css); } if (o.nameIt) { const oo = o.q.q; oo.attr('id',i); s+='#'+i+'{'+NL; s+=''+css+NL; s+=''+'}'+NL; }else{ s+=''+o.q+'{'+NL; s+=''+css+NL; s+=''+'}'+NL; } } } //console.log(s); if (1) { __.utils.updateNamedStyle(s,'dark'); }else{ const sass=this.sass(); function wait(){ //noinspection JSUnresolvedFunction if (!window.Sass) { console.log('wait window.Sass'); setTimeout(wait,500); return; } // window.postMessage_old=window.postMessage; // window.postMessage=function(a,b){ // if (typeof b===undefined) { // b='*'; // } // return window.postMessage_old(a,b); // } //noinspection JSUnresolvedFunction Sass.compile(sass, function(result) { console.log("compiled", result.text); __.utils.updateNamedStyle(result.text,'dark'); //window.postMessage=window.postMessage_old; }); } wait(); } } //-writeStyle ,_init_:function(){ //style. this._fillTypes('chore'); this._fillTypes('feature'); this._fillTypes('bug'); this._fillTypes('release'); this._fillTypes('epic'); this._writeStyle(); __.utils.updateNamedStyle(this.scrollbars,'scrollbars'); } //-_init_ ,_init:function(){ //style. this._init_(); } //-_init } //-style ,libs:{ //initializableObjectContainer _name:'libs' ,StackTraceParser:{ //libs. _name:'StackTraceParser' ,UNKNOWN_FUNCTION : '<'+'unknown>' //libs.StackTraceParser ,parse: function(stackString) { //libs.StackTraceParser /** * This parses the different stack traces and puts them into one format * This borrows heavily from TraceKit (https://github.com/occ/TraceKit) */ const chrome = /^\s*at (?:(?:(?:Anonymous function)?|((?:\[object object])?\S+(?: \[as \S+])?)) )?\(?((?:file|http|https):.*?):(\d+)(?::(\d+))?\)?\s*$/i, gecko = /^(?:\s*(\S*)(?:\((.*?)\))?@)?((?:file|http|https).*?):(\d+)(?::(\d+))?\s*$/i, node = /^\s*at (?:((?:\[object object])?\S+(?: \[as \S+])?) )?\(?(.*?):(\d+)(?::(\d+))?\)?\s*$/i, lines = stackString.split('\n'), stack = []; let parts, element; for (let i = 0, j = lines.length; i < j; ++i) { if ((parts = gecko.exec(lines[i]))) { element = { 'file': parts[3], 'methodName': parts[1] || this.UNKNOWN_FUNCTION, 'lineNumber': +parts[4], 'column': parts[5] ? +parts[5] : null }; } else if ((parts = chrome.exec(lines[i]))) { element = { 'file': parts[2], 'methodName': parts[1] || this.UNKNOWN_FUNCTION, 'lineNumber': +parts[3], 'column': parts[4] ? +parts[4] : null }; } else if ((parts = node.exec(lines[i]))) { element = { 'file': parts[2], 'methodName': parts[1] || this.UNKNOWN_FUNCTION, 'lineNumber': +parts[3], 'column': parts[4] ? +parts[4] : null }; } else { continue; } stack.push(element); } return stack; } //-parse } //-StackTraceParser ,Radio:{ //libs. _name:'Radio' ,_init_:function(){ //libs.Radio if (this._initialized) {return;} this._initialized=true; (function(){ // radio "use strict"; //console.log('radio'); window.radio=radio; /** * Main Wrapper for radio.$ and create a function radio to accept the channelName * @param {String} channelName topic of event */ function radio(channelName) { if (arguments.length) { radio.$.channel(channelName); return radio.$; }else{ return radio.$; } //arguments.length ? radio.$.channel(channelName) : radio.$.reset(); } radio.$ = { version: '0.2', channelName: "", channels: [], /** * Reset global state, by removing all channels * @example * radio() */ reset: function() { radio.$.channelName = ""; radio.$.channels = []; },//-reset /** * Broadcast (publish) * Iterate through all listeners (callbacks) in current channel and pass arguments to subscribers * @param arguments data to be sent to listeners * @example * //basic usage * radio('channel1').broadcast('my message'); * //send an unlimited number of parameters * radio('channel2').broadcast(param1, param2, param3 ... ); */ broadcast: function() { const c = this.channels[this.channelName], l = c.length; let subscriber, callback, context; //iterate through current channel and run each subscriber for (let i = 0; i < l; i++) { subscriber = c[i]; //if subscriber was an array, set the callback and context. if ((typeof(subscriber) === 'object') && (subscriber.length)) { callback = subscriber[0]; //if user set the context, set it to the context otherwise, it is a globally scoped function context = subscriber[1] || global; } //noinspection JSUnresolvedFunction callback.apply(context, arguments); } return this; },//-broadcast /** * Create the channel if it doesn't exist and set the current channel/event name * @param {String} name the name of the channel * @example * radio('channel1'); */ channel: function(name) { const c = this.channels; //create a new channel if it doesn't exists if (!c[name]) c[name] = []; this.channelName = name; return this; },//-channel channelKeys:function (){ //console.log('channelKeys');//+m.c.r return Object.keys(this.channels); },//-channelKeys /** * Add Subscriber to channel * Take the arguments and add it to the this.channels array. * @param {Function|Array} arguments list of callbacks or arrays[callback, context] separated by commas * @example * //basic usage * var callback = function() {}; * radio('channel1').subscribe(callback); * * //subscribe an endless amount of callbacks * radio('channel1').subscribe(callback, callback2, callback3 ...); * * //adding callbacks with context * radio('channel1').subscribe([callback, context],[callback1, context], callback3); * * //subscribe by chaining * radio('channel1').subscribe(callback).radio('channel2').subscribe(callback).subscribe(callback2); */ subscribe: function() { const a = arguments, c = this.channels[this.channelName], l = a.length; //run through each arguments and subscribe it to the channel for (let i = 0; i < l; i++) { const ai = a[i]; //if the user sent just a function, wrap the function in an array [function] const p = (typeof(ai) === "function") ? [ai] : ai; if ((typeof(p) === 'object') && (p.length)) c.push(p); } return this; },//-subscribe /** * Remove subscriber from channel * Take arguments with functions and unsubscribe it if there is a match against existing subscribers. * @param {Function} arguments callbacks separated by commas * @example * //basic usage * radio('channel1').unsubscribe(callback); * //you can unsubscribe as many callbacks as you want * radio('channel1').unsubscribe(callback, callback2, callback3 ...); * //removing callbacks with context is the same * radio('channel1').subscribe([callback, context]).unsubscribe(callback); */ unsubscribe: function() { const a = arguments, c = this.channels[this.channelName], l = a.length; //loop through each argument for (let i = 0; i < l; i++) { //need to reset vars that change as the channel array items are removed let offset = 0; const cl = c.length; //loop through the channel for (let j = 0; j < cl; j++) { const jo = j - offset; //if there is a match with the argument and the channel function, unsubscribe it from the channel array if (c[jo][0] === a[i]) { //unsubscribe matched item from the channel array c.splice(jo, 1); offset++; } } } return this; }//-unsubscribe };//-radio.% return radio; }()); } //-_init_ ,_init:function(){ //libs.Radio this._init_(); } //-_init } //-Radio ,FontAwesome:{ //libs. _name:'FontAwesome' ,_init_:function(){ //libs.FontAwesome if (this._initialized) {return;} this._initialized=true; __.utils.addScript('https://use.fontawesome.com/09bc4b9f8f.js','fontawesome'); } //-_init_ ,_init:function(){ //libs.FontAwesome this._init_(); } //-_init } //-FontAwesome ,_init_:function(){ //libs. __.utils.__initializer.bind(this)(); } //-_init_ ,_init:function(){ //libs. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} this._init_(); } //-_init } //-libs ,utils:{ //functionContainer _name:'utils' ,itemXyWh:function(q){ //utils. if (q.x!==undefined &&q.y!==undefined &&q.w!==undefined &&q.h!==undefined) { return q; } //noinspection JSValidateTypes const st = $(window).scrollTop(); //noinspection JSValidateTypes const sl = $(window).scrollLeft(); let w1=q.width(); let h1=q.height(); let x1,y1; if (q[0]===window) { x1=0;y1=0; }else{ const b = q[0].getBoundingClientRect(); x1=b.left; y1=b.top; w1=b.width; h1=b.height; if (0) { const offset1 = q.offset(); if (offset1!==undefined) { x1=offset1.left-sl; y1=offset1.top-st; }else{ //hack! x1=sl;y1=st; } } } return {x:x1,y:y1,w:w1,h:h1}; } //-itemXyWh ,cas:function (e){ //utils. let s = ''; if (e.ctrlKey) {s += 'c';} if (e.altKey) {s += 'a';} if (e.shiftKey) {s += 's';} return s; } //-cas ,caso:function (e){ //utils. let s = ''; const o = { _: false , c: false , a: false , s: false , ca: false , cs: false , as: false , cas: false }; if (e.ctrlKey) {s += 'c';} if (e.altKey) {s += 'a';} if (e.shiftKey) {s += 's';} if (s==='') { o._=true; return o; } if (s==='c') { o.c=true; return o; } if (s==='a') { o.a=true; return o; } if (s==='s') { o.s=true; return o; } if (s==='ca') { o.ca=true; return o; } if (s==='cs') { o.cs=true; return o; } if (s==='as') { o.as=true; return o; } if (s==='cas') { o.cas=true; return o; } } //-cas ,cancel:function(e){ //utils. //console.log('keyProcessed'); e.cancelBubble = true; // IE4+ try { e.keyCode = 0; } catch (e) { } // IE5 if (window.event) {e.returnValue = false; } // IE6 if (e.preventDefault) {e.preventDefault(); } // moz/opera/konqueror if (e.stopPropagation) {e.stopPropagation(); } // all return false; } //-cancel ,delay:function(ms){ //utils. ms += new Date().getTime(); console.log('delaying '+ms); while (new Date() < ms){} console.log('delay released'); } //-delay ,inheritFrom:function(obj,tgt) { //utils. //console.log('inheritFrom..........'+arguments.callee.caller.name); const a=[]; for (const i in obj) { if (obj.hasOwnProperty(i)) { tgt[i]=obj[i]; a[a.length]=i; }else{ console.log('not inheriting "'+i+'" in '+obj.name); } } //console.log('inheritedFrom '+obj.name,a); } //-inheritedFrom ,perf:function(n){ //utils. __.data.perfs=__.data.perfs===undefined?{}:__.data.perfs; if (__.data.perfs[n]===undefined) { //noinspection JSUnresolvedVariable __.data.perfs[n]=performance.now(); }else{ //noinspection JSUnresolvedVariable console.log('perf:'+n+' took '+(performance.now()-__.data.perfs[n])+' ms'); delete __.data.perfs[n]; } } //-perf ,eachNode:function(object,fn,wantTypes,re,_bag){ //utils. /* * Iterate object passing its members to fn, filtered by wantTypes and regular expression. * * Parameters: * object: subject object * fn: callback - optional * | * signature: name,item,type,object,parent,depth,path,indexes * | * name: the name of the member * item: the member * type: typeof member * object: in which member resides * parent: the parent of object * depth: zero based recursion depth * path: dot path of current object relative to passed object * indexes: object of indexes * | itemIndex: position item was found in containing object itemDidIndex: index count of items done for containing object didIndex: global index count of items done for passed object index: global index count of items for passed object * wantTypes: array of Javascript types, defaults to ['object'] - optional * re: regular expression to filter member names * _bag: internal, do not supply, but this it will be returned * * Returns: * _bag: bag containing collections * | * * * * */ let itemIndex= -1, itemDidIndex=-1, name, item, rv,indexes, dupe, retItem; if (_bag===undefined){ const bag = { index: -1 , didIndex: -1 , _parents: [] , _paths: [] , did: [] , returns: { items: [], dupes: [] } }; Object.defineProperty(bag,'depth',{ get:function(){ return this._parents.length; } ,set:function(){} ,enumerable:true,configurable: false }); Object.defineProperty(bag,'parent',{ get:function(){ return this._parents.length>0?this._parents[this._parents.length-1]:undefined; } ,set:function(v){this._parents.push(v);} ,enumerable:true,configurable: false }); Object.defineProperty(bag,'parents',{ get:function(){ const a=[]; for(let x=0;x<this._parents.length;x++){ a.push(this._parents[x]); } return a; } ,set:function(){} ,enumerable: true,configurable: false }); Object.defineProperty(bag,'path',{ get:function(){ let p=this._paths.join('.'); p=p===''?p:p+'.'; return p+''+this._name; } ,set:function(){} ,enumerable: true,configurable: false }); bag.push=function(){ this._parents.push(this._object); this._paths.push(this._name); return __.utils.eachNode(this._item,fn,wantTypes,re,this); }; bag.pop=function(rv){ this._item=this._parents.pop(); this._paths.pop(); this._name=this._paths.length>0?this._paths[this._paths.length-1]:''; if (rv===null){this._breaking=true;} if (this.depth===0) { return this; } return rv; }; bag.path=function(){ let s=''; for (let x=0;x<this._parents.length;x++){ s+='.'+this._parents[x]._name; } return s; }; _bag=bag; } // if no bag //noinspection JSUnusedLocalSymbols fn=fn!==undefined?fn:function(name,item,type,object,parent,depth,path,indexes){return true;}; wantTypes=wantTypes?wantTypes:['object']; _bag._object=object; for(name in object){ if(!object.hasOwnProperty(name)){continue;} item=object[name]; _bag._name=name; _bag._item=item; itemIndex++; _bag.index++; const type = typeof item; if (['function','object'].indexOf(type)!==-1&&item!==null){ if (_bag.did.indexOf(item)!==-1){ indexes={ itemIndex:itemIndex ,itemDidIndex:itemDidIndex ,didIndex:_bag.didIndex ,index:_bag.index }; dupe={ item:item ,name:name ,object:object ,type:type ,parent:_bag.parent ,depth:_bag.depth ,path:_bag.path ,indexes:indexes }; _bag.returns.dupes.push(dupe); continue; }else{ _bag.did.push(item); } } if(wantTypes.indexOf(type)!==-1){ const doit = re === undefined ? true : re.test(name); if (doit){ itemDidIndex++; _bag.didIndex++; // undefined: no push, true: push, false: no push, -1: no push, 'done':abort level, 'finish': abort all indexes={ itemIndex:itemIndex ,itemDidIndex:itemDidIndex ,didIndex:_bag.didIndex ,index:_bag.index }; rv=fn(name,item,type,object,_bag.parent,_bag.depth,_bag.path,indexes); //noinspection ConstantIfStatementJS if (false){ }else if (rv==='done'){ break; }else if (rv==='finish'){ return _bag.pop(null); }else if (rv){ // '==' is OK here indexes={ itemIndex:itemIndex ,itemDidIndex:itemDidIndex ,didIndex:_bag.didIndex ,index:_bag.index }; retItem={ name:name ,item:item ,object:object ,type:type ,parent:_bag.parent ,depth:_bag.depth ,path:_bag.path ,indexes:indexes }; _bag.returns.items.push(retItem); }else if (!rv||rv===-1||rv===undefined){ // nada } } } // not want type if (type==='object'&&item!==null){ rv=_bag.push(); if(rv===null){ return _bag.pop(rv); } } if (_bag._breaking){ break; } } return _bag.pop(); } //-eachNode ,blackHtml:function(){ //utils. const color = document.documentElement.style.backgroundColor; document.documentElement.style.backgroundColor = "black"; const observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (false && mutation.target.nodeName === "BODY") { observer.disconnect(); document.documentElement.style.backgroundColor = color || ""; } }); }); //noinspection JSCheckFunctionSignatures observer.observe(document, { childList: true, subtree: true }); } //-blackHtml ,addStylesheet:function(url,id){ //utils. const style = document.createElement('link'); style.rel = 'stylesheet'; style.type = 'text/css'; //noinspection JSUnresolvedFunction, JSUnresolvedVariable,ES6ModulesDependencies style.href = chrome&&chrome.extension?chrome.extension.getURL(url):url; if (id) { style.id=id; } (document.head||document.documentElement).appendChild(style); } //-addStylesheet ,addScript:function(url,id){ //utils. const el = document.createElement('script'); el.type = 'text/javascript'; //noinspection JSUnresolvedFunction, JSUnresolvedVariable,ES6ModulesDependencies el.src=chrome&&chrome.extension?chrome.extension.getURL(url):url; if (id) { el.id=id; } (document.head||document.documentElement).appendChild(el); } //-addScript ,deleteNamedStyle:function(name_) { //utils. __.data.namedStyles=__.data.namedStyles?__.data.namedStyles:[]; const i = __.data.namedStyles.indexOf(name_); if (i!==-1) { __.data.namedStyles=__.data.namedStyles.splice(i,1); const qo=$('#'+name_); if (qo.length===1) { qo.remove(); }else{ if (qo.length>1) { console.error('multiple element matches for named style:'+name_); qo.remove(); }else{ console.error('zero element matches for named style:'+name_); } } }else{ console.warn('named style not found:'+name_); } } //-deleteNamedStyle ,updateNamedStyle:function(style_str_,name_,fn) { //utils. if (name_===undefined) { name_='defaultStyle'; } __.data.namedStyles=__.data.namedStyles?__.data.namedStyles:[]; if (__.data.namedStyles.indexOf(name_)===-1) { __.data.namedStyles.push(name_); } const st=document.getElementById(name_); if (st!==null) { //st=st[0]; st.innerHTML=style_str_; }else{ const head = document.getElementsByTagName("HEAD")[0]; const ele = head.appendChild(window.document.createElement( 'style' )); const q=$(ele); q.attr('id',name_); q.attr('type','text/css'); if (fn!==undefined) { q.on('load',fn); } ele.innerHTML = style_str_; } } //-updateNamedStyle ,addScripting:function(s,id){ //utils. const script = document.createElement("script"); // Add script content script.innerHTML = s; if (id!==undefined) { script.id=id; } // Append document.head.appendChild(script); } //-addScripting ,addScriptingFn:function(fn){ //utils. let s=''; s+='('+fn+')();'; this.addScripting(s); } //-addScriptingFn ,qOf:function(q){ //utils. //noinspection ConstantIfStatementJS if (false) { }else if (typeof q==='function') {return q(); }else if (q instanceof jQuery) {return q; }else if (typeof q==='string') {return q.q; }else if (typeof q==='object') { return q; } } //-q ,isInDocument:function(el) { //utils. const html = document.body.parentNode; while (el) { if (el === html) { return true; } el = el.parentNode; } return false; } //-isInDocument ,body_msg:function(s){ //utils. $('body').attr('data-msg',s); } // ,timeDifference:function(earlierDate,laterDate){ //utils. let tot = laterDate.getTime() - earlierDate.getTime(); const o = {}; o.days = Math.floor(tot/1000/60/60/24); tot -= o.days*1000*60*60*24; o.hours = Math.floor(tot/1000/60/60); tot -= o.hours*1000*60*60; o.minutes = Math.floor(tot/1000/60); tot -= o.minutes*1000*60; o.seconds = Math.floor(tot/1000); return o; } ,findDirection:function(me,all,dir,xtol,ytol){ //utils. xtol=xtol===undefined?5:xtol; ytol=ytol===undefined?5:ytol; me=typeof me==='string'?me.q:me; all=typeof all==='string'?all.q:all; const res=[]; all.each(function(){ const vv=$(this); res.push({r:this.getBoundingClientRect(),q:vv}); }); function center(r){ const x=r.left+r.width/2; const y=r.top+r.height/2; return {x:x,y:y}; } function dist(r1,r2){ const cp1=center(r1); const cp2=center(r2); const xx=Math.abs(cp1.x-cp2.x); const yy=Math.abs(cp1.y-cp2.y); //noinspection UnnecessaryLocalVariableJS const rv=Math.sqrt(xx*xx+yy*yy); return rv; } function xyc(r1,r2){ const cp1=center(r1); const cp2=center(r2); const rv={}; rv.x=cp2.x-cp1.x; rv.y=cp2.y-cp1.y; return rv; } const r=me.get(0).getBoundingClientRect(); //var cp=center(r); // dist xc yc res.forEach(function(v){ v.dist=dist(r,v.r); v.xyc=xyc(r,v.r); }); let cur = null; function putcur(v,max){ if (cur===null) { cur=v; return; } max=max===undefined?false:max; if (!max) { if (v.dist<cur.dist) {cur=v;} }else{ if (v.dist>cur.dist) {cur=v;} } } res.forEach(function(v){ if (v.q.get(0)===me.get(0)) { return; } //noinspection ConstantIfStatementJS if (false) { }else if (dir==='left') { if (v.xyc.y>ytol||v.xyc.y<-ytol) {return;} if (v.xyc.x>=0) {return;} putcur(v); }else if (dir==='right') { if (v.xyc.y>ytol||v.xyc.y<-ytol) {return;} if (v.xyc.x<=0) {return;} putcur(v); }else if (dir==='up') { if (v.xyc.x>xtol||v.xyc.x<-xtol) {return;} if (v.xyc.y>=0) {return;} putcur(v); }else if (dir==='down') { if (v.xyc.x>xtol||v.xyc.x<-xtol) {return;} if (v.xyc.y<=0) {return;} putcur(v); }else if (dir==='home') { if (v.xyc.y>ytol||v.xyc.y<-ytol) {return;} if (v.xyc.x>=0) {return;} putcur(v,true); }else if (dir==='end') { if (v.xyc.y>ytol||v.xyc.y<-ytol) {return;} if (v.xyc.x<=0) {return;} putcur(v,true); }else if (dir==='pgup') { if (v.xyc.x>xtol||v.xyc.x<-xtol) {return;} if (v.xyc.y>=0) {return;} putcur(v,true); }else if (dir==='pgdn') { if (v.xyc.x>xtol||v.xyc.x<-xtol) {return;} if (v.xyc.y<=0) {return;} putcur(v,true); } }); if (cur===null) { return me; } return cur.q; } ,parseQueryString:function(queryString) { //utils. const query = {}; const a = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&'); for (let i = 0; i < a.length; i++) { const b = a[i].split('='); query[decodeURIComponent(b[0])] = decodeURIComponent(b[1] || ''); } return query; } ,defunction:function(val){ //utils. if ('function'===typeof val) { return val(); } return val; } //-defunction ,messageTop:function(msg){ //utils. //noinspection JSUnresolvedFunction window.top.postMessage(msg,'*'); } //-messageTop ,clickElementRelative:function(q,x,y){ const el=q.get(0); const r=el.getBoundingClientRect(); const xx=parseInt(r.left+x); const yy=parseInt(r.top+y); const clickEvent= document.createEvent('MouseEvents'); //noinspection JSDeprecatedSymbols clickEvent.initMouseEvent( 'click', true, true, window, 0, 0, 0, xx, yy, false, false, false, false, 0, null ); el.dispatchEvent(clickEvent); } //-clickElementRelative ,__initializer:function(){ //utils. // usage: __.utils.__initializer.bind(this)(); at _init_ top // call this.??_init functions // call this.<object>_init functions if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init_');} for (const i in this) { if (!this.hasOwnProperty(i)) { continue; } //noinspection ConstantIfStatementJS if (false) { }else if (typeof this[i]==='function') { if (/^.+_init$/.test(i)) { this[i](); } }else if (typeof this[i]==='object') { if (typeof this[i]._init==='function') { this[i]._init(); } } } } //-__initializer } //-utils ,state:{ //initializableObjectsAndFunctionContainer _name:'state' ,inEditor:function(){ let q=':focus'.q; const tn=q.prop('tagName'); if (['INPUT','TEXTAREA'].indexOf(tn)!==-1) { return true; } q='div.mce-tinymce'.q; return q.length > 0 && q.is(':visible'); } //-inEditor ,isViewLoading:function(){ //state. return $(__.ui.parts.VIEW.q).length===0; } //-isViewLoading ,isViewLoaded:function(){ //state. return !this.isViewLoading(); } //-isViewLoading ,isTop:function(){ //state. //return false; return window===top; } //-isTop ,isGoodUrl:function(){ for (let x=0;x<__.set.urls.length;x++) { //console.log(window.location.origin+window.location.pathname,__.set.urls[x]); if ((window.location.origin+window.location.pathname).indexOf(__.set.urls[x])!==-1) { return true; } } return false;//__.set.urls.indexOf(window.location.origin+window.location.pathname)!==-1; } ,_init_:function(){ //state. __.utils.__initializer.bind(this)(); // nada } //-_init_ ,_init:function(){ //state. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} this._init_(); } //-_init } //-state ,actions:{ //functionContainer _name:'actions' } //-actions ,hooks:{ //initializableObjectsContainer _name:'hooks' ,mouseHooks:{ //hooks. _name:'mouseHooks' ,_init_:function(){ //body.on mousemove $(document).mousemove(function(evt){ __.data.mmx=evt.pageX; __.data.mmy=evt.pageY; //__.events.doc.mousemove(evt); //console.info('evt.pageX:',evt.pageX,'evt.pageY',evt.pageY); }); } //-_init_ ,_init:function(){ this._init_(); } } //-mouseHooks ,hashChangeHooks:{ //hooks. _name:'hashChangeHooks' ,_init_:function(){ //hooks.hashChangeHooks __.data.oldHash=window.location.hash; $(window).bind('hashchange',function(){ __.events.win.hashChange(); __.data.oldHash=window.location.hash; }); } //-_init_ ,_init:function(){ //hooks.hashChangeHooks this._init_(); } //-_init } //-hashChangeHooks ,messageHooks:{ //hooks. _name:'messageHooks' ,_init_:function(){ //hooks.messageHooks //console.log('INIT',this._name); window.addEventListener("message", function(e){ __.events.win.message(e); }, false); __.utils.messageTop({from:window.name,action:'listening'}); } //-_init_ ,_init:function(){ //hooks.messageHooks this._init_(); } //-_init } //-messageHooks ,kbdHooks:{ //hooks. _name:'kbdHooks' ,_init_:function(){ //hooks.kbdHooks $(document).on("keyup",function(e){return __.events.doc.keyup(e);}); $(document).on("keydown",function(e){return __.events.doc.keydown(e);}); $(document).on("keypress",function(e){return __.events.doc.keypress(e);}); } ,_init:function(){ //hooks.kbdHooks this._init_(); } //-_init } //-kbdHooks ,domHooks:{ //hooks. _name:'domHooks' ,_init_:function(){ //hooks.domHooks $(document).bind('DOMNodeInserted', function(event) { __.events.dom.node_inserted(event); }); $(document).bind('DOMNodeRemoved', function(event) { __.events.dom.node_removed(event); }); } //-_init_ ,_init:function(){ //hooks.domHooks this._init_(); } //_init } //-domHooks ,winHooks:{ //hooks. _name:'winHooks' ,_init_:function(){ //hooks.winHooks //noinspection JSUnresolvedFunction $(window).smartresize(__.events.win.resize); } //-_init_ ,_init:function(){ //hooks.winHooks this._init_(); } //-_init } //-winHooks ,timeHooks:{ //hooks. _name:'time' ,_init_:function(){ //hooks.timeHooks if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} } //-_init_ ,_init:function(){ //hooks.timeHooks if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} } //-_init } ,_init_:function(){ //hooks. __.utils.__initializer.bind(this)(); } //-_init_ ,_init:function(){ //hooks. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} this._init_(); } //-init } //-hooks ,ui:{ //initializableObjectsAndFunctionContainer _name:'ui' ,styles:{ _name:'styles' ,a_link:{ _name:'a_link' ,q:'a:link' ,css:'color:#667799;' } ,input:{ _name:'input' ,q:'input' ,css:'background-color:#000000;color:#888888;' } ,button_std:{ _name:'button_std' ,q:'button.std' ,css:'box-shadow:2px 2px 2px #000000;' } ,button_std_hover:{ _name:'button_std_hover' ,q:'button.std:hover' ,css:'background-color:#000000;' } ,page_header_version:{ _name:'page_header_version' ,q:'.tc_page_header_version-ia' ,css:'background-color:#111111;' } ,panel_container:{ _name:'panel_container' ,q:'.panel .container' ,css:'background-color:#000000;' } ,editor_std:{ _name:'editor_std' ,q:'.editor.std' ,css:'background-color:#000000;color:#888888;border: 1px solid #444444;' } ,main_project:{ _name:'main_project' ,q:'.main.project' ,css:'linear-gradient(to bottom,#111111,#000000);' } ,panel_labels_menu_dropdown:{ _name:'panel_labels_menu_dropdown' ,q:'.panel.labels menu.dropdown' ,css:'background-color:transparent;' } ,tn_panel_items_container:{ _name:'tn_panel_items_container' ,q:'.tn-panel-items-container___1Fk42hjC' ,css:'overflow-y:scroll;' } ,section_edit_maximize:{ _name:'section_edit_maximize' ,q:'section.edit .maximize' ,css:'background-color: #222222;border: 1px solid #444444;box-shadow:2px 2px 2px #000000;' } ,section_edit_maximize_hover:{ _name:'section_edit_maximize_hover' ,q:'section.edit .maximize:hover' ,css:'background-color: #000000;border: 1px solid #444444;' } ,renderedDescription:{ _name:'renderedDescription' ,q:'div[data-aid="renderedDescription"]' ,css:'background-color:#000000;color:#888888;border:1px solid #444444;' } ,descriptionEditButton:{ _name:'descriptionEditButton' ,q:'.Description___3oUx83yQ .edit___2HbkmNDA' ,css:'color:#666699' } ,dropdown_menu:{ _name:'dropdown_menu' ,q:'.dropdown_menu' ,css:'background-color:#000000;color:#888888;border:1px solid #222222;' } ,dropdown_section_dropdown_menu_search_item:{ _name:'dropdown_section_dropdown_menu_search_item' ,q:'.dropdown section .dropdown_menu .search_item' ,css:'background-color:#000000;' } ,dropdown_section_dropdown_menu_search_item_ul:{ _name:'dropdown_section_dropdown_menu_search_item_ul' ,q:'.dropdown section .dropdown_menu .search_item~ul' ,css:'border-top:1px solid #111111;' } ,dropdown_section_dropdown_menu_search_no_results:{ _name:'dropdown_section_dropdown_menu_search_no_results' ,q:'.dropdown section .dropdown_menu.search.no_results' ,css:'border:1px solid #444444;' } ,dropdown_menu_dropdown_item_hover:{ _name:'dropdown_menu_dropdown_item_hover' ,q:'.dropdown_menu .dropdown_item.hover' ,css:'background-color:#001122;color:#445588;' } ,dropdown_menu_hover_dropdown_item_selected_a:{ _name:'dropdown_menu_hover_dropdown_item_selected_a' ,q:'.dropdown_menu.hover .dropdown_item.selected a' ,css:'background-color:#001122;color:#445588;' } ,dropdown_menu_hover_dropdown_item_selected_hover_a:{ _name:'dropdown_menu_hover_dropdown_item_selected_hover_a' ,q:'.dropdown_menu.hover .dropdown_item.hover.selected a' ,css:'background-color:#002233;color:#445588;' } ,dropdown_menu_dropdown_item_a:{ _name:'dropdown_menu_dropdown_item_a' ,q:'.dropdown_menu .dropdown_item a' ,css:'color:#888888;' } ,dropdown_menu_dropdown_item_hover_a:{ _name:'dropdown_menu_dropdown_item_hover_a' ,q:'.dropdown_menu .dropdown_item.hover a' ,css:'color:#445588;' } ,dropdown_menu_dropdown_item_selected_a:{ _name:'dropdown_menu_dropdown_item_selected_a' ,q:'.dropdown_menu .dropdown_item.selected a' ,css:'background-color:#001122;color:#445588;' } ,DropdownMenu_menuList:{ _name:'DropdownMenu_menuList' ,q:'._1VtS8__DropdownMenu__menuList' ,css:'background-color:#111111;color:888888;border-top:1px solid #222222;' } ,DropdownMenuOption:{ _name:'DropdownMenuOption' ,q:'.Smnpz__DropdownMenuOption' ,css:'color:#888888;' } ,DropdownMenuOption_hover:{ _name:'DropdownMenuOption_hover' ,q:'.Smnpz__DropdownMenuOption:hover' ,css:'background-color:#001122;color:#445588;' } ,info_box:{ _name:'info_box' ,q:'.info_box' ,css:'background-color: rgba(0,0,0,0.6);border: 1px solid #444444;box-shadow: 3px 3px 3px #000000;' } ,info_box_row_focused:{ _name:'info_box_row_focused' ,q:'.info_box .row.focused' ,css:'background-color:#000000;' } ,info_box_row_row:{ _name:'info_box_row_row' ,q:'.info_box .row+.row' ,css:'border-top:1px solid #444444;' } ,info_box_followers_wrapper_row:{ _name:'info_box_followers_wrapper_row' ,q:'.info_box .followers_wrapper .row' ,css:'border-top:1px solid #444444;' } ,info_box_integration_wrapper_row:{ _name:'info_box_followers_wrapper_row' ,q:'.info_box .integration_wrapper .row' ,css:'border-top:1px solid #444444;' } ,info_box_row_timestamp_wrapper:{ _name:'info_box_row_row' ,q:'.info_box .row.timestamp_wrapper' ,css:'border-top:1px solid #444444;background-color:#333333;' } ,info_box_row_em:{ _name:'info_box_row_em' ,q:'.info_box .row>em' ,css:'color:#888888;text-shadow:0 1px 1px #000000;' } ,info_box_row_owner_story_owners_name:{ _name:'info_box_row_owner_story_owners_name' ,q:'.info_box .row.owner .story_owners .name' ,css:'color:#888888;' } ,info_box_row_initials:{ _name:'info_box_row_initials' ,q:'.info_box .row .initials' ,css:'border:1px solid #444444;' } ,info_box_row_requester_dropdown_description:{ _name:'info_box_row_requester_dropdown_description' ,q:'.info_box .row.requester .dropdown_description' ,css:'border:1px solid #444444;' } ,info_box_row_owner_a_add_owner:{ _name:'info_box_row_owner_a_add_owner' ,q:'.info_box .row.owner a.add_owner' ,css:'border-color:#444444;' } ,info_box_row_deadline_display:{ _name:'info_box_row_deadline_display' ,q:'.info_box .row .deadline_display' ,css:'color:#aaaaaa;' } ,info_box_row_following_input_type_checkbox:{ _name:'info_box_row_following_input_type_checkbox' ,q:'.info_box .row.following input[type=checkbox]' ,css:'filter:invert(1);' } ,lightbox_lightbox_owner_initials:{ _name:'lightbox_lightbox_owner_initials' ,q:'.lightbox .lightbox.owner .initials' ,css:'border:1px solid #444444;' } ,dropdown_selection:{ _name:'dropdown_selection' ,q:'.dropdown .selection' ,css:'color:#999999;' } ,model_section_edit_h4:{ _name:'model_section_edit_h4' ,q:'.model section.edit h4' ,css:'color:#888888;' } ,timestamp_timestamp_row:{ _name:'timestamp_timestamp_row' ,q:'.timestamp .timestamp_row' ,css:'color:#888888;text-shadow:0 1px 1px #000000;' } ,section_model_details_actions_button:{ _name:'section_model_details_actions_button' ,q:'section.model_details .actions button' ,css:'background-color:#222222;border: 1px solid #444444;box-shadow:2px 2px 2px #000000;' } ,section_model_details_actions_button_before:{ _name:'section_model_details_actions_button_before' ,q:'section.model_details .actions button:before' ,css:'filter:invert(1);' } ,section_model_details_actions_button_hover:{ _name:'section_model_details_actions_button_hover' ,q:'section.model_details .actions button.hover, section.model_details .actions button.hoverable:hover' ,css:'background-color:#000000;' } ,section_model_details_button_with_field_text_value:{ _name:'section_model_details_button_with_field_text_value' ,q:'section.model_details .button_with_field .text_value' ,css:'background-color:#222222;border: 1px solid #444444;color:#888888;box-shadow:2px 2px 2px #000000;' } ,section_story_item_preview:{ _name:'section_story_item_preview' ,q:'section .story.item .preview' ,css:'border-bottom: 1px solid transparent;border-top: 1px solid #000000;padding-top: 2px;' } ,model_section_edit_fieldset_name_textarea_editor:{ _name:'model_section_edit_fieldset_name_textarea_editor' ,q:'.model section.edit fieldset.name textarea.editor' ,css:'margin-left: 20px;width:calc(100% - 20px);' } ,story_model_story_name:{ _name:'story_model_story_name' ,q:'.story.model .story_name' ,css:'text-shadow:1px 1px 1px #000000;' } ,preview_selector:{ _name:'preview_selector' ,q:'.preview .selector' ,css:'border-left:1px dotted #444444;' } ,preview_selector_accepted:{ _name:'preview_selector_accepted' ,q:'.accepted .preview .selector' ,css:'border-left:8px solid '+clr.status.accepted+';' } ,preview_selector_unscheduled:{ _name:'preview_selector_unscheduled' ,q:'.unscheduled .preview .selector' ,css:'border-left:8px solid '+clr.status.unscheduled+';' } ,preview_selector_unstarted:{ _name:'preview_selector_unstarted' ,q:'.unstarted .preview .selector' ,css:'border-left:8px solid '+clr.status.unstarted+';' } ,preview_selector_started:{ _name:'preview_selector_started' ,q:'.started .preview .selector' ,css:'border-left:8px solid '+clr.status.started+';' } ,preview_selector_finished:{ _name:'preview_selector_finished' ,q:'.finished .preview .selector' ,css:'border-left:8px solid '+clr.status.finished+';' } ,preview_selector_delivered:{ _name:'preview_selector_delivered' ,q:'.delivered .preview .selector' ,css:'border-left:8px solid '+clr.status.delivered+';' } ,preview_selector_rejected:{ _name:'preview_selector_rejected' ,q:'.rejected .preview .selector' ,css:'border-left:8px solid '+clr.status.rejected+';' } ,preview_selector_before:{ _name:'preview_selector_before' ,q:'.preview .selector:before' ,css:'filter:invert(1);' } ,meta:{ _name:'meta' ,q:'.meta' ,css:'xbackground-color:rgba(0, 0, 0, 0.34);width:36px;' } ,meta_before:{ _name:'meta_before' ,q:'.meta:before' ,css:'xbackground-color:rgba(0, 0, 0, 0.34);' } ,release_meta_before:{// special _name:'release_meta_before' ,q:'.flyover article.release .meta:before, .story.release .meta:before' ,css:'filter: invert(1) brightness(1);' } ,iteration_preview:{ _name:'iteration_preview' ,q:'.iteration .preview' ,css:'background: #0a0a0a;border-top: 1px solid #000000;border-bottom: 1px solid #000000;color: #888888;text-shadow: 1px 1px 1px #000000;' } ,layouts_story_preview_parens_before_after:{ _name:'layouts_story_preview_parens_before' ,q:'.layouts .story .preview .parens:before,.layouts .story .preview .parens:after' ,css:'color:#222222;' } ,story_preview_owner:{ _name:'story_preview_owner' ,q:'.story.bug .preview .owner, .story.chore .preview .owner, .story.feature .preview .owner, .story.release .preview .owner' ,css:'color:#667799' } ,story_delivered_preview:{ _name:'story_delivered_preview' ,q:'.story.delivered .preview' ,css:'background-color:#535302;' } ,tracker_marker_label:{ _name:'tracker_marker_label' ,q:'.tracker_markup .label' ,css:'background-color: rgba(0,0,0,0.8);border-radius: 8px;padding-left: 4px;padding-right: 4px;padding-bottom: 2px;' } ,story_finished_preview:{ _name:'story_finished_preview' ,q:'.story.finished .preview' ,css:'background-color:#535302;' } ,story_rejected_preview:{ _name:'story_rejected_preview' ,q:'.story.rejected .preview' ,css:'background-color:#535302;' } ,story_started_preview:{ _name:'story_started_preview' ,q:'.story.started .preview' ,css:'background-color:#535302;' } ,story_started_preview_hover:{ _name:'story_started_preview' ,q:'.story.started .preview:hover' ,css:'background-color:#ffff48;' } ,epic_preview_chevron:{ _name:'epic_preview_chevron' ,q:'.epic .preview .chevron' ,css:'background-color:rgba(0,0,0,0.4);' } ,epic_preview_chevron_hover:{ _name:'epic_preview_chevron_hover' ,q:'.epic .preview .chevron:hover' ,css:'background-color:rgba(0,0,0,0.6);' } ,epic_accepted_preview_chevron_hover:{ _name:'epic_accepted_preview_chevron_hover' ,q:'.epic.accepted .preview .chevron:hover' ,css:'background-color:rgba(115, 255, 0, 0.26);' } ,epic_done_preview_chevron_hover:{ _name:'epic_done_preview_chevron_hover' ,q:'.epic.done .preview .chevron:hover' ,css:'background-color:rgba(100, 100, 100, 0.26);' } ,epics_done_bar_hide:{ _name:'epics_done_bar_hide' ,q:'.epics .done_bar.hide' ,css:'border-bottom:1px solid #444444;' } ,epic_progress_flyover_article:{ _name:'epic_progress_flyover' ,q:'.epic_progress_flyover article' ,css:'background-color:rgba(0,0,0,0.9);' } ,epic_preview_progress_accepted:{ _name:'epic_preview_progress_accepted' ,q:'.epic .preview>.progress .accepted' ,css:'background:linear-gradient(to right,#880088,#000000);' } ,epic_preview_progress_active:{ _name:'epic_preview_progress_active' ,q:'.epic .preview>.progress .active' ,css:'background:linear-gradient(to right,#008800,#000000);' } ,epic_preview_progress_unstarted:{ _name:'epic_preview_progress_unstarted' ,q:'.epic .preview>.progress .unstarted' ,css:'background:linear-gradient(to right,#888888,#000000);' } ,epic_preview_progress_unscheduled:{ _name:'epic_preview_progress_unscheduled' ,q:'.epic .preview>.progress .unscheduled' ,css:'background:linear-gradient(to right,#222288,#000000);' } ,epic_progress_flyover_dt_active_dd_em:{ _name:'epic_progress_flyover_dt_active_dd_em' ,q:'.epic_progress_flyover dt.active+dd em' ,css:'color:#008800;' } ,epic_progress_flyover_dt_accepted_dd_em:{ _name:'epic_progress_flyover_dt_accepted_dd_em' ,q:'.epic_progress_flyover dt.accepted+dd em' ,css:'color:#880088;' } ,epic_progress_flyover_dt_unstarted_dd_em:{ _name:'epic_progress_flyover_dt_unstarted_dd_em' ,q:'.epic_progress_flyover dt.unstarted+dd em' ,css:'color:#888888;' } ,epic_progress_flyover_dt_unscheduled_dd_em:{ _name:'epic_progress_flyover_dt_unscheduled_dd_em' ,q:'.epic_progress_flyover dt.unscheduled+dd em' ,css:'color:#222288;' } ,epic_progress_flyover_dt_active_before:{ _name:'epic_progress_flyover_dt_active_before' ,q:'.epic_progress_flyover dt.active:before' ,css:'background-color:#008800;' } ,epic_progress_flyover_dt_accepted_before:{ _name:'epic_progress_flyover_dt_accepted_before' ,q:'.epic_progress_flyover dt.accepted:before' ,css:'background-color:#880088;' } ,epic_progress_flyover_dt_unstarted_before:{ _name:'epic_progress_flyover_dt_unstarted_before' ,q:'.epic_progress_flyover dt.unstarted:before' ,css:'background-color:#888888;' } ,epic_progress_flyover_dt_unscheduled_before:{ _name:'epic_progress_flyover_dt_unscheduled_before' ,q:'.epic_progress_flyover dt.unscheduled:before' ,css:'background-color:#222288;' } ,lightbox_stuff:{ _name:'lightbox_stuff' ,q:'.lightbox.keyboard_shortcuts .content, .lightbox .lightbox.owner .content, .lightbox.move_to_project .content, .lightbox.project_color .content, .lightbox.save_search .content, .lightbox.story_density_mode .content, .lightbox.velocity_update .content, .notifications.menu .dd_menu .content, .projects.lightbox .content, .search_bar_container.next.menu .dd_menu .content' ,css:'background-color:rgba(0,0,0,0.8);' } ,input_std:{ _name:'input_std' ,q:'input.std' ,css:'background-color:#000000;' } ,lightbox_lightbox_lightbox_owner_ul_li_selected:{ _name:'lightbox_lightbox_lightbox_owner_ul_li_selected' ,q:'.lightbox .lightbox.owner ul li.selected' ,css:'background-color:#001122;' } ,lightbox_lightbox_owner_ul_li_selected_a:{ _name:'lightbox_lightbox_owner_ul_li_selected_a' ,q:'.lightbox .lightbox.owner ul li.selected a' ,css:'color:#445588;' } ,new_section_model_details_persistence:{ _name:'new_section_model_details_persistence' ,q:'.new section.model_details .persistence' ,css:'background-color:#191919;' } ,story_unscheduled_preview_hover:{ _name:'story_unscheduled_preview_hover' ,q:'.story.unscheduled .preview:hover' ,css:'background-color:rgba(53, 96, 134, 0.23);' } ,state_button_start:{ _name:'state_button_start' ,q:'.state.button.start' ,css:'background-color: transparent;border-color: #004400;color: #008800;' } ,state_button_start_hover:{ _name:'state_button_start_hover' ,q:'.state.button.start:hover' ,css:'background-color: #003300;border-color: #005500;color: #009900;' } ,preview_reveal_button_locator:{ _name:'preview_reveal_button_locator' ,q:'.preview .reveal.button .locator' ,css:'opacity:0.4;' } ,tracker_markup:{ _name:'tracker_markup' ,q:'.tracker_markup' ,css:'color:#888888;' } ,flyover:{ _name:'flyover' ,q:'.flyover' ,css:'background-color:transparent;' } ,flyover_x_flyover:{ _name:'flyover_x' ,q:'.flyover.epic_flyover, .flyover.followers_flyover, .flyover.integration_story_flyover, .flyover.story_flyover' ,css:'border: 1px solid #000000;box-shadow: 2px 2px 7px #000000;opacity: 0.85;' } ,flyover_details:{ _name:'flyover_details' ,q:'.flyover.story_flyover .unscheduled .details, .flyover.story_flyover .accepted .details, .flyover.story_flyover .unstarted .details' ,css:'background-color:#000000;' } ,flyover_hgroup_details:{ _name:'flyover_hgroup_details' ,q:'.flyover.story_flyover .accepted hgroup.details, .flyover.story_flyover .delivered hgroup.details, .flyover.story_flyover .finished hgroup.details, .flyover.story_flyover .rejected hgroup.details, .flyover.story_flyover .started hgroup.details, .flyover.story_flyover .unscheduled hgroup.details' ,css:'background-color:#000000;border-bottom:0px solid transparent;box-shadow:none;' } ,flyover_epic_flyover_completion_date:{ _name:'flyover_epic_flyover_completion_date' ,q:'.flyover.epic_flyover p.completion_date' ,css:'color:#888888;' } ,flyover_hgroup:{ _name:'flyover_hgroup' ,q:'.flyover.epic_flyover hgroup,.flyover.followers_flyover hgroup,.flyover.integration_story_flyover hgroup,.flyover.story_flyover hgroup' ,css:'background-color:#222222;' } ,flyover_footer:{ _name:'flyover_footer' ,q:'.flyover.epic_flyover footer,.flyover.followers_flyover footer,.flyover.integration_story_flyover footer,.flyover.story_flyover footer' ,css:'background-color:#222222;' } ,flyover_window:{ _name:'flyover_window' ,q:'.flyover .window' ,css:'background-color:#111111;' } ,model_section_edit:{ _name:'model_section_edit' ,q:'.model section.edit' ,css:'background:#111111;padding-bottom:10px;' } ,model_section_edit_li_activity:{ _name:'model_section_edit_li_activity' ,q:'.model section.edit li>.activity' ,css:'background:#222222;' } ,panel_labels_panel_content:{ _name:'panel_labels_panel_content' ,q:'.panel.labels .panel_content' ,css:'background:none;' } ,panel_labels_labels_items_label_visible:{ _name:'panel_labels_labels_items_label_visible' ,q:'.panel.labels .labels_items .label.visible' ,css:'background:linear-gradient(to right, rgba(0,0,0,0),#0a0a0a);' } ,panel_history_preview:{ _name:'panel_history_preview' ,q:'.panel.epic_history .activity_entry .preview, .panel.project_history .activity_entry .preview, .panel.story_history .activity_entry .preview' ,css:'background-color:#111111;color:#888888;' } ,panel_history_group:{ _name:'panel_history_group' ,q:'.panel.epic_history .activity_entry .group, .panel.project_history .activity_entry .group, .panel.story_history .activity_entry .group' ,css:'background-color:#222222;' } ,panel_history_details:{ _name:'panel_history_details' ,q:'.panel.epic_history .activity_entry .details, .panel.project_history .activity_entry .details, .panel.story_history .activity_entry .details' ,css:'background-color:#333333;color:#aaaaaa;' } ,panel_backlog_stories_marker_item:{ _name:'panel_backlog_stories_marker_item' ,q:'.panel .backlog_stories_marker.item' ,css:'background-color:#222222;color:#888888;' } ,panel_icebox_stories_marker_item:{ _name:'panel_icebox_stories_marker_item' ,q:'.panel .icebox_stories_marker.item' ,css:'background-color:#222222;color:#888888;' } ,CommentShow:{ _name:'CommentShow' ,q:'.CommentShow___36VXJFEe' ,css:'border-left:4px solid #333333;' } ,CommentShow_name:{ _name:'CommentShow_name' ,q:'.CommentShow__name___1OUfXWYu' ,css:'color:#888888;text-shadow:1px 1px 1px #000000;' } ,CommentShow_initials:{ _name:'CommentShow_initials' ,q:'.CommentShow__initials___31d_0xSd' ,css:'background-color:#333333;border:1px solid #444444;color:#888888;' } ,CommentShow_text:{ _name:'CommentShow_text' ,q:'.CommentShow__text___2ScGJ-4t' ,css:'color:#888888;' } ,StoryLabelsMaker_container:{ _name:'StoryLabelsMaker_container' ,q:'.StoryLabelsMaker__container___3EAb3C9T' ,css:'background-color:#000000;color:#888888;border:1px solid #444444;' } ,LabelDropdownItem_highlighted:{ _name:'LabelDropdownItem_highlighted' ,q:'.LabelDropdownItem--highlighted___31LRWeXx' ,css:'background-color:#001122;' } ,TaskEdit:{ _name:'TaskEdit' ,q:'.TaskEdit___1Xmiy6lz' ,css:'background-color:rgba(0,0,0,0.6);' } ,TaskEdit_description:{ _name:'TaskEdit_description' ,q:'.TaskEdit__description___2HWb7Rhx' ,css:'background-color:#000000;color:#888888;border:1px solid #444444;' } ,TaskShow:{ _name:'TaskShow' ,q:'.TaskShow___2LNLUMGe' ,css:'background-color:rgba(0,0,0,0.6);color:#888888;border:1px solid #444444;' } ,TaskShow_hover:{ _name:'TaskShow_hover' ,q:'.TaskShow___2LNLUMGe:hover' ,css:'background-color:#000000;' } ,CommentEdit:{ _name:'CommentEdit' ,q:'.CommentEdit___3nWNXIac' ,css:'background-color:rgba(0,0,0,0.6);color:#888888;border:1px solid #444444;' } ,CommentEdit_add_comment:{ _name:'CommentEdit_add_comment' ,q:'.CommentEdit__add-comment___2chBxqcu' ,css:'background-color:#333333;border:1px solid #444444;' } ,CommentEdit_add_comment_hover:{ _name:'CommentEdit_add_comment_hover' ,q:'.CommentEdit__add-comment___2chBxqcu:hover:not(:disabled)' ,css:'background-color:#333333;' } ,DescriptionEdit_editor:{ _name:'DescriptionEdit_editor' ,q:'.DescriptionEdit___1FO6wKeX .editor___1qKjhI5c' ,css:'background-color:#000000;border:1px solid #444444;color:#888888;' } ,LabelDropdown_dropdown:{ _name:'LabelDropdown_dropdown' ,q:'.LabelDropdown__dropdown___PNsfkPba' ,css:'background-color:#000000;border:1px solid #444444;color:#888888;' } ,EpicStoriesHeader:{ _name:'EpicStoriesHeader' ,q:'.EpicStoriesHeader___2FjEsj4O' ,css:'background-color:#111111;border-left:1px solid #000000;border-right:1px solid #000000;border-bottom:1px solid #000000;' } ,EpicStoriesHeader_reveal:{ _name:'EpicStoriesHeader_reveal' ,q:'.EpicStoriesHeader__reveal___2JBXfhl3' ,css:'text-shadow:1px 1px 1px #000000;border-right:1px solid #444444;' } ,epic_accepted_preview:{ _name:'epic_accepted_preview' ,q:'x.epic.accepted .preview' ,css:'background:linear-gradient(to right,#004400, #000000);' } ,epic_done_preview:{ _name:'epic_done_preview' ,q:'x.epic.done .preview' ,css:'background:linear-gradient(to right,#006600, #000000);' } ,done_bar:{ _name:'done_bar' ,q:'.done_bar' ,css:'border-bottom:1px solid #444444;' } ,done_bar_accepted_stories_bar:{ _name:'done_bar_accepted_stories_bar' ,q:'.done_bar.accepted_stories_bar' ,css:'border-bottom:1px solid #444444;' } ,done_bar_label:{ _name:'done_bar_label' ,q:'.done_bar label' ,css:'background:linear-gradient(to bottom, #000000, #222222);' } ,epics_done_bar_hide_a:{ _name:'epics_done_bar_hide_a' ,q:'.epics .done_bar.hide a' ,css:'background:linear-gradient(to bottom, #000000, #222222);' } ,epics_done_bar_hide_a_hover:{ _name:'epics_done_bar_hide_a_hover' ,q:'.epics .done_bar.hide a:hover' ,css:'background:linear-gradient(to bottom, #111111, #333333);' } ,done_bar_label_hover:{ _name:'done_bar_label_hover' ,q:'.done_bar label:hover' ,css:'background:linear-gradient(to bottom, #111111, #333333);' } ,done_bar_a:{ _name:'done_bar_a' ,q:'.done_bar a' ,css:'background:linear-gradient(to bottom, #000000, #222222);' } ,done_bar_a_hover:{ _name:'done_bar_a_hover' ,q:'.done_bar a:hover' ,css:'background:linear-gradient(to bottom, #111111, #333333);' } ,IconButton_small:{ _name:'IconButton_small' ,q:'.IconButton--small___3D375vVd' ,css:'background-color:#333333;' } ,IconButton_small_not_borderless:{ _name:'IconButton_small_not_borderless' ,q:'.IconButton___2y4Scyq6:not(.IconButton--borderless___1t-CE8H2)' ,css:'background-color:#333333;border:1px solid #444444;' } ,IconButton_span_delete:{ _name:'IconButton_span_delete' ,q:'.IconButton___2y4Scyq6>span[data-aid="delete"]' ,css:'filter:invert(1);' } ,IconButton_small_not_disabled_not_inverted_hover:{ _name:'IconButton_small_not_disabled_not_inverted_hover' ,q:'.IconButton--small___3D375vVd:not(.IconButton--disabled___2cvk-s8R):not(.IconButton--inverted___2OWhVJqP):hover' ,css:'background-color:#000000;' } ,IconButton_small_not_disabled_not_inverted_span:{ _name:'IconButton_small_not_disabled_not_inverted_span' ,q:'.IconButton--small___3D375vVd:not(.IconButton--disabled___2cvk-s8R):not(.IconButton--inverted___2OWhVJqP)>span' ,css:'filter:invert(1) hue-rotate(180deg);' } ,CommentEdit_initials:{ _name:'CommentEdit_initials' ,q:'.CommentEdit__initials___149LoK2_' ,css:'background-color:#333333;color:#888888;border:1px solid #444444;' } ,CommentEdit_name:{ _name:'CommentEdit_name' ,q:'.CommentEdit__name___1gAXlpcd' ,css:'color:#999999;' } ,MentionableTextArea_textarea:{ _name:'MentionableTextArea_textarea' ,q:'.MentionableTextArea__textarea___2WDXl0X6' ,css:'background-color:#000000;color:#888888;border:1px solid #444444;' } ,TaskShow_toggle:{ _name:'TaskShow_toggle' ,q:'.TaskShow__toggle___2mc0Lilm' ,css:'filter:invert(1);' } ,TaskEdit_dumbCheck:{ _name:'TaskEdit__dumbCheck___10BB2AJ_' ,q:'.TaskEdit__dumbCheck___10BB2AJ_' ,css:'filter:invert(1);' } } ,parts:{ //processableObjectsContainer _name:'parts' ,VIEW:{ _name:'VIEW' ,q:'section.main' } ,root:{ _name:'root' ,q:'#root' } ,html:{ _name:'html' ,q:'html' } ,body:{ _name:'body' ,q:'body' } ,focus:{ _name:'focus' ,q:'*:focus' } } //-parts ,alter:{ //controller _name:'alter' ,_items:{ //processableObjectsContainer _name:'_items' ,root:{ _name:'root' ,q:'#root' ,_init_:function(){ //this.q.q.css('display','none'); let s=''; s+='<iframe'; s+=' id="_pivotal_pane"'; s+=' name="_pivotal_pane"'; s+=' src="'+window.location.toString()+'"'; s+=' style="width:100vw;height:50vh;"'; s+='></iframe>'; return s; // if (window===top) { // $('body').append(s); // console.log(s); // } } ,_init:function(){ this._init_(); } } } //-_items ,_init_:function(){ //ui.alter. __.utils.__initializer.bind(this._items)(); // if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init_');} // for (var n in this._items) { // if (!this._items.hasOwnProperty(n)) {continue;} // var o=this._items[n]; // console.log('typeof o:'+(typeof o),o); // if (o instanceof Object) { // console.log('alter:'+o._name); // o._init(); // } // } } //-_init_ ,_init:function(){ //ui.alter. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} this._init_(); } //-_init } //-alter ,_parts_init:function(){ //ui. this && this["UNUSED MEMBER\n"] && this["UNUSED MEMBER\n"](this._parts_init); // !unum - lint hack for webstorm for (const n in this.parts) { if (!this.parts.hasOwnProperty(n)) {continue;} const part=this.parts[n]; if (!part instanceof Object) {continue;} if (!part.on) {continue;} const events=Object.keys(part.on); for (let x=0;x<events.length;x++) { const en=events[x]; const evt=part.on[en]; $(document).on(en,part.q,evt); } } } //-_parts_init ,onLoad:function(){ //ui. this.alter._init(); } //-onLoad ,onMessage:function(data){ //ui. if (data.data.from==='VisualParadigm') { console.log('VisualParadigm onMessage',data.event); } } //-onMessage ,_init_:function(){ //ui. __.utils.__initializer.bind(this)(); 'onLoad'._sub&&'onLoad'._sub([this.onLoad,this]); 'onMessage'._sub&&'onMessage'._sub([this.onMessage,this]); } //-_init_ ,_init:function(){ //ui. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} this._init_(); } //-_init } //-ui ,events:{ //dispatchObjectContainer _name:'event' ,dom:{ //dispatchObject _name:'dom' ,node_removed:function(event){ //events.dom this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](event); // !unup - lint hack for webstorm //console.log('node_removed',event); } //-node_removed ,node_inserted:function(event){ //events.dom //console.log('node_inserted',event); const me=$(event.target); } //-node_inserted } //-dom ,kbd:{ //dispatchObject _name:'kbd' } //-kbd ,doc:{ //dispatchObject _name:'doc' ,_17_ct:0 ,_keysdown:{ //dataContainer } //-_keysdown ,cas:function(){ //events.doc. let cas=''; //noinspection JSUnresolvedVariable if (__.events.doc._keysdown._17!==undefined) {cas+='c';} //noinspection JSUnresolvedVariable if (__.events.doc._keysdown._18!==undefined) {cas+='a';} //noinspection JSUnresolvedVariable if (__.events.doc._keysdown._16!==undefined) {cas+='s';} return cas; } //-cas ,_do_call:function(code,evt){ //events.doc. if (__.data.showkeys) {console.log('code:'+code);} //console.log('code:'+code); code._bc({evt:evt}); if (typeof __.events.kbd[code]==='function') { //console.log('press:'+code); if (this._check_call(__.events.kbd[code])) { return __.events.kbd[code](evt); } }else if (jQuery.isArray(__.events.kbd[code])) { const a=__.events.kbd[code]; for (let x=0;x<a.length;x++) { if (typeof a[x]==='function') { console.log('press:'+x+' '+code); if (!this._check_call(a[x])) { console.log('item failed _check_call :'+x+' '+code); continue; } const rv=a[x](evt); if (rv!==undefined) { if (rv===false) { // return 'continue' return rv; } } } } } } //-_do_call ,_check_call:function(fo){ //events.doc. if (fo.me===undefined) { return true; } console.log('_check_call:j:'+fo.me.k.j); if (fo.me.k.j.indexOf('c')===-1&&fo.me.k.j.indexOf('a')===-1&&fo.me.k.j.indexOf('s')===-1) { console.log('_check_call:plainkey?:'+fo.me.k.j); // plain key let kc=fo.me.k.j.substr(1); kc=parseInt(kc); console.log('_check_call:plainkey?:kc:'+kc); // enter esc space 0-9 const aa=[13,27,32,48,49,50,51,52,53,54,55,56 // - = bs ,189,187,8 // a-z ,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90 // [ ] \ ,219,221,220 // ; ' ,186,222 // ,./ ,188,190,191 // ins hom pu del end pd ,45,36,33,46,35,34 // left right up down ,37,39,38,40 // f1-f12 3 4 5 6 7 8 9 10 11 12 //,112,113,114,115,116,117,118,119,120,121,122,123 // num / * - + . ,111,106,109,107,110 // num 0-9 5 6 7 8 9 ,96,97,98,99,100,101,102,103,104 ]; console.log('_check_call:aa.indexOf('+kc+'):'+aa.indexOf(kc)); if (aa.indexOf(kc)!==-1) { if (__.state.inEditor()) { console.log('exit inEditor:'+kc+' '+fo.me.n); return false; } } } // return true if should call //noinspection JSUnresolvedVariable let w=fo.me.W; //console.log('fo,fo.me:',fo,fo.me); if (w===undefined) { return true; } //console.log('w',w); w=w.split(','); //console.log('w',w); //w=__.utils.cleanFor(w,'string'); //console.log('w',w); //console.log('w.length',w.length); const ay=[]; const an=[]; for (let x=0;x<w.length;x++) { const i=w[x]; if (typeof i!=='string') { continue; } if (i.substr(0,1)==='!') { an.push(i.substr(1)); }else{ ay.push(i); } } //console.log('ay',ay,'an',an); //ay=__.utils.cleanFor(ay,'string'); //an=__.utils.cleanFor(an,'string'); //console.log('ay',ay,'an',an); function tryIt(s){ const f=__.state['is'+s]; if (typeof f!=='function') { console.error('state Fn not found:is'+s+'()'); return false; } //noinspection UnnecessaryLocalVariableJS const rv=__.state['is'+s](); return rv; } let yy=false; for (let x=0;x<ay.length;x++) { if (tryIt(ay[x])) { yy=true; } } if (ay.length===0) { yy=true; } let nn=false; for (let x=0;x<an.length;x++) { if (tryIt(an[x])) { nn=true; } } if (yy&&(!nn)) { //console.log(fo,'yy:'+yy+' nn:'+nn+' rv:true'); return true; } //console.log(fo,'yy:'+yy+' nn:'+nn+' rv:false'); return false; } //-_check_call ,keypress:function(evt){ //events.doc. if (__.data.showkeys) {console.log('document.keypress',evt.keyCode);} const cas=__.utils.cas(evt); const foc=$(':focus'); if (foc.length===1&&foc.prop('tagName')==='TEXTAREA') {return;} const code='k_'+cas+'p'+evt.keyCode; return this._do_call(code,evt); } //-keypress ,keyup:function(evt){ //events.doc. if (__.data.showkeys) {console.log('document.keyup',evt.keyCode);} //const foc=$(':focus'); //console.log('document.keyup.tagName',foc.prop('tagName')); const cas=__.utils.cas(evt); if (this._keysdown['_'+evt.keyCode]!==undefined) { delete this._keysdown['_'+evt.keyCode]; } const code='k_'+cas+'u'+evt.keyCode; return this._do_call(code,evt); } //-keyup ,keydown:function(evt){ //events.doc. const foc=$(':focus'); if (0) { if (foc.length===1&&foc.prop('tagName')==='TEXTAREA') { if (evt.keyCode!==17&&evt.keyCode!==18&&evt.keyCode!==16) { return; } } } if (this._keysdown['_'+evt.keyCode]!==undefined) {return;} if (__.data.showkeys) {console.log('document.keydown',evt.keyCode);} //if (document.sk) {console.log('document.keydown',evt.keyCode);} this._keysdown['_'+evt.keyCode]=new Date(); const cas=__.utils.cas(evt); const code='k_'+cas+'d'+evt.keyCode; return this._do_call(code,evt); } //-keydown } //-doc ,win:{ //dispatchObject _name:'win' ,resize:function(event){ //events.win. this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](event); // !unup - lint hack for webstorm console.log('win.resize'); __.actions.reportWindowData(); } //-resize ,hashChange:function(event){ //events.win. 'onHashChange'._bc({event:event}); } //-hashChange ,message:function(event){ //events.win. if (event.data.action==='reportWindowData') { __.data.windowData[event.data.from]=event.data.windowData; } 'onMessage'._bc&&'onMessage'._bc({event:event, data:event.data}); } //-message } //-win } //-event ,inits:{ //functionsContainer _name:'inits' ,bug:false ,protos:function(){ //inits. this.bug&&console.log('bugging:'+arguments.callee.name); if (arguments.callee.initialized) {console.error('already initialized');return;}arguments.callee.initialized=true; const __entityMap = { "&": "&", "<": "<", ">": ">", '"': '"', "'": ''', "/": '/' };//-__entityMap function strp(n,f){ if (String.prototype[n]) { alert('HAS String.prototype.'+n); }else{ String.prototype[n]=f; } } strp('escapeHTML', function() { return String(this).replace(/[&<>"'\/]/g, function (s) { return __entityMap[s]; }); } ); strp('_of',function(that){ const s=this.toString(); return that[s]; }); //-_of strp('qo',function(){ const s=''+this; return $(s); }); //-qo String.prototype._ropf=function(o,fn){ const n=''+this; if (o[n]) { alert(' is already defined'); return; } Object.defineProperty(o,n, { get: fn ,set: function() { throw "Cannot set Read Only Property '"+n+"'"; } ,enumerable: true ,configurable: false }); }; //-_ropf String.prototype._ropq=function(o,sel){ const n=''+this; Object.defineProperty(o, n, { get: function(){ return $(sel); } ,set: function() { throw "Cannot set Read Only Property '"+n+"'"; } ,enumerable: true ,configurable: false }); }; //-_ropq String.prototype._ropqc=function(o,sel){ const n=''+this; Object.defineProperty(o, n, { get: function(){ if (!arguments.callee.cache) { arguments.callee.cache=$(sel); } return arguments.callee.cache; } ,set: function() { throw "Cannot set Read Only Property '"+n+"'"; } ,enumerable: true ,configurable: false }); }; //-_ropqc String.prototype._pf=function(o,get_f,set_f){ const n=''+this; Object.defineProperty(o, n, { get: get_f ,set: set_f ,enumerable: true ,configurable: false }); }; //-_pf // 's'._ropf(String.prototype,function(){ // console.log(''+this,this.q[0]); // return this.q; // }); // -q 'q'._ropf(String.prototype,function(){ return this.qo(); }); // -q // 'e'._ropf(String.prototype,function(){ // const q=this.qo(); // console.info(this+':',q.length); // //const dp=q.getDomPath(); // // console.info(dp); // // const t='2px dotted red'; // // location.href='aip://clip/'+encodeURI(dp); // //return q // // .css('border',t) // // .css('border-left',t) // // .css('border-top',t) // // .css('border-bottom',t) // // .css('border-right',t) // // .css('box-shadow','inset 0px 0px 10px 2px #F00') // // .css('-webkit-filter','brightness(5) contrast(1.6)'); // return null; // }); 'ee'._ropf(String.prototype,function(){ const q=this.qo(); console.info(this+':',q.length); return q .css('border','') .css('border-left','') .css('border-top','') .css('border-bottom','') .css('border-right','') .css('box-shadow','') .css('-webkit-filter',''); }); 'exists'._ropf(String.prototype,function(){ const s=''+this; return s.q.length!==0; }); '_one'._ropf(String.prototype,function(){ const s=''+this; return s.q.length===1; }); // 'p'._ropf(String.prototype,function(){ // const s=''+this; // if (s.exists) { // if (s.q.length===1) { // return s.q.getDomPath(); // } // const a=[]; // s.q.each(function(){ // const me=$(this); // a.push(me.getDomPath()); // }); // return a; // } // return null; // }); 'singleSpace'._ropf(String.prototype,function(){ const s=''+this; return s.replace(/\s{2,}/g, ' '); }); '_trim'._ropf(String.prototype,function(){ const s=''+this; return $.trim(s); }); '_abbr'._ropf(String.prototype,function(){ let s=''+this; if (s==='') { return ''; } s=s.replace(/[^a-zA-Z0-9]/g,' '); const a=[]; let p_type; const m={su:true,sl:true,sn:true,nl:true,nu:true,lu:true,uu:true,ln:true,un:true}; for(let x=0;x<s.length;x++){ const e=s.substr(x,1); let is_type;//ulns if ('0123456789'.indexOf(e)>=0){is_type='n'; }else if('abcdefghijklmnopqrstuvwxyz'.indexOf(e)>=0){is_type='l'; }else if('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(e)>=0){is_type='u'; }else{is_type='s'; } if(p_type===undefined){ if(is_type!=='s'){ a.push(e); } }else{ //noinspection JSUnusedAssignment if (m[p_type+is_type]){ a.push(e); } } p_type=is_type; } return a.join('').toUpperCase(); }); '_numwrap'._ropf(String.prototype,function(){ const s=''+this; return '⎩'+s+'⎫'; }); '_l'._ropf(String.prototype,function(){ const s=''+this; console.log(s); }); '_i'._ropf(String.prototype,function(){ const s=''+this; console.info(s); }); '_w'._ropf(String.prototype,function(){ const s=''+this; console.warn(s); }); 'delimiter'._ropf(String.prototype,function(){ const s=this.toString(); //var dels=String.fromCharCode(13)+String.fromCharCode(9)+'|:.,;_=-'+' '; const dels=(String.fromCharCode(13)+String.fromCharCode(9)+'|,;'+' '+':.-_').split(''); for (let x=0;x<dels.length;x++) { const ss=dels[x]; if (s.indexOf(ss)!==-1) { return ss; } } return ''; }); String.prototype.inList=function(list,del){ const s=this.toString(); if (typeof list==='string') { let d=list.delimiter; if (d==='') { d=' '; } del=d; list=list.split(del); } return list.indexOf(s)!==-1; }; String.prototype.hasItem=function(item,del){ const s=this.toString(); return item.inList(s,del); }; String.prototype._bc=function(o,that_){return radio(this.toString()).broadcast(o,that_);}; String.prototype._sub=function(a1,a2,a3,a4){return radio(this.toString()).subscribe(a1,a2,a3,a4);}; if (0) { '_f4'._ropf(String.prototype,function(){ const s=''+this; setTimeout(function(){ s.q.focus(); },4000); return s.q[0]; }); '_viz'._ropf(String.prototype,function(){ const s=''+this; function comp(s){ const co=tinycolor(s); //noinspection JSUnresolvedFunction const hsl=co.toHsl(); const c=1; const a=0.5; const b=0.5; //noinspection UnnecessaryLocalVariableJS const v=Math.sqrt(a*hsl.h*a*hsl.h + b*hsl.s*b*hsl.s + c*hsl.l*c*hsl.l); return v; } const v0=comp(s); let at=10000;//Number.Infinity; let found; //noinspection JSUnresolvedVariable vizcolors.forEach(function(cc){ const v=comp(cc.c); //console.log('v',v); const dif=Math.abs(v0-v); //console.log('dif',dif); if (dif<at) { //console.log('found..',cc); at=dif; found=cc; } }); if (found) { return found; } }); if (1) { } //'.simple-balloon.app-filters-popover .navigation li.selected'._f4 String.prototype._abbr2=function(allows){ let s=''+this; if (s==='') { return ''; } const allows2=allows.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"); const re=new RegExp('[^a-zA-Z0-9'+allows2+']','g'); s=s.replace(re,' '); const s0=s.replace(/ /g,''); const a=[]; let p_type; const m={su:true,sl:true,sn:true,nl:true,nu:true,lu:true,uu:true,ln:true,un:true}; for(let x=0;x<s.length;x++){ const e=s.substr(x,1); let is_type;//ulns if ('0123456789'.indexOf(e)>=0){is_type='n'; }else if('abcdefghijklmnopqrstuvwxyz'.indexOf(e)>=0){is_type='l'; }else if('ABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(e)>=0){is_type='u'; }else{is_type='s'; } if(p_type===undefined){ if(is_type!=='s'){ a.push(e); }else{ if (allows.indexOf(e)>=0) {a.push(e);} } }else{ //noinspection JSUnusedAssignment if (m[p_type+is_type]){ a.push(e); }else{ if (allows.indexOf(e)>=0) {a.push(e);} } } p_type=is_type; } if (a.length===1) { a.push(s0.substr(1,2)); } return a.join('').toUpperCase(); }; } } //-protos ,jquery_addons:function(){ //inits. if (arguments.callee.initialized) {console.error('already initialized');return;}arguments.callee.initialized=true; //noinspection JSUnresolvedVariable (function($,sr){ //smartresize event /// // usage: /// $(window).smartresize(function(){ /// // code that takes it easy... /// }); const debounce = function (func, threshold, execAsap) { let timeout; return function debounced () { let obj = this; const args = arguments; function delayed () { if (!execAsap){ //noinspection JSUnresolvedFunction func.apply(obj, args); } timeout = null; } if (timeout){ clearTimeout(timeout); } else if (execAsap){ //noinspection JSUnresolvedFunction func.apply(obj, args); } timeout = setTimeout(delayed, threshold || 100); }; }; // smartresize jQuery.fn[sr] = function(fn){ return fn ? this.bind('resize', debounce(fn)) : this.trigger(sr); }; })(jQuery,'smartresize'); //noinspection JSUnresolvedVariable (function($){ //replaceText $.fn.replaceText = function( search, replace, text_only ) { return this.each(function(){ let node = this.firstChild,val,new_val,remove = []; if ( node ) { do { if ( node.nodeType === 3 ) { val = node.nodeValue;new_val = val.replace( search, replace ); if ( new_val !== val ) { if ( !text_only && /</.test( new_val ) ) { $(node).before( new_val );remove.push( node ); } else { node.nodeValue = new_val; } } } } while ( node = node.nextSibling ); } remove.length && $(remove).remove(); }); }; })(jQuery); //noinspection JSUnresolvedVariable (function($){ $.fn.visibles = function() { return this.filter(function(){ //noinspection JSUnresolvedFunction return !this.isVisible(); }); }; })(jQuery); //noinspection JSUnresolvedVariable (function($){ //.withText $.fn.withText = function( search ) { //+ text_only second arg unused const rv=this.contents().filter( function(){ if (this.nodeType!==3) { return false; } //var me=$(this); const txt=this.nodeValue; if (typeof search==='object') {//re return search.test(txt); } return txt.indexOf(search)!==-1; } ); return rv.parent(); }; })(jQuery); //noinspection JSUnresolvedVariable (function( $ ){ //.getDomPath const getStringForElement = function (el) { let string = el.tagName.toLowerCase(); if (el.id) { string += "#" + el.id; } if (el.className) { if (typeof el.className==='string') { if (el.className!=='') { string += "." + el.className.replace(/\s+/g,' ').replace(/\s/g, '.'); } } } string=string.replace(/\.\.*/,'.'); return string; }; $.fn.getDomPath = function(string) { if (typeof(string) === "undefined") { string = true; } const p = []; const el = $(this).first(); el.parents().not('html').each(function() { p.push(getStringForElement(this)); }); p.reverse(); p.push(getStringForElement(el[0])); return string ? p.join(" > ") : p; }; })( jQuery ); (function( $, undefined ) { //.simulate const rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/; $.fn.simulate = function( type, options ) { return this.each(function() { new $.simulate( this, type, options ); }); }; //-simulate $.simulate = function( elem, type, options ) { const method = $.camelCase( "simulate-" + type ); this.target = elem; this.options = options; if ( this[ method ] ) { this[ method ](); } else { this.simulateEvent( elem, type, options ); } }; //-simulate $.extend( $.simulate, { keyCode: { BACKSPACE: 8, COMMA: 188, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, LEFT: 37, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SPACE: 32, TAB: 9, UP: 38 }, //-keyCode buttonCode: { LEFT: 0, MIDDLE: 1, RIGHT: 2 } //-buttonCode }); $.extend( $.simulate.prototype, { simulateEvent: function( elem, type, options ) { const event = this.createEvent( type, options ); this.dispatchEvent( elem, type, event, options ); }, //-simulateEvent createEvent: function( type, options ) { if ( rkeyEvent.test( type ) ) { return this.keyEvent( type, options ); } if ( rmouseEvent.test( type ) ) { return this.mouseEvent( type, options ); } }, //-createEvent mouseEvent: function( type, options ) { let event, eventDoc, doc, body; options = $.extend({ bubbles: true, cancelable: (type !== "mousemove"), view: window, detail: 0, screenX: 0, screenY: 0, clientX: 1, clientY: 1, ctrlKey: false, altKey: false, shiftKey: false, metaKey: false, button: 0, relatedTarget: undefined }, options ); if ( document.createEvent ) { event = document.createEvent( "MouseEvents" ); //noinspection JSDeprecatedSymbols event.initMouseEvent( type, options.bubbles, options.cancelable, options.view, options.detail, options.screenX, options.screenY, options.clientX, options.clientY, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.button, options.relatedTarget || document.body.parentNode ); // IE 9+ creates events with pageX and pageY set to 0. // Trying to modify the properties throws an error, // so we define getters to return the correct values. if ( event.pageX === 0 && event.pageY === 0 && Object.defineProperty ) { eventDoc = event.relatedTarget.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; Object.defineProperty( event, "pageX", { get: function() { return options.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); } }); Object.defineProperty( event, "pageY", { get: function() { return options.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } }); } } else if ( document.createEventObject ) { event = document.createEventObject(); $.extend( event, options ); // standards event.button uses constants defined here: http://msdn.microsoft.com/en-us/library/ie/ff974877(v=vs.85).aspx // old IE event.button uses constants defined here: http://msdn.microsoft.com/en-us/library/ie/ms533544(v=vs.85).aspx // so we actually need to map the standard back to oldIE event.button = { 0: 1, 1: 4, 2: 2 }[ event.button ] || ( event.button === -1 ? 0 : event.button ); } return event; }, //-mouseEvent keyEvent: function( type, options ) { let event; options = $.extend({ bubbles: true, cancelable: true, view: window, ctrlKey: false, altKey: false, shiftKey: false, metaKey: false, keyCode: 0, charCode: undefined }, options ); if ( document.createEvent ) { try { event = document.createEvent( "KeyEvents" ); //noinspection JSUnresolvedFunction event.initKeyEvent( type, options.bubbles, options.cancelable, options.view, options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, options.keyCode, options.charCode ); // initKeyEvent throws an exception in WebKit // see: http://stackoverflow.com/questions/6406784/initkeyevent-keypress-only-works-in-firefox-need-a-cross-browser-solution // and also https://bugs.webkit.org/show_bug.cgi?id=13368 // fall back to a generic event until we decide to implement initKeyboardEvent } catch( err ) { event = document.createEvent( "Events" ); event.initEvent( type, options.bubbles, options.cancelable ); $.extend( event, { view: options.view, ctrlKey: options.ctrlKey, altKey: options.altKey, shiftKey: options.shiftKey, metaKey: options.metaKey, keyCode: options.keyCode, charCode: options.charCode }); } } else if ( document.createEventObject ) { event = document.createEventObject(); $.extend( event, options ); } if ( !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ) || (({}).toString.call( window.opera ) === "[object Opera]") ) { event.keyCode = (options.charCode > 0) ? options.charCode : options.keyCode; event.charCode = undefined; } return event; }, //-keyEvent dispatchEvent: function( elem, type, event ) { if ( elem[ type ] ) { elem[ type ](); } else if ( elem.dispatchEvent ) { elem.dispatchEvent( event ); } else if ( elem.fireEvent ) { elem.fireEvent( "on" + type, event ); } }, //-dispatchEvent simulateFocus: function() { let focusinEvent, triggered = false; const element = $( this.target ); function trigger() { triggered = true; } element.bind( "focus", trigger ); element[ 0 ].focus(); if ( !triggered ) { focusinEvent = $.Event( "focusin" ); focusinEvent.preventDefault(); element.trigger( focusinEvent ); element.triggerHandler( "focus" ); } element.unbind( "focus", trigger ); }, //-simulateFocus simulateBlur: function() { let focusoutEvent, triggered = false; const element = $( this.target ); function trigger() { triggered = true; } element.bind( "blur", trigger ); element[ 0 ].blur(); // blur events are async in IE setTimeout(function() { // IE won't let the blur occur if the window is inactive if ( element[ 0 ].ownerDocument.activeElement === element[ 0 ] ) { element[ 0 ].ownerDocument.body.focus(); } // Firefox won't trigger events if the window is inactive // IE doesn't trigger events if we had to manually focus the body if ( !triggered ) { focusoutEvent = $.Event( "focusout" ); focusoutEvent.preventDefault(); element.trigger( focusoutEvent ); element.triggerHandler( "blur" ); } element.unbind( "blur", trigger ); }, 1 ); } //-simulateBlur }); /** complex events **/ function findCenter( elem ) { const document = $( elem.ownerDocument ); elem = $( elem ); const offset = elem.offset(); //noinspection JSUnresolvedFunction return { //noinspection JSUnresolvedFunction x: offset.left + elem.outerWidth() / 2 - document['scrollLeft'](), //noinspection JSUnresolvedFunction y: offset.top + elem.outerHeight() / 2 - document['scrollTop']() }; } function findCorner( elem ) { const document = $( elem.ownerDocument ); elem = $( elem ); const offset = elem.offset(); //noinspection JSUnresolvedFunction return { x: offset.left - document['scrollLeft'](), y: offset.top - document['scrollTop']() }; } $.extend( $.simulate.prototype, { simulateDrag: function() { let i = 0; const target = this.target; const eventDoc = target.ownerDocument; const options = this.options; const center = options.handle === "corner" ? findCorner( target ) : findCenter( target ); let x = Math.floor( center.x ); let y = Math.floor( center.y ); let coord = { clientX: x, clientY: y }; //noinspection JSUnresolvedVariable const dx = options.dx || ( options.x !== undefined ? options.x - x : 0 ); //noinspection JSUnresolvedVariable const dy = options.dy || ( options.y !== undefined ? options.y - y : 0 ); //noinspection JSUnresolvedVariable const moves = options.moves || 3; this.simulateEvent( target, "mousedown", coord ); for ( ; i < moves ; i++ ) { x += dx / moves; y += dy / moves; coord = { clientX: Math.round( x ), clientY: Math.round( y ) }; this.simulateEvent( eventDoc, "mousemove", coord ); } if ( $.contains( eventDoc, target ) ) { this.simulateEvent( target, "mouseup", coord ); this.simulateEvent( target, "click", coord ); } else { this.simulateEvent( eventDoc, "mouseup", coord ); } } //-simulateDrag }); })( jQuery ); $.fn.extend({ //.hasClasses hasClasses: function (selectors) { const self = this; selectors=typeof selectors==='string'?selectors.split(' '):selectors; for (const i in selectors) { if (!selectors.hasOwnProperty(i)) { continue; } if ($(self).hasClass(selectors[i])) { return true; } } return false; } // fn }); /* * outerHtml * https://github.com/JamesMGreene/jquery.outerHtml * * Copyright (c) 2013 James M. Greene * Licensed under the MIT license. */ (function($) { //.outerHtml 'use strict'; //noinspection PointlessBooleanExpressionJS const hasNativeOuterHTML = !!('outerHTML' in $('<div></div>').get(0)); // Prefer the native `outerHTML` property when possible const getterFn = function() { const target = this.get(0); // If the browser supports the `outerHTML` property on elements AND if `target` is an element node if (hasNativeOuterHTML && target.nodeType === 1) { return target.outerHTML; }else { return $('<div></div>').append(this.eq(0).clone()).html(); } }; //-getterFn const setterFn = function(value) { // Do not attempt to replace anything using the native `outerHTML` property setter // even if it exists: it is riddled with bugs! return $('<div id="jquery-outerHtml-transformer"></div>').append(value).contents().replaceAll(this); }; //-setterFn // Detect jQuery 1.8.x bug (for which the value here is `false`) let doesNotLeaveTempParentOnDetachedDomElement = true; $.fn.outerHtml = function(value) { if (arguments.length) { if (doesNotLeaveTempParentOnDetachedDomElement) { return setterFn.call(this, value); } else { // Fix for jQuery 1.8.x bug: https://github.com/JamesMGreene/jquery.outerHtml/issues/1 const parentsOfThis = (function() { const parents = new Array(this.length); this.each(function(i) { parents[i] = this.parentNode || null; }); return parents; }).call(this); return setterFn['call'](this, value).map(function(i) { if (!parentsOfThis[i]) { if (this.parentNode) { return this.parentNode.removeChild(this); } } else if (parentsOfThis[i] !== this.parentNode) { // Appending to the end: this doesn't seem right but it should cover the detached DOM scenarios return parentsOfThis[i].appendChild(this); } return this; }); } } else { return getterFn.call(this); } }; //-outerHtml // Detect jQuery 1.8.x bug (for which the value here is `false`) doesNotLeaveTempParentOnDetachedDomElement = (function() { const parent = $('<s>bad</s>').outerHtml('<div>good</div>').get(0).parentNode; return (parent.nodeName === '#document-fragment' && parent.nodeType === 11); })(); }(jQuery)); } //-jquery_addons ,libs:function(){ //inits. __.libs._init(); } //-libs ,hooks:function(){ //inits. __.hooks._init(); } //-hooks ,styles:function(){ //inits. __.style._init(); } //-styles ,ui:function(){ //inits. __.ui._init(); } //-ui ,_init_:function(){ //inits. __.utils.body_msg('inits...'); if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init_');} this.protos(); this.jquery_addons(); const that=this; function next(){ that.libs(); that.hooks(); that.styles(); that.ui(); } //__.inits.messaging(); //__.ctrls._init(); //__.inits.dom_hook(); //+this.keyset(); //+this.key_hook(); //__.inits.styles(); function waitLoad(){ if (false&&!__.state.isViewLoaded()) { setTimeout(waitLoad,500); return; } next(); __.INITIALIZED=true; delete __.INITIALIZING; console.log('__.inits._init_() completed'); //$('body').css('opacity','1'); $('body').addClass('fadein'); 'onLoad'._bc&&'onLoad'._bc(); } waitLoad(); //this.fixes(); } //-_init_ ,_init:function(){ //inits. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} this._init_(); //__.utils.addScript('http://mrobbinsassoc.com/projects/keyprism3/tinycolor.js'); } //-_init } //-inits ,init:{ //main _name:'init' ,_init_:function(){ //init. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init_');} __.inits._init(); } //-_init_ ,_init:function(){ //init. if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');} if (__.INITIALIZING||__.INITIALIZED) { return; } if (!__.state.isGoodUrl()) { console.log('!__.state.isGoodUrl()'); return; } __.INITIALIZING=true; function waitLoad(){ if (!window.$) { setTimeout(waitLoad,500); return; } __.init._init_(); } waitLoad(); } //-_init } //-init }; __.utils.addScript('https://medialize.github.io/sass.js/dist/sass.sync.js','sassscr'); //__.utils.addScript('https://medialize.github.io/sass.js/dist/sass.worker.js','sassscr'); //console.log('Sass',window.Sass); //$('body').css('opacity','0'); (function(){ const NL="\n"; let s=''; s+='body{'+NL; s+=' opacity:0;'+NL; s+='}'+NL; s+='body.fadein{'+NL; s+=' opacity:1;'+NL; s+=' transition:1s;'+NL; s+='}'+NL; __.utils.updateNamedStyle(s,'baseStyle'); }()); setTimeout(function(){ __.init._init(); },2000);