NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Keyprism3 WebBrain
// @namespace http://mrobbinsassoc.com/
// @version 0.3.1
// @description Allows interaction of TheBrain and Visual Paradigm
// @author Mark Robbins
// @match https://webbrain.com/brainpage/brain/09335629-E824-3836-6E1A-8A30325D2C09
// @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_WebBrain.meta.js
// @require https://code.jquery.com/jquery-3.2.1.min.js
// @require http://mrobbinsassoc.com/projects/keyprism3/vp/scripts/tinycolor.js
// ==/UserScript==
// ==OpenUserJS==
// @author MarkRobbins
// ==/OpenUserJS==
/* globals performance chrome */
/* global performance chrome */
(function() {
function waitJq(){
if (!window.jQuery) {
console.log('waiting for jQuery in WebBrain');
setTimeout(waitJq,1000);
return;
}
(function() {
console.log('RUN in WebBrain');
//console.log('got Jq');
//'use strict';
const $ = jQuery;
window.__={
_name:'__'
,set:{ //configContainer
_name:'set'
,bugInits:true
,onHashChange:{
_name:'onHashChange'
,timeout:2000
}
} //-set
,data:{ //dataContainer
_name:'data'
,showkeys:true
,paneSizes:{
}
,windowData:{ //data.
me: {}
}
,linkages:{ //data.
}
,timers:{ //data.
} //-timers
} //-data
,style:{ //initFnList
_name:'style'
,_writeStyle:function(){ //style.
let s = '';
const NL = "\n";
const parts = __.ui.parts;
for (const i in parts) {
//console.log(i);
if (!parts.hasOwnProperty(i)) {
continue;
}
const o = parts[i];
if (typeof o!=='object') {
continue;
}
if (o.css) {
if (o.nameIt) {
const oo = o.q.q;
oo.attr('id',i);
s+='#'+i+'{'+NL;
s+=''+o.css+NL;
s+=''+'}'+NL;
}else{
s+=''+o.q+'{'+NL;
s+=''+o.css+NL;
s+=''+'}'+NL;
}
}
}
//console.log(s);
__.utils.updateNamedStyle(s,'dark');
} //-writeStyle
,_init_:function(){ //style.
this._writeStyle();
} //-_init_
,_init:function(){ //style.
this._init_();
} //-_init
} //-style
,types:{ //objectContainer
_name:'types'
,typePubSub:{ //types.
_name:'typePubSub'
,init_pubsub:function(bug,pfx){
// xmp bc this.__topicName({});
pfx=pfx===undefined?'':pfx;
if (bug){console.log('init_pubsub');}
//noinspection JSUnresolvedVariable
if (this._pubs!==undefined) {
if(bug){console.log('init_pubsub,have pubs');}
//noinspection JSUnresolvedVariable
for (const i in this._pubs) {
const f = new Function('o', 'o=o===undefined?{}:o;o.when=new Date();radio("' + i + '").broadcast(o,this);');
if(bug){console.log('init_pubsub, assigning function '+pfx+i,f);}
this[pfx+i]=f;
}
}
//noinspection JSUnresolvedVariable
const subs=this._subs;
if (subs!==undefined) {
if(bug){console.log('init_pubsub,have subs');}
for (const i in subs) {
if (!subs.hasOwnProperty(i)) {
continue;
}
if(bug){console.log('init_pubsub, subscribing to msg:'+i+' with ',subs[i]);}
//noinspection JSUnresolvedVariable
radio(i).subscribe([subs[i],this]);
}
}
}
,seed:function(that){
that.init_pubsub=this.init_pubsub;
that._isPubSub=true;
} //-seed
}//-typePubSub
,typeCog:{ //types.
create:function(){
const that=this;
function init(){
//noinspection JSUnresolvedVariable
that._ctor=that.subject.ctor;
//noinspection JSUnresolvedVariable
delete that.subject.ctor;
//noinspection JSUnresolvedVariable
const st=that.subject.__static;
if (typeof st==='object') {
for (const i in st) {
if (!st.hasOwnProperty(i)) {
continue;
}
that._ctor[i]=st[i];
delete st[i];
}
}
//noinspection JSPotentiallyInvalidUsageOfThis
this._ctor.prototype=this.subject;
//noinspection JSPotentiallyInvalidUsageOfThis
this._ctor.prototype.constructor=this._ctor;
}
if (this._ctor===undefined) {
init();
}
// http://stackoverflow.com/a/1608546/842626
function construct(constructor, args) {
function F() {
//noinspection JSUnresolvedFunction
return constructor.apply(this, args);
}
F.prototype = constructor.prototype;
return new F();
}
const fn=this._ctor;
//noinspection UnnecessaryLocalVariableJS
const rv=construct(fn,arguments);
return rv;
} //-create
,seed:function(that){
that.create=this.create;
} //-seed
} //-typeCog
} //-types
,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
,__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
,linkItemHtml:function(data){ //utils. //image title url
let s='';
s+='<div class="GGD0W3FBJ4" style="cursor: pointer;">';
s+=' <div class="GGD0W3FBG4">';
s+=' <img class="gwt-Image" style="width:32px;height:32px;"';
s+=' src="';
if (data.image) {
s+=data.image;
}else{
const _='%2F';
s+='https://webbrain.com/icon?path='+_+'vol'+_+'webbrain'+_+'server'+_+'res'+_+'iconImages'+_+'mimetypes'+_+'text-x-generic-template.png&maxWidth=32&maxHeight=32&match=true';
}
s+='"';
s+='>';
s+=' </div>';
s+=' <div style="float: left; margin-top: 2px;">';
s+=' <div class="GGD0W3FBI4">';
if (data.title) {
s+=data.title;
}
s+=' </div>';
s+=' <div class="GGD0W3FBH4">';
if (data.url) {
s+=data.url;
}
s+=' </div>';
s+=' </div>';
s+=' <div style="clear: both;">';
s+=' </div>';
s+='</div>';
return s;
} //-linkItemHtml
} //-utils
,state:{ //initializableObjectsAndFunctionContainer
_name:'state'
,isViewLoading:function(){ //state.
return $(__.ui.parts.bottomEdit.q).length===0;
} //-isViewLoading
,isViewLoaded:function(){ //state.
return !this.isViewLoading();
} //-isViewLoading
,isTop:function(){ //state.
//return false;
return window===top;
} //-isTop
,midBarTop:function(){ //state.
const me=__.ui.parts.midBar.q.q;
if (!me.length) {
return;
}
const r=me.get(0).getBoundingClientRect();
return r.top<30;
} //-midBarTop
,midBarBottom:function(){ //state.
const me=__.ui.parts.midBar.q.q;
if (!me.length) {
return;
}
const wh=window.innerHeight;
const r=me.get(0).getBoundingClientRect();
return wh-r.bottom<30;
} //-midBarBottom
,paneTop:function(){ //state.
if (window.innerHeight<30) {
return true;
}
} //-paneTop
,paneBottom:function(){ //state.
//noinspection JSUnresolvedVariable
const cp=__.data.paneSizes._content_pane;
if (!cp) {
return;
}
const th=cp.innerHeight+window.innerHeight;
return th - window.innerHeight < 30;
} //-paneBottom
,_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'
,midBarUp:function(){ //actions.
__.ui.parts.midBarUp.q.q.click();
} //-midBarUp
,midBarDown:function(){ //actions.
__.ui.parts.midBarDown.q.q.click();
} //-midBarDown
,rightFrameUp:function(){ //actions.
const msg={
from:window.name
,action:'rightFrameUp'
};
//noinspection JSUnresolvedFunction
window.top.postMessage(msg,'*');
} //-rightFrameUp
,rightFrameDown:function(){ //actions.
const msg={
from:window.name
,action:'rightFrameDown'
};
//noinspection JSUnresolvedFunction
window.top.postMessage(msg,'*');
} //-rightFrameUp
,reportWindowData:function(){ //actions.
__.data.windowData.me.innerWidth=window.innerWidth;
__.data.windowData.me.innerHeight=window.innerHeight;
__.data.windowData.me.locationHref=''+window.location.href;
const msg={
from:window.name
,locationHref:''+location.href
,action:'reportWindowData'
,windowData:{
locationHref:''+location.href
,innerWidth:window.innerWidth
,innerHeight:window.innerHeight
}
};
top.postMessage(msg,'*');
} //-reportWindowData
} //-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'
,parts:{ //processableObjectsContainer
_name:'parts'
,topBarTable:{ //ui.parts
_name:'topBarTable'
,q:'#topBar'
}
,topBarTableCenterLink:{ //ui.parts
_name:'topBarTableCenterLink'
,q:'.topBarTableCenterLink'
,css:'margin-right:6px;'
}
,plexContainer:{ //ui.parts
_name:'plexContainer'
,q:'#contentContainer>div:eq(0)'
,on:{
dblclick:function(evt){
this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](evt); // !unup - lint hack for webstorm
if (__.state.midBarTop()) {
__.actions.midBarDown();
}else if (__.state.midBarBottom()) {
__.actions.midBarUp();
}else{
__.actions.midBarDown();
__.actions.midBarDown();
}
}
}
}
,bottomEdit:{ //ui.parts
_name:'bottomEdit'
,q:'#contentContainer>div:eq(2)' //'.GGD0W3 F B O S'
,css:'background-color:black;color:#555;'
,nameIt:true
} //-bottomEdit
,bottomEditTitle:{ //ui.parts
_name:'bottomEditTitle'
,q:'.GGD0W3FBKT'
,css:'margin-left:10px;'
} //-bottomEditTitle
,bottomEditHeader:{ //ui.parts
_name:'bottomEditHeader'
,q:'#bottomEditHeader'
,css:'display: inline-block;background-color: black;width: calc(100% - 12px);margin-top: -6px;position: fixed;margin-left: -4px;'
} //-bottomEditHeader
,bottomHtml:{ //ui.parts
_name:'bottomHtml'
,q:'.gwt-HTML'
,css:'margin-top:73px;'
,on:{
dblclick:function(evt){
const cas=__.utils.cas(evt);
console.log('dblclick:cas',cas);
if (cas==='') {
if (__.state.midBarTop()) {
__.actions.midBarDown();
}else if (__.state.midBarBottom()) {
__.actions.midBarUp();
}else{
__.actions.midBarUp();
__.actions.midBarUp();
}
}else if (cas==='c') {
console.log('__.state.paneTop()',__.state.paneTop());
console.log('__.state.paneBottom()',__.state.paneBottom());
if (__.state.paneTop()) {
__.actions.rightFrameDown();
}else if (__.state.paneBottom()) {
__.actions.rightFrameUp();
}else{
__.actions.rightFrameDown();
}
}
} //-dblclick
} //-on
} //-bottomHtml
,greyBar:{ //ui.parts
_name:'greyBar'
,q:'.greyBar'
,css:'filter:invert(1) hue-rotate(180deg);'
} //-greyBar
,midBar:{ //ui.parts
_name:'midBar'
,q:'.GGD0W3FBAJ'
,css:'filter:invert(1);'
} //-midBar
,midBarDown:{ //ui.parts
_name:'midBarDown'
,q:'.GGD0W3FBAJ>img:eq(0)'
} //-midBarDown
,midBarUp:{ //ui.parts
_name:'midBarUp'
,q:'.GGD0W3FBAJ>img:eq(1)'
} //-midBarDown
,searchBoxInput:{ //ui.parts
_name:'searchBoxInput'
,q:'.searchBoxInput'
,css:'background-color:black;color:#888;border:1px solid #222;'
} //-searcher
,stationaryClickMenu:{ //ui.parts
_name:'stationaryClickMenu'
,q:'ul.stationaryClickMenu'
,css:'background-color:black;color:#888;border:1px solid #0a0a0a;'
} //-stationaryClickMenu
,stationaryClickMenuLi:{ //ui.parts
_name:'stationaryClickMenuLi'
,q:'ul.stationaryClickMenu li'
,css:'color:#888;border: 1px solid #0f0f0f;'
} //-stationaryClickMenu
,clickMenu:{ //ui.parts
_name:'clickMenu'
,q:'ul.clickMenu'
,css:'background-color:black;color:#888;border:1px solid #0a0a0a;'
} //-clickMenu
,clickMenuLi:{ //ui.parts
_name:'clickMenuLi'
,q:'ul.clickMenu li'
,css:'color:#888;border:1px solid #0a0a0a;'
} //-stationaryClickMenu
,linkItemsContainer:{ //ui.parts
_name:'linkItemsContainer'
,q:'.GGD0W3FBKS'
,css:'margin-left:10px;'
} //-linkItems
,linkItem:{ //ui.parts
//<div class="GGD0W3FBKS" aria-hidden="false"> linkItemsContainer
// <div class="GGD0W3FBJ4" style="cursor: default;">
// <div class="GGD0W3FBG4">
// <img class="gwt-Image" src="">
// </div>
// <div style="float: left; margin-top: 2px;">
// <div class="GGD0W3FBI4"> linkItemTitle
// .assets`keyprism3`_;C.$explhere
// </div>
// <div class="GGD0W3FBH4" style="text-decoration: line-through;"> linkItemUrl
// C:\_\keyprism3\.assets\.assets`keyprism3`_;C.$explhere
// </div>
// </div>
// <div style="clear: both;">
// </div>
// </div>
//</div>
_name:'linkItem'
,q:'.GGD0W3FBJ4'
} //-linkItem
,explhere:{ //ui.parts
_name:'explhere'
,q:' [title$="$explhere"]'
}
,linkItemUrl:{ //ui.parts
_name:'linkItemUrl'
,q:'.GGD0W3FBH4'
} //-linkItemUrl
,linkItemTitle:{ //ui.parts
_name:'linkItemTitle'
,q:'.GGD0W3FBI4'
} //-linkItemTitle
,linkItemImage:{ //ui.parts
_name:'linkItemImage'
,q:'.GGD0W3FBG4>img'
} //-linkItemTitle
,popupIcon:{ //ui.parts
_name:'popupIcon'
,q:'.gwt-PopupPanel>.popupContent>.gwt-Image'
} //-popupIcon
} //-parts
,alter:{ //controller
_name:'alter'
,_items:{ //processableObjectsContainer
_name:'_items'
,topBarTableCenter:{ //ui.alter._items
_name:'topBarTableCenter'
,_clearItems:function(){//__.ui.alter._items.clearItems()
const tgt=('#'+this._name).q;
tgt.find('.'+this._name+'Link').remove();
} //-clearItems
,onHashChange:function(){
this._clearItems();
} //-onHashChange
,addLink:function(data){
//console.log('addLink:data',data);
//msg, text, image
//OR url, text, image
const tgt=('#'+this._name).q;
let s='';
s+='<span';
s+=' class="'+this._name+'Link"';
if (data.msg) {
s+=' style="cursor:crosshair"'
}else{
s+=' style="cursor:pointer"'
}
s+='>';
if (data.image) {
s+='<img';
s+=' src="'+data.image;
s+='"';
s+=' style="width:16px;height:16px"';
s+='>';
}
if (data.text) {
s+='<span>';
s+=data.text;
s+='</span>';
}
s+='</span>';
tgt.append(s);
const me=tgt.find('.'+this._name+'Link').last();
if (data.title) {
me.attr('title',data.title);
}
if (data.msg) {
me.on('click',function(){
//noinspection JSUnresolvedFunction
window.top.postMessage(data.msg,'*');
});
}else{
me.on('click',function(){
//noinspection JSUnresolvedVariable
window.open(data.url,data.windowName||'_blank');
});
}
} //-addLink
,onLoad:function(){
const table=__.ui.parts.topBarTable.q.q;
//const td1=table.find('td:eq(0)');
const td2=table.find('td:eq(1)');
const td3=table.find('td:eq(2)');
td2.after('<td id="topBarTableCenter" class="centerpart greyBar"></td>');
td2.css('width','33%');
td3.css('width','');
const tdc='#topBarTableCenter'.q;
tdc.css('width','100%');
} //-onLoad
,_init_:function(){
'onLoad'._sub([this.onLoad,this]);
'onHashChange'._sub([this.onHashChange,this]);
} //-_init_
,_init:function(){
this._init_();
} //-_init
} //-topBarTableCenter
,bottomEditHeader:{ //ui.alter._items
_name:'bottomEditHeader'
,_colorize:function(){
const tgt=('#'+this._name).q;
__.ui._iniData();
const ColorHex='ColorHex'._of(__.data.iniData);
if (ColorHex) {
const bottomEditTitle=__.ui.parts.bottomEditTitle.q.q;// Thought title
bottomEditTitle.css('color',ColorHex);
tgt.css('background','linear-gradient(to right, #000000,'+ColorHex+')');
}
} //-_colorize
,_doitDelay:function(){
const that=this;
setTimeout(function(){
that._doit();
},1500);
} //-onLoad
,onHashChange:function(){
this._doitDelay();
} //-onHashChange
,onLoad:function(){
this._doitDelay();
} //-onLoad
,_doit:function(){
if (('#'+this._name).q.length) {
console.log("EXISTS");
this._colorize();
return;
}
//const bottomEdit=__.ui.parts.bottomEdit.q.q;// parent
const bottomEditTitle=__.ui.parts.bottomEditTitle.q.q;// Thought title
const linkItemsContainer=__.ui.parts.linkItemsContainer.q.q;
let items=$([]);
items=items.add(bottomEditTitle);
let current=bottomEditTitle;
while (current.next().get(0)!==linkItemsContainer.get(0)) {
current=current.next();
items=items.add(current);
}
items=items.add(linkItemsContainer);
console.log('items',items);
const s='<div id="'+this._name+'"></div>';
bottomEditTitle.before(s);
const tgt=('#'+this._name).q;
tgt.append(items.detach());
this._colorize();
}
,_init_:function(){
'onLoad'._sub([this.onLoad,this]);
'onHashChange'._sub([this.onHashChange,this]);
} //-_init_
,_init:function(){
this._init_();
} //-_init
} //-bottomEditHeader
} //-_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
,docLinkages:{ //controller
_name:'docLinkages'
,linkages:{ //ui.docLinkages.
} //-linkages
,extractors:{ //ui.docLinkages.
urlEquals:function(url){ //ui.docLinkages.extractors
return url.split('=')[1];
} //-urlEquals
} //-extractors
,popupIcon:{ //ui.docLinkages.
_name:'popupIcon'
,onClick:function(evt){ //ui.docLinkages.popupIcon
console.log(this._name+' onClick',evt);
//console.log(__.data.linkages.vpPackageDiagram);
__.ui.docLinkages._linkageDataCall('vpPackageDiagram');
} //-onClick
,_init_:function(){ //ui.docLinkages.popupIcon
const that=this;
$(document).on('click','.thought.active',function(evt){
that.onClick(evt);
});
} //-_init_
,_init:function(){ //ui.docLinkages.popupIcon
this._init_();
} //-_init
} //-popupIcon
,_registerLinkage:function(linkage){ //ui.docLinkages.
this.linkages[linkage._name]=linkage;
} //-_registerLinkage
,_linkages_init:function(){ //ui.docLinkages.
this && this["UNUSED FUNCTION\n"] && this["UNUSED FUNCTION\n"](this._linkages_init); // !unuf - lint hack for webstorm
this._registerLinkage({
_name:'vpPackageDiagram'
,topBar:{
title:'Package Diagram'
,target:'_content_pane'
,image:'http://mrobbinsassoc.com/images/icons/md/visualparadigm-16.png'
}
,linkItem:{
title:'Package Diagram'
,url:''
,image:'http://mrobbinsassoc.com/images/icons/icons-ext/_vpp-48.png'
,zap:true
,target:'_content_pane'
,find:{
title:/\$explhere$/
}
}
,docLink:{
find:{
href:['/vp/publish/index.html?url=','Package']
}
,extractor:function(url){
let u=__.ui.docLinkages.extractors.urlEquals(url);
const vp_url='vp_url'._of(__.data.iniData); //keyprism3.vpp://shape/1234567890123456/1234567890123456
const u0=u;
//if (window.top.location.href.substr(0,5)==='file:') {
if (true) {
//const local=window.top.location.href.replace('index.html','');
const serv='http://mrobbinsassoc.com/projects/keyprism3/vp/publish/content/';
u=u.replace(serv,'');
}
console.log('uu',u);
if (!vp_url) {
return u;
}
const a=vp_url.split('/');
//var dia=a[3];
const shape=a[4];
//var tit=__.ui.parts.bottomEditTitle.q.q.text();
//tit=tit.replace(/ /g,'').replace(/#/g,'').split(',');
//return u+'?package='+encodeURIComponent(tit[0]);
return u+'?shapeid='+encodeURIComponent(shape);
}
,zap:true
}
,done:function(options){
__.data.linkages[this._name]={
options:options
};
} //-onComplete
});
if (1) {
this._registerLinkage({
_name:'externalWebBrain'
,docLink:{
find:{
//https://webbrain.com/brainpage/brain/09335629-E824-3836-6E1A-8A30325D2C09#-8
href:function(){return location.href;}
}
,zap:true
}
});
}
if (1) {
this._registerLinkage({
_name:'BitBucket'
,topBar:{
title:'Repository Folder'
,image:'http://mrobbinsassoc.com/images/icons/md/bitbucket-16.png'
}
,docLink:{
find:{
href:'https://bitbucket.org/'
}
,target:'_blank'
}
,linkItem:{
isNew:true
,target:'_blank'
,url:__.ui.parts.bottomEditTitle.q.q.text()
,title:'BitBucket'
,image:'http://mrobbinsassoc.com/images/icons/extensions/bitbucket-48.png'
}
});
}
if (1) {
this._registerLinkage({
_name:'FolderMarkdowns'
,docLink:{
find:{
href:['aip://open/',/(\.md$|\.md%3F)/]
}
,href:null
,click:function(evt){
this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](evt); // !unup - lint hack for webstorm
//find text
const brn='https://webbrain.com/brainpage/brain/';//09335629-E824-3836-6E1A-8A30325D2C09
const me=$(this);
/// var code=me.next();
/// var code_txt=code.text();
/// console.log('code_txt',code_txt);
/// // find thought with code
/// var thoughts=$('.thought');
/// console.log('thoughts',thoughts)
/// var tgt;
/// thoughts.each(function(){
/// var me=$(this);
/// var txt=me.text();
/// if (!tgt&&txt===code_txt) {
/// tgt=me;
/// }
/// });
/// if (tgt) {
/// console.log('tgt.click',tgt); //simulate
/// window.TGT=tgt;
/// tgt.click();
/// return;
/// }
const data=me.attr('data-href');
let rt=data.substr('aip://open/'.length);
rt=decodeURIComponent(rt);
if (rt.indexOf('?')===-1) {
location.href=data;
return;
}
const qs=rt.substr(rt.indexOf('?')+1);
//C:\_\keyprism3\.assets\esdoc\README.md?brain_uid=09335629-E824-3836-6E1A-8A30325D2C09&thought_id=20&vp_url=keyprism3.vpp://shape/YcUAPVqGAqAAAhK3/nEwRvVqGAqAAAg1x
const qu=__.utils.parseQueryString(qs);
//noinspection JSUnresolvedVariable
if (!qu.brain_uid||!qu.thought_id) {
location.href=data;
return;
}
//noinspection JSUnresolvedVariable
const brain_uid=qu.brain_uid;
//noinspection JSUnresolvedVariable
const thought_id=qu.thought_id;
//console.log('click',evt);
if (location.href.indexOf(brn+brain_uid)!==-1) {
console.log('location.hash','#-'+thought_id);
location.hash='#-'+thought_id;
}else{
console.log('location.href',brn+brain_uid+'#-'+thought_id);
location.href=brn+brain_uid+'#-'+thought_id;
}
}
}
});
}
} //-_registerLinkage
,_stringMatcher:function(str,match){ //ui.docLinkages.
if (!str) {
return false;
}
if ('string'===typeof match) {
return str.indexOf(match)!==-1;
}else if (match instanceof RegExp) {
return str.match(match)!==null;
}else if ($.isArray(match)) {
for (let x=0;x<match.length;x++) {
const r=this._stringMatcher(str,match[x]);
if (!r) {
return false;
}
}
return true;
}
return false;
} //-_urlHas
,_linkageDataCall:function(linkageName){ //ui.docLinkages.
const dl=__.data.linkages[linkageName];
if (!dl||!dl.linkItem) {return;}
const linkItem=dl.linkItem;
if (linkItem.target==='_content_pane') {
const msg={
from:window.name
,action:'load'
,target:'_content_pane'
,url:linkItem.docUrl
};
__.utils.messageTop(msg);
}else{
window.open(linkItem.docUrl,linkItem.target||'_blank');
}
} //-_linkageDataCall
,_linkageLinkItem:function(linkage){ //ui.docLinkages.
/// ,linkItem:{
/// title:'Package Diagram'
/// ,url:''
/// ,image:'http://mrobbinsassoc.com/images/icons/icons-ext/_vpp-48.png'
/// ,del:true
/// ,target:'_content_pane'
/// ,find:{
/// title:/\$explhere$/
/// }
/// }
const parts=__.ui.parts;
if (!linkage.linkItem||!linkage.linkItem.find) {return $([]);}
const find=linkage.linkItem.find;
let q;//=qs.q;
const that=this;
const items=parts.linkItem.q.q;
items.each(function(){
const me=$(this);
const title=me.find(parts.linkItemTitle.q).text();
const url=me.find(parts.linkItemUrl.q).text();
let mc=0;
let mt=0;
mt+=find.title?1:0;
mt+=find.url?1:0;
if (find.title&&that._stringMatcher(title,find.title)) {mc++;}
if (find.url&&that._stringMatcher(url,find.url)) {mc++;}
if (!q&&mc===mt) {q=me;}
});
return q?q:$([]);
} //-_linkageLinkItem
,_linkageDocLinks:function(linkage){ //ui.docLinkages.
if (!linkage.docLink||!linkage.docLink.find) {return $([]);}
const find=linkage.docLink.find;
const qq=$('a');
let q=$([]);//=qs.q;
const that=this;
qq.each(function(){
const me=$(this);
const href=me.attr('href');
if (me.parent().get(0).tagName==='LI') {
if (that._stringMatcher(href,__.utils.defunction(find.href))) {q=q.add(me);}
}
});
return q;
} //-_linkageDocLinks
,_linkageDocLink:function(linkage){ //ui.docLinkages.
/// ,docLink:{
/// find:{
/// href:['/vp/publish/index.html?url=','Package']
/// }
/// ,extractor:__.ui.docLinkages.extractors.urlEquals
/// ,zap:true
/// }
if (!linkage.docLink||!linkage.docLink.find) {return $([]);}
const find=linkage.docLink.find;
const qq=$('a');
let q;//=qs.q;
const that=this;
qq.each(function(){
const me=$(this);
const href=me.attr('href');
if (me.parent().get(0).tagName==='LI') {
if (!q&&that._stringMatcher(href,__.utils.defunction(find.href))) {q=me;}
}
});
return q?q:$([]);
} //-_linkageDocLink
,_docLinkZap:function(docLink){ //ui.docLinkages.
const link=docLink;
if (!link.length) {return;}
const p=link.parent();
const tag=p.get(0).tagName;
if (tag==='LI') {
if (p.prev().length===0) {p.parent().before('<p><em>none</em></p>');p.parent().remove();
}else{p.remove();}
}else{link.remove();}
} //-_docLinkZap
,_linkageDocLinkZap:function(linkage){ //ui.docLinkages.
const link=this._linkageDocLink(linkage);
this._docLinkZap(link);
} //-_linkageDocLinkZap
,_linkageDocLinksUrls:function(linkage){ //ui.docLinkages.
const links=this._linkageDocLinks(linkage);
const a=[];
links.each(function(){
const me=$(this);
let url=me.attr('href');
if (linkage.docLink&&linkage.docLink.extractor) {url=linkage.docLink.extractor(url);}
a.push(url);
});
return a;
} //-_linkageDocLinksUrls
,_linkageDocLinkUrl:function(linkage){ //ui.docLinkages.
const q=this._linkageDocLink(linkage);
if (!q.length) {return null;}
const url=q.attr('href');
if (linkage.docLink&&linkage.docLink.extractor) {return linkage.docLink.extractor(url);}
return url;
} //-_linkageDocLinkUrl
,_linkageDocLinksFixups:function(linkage){ //ui.docLinkages.
const urls=this._linkageDocLinksUrls(linkage);
const links=this._linkageDocLinks(linkage);
for (let x=0;x<urls.length;x++) {
//var url=urls[x];
const link=$(links.get(x));
if (linkage.docLink.href!==undefined) {
link.attr('data-href',link.attr('href'));
link.attr('href',linkage.docLink.href);
}
if (linkage.docLink.target!==undefined) {link.attr('target',linkage.docLink.target);}
if (linkage.docLink.click) {link.css('cursor','pointer');link.on('click',linkage.docLink.click);}
if (linkage.docLink.zap) {this._docLinkZap(link);}
}
return urls;
} //-_linkageDocLinksFixups
,_linkageDocLinkFixup:function(linkage){ //ui.docLinkages.
const url=this._linkageDocLinkUrl(linkage);
const q=this._linkageDocLink(linkage);
if (linkage.docLink.target) {q.attr('target',linkage.docLink.target);}
if (linkage.docLink.zap) {this._linkageDocLinkZap(linkage);}
return url;
} //-_linkageDocLinkFixup
,_linkageProcessItem:function(linkage, docUrl){ //ui.docLinkages.
//console.log('_linkageProcessItem',linkage);
const parts=__.ui.parts;
const container=parts.linkItemsContainer.q.q;
if (linkage.topBar) {//target,image
const topBar=linkage.topBar;
const linkObject={};
if (topBar.target==='_content_pane') {
linkObject.msg={
from:window.name
,action:'load'
,target:'_content_pane'
,url:docUrl
};
}else{
linkObject.url=docUrl;
}
if (topBar.image) {
linkObject.image=topBar.image;
}
if (topBar.text) {
linkObject.text=topBar.text;
}
if (topBar.title) {
linkObject.title=topBar.title;
}
__.ui.alter._items.topBarTableCenter.addLink(linkObject);
//,addLink:function(data){
//msg, text, image
//OR url, text, image
}
const linkItem=linkage.linkItem;
if (!linkItem) {return;}
let html;
let item;
let my;
if (linkItem.isNew) {
const data={};//img title url
if (linkItem.title) {data.title=linkItem.title;}
if (linkItem.image) {data.image=linkItem.image;}
if (linkItem.url) {data.url=linkItem.url;}
html=__.utils.linkItemHtml(data);
}else{
item=this._linkageLinkItem(linkage);
if (item.length===0) {return;}
html=item.outerHtml();
}
container.append(html);
if (item) {my=item.next();
}else{my=container.find(parts.linkItem.q).last();
}
if (item&&linkItem.zap) {item.remove();}
//
const linkItem_title=my.find(parts.linkItemTitle.q);
let linkItem_title_v;
if (linkItem.title) {linkItem_title_v=linkItem.title;}
if (linkItem_title_v!==undefined) {linkItem_title.html(linkItem_title_v);}
//
const linkItem_url=my.find(parts.linkItemUrl.q);
let linkItem_url_v;
//noinspection ConstantIfStatementJS
if (false) {
}else if (linkItem.url===true) {linkItem_url_v=docUrl;
}else if (linkItem.url==='') {linkItem_url_v=linkItem.url;
}else if (linkItem.url) {linkItem_url_v=linkItem.url;
}
if (linkItem_url_v!==undefined) {linkItem_url.html(linkItem_url_v);}
//
const linkItem_image=my.find(parts.linkItemImage.q);
let linkItem_image_v;
if (linkItem.image) {linkItem_image_v=linkItem.image;}
if (linkItem_image_v!==undefined) {
linkItem_image.attr('src',linkItem_image_v).css('width','32px').css('height','32px');
}
//
if (linkItem.target==='_content_pane') {
my.css('cursor','crosshair');
my.on('click',function(){
const msg={
from:window.name
,action:'load'
,target:'_content_pane'
,url:docUrl
};
__.utils.messageTop(msg);
});
}else{
my.css('cursor','pointer');
my.on('click',function(){
window.open(docUrl,linkItem.target||'_blank');
});
}
if ($.isArray(linkItem.docUrl)) {
linkItem.push(docUrl);
}else{
linkItem.docUrl=docUrl;
}
//
if (linkage.done) {
linkage.done({docUrl:docUrl,my:my});
}
}
,_processLinkage:function(linkage){ //ui.docLinkages.
const docUrls=this._linkageDocLinksFixups(linkage);
for (let x=0;x<docUrls.length;x++) {
this._linkageProcessItem(linkage,docUrls[x]);
}
//
} //-_cloneLast
,_processLinkages:function(){ //ui.docLinkages.
const linkages=Object.keys(this.linkages);
for (let x=0;x<linkages.length;x++) {
const n=linkages[x];
//console.log('linkage:'+n);
const linkage=this.linkages[n];
this._processLinkage(linkage);//url,text,title,icon,target,msg,del
}
} //-_processLinkage
,onHashChange:function(){ //ui.docLinkages.
console.log('onHashChange',location);
this._processLinkages();
'#bottomEdit a[href^="http"]:not([target])'.q.attr('target','_blank');
} //-onHashChange
,_init_:function(){ //ui.docLinkages.
__.utils.__initializer.bind(this)();
//if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init_');}
//this.popupIcon._init();
//this._registerLinkages();
} //-_init_
,_init:function(){ //ui.docLinkages.
if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');}
this._init_();
} //-_init
} //-docLinkages
,_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
,_iniData:function(){ //ui.
__.data.iniData={};
'.gwt-HTML>UL:eq(0)>li'.q.each(function(){
const me=$(this);
const codes=me.find('code');
if (codes.length===2) {
const c1=codes.first().text();
//noinspection UnnecessaryLocalVariableJS
const c2=codes.last().text();
__.data.iniData[c1]=c2;
}
});
} //-_iniData
,onHashChange:function(){ //ui.
const that=this;
this._iniData();
console.log('window.name',window.name);
if (window.name==='_brain_pane') {
setTimeout(function(){
that.docLinkages.onHashChange();
},__.set.onHashChange.timeout);
}
} //-onHashChange
,onLoad:function(){ //ui.
this._iniData();
this.alter._init();
this.onHashChange();
} //-onLoad
,onMessage:function(data){ //ui.
if (data.data.from==='VisualParadigm') {
console.log('VisualParadigm onMessage',data.event);
}
} //-onMessage
,_init_:function(){ //ui.
__.utils.__initializer.bind(this)();
// if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init_');}
// this._parts_init();
// this.docLinkages._init();
'onHashChange'._sub([this.onHashChange,this]);
'onLoad'._sub([this.onLoad,this]);
'onMessage'._sub([this.onMessage,this]);
//this.viz._init();// keep at bottom
} //-_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);
if (me.attr('class')==='gwt-PopupPanel') {
//console.log('gwt-PopupPanel inserted');
///<div class="gwt-PopupPanel" style="left: 615px; top: 139px; z-index: 990; visibility: visible; position: absolute; clip: rect(auto auto auto auto); overflow: visible;">
/// <div class="popupContent">
/// <img class="gwt-Image" src="https://webbrain.com/icon?brain=09335629-E824-3836-6E1A-8A30325D2C09&pa�mp;unique=1489963142000&maxWidth=200&maxHeight=200&match=false">
/// </div>
///</div>
// setTimeout(function(){
// console.log(me.outerHtml());
// },1000);
//if ($('.thought.active.hover').length) {
// console.log('.thought.active.hover',me.length);
// me.on('click',function(evt){
// console.log('.thought.active.hover:CLICK');
// __.ul.docLinkages.popupIcon.onClick(evt);
// });
//
// // setTimeout(function(){
// // },200);
//}
//me.on('click',function(evt){});
}
} //-node_inserted
} //-dom
,kbd:{ //dispatchObject
_name:'kbd'
,k_ad33:function(evt){ //events.kbd. - pgup.a.D
this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](evt); // !unup - lint hack for webstorm
__.actions.midBarUp();
return false;
} //-k_au34
,k_ad34:function(evt){ //events.kbd. - pgdn.a.D
this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](evt); // !unup - lint hack for webstorm
__.actions.midBarDown();
return false;
} //-k_au34
,k_asd33:function(evt){ //events.kbd. - pgup.as.D
this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](evt); // !unup - lint hack for webstorm
__.actions.rightFrameUp();
return false;
} //-k_asu33
,k_asd34:function(evt){ //events.kdb. - pgdn.as.D
this && this["UNUSED PARAM\n"] && this["UNUSED PARAM\n"](evt); // !unup - lint hack for webstorm
__.actions.rightFrameDown();
return false;
} //-k_asu34
} //-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;
}
if (event.data.action==='brainNav') {
//console.log('message',event.data);
//alert('WEBBRAIN',JSON.stringify(event.data.action));
location.hash='#-'+event.data.thought_id;
}
'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
String.prototype.escapeHTML = function() {
return String(this).replace(/[&<>"'\/]/g, function (s) {
return __entityMap[s];
});
}; //-escapeHTML
String.prototype._of=function(that){
const s=this.toString();
return that[s];
}; //-_of
String.prototype.qo=function(){
const s=''+this;
return $(s);
}; //-qo
String.prototype._ropf=function(o,fn){
const n=''+this;
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)');
});
'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+'⎫';
});
'_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;
}
});
'_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);
});
if (1) {
'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);
};
}
//'.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();
};
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);};
} //-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();
this.libs();
this.hooks();
this.styles();
this.ui();
//__.inits.messaging();
//__.ctrls._init();
//__.inits.dom_hook();
//+this.keyset();
//+this.key_hook();
//__.inits.styles();
'onLoad'._bc();
__.utils.body_msg('inits done!');
//this.fixes();
} //-_init_
,_init:function(){ //inits.
if (__.set.bugInits) {console.info('bugInits:'+this._name+'_init');}
//__.utils.addScript('http://mrobbinsassoc.com/projects/keyprism3/tinycolor.js');
this._init_();
} //-_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');}
//console.info('__.init._init');
this._init_();
console.log('__.init() completed');
} //-_init
} //-init
}; //-window.__
const __=window.__;
(function(){
function waiter(){
if (!__.state.isViewLoaded()) {
console.log('!__.state.isViewLoaded() in WebBrain');
setTimeout(waiter,500);
return;
}
setTimeout(function(){
console.log('__.init._init() in WebBrain');
__.init._init();
},100);
}
waiter();
}());// - function
})();
} // waitJq
waitJq()
})();