',;fx each SPFILES_jsp_
22 | end.
23 | )
24 |
25 | fx=: 3 : 0
26 | s=. ;shorts_jsp_ y
27 | t=. jshortname y
28 | NB.!f=. ;(1>.10-#s)#<' '
29 | f=. ;(1>.10-#s)#<' '
30 | (('file*',jurlencode t)jhab s,f,t),jhbr
31 | )
32 |
33 | CSS=: 0 : 0
34 | *{font-family:PC_FONTFIXED;}
35 | )
36 |
37 | JS=: jsfcommon,0 : 0
38 | function ev_body_load(){jresize();}
39 |
40 | function ev_file_click(){
41 | t= 'jijs?jwid='+jsid.value,jsid.value;
42 | pageopen(t,t); //? nocache???
43 | }
44 |
45 | )
46 |
47 |
48 |
--------------------------------------------------------------------------------
/nopacman/jhsdev.ijs:
--------------------------------------------------------------------------------
1 | jhs_create_symbolic_link=: 3 : 0
2 | 'already linked to ~Addons'assert 0=fexist'~addons/ide/jhs/.git'
3 | rmdir_j_ jpath'~addons/ide/jhs' NB. delete pacman ~addons folder
4 | hostcmd_j_ 'ln -s ',(jpath'~Addons/ide/jhs/'),' ',jpath '~addons/ide/jhs'
5 | 'link to ~Addons did not work'assert 1=fexist'~addons/ide/jhs/.git'
6 | )
7 |
8 | man=: 0 : 0
9 | JHS development
10 | editing/testing done with git/addons/ide/jhs
11 | JHS runs with git code due to symbolic link set by: jhs_create_symbolic_link''
12 | ~Addons -> git/addons
13 | ~addons -> j90x/addons -> git/addons
14 |
15 | git manifest version numbers should always increase
16 | so pacman update should never see that pacman update as required
17 |
18 | *** pacman release build (from ~Addons/ide/jhs):
19 | ...$ cd git/addons/ide/jhs
20 | ...$ git pull
21 | ...$ git status - resolve problems
22 |
23 | start J
24 | load'docs/ijs/spfile.ijs' NB. define bupx etc
25 | bupn__=: '~Addons/ide/jhs' NB. folder to backup
26 | bupx'before pacman' NB. defined in p_jhs_jsp_
27 | load'~Addons/ide/jhs/nopacman/dev.ijs'
28 | setp'ide/jhs'
29 | manifest_status'' NB. edit manifest to resolve problems
30 | bump_version''
31 |
32 | ...$ git status
33 | ...$ git commit -a -m "pacman release ..."
34 | ...$ git push
35 |
36 | *** test pacman build:
37 | ferase'~addons/ide/jhs' NB. erase ln symbolic link file to git/addons/ide/jhs
38 | esc+q
39 |
40 | start jconsole
41 | load'pacman'
42 | 'install'jpkg'ide/jhs'
43 |
44 | shutdown/start JHS/test
45 |
46 | *** ln to ~Addons for development:
47 | start JHS
48 | jhs_create_symbolic_link''
49 | )
50 |
--------------------------------------------------------------------------------
/nopacman/oldmenu.js:
--------------------------------------------------------------------------------
1 | //! old menu stuff
2 |
3 | // return menu group node n
4 | function jfindmenu(n)
5 | {
6 | var nodes= document.getElementsByTagName("a");
7 | var i,node,cnt=0,last,len= nodes.length;
8 | for(i=0;i
=0;--n) // back n up to current group
48 | if(1==jmenunavinfo(m,n))break;
49 | for(i=n-1;i>=0;--i)
50 | if(jmenunavfocushmg(m,i))return;
51 | for(i=len-1;i>=0;--i) // focus last hmg
52 | if(jmenunavfocushmg(m,i))return;
53 | }
54 | else if(c==38) // up
55 | {
56 | if("jhmg"==nc) return;
57 | if(jmenunavfocus(m,n-1))return;
58 | else
59 | {
60 | for(i=n;i=0;--i) // back up to hmg then forward 1
78 | if(1==jmenunavinfo(m,i))break;
79 | jmenunavfocus(m,i+1);
80 | return;
81 | }
82 | }
83 | }
84 |
85 | // focus,show if hmg - return 1 if focus is done
86 | function jmenunavfocushmg(m,n)
87 | {
88 | if(1!=jmenunavinfo(m,n))return 0;
89 | m[n].focus();jmenushow(m[n]);
90 | return 1;
91 | }
92 |
93 | // focus if hml/jmab - return 1 if focus is done
94 | function jmenunavfocus(m,n)
95 | {
96 | if(2!=jmenunavinfo(m,n))return 0;
97 | m[n].focus();
98 | return 1;
99 | }
100 |
101 | // return m[n] info - 0 none, 1 hmg, 2 hml or hmab
102 | function jmenunavinfo(m,n)
103 | {
104 | if(n==m.length)return 0;
105 | return ("jhmg"==m[n].getAttribute("class"))?1:2
106 | }
107 |
108 | // activate menu group n
109 | function jactivatemenu(n)
110 | {
111 | jmenuhide();
112 | var node= jfindmenu(n);
113 | if('undefined'==typeof node) return;
114 | node.focus();
115 | }
116 |
117 | var menublock= null; // menu ul element with display:block
118 | var menulast= null; // menu ul element just hidden
119 |
120 | function jmenuclick(ev)
121 | {
122 | jmenuhide(ev);
123 | var e=window.event||ev;
124 | var tar=(typeof e.target=='undefined')?e.srcElement:e.target;
125 | var id=tar.id;
126 | if(id=="adv"){jscdo("advance");return;}
127 | var idul= id+"_ul";
128 | jbyid(id).focus(); // required on mac
129 | if(jbyid(idul).style.display=="block")
130 | {
131 | menublock= null;
132 | jbyid(idul).style.display= "none";
133 | }
134 | else
135 | {
136 | if(menulast!=jbyid(idul))
137 | {
138 | menublock= jbyid(idul);
139 | menublock.style.display= "block";
140 | }
141 | }
142 | }
143 |
144 | function jmenushow(node)
145 | {
146 | jmenuhide();
147 | var id=node.id;
148 | var idul= id+"_ul";
149 | menublock= jbyid(idul);
150 | menublock.style.display= "block";
151 | }
152 |
153 | function jmenuhide()
154 | {
155 | if(tmenuid!=0) clearTimeout(tmenuid);
156 | tmenuid= 0;
157 | menulast= menublock;
158 | if(menublock!=null) menublock.style.display= "none";
159 | menublock= null;
160 | return true;
161 | }
162 |
163 | // browser differences
164 | // safari/chrome onblur on mousedown and onfocus on mouseup
165 | // onblur will hide the menu 250 after mousedown (no clear)
166 | // so menu item click needs to be quick
167 |
168 | var tmenuid= 0;
169 |
170 | function jmenublur(ev)
171 | {
172 | if(tmenuid!=0) clearTimeout(tmenuid);
173 | tmenuid= setTimeout(jmenuhide,500)
174 | return true;
175 | }
176 |
177 | function jmenufocus(ev)
178 | {
179 | if(tmenuid!=0) clearTimeout(tmenuid);
180 | tmenuid= 0;
181 | return true;
182 | }
183 |
184 | function jmenukeydown(ev)
185 | {
186 | var e=window.event||ev;
187 | var c=e.keyCode;
188 | return(c>36&&c<41)?false:true;
189 | }
190 |
191 | function jmenukeypress(ev)
192 | {
193 | var e=window.event||ev;
194 | var c=e.keyCode;
195 | return(c>36&&c<41)?false:true;
196 | }
197 |
198 | function jmenukeyup(ev)
199 | {
200 | var e=window.event||ev;
201 | var c=e.keyCode;
202 | if(c<37||c>40)return false;
203 | var tar=(typeof e.target=='undefined')?e.srcElement:e.target;
204 | jmenunav(tar,c);
205 | return true;
206 | }
207 |
208 |
209 |
--------------------------------------------------------------------------------
/nopacman/switch.ijs:
--------------------------------------------------------------------------------
1 | load'pacman'
2 |
3 | man=: 0 : 0
4 | manage multiple JHS versions - git / pacman original / tar snapshot
5 |
6 | jhsalt folder has alternate jhs code
7 | jhsalt,'/pac/addons/ide/jhs' - original pacman -set by first which
8 | jhsalt,'/bup/git/addons/ide/jhs' - from tar of git source
9 |
10 | dif'' NB. linux kdiff3 git vs jhsalt/bup
11 |
12 | switch'...' NB. git/pac/bup - jhs link to alternate code
13 |
14 | get'...' NB. path to backup tar of git/addons/ide/jhs
15 | )
16 |
17 | jhsalt=: 'jhsalt' NB. folder with alternate JHS source
18 |
19 | asserts=: 3 : 0
20 | 'should be run in jconsole' assert -.IFJHS+.IFQT
21 | 'jhsalt must be defined'assert 0=nc<'jhsalt'
22 | 'jhsalt folder must exist' assert fexist jhsalt
23 | '~Addons must be defined in ~config/folders.ijs' assert fexist '~Addons/ide/jhs/core.ijs'
24 | )
25 |
26 | NB. which JHS code
27 | which=: 3 : 0
28 | asserts''
29 | r=.shell'ls -l ',jpath'~addons/ide/jhs'
30 | if. 1~:+/r=LF do.
31 | p=. jhsalt,'/pac/addons/ide'
32 | mkdir_j_ p
33 | echo'jhs not a link - assume it is pacman version'
34 | echo'pacman version copied to: ',p
35 | shell 'cp -r ',(jpath'~addons/ide/jhs'),' ',p
36 | jpath'~addons/ide/jhs'
37 | else.
38 | i=. r i:'>'
39 | }:2}.(i}.r)
40 | end.
41 | )
42 |
43 | NB. set jhs link to run alternate JHS code
44 | switch=: 3 : 0
45 | asserts''
46 | old=. which''
47 | echo old
48 | select. y
49 | case. 'git' do. t=. 'git/addons/ide/jhs'
50 | case. 'bup' do. t=. jhsalt,'/bup/git/addons/ide/jhs'
51 | case. 'pac' do. t=. jhsalt,'/pac/addons/ide/jhs'
52 | case. do. 'invalid arg'assert 0
53 | end.
54 | t=. jpath '~/',t
55 | if. t-:old do. 'already set to that link' return. end.
56 | rmdir_j_ jpath'~addons/ide/jhs' NB. delete pacman ~addons folder
57 | shell'ln -s ',t,' ',jpath '~addons/ide/jhs'
58 | which''
59 | )
60 |
61 | NB. dif between git and jhsalt/bup
62 | dif=: 3 : 0
63 | shell'kdiff3 git/addons/ide/jhs jhsalt/bup/git/addons/ide/jhs'
64 | )
65 |
66 | NB. get'pastebuptarfilenamehere'
67 | NB. copy file to jhsalt/bup/ and untar
68 | get=: {{
69 | asserts''
70 | fn=. dltb deb 7}.y NB. drop prefix 'file://
71 | echo fn
72 | 'not tar.gz'assert '.tar.gz'-:_7{.fn
73 | name=. (fn i: '/')}.fn
74 | echo name
75 | t=. 'jhsalt/bup'
76 | rmdir_j_ :: [ t
77 | mkdir_j_ t
78 | (fread fn)fwrite t,name
79 | q=.'tar -xzf ',t,name,' -C ',t
80 | echo q
81 | shell q
82 | }}
83 |
--------------------------------------------------------------------------------
/nopacman/wiki.txt:
--------------------------------------------------------------------------------
1 | 13 april 2022
2 |
3 | * onbeforeunload finally works
4 | close page if dirty gives user change to cancel close
5 | kill off ctrl+\ ???
6 | kill off redbarclose
7 |
8 | * jijs - load/loadd run in jijx window - alert if jijx window is gone
9 |
10 | * more consistent use of window name
11 |
12 | * more consistent use of standard jshortname
13 |
14 | * jijx menu cleanup - edit menu
15 |
16 | * mac cmd key in menu
--------------------------------------------------------------------------------
/page/jcjs.ijs:
--------------------------------------------------------------------------------
1 | coclass'jcjs'
2 | coinsert'jhs'
3 |
4 | INC=: INC_chartjs NB. include chart js code
5 |
6 | NB. define html elements (button,...)
7 | HBS=: 0 : 0
8 | jhclose''
9 | 'dict'jhb'show chart config'
10 | 'defn'jhb'show chart defintion'
11 | jhdivz NB. base div close - flex active
12 |
13 | NB. share remaining vertical space
14 | 'charta'jhchart''
15 | 'show'jhdiv''
16 |
17 | jhdiva'' NB. reopen main div
18 | )
19 |
20 | ev_create=: 3 : 0
21 | if. ''-:y do.
22 | jcjs'reset'
23 | jcjs'data';>:5?20
24 | jcjs'labels';5
25 | end.
26 | jhcmds 'chartjs charta *',cjsdata
27 | )
28 |
29 | NB. style html elements (color,size,border,..)
30 | CSS=: 0 : 0
31 | #charta_parent{background-color:pink;}
32 | #charta_parent{height:50%;width:100%;}
33 | #show{font-family:monospace;}
34 | )
35 |
36 | NB. javascript code
37 | JS=: 0 : 0
38 |
39 | function show(t){
40 | t= t.replace(//g, '>');
42 | t= t.replace(/\n/g, '
');
43 | t= t.replace(/ /g, ' ');
44 | t= t.replace(/\"/g, '"');
45 | t= t.replace(/'/g, ''');
46 | jbyid('show').innerHTML= t;
47 | }
48 |
49 | function ev_dict_click(){
50 | var c= cjs('charta').config;
51 | show(JSON.stringify(c._config,null,4));
52 | }
53 |
54 | function ev_defn_click(){show(jsdata['charta']);}
55 |
56 | )
--------------------------------------------------------------------------------
/page/jd3.ijs:
--------------------------------------------------------------------------------
1 | coclass'jd3'
2 | coinsert'jhs'
3 |
4 | NB. css/js library files to include
5 | INC=: INC_d3_basic
6 |
7 | NB. J sentences - create html body
8 | HBS=: 0 : 0
9 | jhclose''
10 | 'ga'jhd3_basic'' NB. ga,ga_... divs for d3_basic plot
11 | )
12 |
13 | NB. jpage boilerplate from util.ijs
14 |
15 | ev_create=: 3 : 0
16 | if. ''-: y do.
17 | jd3'reset;type line;title My Data;legend "line one","line two","line three"'
18 | y=. jd3x__;?3 4$100
19 | end.
20 |
21 | try.
22 | 'opt d'=. y
23 | data=: (opt rplc LF;'\n'),jd3data d
24 | catchd.
25 | ('create failed:',LF,13!:12'') assert 0
26 | end.
27 | JS=: JS hrplc 'TABDATA';data NB. adjust JS here!
28 | )
29 |
30 | NB. javascript
31 | JS=: 0 : 0
32 |
33 | tabdata=""; // set by ev_create
34 |
35 | function ev_body_load()
36 | {
37 | if (window.frameElement){jhide("close");} // demo14.ijs - only 1 close button in iframe set
38 | resize();
39 | window.onresize= resize;
40 | }
41 |
42 | function resize()
43 | {
44 | jbyid("ga_box").style.width=window.innerWidth-20+"px";
45 | jbyid("ga_box").style.height=window.innerHeight-20+"px";
46 | plot("ga",tabdata);
47 | }
48 |
49 | function ajax(ts){;}
50 |
51 | )
--------------------------------------------------------------------------------
/page/jhotd3.ijs:
--------------------------------------------------------------------------------
1 | coclass'jhotd3'
2 | coinsert'jhs'
3 |
4 | man=: 'jpage y must be 5 by 12 integer table'
5 |
6 | HBS=: 0 : 0
7 | jhclose''
8 | jhh1'Budget'
9 | 'budget 2016'
10 | ''
11 | ''
12 | ''
13 | '
'
14 | )
15 |
16 | months=: '"JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC"'
17 |
18 | ev_create=: 3 : 0
19 | y=. y jpagedefault ?5 12$200
20 | man assert (4=3!:0 y)*. 5 12-:$y
21 | temp__=: y
22 | t=. 'temp'
23 | try.
24 | shown=: 1
25 | header=: dltb t
26 | header=: header,>('_'={:header){'__';''
27 | assert 0=nc td {background-color: bisque;}'
33 |
34 | NB. sets summary rows to readonly
35 | option__hot1'cells: function(row, col, prop){var cellProperties = {};if(row > 4){cellProperties.readOnly = true;}return cellProperties;}'
36 |
37 | option__hot1'colHeaders:[',months,']'
38 | option__hot1'rowHeaders:["food","car","cell","rent","misc","min","max","avg","sum","tot"]'
39 | option__hot1'minSpareRows:0'
40 | option__hot1'minSpareCols:0'
41 | setdata__hot1 d,calc d
42 | fixjs__hot1'' NB. apply options and data to JS
43 |
44 | jd3'reset'
45 | jd3'label ',months
46 | jd3'legend "foo","car","cell","rent","misc"'
47 | jd3'barwidth 60'
48 | jd3'type bar'
49 | jd3options=: jd3x__
50 | loc=: 'jd3;_;'jpage jd3options;d
51 |
52 | catch.
53 | ('create failed:',LF,13!:12'') assert 0
54 | end.
55 | jhcmds''
56 | )
57 |
58 | destroy=: 3 : 0
59 | if. shown do. close ;coname'' end.
60 | destroy__hot1''
61 | destroy__loc''
62 | codestroy''
63 | )
64 |
65 | NB. new CSS3 calc will allow better layout control
66 | CSS=: 0 : 0
67 | #title{margin-left:50px;text-align:center;font-size:22pt;}
68 | #hots{height:90vh;overflow:hidden;}
69 | #hot1{width:100%;height:50%;overflow:hidden;}
70 | #jd3 {width:100%;height:50%;overflow:hidden;}
71 | )
72 |
73 | calc=: 3 : '(<./y),(>./y),(<.(+/%#) y),(+/y),:+/\ +/y'
74 |
75 | NB. gets all the data - could get and apply just changes
76 | jev_change=: 3 : 0
77 | b=. 5{.data__hot1
78 | d=. tablefromjs getv'jdata' NB. data and summary data
79 | for_i. i.#d do.
80 | 'r c z n'=. i{d
81 | b=. n ('
11 | ''
12 | ' '
13 | )
14 |
15 | NB. jpage boilerplate from util.ijs
16 |
17 | ev_create=: 3 : 0
18 | if. ''-:y do.
19 | temp__=: 2 2$'aa';'b';'c';'dd'
20 | y=. 'temp'
21 | end.
22 |
23 | try.
24 | header=: dltb y
25 | header=: header,>('_'={:header){'__';''
26 | assert 0=nc