Explorar el Código

deep_prop

trc_dbg
jfinn hace 2 años
padre
commit
3d7890dac1
Se han modificado 44 ficheros con 1812 adiciones y 22 borrados
  1. 1
    0
      browser_ext/do_e1/d0.js
  2. 0
    0
      browser_ext/do_e1/d1.js
  3. 0
    0
      browser_ext/do_e1/d2.js
  4. 97
    0
      browser_ext/do_e1/ext_indx.html
  5. 7
    0
      browser_ext/do_e1/inc_list.html
  6. 35
    0
      browser_ext/do_e1/pre_rld_init.js
  7. 201
    0
      inc_lib/dev_jx/class_dec.js
  8. 26
    0
      inc_lib/dev_jx/dec_ord.js
  9. 17
    0
      inc_lib/dev_jx/dev_fn.js
  10. 36
    0
      indx/jsyncdb/jsync_lib_nginx_template.js
  11. 0
    0
      indx/jsyncdb/jsync_lib_nginx_template_rs.js
  12. 3
    1
      indx/jsyncdb/rlist0.js
  13. 1
    1
      j7/udev/u_ld.js
  14. 4
    1
      j9/dev_dep/misc_dev.js
  15. 1
    1
      j9/dev_dep/tmsg_u.js
  16. 4
    4
      j9/inc/index/_config.js
  17. 1
    0
      py_rld/djc/rdir1/i0.py
  18. 2
    0
      py_rld/djc/rdir1/i1.py
  19. 26
    2
      py_rld/djc/rdir1/v0.py
  20. 46
    2
      py_rld/djc/rdir1/vr0.py
  21. 1
    0
      swatch/z.txt
  22. 0
    0
      swatch/z2.txt
  23. 138
    0
      xf/nginx_tx/do_e1/d0.js
  24. 426
    0
      xf/nginx_tx/do_e1/d1.js
  25. 54
    0
      xf/nginx_tx/do_e1/d2.js
  26. 0
    0
      xf/nginx_tx/do_e1/d3.js
  27. 0
    0
      xf/nginx_tx/do_e1/d4.js
  28. 8
    0
      xf/nginx_tx/do_e1/do_e1.html
  29. 45
    0
      xf/nginx_tx/invite_dev/inv0.css
  30. 113
    0
      xf/nginx_tx/invite_dev/inv1.js
  31. 290
    0
      xf/nginx_tx/invite_dev/inv2.js
  32. 78
    0
      xf/nginx_tx/invite_dev/inv3.js
  33. 29
    0
      xf/nginx_tx/invite_dev/inv4.js
  34. 34
    0
      xf/nginx_tx/invite_dev/inv5.js
  35. 22
    0
      xf/nginx_tx/invite_dev/inv6.js
  36. 0
    0
      xf/nginx_tx/invite_dev/inv7.js
  37. 2
    0
      xf/nginx_tx/invite_dev/invite_dev.html
  38. 23
    0
      xf/nginx_tx/invite_dev/invite_ui.html
  39. 3
    1
      xf/nginx_tx/j9_dep/i0.js
  40. 3
    4
      xf/nginx_tx/j9_dev/j6.css
  41. 11
    1
      xf/nginx_tx/j9_dev/j9.css
  42. 4
    1
      xf/nginx_tx/j9_dev/jev0.js
  43. 4
    0
      xf/nginx_tx/j9_dev/jev8.js
  44. 16
    3
      xf/nginx_tx/prx_dev/p4.js

+ 1
- 0
browser_ext/do_e1/d0.js Ver fichero

@@ -0,0 +1 @@
1
+

+ 0
- 0
browser_ext/do_e1/d1.js Ver fichero


+ 0
- 0
browser_ext/do_e1/d2.js Ver fichero


+ 97
- 0
browser_ext/do_e1/ext_indx.html Ver fichero

@@ -0,0 +1,97 @@
1
+<html itemscope itemtype="http://schema.org/Product" prefix="og: http://ogp.me/ns#" xmlns="http://www.w3.org/1999/html">
2
+  <head>
3
+      <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
4
+<!--#set var="rtqs" value="c=$request_id"-->
5
+
6
+<!--# set var="chr_dflt" value="z" -->
7
+<!--# set var="chr" value="z" -->
8
+<!--# set var="chr_rq" value="z" -->
9
+<!--# set var="chr_rf" value="z" -->
10
+<!--# set var="nv" value="do_e1" -->
11
+
12
+<!-- <script src="/ign/libs/jquery-3.5.1.min.js"></script> -->
13
+<script src="/ign/libs/jquery-3.5.1.js"></script>
14
+<script class="rld" src="/ign/libs/mustache.js?c=002"></script>
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+<script class="rld" src="/ign/rf/u/universals.js?c=00x"></script>
25
+<script class="" src="/ign/rf/u/proto_ext.js?c=00x"></script>
26
+
27
+<script class="rld" src="/ign/indx/jsyncdb/jsync_dep.js"></script>
28
+<script class="rld" src="/ign/indx/jsyncdb/jsync_ord.js"></script>
29
+
30
+<!-- <script class="rld" src="/ign/ldev/rndr_eng/implicit_dependencies.js?<!--#echo var="rtqs"-->"></script> -->
31
+
32
+<script class="rld" src="/ign/j7/udev/u_ld.js?c=00x"></script>
33
+<script class="rld" src="/ign/inc_lib/dev_jx/dev_fn.js?c=00x"></script>
34
+<script class="rld" src="/ign/inc_lib/dev_jx/class_dec.js?c=00x"></script>
35
+<script class="rld" src="/ign/inc_lib/dev_jx/dec_ord.js?c=00x"></script>
36
+
37
+<script type="text/javascript" src="https://unpkg.com/recursive-diff@latest/dist/recursive-diff.min.js"></script>
38
+<script type="text/javascript">
39
+    console.log("..........")
40
+ var oldVal = { a: 1,b:{c:2}};
41
+ var newVal = { a: 2,b:{z:3} };
42
+ var delta = recursiveDiff.getDiff(oldVal, newVal);
43
+ var ob3 = recursiveDiff.applyDiff(oldVal, delta); //expect ob3 is deep equal to newVal
44
+ console.log("????",{oldVal,
45
+newVal,
46
+delta,
47
+ob3,})
48
+window.zzz={oldVal,
49
+newVal,
50
+delta,
51
+ob3,}
52
+</script>
53
+
54
+
55
+
56
+<!-- C:\bspace\repos\jc4\ign4\inc_lib\dev_jx\class_dec.js -->
57
+
58
+<!-- <script class="rld" src="/ign/xf/nginx_tx/j9_dep/i0.js?c=00x"></script> -->
59
+<!-- <script class="rld" src="/ign/xf/nginx_tx/prx_dev/p4.js?c=00x"></script> -->
60
+<!-- https://videocorners.com/ign/xf/nginx_tx/prx_dev/p4.js?c=cca60a1c4b469599e0de327f3dc71a43 -->
61
+
62
+
63
+    <script src="/ign/j7/rldjs/rldjs5.js?v=139"></script>
64
+    <script class="rld rrld" src="/ign/rls.js?<!--#echo var="rtqs"-->"></script>
65
+    <script class="rld rrld_u" src="/ign/rls_u.js?<!--#echo var="rtqs"-->"></script>
66
+
67
+
68
+
69
+
70
+    <!-- <script class="rld" src="/ign/xf/nginx_td/td_t/ti_t2.js?<!--#echo var="rtqs"-->"></script> -->
71
+
72
+    <!-- <script class="rld" src="/ign/rf/m/m_api_v2.js?c=00x"></script> -->
73
+
74
+<meta class="rt_start rt_jx">
75
+
76
+
77
+    
78
+    <meta class="rt_x2" data-z="nginx_txr/rt_root.html">
79
+    <!--#include virtual="/ign/xf/nginx_txr/rt_root.html" -->
80
+
81
+
82
+<meta class="rt_fin rt_jx">
83
+
84
+<!-- <script class="rld" src="/ign/xf/inspect/rld_info.js?c=002"></script> -->
85
+
86
+<script type="text/javascript">
87
+    nginx_u = {
88
+        rtqs:`<!--#echo var="rtqs" -->`,
89
+    }
90
+
91
+</script>
92
+
93
+  </head>
94
+  <body>
95
+    do_e1
96
+  </body>
97
+  </html>

+ 7
- 0
browser_ext/do_e1/inc_list.html Ver fichero

@@ -0,0 +1,7 @@
1
+
2
+
3
+
4
+
5
+<script type="module" class="rld" src="/d0.js?c=0"></script>
6
+<script class="rld" src="/d1.js?c=0"></script>
7
+<script class="rld" src="/d2.js?c=0"></script>

+ 35
- 0
browser_ext/do_e1/pre_rld_init.js Ver fichero

@@ -0,0 +1,35 @@
1
+
2
+function gen_rec(url,type){
3
+
4
+}
5
+
6
+function pre_rld_init() {
7
+	// body...
8
+	var html_domain = `https://jfidev.com`
9
+	var html_path = `/ign/browser_ext/do_e1`
10
+	var html_full_path = `${html_domain}${html_path}`
11
+	var html_txt,html_obj
12
+	html_txt  = `<!--#include virtual="/ign/browser_ext/do_e1/inc_list.html" -->`
13
+html_obj = $(`<span>${html_txt}</span>`)
14
+
15
+	$(``)
16
+
17
+	var j,n,lst
18
+	j=$(`head>*`)
19
+	lst=[]
20
+	var n0 = $(`.rec_insert_point`)
21
+
22
+	clog(html_obj.children)
23
+	for (n of html_obj.children()){
24
+		n.src = html_full_path +n.getAttribute("src")
25
+		// clog(n,n.src,n.getAttribute("src"),n.url)
26
+		clog(n,n.src,n.getAttribute("src"),n.url,n.type)
27
+		lst.push(n)
28
+		n0.after(n)
29
+		n=n0
30
+	}
31
+	clog("pre_rld_init",{j,n,lst,html_obj,html_txt})
32
+}
33
+
34
+reg_onload_fn(pre_rld_init)
35
+

+ 201
- 0
inc_lib/dev_jx/class_dec.js Ver fichero

@@ -0,0 +1,201 @@
1
+// copied from \ign\xf\nginx_tx\j9_dep\i0.js
2
+
3
+glob_u.cls_dec = glob_u.cls_dec || {
4
+	orig_map:new Map(),
5
+
6
+}
7
+
8
+glob_u.cls_dec.get_proto_chain = function get_proto_chain(cls){
9
+	var r = {
10
+		arr:[],
11
+		arr_:[],
12
+	}
13
+	var _cls
14
+	if (typeof(cls.__proto__) == "function"){
15
+	_cls = cls.prototype
16
+
17
+	} else {
18
+	_cls = cls.__proto__
19
+
20
+	}
21
+	// r.arr.push(_cls)
22
+	while (_cls != Object.prototype){
23
+		if (r.arr.includes(_cls)){
24
+			clog("CLS includes",cls)
25
+			break
26
+		}
27
+		r.arr.push(_cls)
28
+		_cls = _cls.__proto__
29
+		r.arr_.push(_cls)
30
+	}
31
+	return r 
32
+
33
+}
34
+
35
+function save_orig_class(cls){
36
+	var m = glob_u.cls_dec.orig_map
37
+	var _cls = cls.prototype
38
+	if (m.has(_cls)){
39
+		clog("cls already saved",_cls)
40
+		return
41
+	}
42
+	var o = {
43
+		methods:{},
44
+		// methods:{},
45
+		// desc:
46
+	}
47
+
48
+	m.set(_cls,o)
49
+	o.desc = Object.getOwnPropertyDescriptors(_cls)
50
+	o.proto_chain = glob_u.cls_dec.get_proto_chain(cls)
51
+
52
+	var k,v
53
+	for ([k,v] of Object.entries(o.desc)){
54
+		o.methods[k] = v.value
55
+	}
56
+	o.inherited_methods = {}
57
+
58
+	
59
+}
60
+
61
+function dec_class_method_v2(cls,fn_name,fn1=nop,fn2=nop,o={}){
62
+	var _cls = cls.prototype
63
+	clog("j9_",{_cls,cls})
64
+	if (!glob_u.cls_dec.orig_map.has(_cls)){
65
+		save_orig_class(cls)
66
+	}
67
+	var ocls = glob_u.cls_dec.orig_map.get(_cls)
68
+	// var orig_method = ocls.methods[fn_name]
69
+	var orig_method = ocls.methods[fn_name] || ocls.inherited_methods[fn_name]
70
+	if (!orig_method && _cls[fn_name]){
71
+		orig_method = ocls.inherited_methods[fn_name] = _cls[fn_name]
72
+	}
73
+
74
+	// cls.prototype[fn_name] = _method_dec_v3(orig_method,fn1,fn2,fn_name,cls)
75
+	_cls[fn_name] = _method_dec_v1(orig_method,fn1,fn2,fn_name,_cls,o)
76
+	// cls[fn_name].ao = {orig_method,fn1,fn2,fn_name,cls,o}
77
+
78
+}
79
+
80
+function dec_class_method_v1(cls,fn_name,fn1=nop,fn2=nop,o={}){
81
+	var ocls = glob_u.cls_dec.orig_map.get(cls)
82
+	// var orig_method = ocls.methods[fn_name]
83
+	var orig_method = ocls.methods[fn_name] || ocls.inherited_methods[fn_name]
84
+	if (!orig_method && cls[fn_name]){
85
+		orig_method = ocls.inherited_methods[fn_name] = cls[fn_name]
86
+	}
87
+
88
+	// cls.prototype[fn_name] = _method_dec_v3(orig_method,fn1,fn2,fn_name,cls)
89
+	cls[fn_name] = _method_dec_v1(orig_method,fn1,fn2,fn_name,cls,o)
90
+	// cls[fn_name].ao = {orig_method,fn1,fn2,fn_name,cls,o}
91
+
92
+}
93
+
94
+
95
+function dec_class_method_v0(cls,fn_name,fn1=nop,fn2=nop,o={}){
96
+	var ocls = glob_u.cls_dec.orig_map.get(cls)
97
+	// var orig_method = ocls.methods[fn_name]
98
+	clog("j9_",ocls)
99
+	var orig_method = ocls.methods[fn_name] || ocls.inherited_methods[fn_name]
100
+	if (!orig_method && cls[fn_name]){
101
+		orig_method = ocls.inherited_methods[fn_name] = cls[fn_name]
102
+	}
103
+
104
+	// cls.prototype[fn_name] = _method_dec_v3(orig_method,fn1,fn2,fn_name,cls)
105
+	cls[fn_name] = _method_dec_v0(orig_method,fn1,fn2,fn_name,cls,o)
106
+	// cls[fn_name].ao = {orig_method,fn1,fn2,fn_name,cls,o}
107
+
108
+}
109
+
110
+
111
+// [ret_flag,ret]
112
+function _method_dec_v00(fn,fn1,fn2,fn_name,cls,o){
113
+	var args_dec = {fn,fn1,fn2,fn_name,cls,o}
114
+	return function() {
115
+		try {
116
+	// const ret1 = fn1 ? fn1({that:this, args:arguments,args_dec}) : 0
117
+	const ret1 = fn1 ? fn1.call(this,{that:this, args:arguments,args_dec}) : 0
118
+
119
+	if (ret1?.ret_flag == "ret"){
120
+		return ret1.ret
121
+	}
122
+
123
+	const ret = fn.apply(this, arguments);
124
+	// const ret2 = fn2 ? fn2({that:this, args:arguments,args_dec,ret,ret1}) : 0
125
+	const ret2 = fn2 ? fn2.call(this,{that:this, args:arguments,args_dec,ret,ret1}) : 0
126
+	if (ret2?.ret_flag == "ret"){
127
+		return ret2.ret
128
+	}
129
+	return ret
130
+
131
+		} catch (err){
132
+			console.error("_method_dec_v0 ERR:",err)
133
+			return fn.apply(this, arguments);
134
+		}
135
+	}
136
+}
137
+
138
+
139
+function _method_dec_v0(fn,fn1,fn2,fn_name,cls,o){
140
+	// clog("IDK?",{fn,fn1,fn2,fn_name,cls,o})
141
+	var args_dec = {fn,fn1,fn2,fn_name,cls,o}
142
+	const ret = function() {
143
+		try {
144
+	const ret1 = fn1 ? fn1({that:this, args:arguments,args_dec}) : 0
145
+	// const ret1 = fn1 ? fn1.call(this,{that:this, args:arguments,args_dec}) : 0
146
+
147
+	if (ret1?.ret_flag == "ret"){
148
+		return ret1.ret
149
+	}
150
+
151
+	const ret = fn.apply(this, arguments);
152
+	const ret2 = fn2 ? fn2({that:this, args:arguments,args_dec,ret,ret1}) : 0
153
+	// const ret2 = fn2 ? fn2.call(this,{that:this, args:arguments,args_dec,ret,ret1}) : 0
154
+	if (ret2?.ret_flag == "ret"){
155
+		return ret2.ret
156
+	}
157
+	return ret
158
+
159
+		} catch (err){
160
+			console.error("_method_dec_v0 ERR:",err)
161
+			return fn.apply(this, arguments);
162
+		}
163
+	}
164
+	ret.isDecorator = true 
165
+	return ret
166
+}
167
+
168
+
169
+function _method_dec_v1(fn,fn1,fn2,fn_name,cls,o){
170
+	// clog("IDK?",{fn,fn1,fn2,fn_name,cls,o})
171
+	var args_dec = {fn,fn1,fn2,fn_name,cls,o}
172
+	const ret = function() {
173
+		try {
174
+	const ret1 = fn1 ? fn1.apply(this,[{that:this, args:arguments,args_dec}]) : 0
175
+	// const ret1 = fn1 ? fn1.call(this,{that:this, args:arguments,args_dec}) : 0
176
+
177
+	if (ret1?.ret_flag == "ret"){
178
+		return ret1.ret
179
+	}
180
+
181
+	const ret = fn.apply(this, arguments);
182
+	const ret2 = fn2 ? fn2.apply(this,[{that:this, args:arguments,args_dec,ret,ret1}]) : 0
183
+	// const ret2 = fn2 ? fn2.call(this,{that:this, args:arguments,args_dec,ret,ret1}) : 0
184
+	if (ret2?.ret_flag == "ret"){
185
+		return ret2.ret
186
+	}
187
+	return ret
188
+
189
+		} catch (err){
190
+			console.error("_method_dec_v0 ERR:",err)
191
+			return fn.apply(this, arguments);
192
+		}
193
+	}
194
+	ret.isDecorator = true 
195
+	return ret
196
+}
197
+
198
+
199
+
200
+
201
+

+ 26
- 0
inc_lib/dev_jx/dec_ord.js Ver fichero

@@ -0,0 +1,26 @@
1
+// copied from \ign\xf\nginx_tx\j9_dep\i0.js
2
+
3
+// window.glob_u.cls.reg_cb_ord
4
+function ord_dec(o){
5
+	// clog("ord_dec:",o.args_dec.fn_name,o)
6
+	// clog("ord_dec:",o.args[0],o)
7
+}
8
+
9
+function run_cbs_ord_dec(o){
10
+	var skips = ["T_getStyles"]
11
+	if (skips.includes(o.args[0])){
12
+		// clog("ord_dec:","skips")
13
+	} else {
14
+
15
+	clog("ord_dec:",o.args_dec.fn_name,o.args[0],o)
16
+	}
17
+
18
+}
19
+function _run_cbs_ord_dec(o){
20
+	// clog("ord_dec???")
21
+	return run_cbs_ord_dec(o)
22
+}
23
+
24
+save_orig_class(window.glob_u.cls.reg_cb_ord)
25
+
26
+// dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"run_cbs",ord_dec,ord_dec)

+ 17
- 0
inc_lib/dev_jx/dev_fn.js Ver fichero

@@ -0,0 +1,17 @@
1
+glob_u.fns.inc_map = function inc_map(map,key,dflt=0,inc=1){
2
+	if (!map.has(key)){
3
+		map.set(key,dflt + inc)
4
+	} else {
5
+		map.set(key,map.get(key) + inc)
6
+	}
7
+}
8
+
9
+
10
+glob_u.fns.map_to_obj = function map_to_obj(m){
11
+	var k,v
12
+	var o={}
13
+	for ([k,v] of m){
14
+		o[k]=v
15
+	}
16
+	return o
17
+}

+ 36
- 0
indx/jsyncdb/jsync_lib_nginx_template.js Ver fichero

@@ -0,0 +1,36 @@
1
+"use strict";
2
+// NOT rewritten yet
3
+
4
+(function (){
5
+var isProxy,tlu,msto_z
6
+var pf,msto_prx
7
+
8
+
9
+// jsync:dep.js
10
+// ------------------------------------------------------------------------------------------------
11
+{{{jsync_dep}}}
12
+// jsync:ord.js
13
+// ------------------------------------------------------------------------------------------------
14
+{{{jsync_ord}}}
15
+// jsync:ws.js
16
+// ------------------------------------------------------------------------------------------------
17
+{{{jsync_ws}}}
18
+// jsync:sto.js
19
+// ------------------------------------------------------------------------------------------------
20
+{{{jsync_sto}}}
21
+// jsync:init.js
22
+// ------------------------------------------------------------------------------------------------
23
+{{{jsync_init}}}
24
+
25
+// jsync:test.js
26
+// ------------------------------------------------------------------------------------------------
27
+{{{jsync_test}}}
28
+
29
+
30
+
31
+// glob_u.fns.get_room_name=get_room_name
32
+// window.ds_test=ds_test
33
+// glob_u.fns.ds_test=ds_test
34
+// window.msto_prx=msto_prx
35
+
36
+})()

+ 0
- 0
indx/jsyncdb/jsync_lib_nginx_template_rs.js Ver fichero


+ 3
- 1
indx/jsyncdb/rlist0.js Ver fichero

@@ -10,7 +10,8 @@ function ws_rlist_init_helper(){
10 10
 		include_participants_data:1, 
11 11
 		include_ws_channel_data:1, // required for participants_data to work
12 12
 		// msto.participants and msto.ws_channels will be defined in either case so we don't need to handle cases where some users enable this and some don't
13
-		AutoReconnect:false,
13
+		// AutoReconnect:false,
14
+		AutoReconnect:true,
14 15
 
15 16
 
16 17
 		// the following options attributes 
@@ -59,3 +60,4 @@ function rldi_config(){
59 60
 
60 61
 addEventListener("load",ws_con_init)
61 62
 addEventListener("load",rldi_config)
63
+

+ 1
- 1
j7/udev/u_ld.js Ver fichero

@@ -9,8 +9,8 @@ function onl_multi_gen(){
9 9
 		fno.run_state = 1
10 10
 		// fno.cbstate
11 11
 		for (fn of fno.arr){
12
+			// clog("FNO:",[fn])
12 13
 			fn()
13
-			// clog()
14 14
 		}
15 15
 		fno.run_state = 2
16 16
 	}

+ 4
- 1
j9/dev_dep/misc_dev.js Ver fichero

@@ -157,7 +157,8 @@ glob_u.fns.map_to_obj = function map_to_obj(m){
157 157
 
158 158
 
159 159
 glob_u.tvar.pass_qxi = [
160
-	"SET_LAST_N",
160
+	// "SET_LAST_N",
161
+	"PARTICIPANT_UPDATED",
161 162
 ]
162 163
 glob_u.tvar.skip_qxi = [
163 164
 	"SET_TOOLBOX_VISIBLE",
@@ -176,11 +177,13 @@ glob_u.fns.QXI_log = function QXI_log(o){
176 177
 		// return
177 178
 	if (glob_u.tvar.pass_qxi.includes(o.action.type)){
178 179
 		// clog("=QXI:",o.action.type,o)
180
+	clog("=QXI:",o.action.type,o)
179 181
 	}
180 182
 	if (glob_u.tvar.skip_qxi.includes(o.action.type)){
181 183
 		return
182 184
 	clog("SKIP QXI:",o.action.type)
183 185
 	}
186
+	// clog("QXI:",o.action.type,o)
184 187
 	if (o.action.type == "PLAY_SOUND"){
185 188
 	// clog("QXI:",o.action.type,o)
186 189
 	}

+ 1
- 1
j9/dev_dep/tmsg_u.js Ver fichero

@@ -464,7 +464,7 @@ class Proxy_Factory {
464 464
 
465 465
 	set(obj, prop, val,receiver){
466 466
 		// dlog("prx_db set ",this,obj, prop, val,receiver,val.__prx)
467
-		clog("prx_db set ",{that:this,obj, prop, val,receiver},val.__prx)
467
+		// clog("prx_db set ",{that:this,obj, prop, val,receiver},val.__prx)
468 468
 		// clog("prx_db set ",obj.__path_arr)
469 469
 		if (obj[prop] === val){
470 470
 			return Reflect.set(...arguments)

+ 4
- 4
j9/inc/index/_config.js Ver fichero

@@ -171,8 +171,8 @@ var config = {
171 171
     // startAudioOnly: false,
172 172
 
173 173
     // Every participant after the Nth will start audio muted.
174
-    // startAudioMuted: 10,
175
-    startAudioMuted: 1,
174
+    startAudioMuted: 10,
175
+    // startAudioMuted: 1,
176 176
 
177 177
     // Start calls with audio muted. Unlike the option above, this one is only
178 178
     // applied locally. FIXME: having these 2 options is confusing.
@@ -240,8 +240,8 @@ var config = {
240 240
     // enableLayerSuspension: false,
241 241
 
242 242
     // Every participant after the Nth will start video muted.
243
-    // startVideoMuted: 10,
244
-    startVideoMuted:1,
243
+    startVideoMuted: 10,
244
+    // startVideoMuted:1,
245 245
 
246 246
     // Start calls with video muted. Unlike the option above, this one is only
247 247
     // applied locally. FIXME: having these 2 options is confusing.

+ 1
- 0
py_rld/djc/rdir1/i0.py Ver fichero

@@ -97,6 +97,7 @@ def class_reset_mro(klass):
97 97
 		class_reset_v0(cls)
98 98
 	
99 99
 	
100
+# TODO:JFI I forgot what dec_c1 does
100 101
 def class_edit_v2(__klass,_klass,reset=0,dec_c1=0):
101 102
 	# print("\n")
102 103
 	# rglob.cls_e.append((__klass.__name__,_klass.__name__))

+ 2
- 0
py_rld/djc/rdir1/i1.py Ver fichero

@@ -11,6 +11,7 @@ class DevMixin_R1():
11 11
 			glob_cl.z=self
12 12
 		# p("????????????")
13 13
 		await glob_cl.dev_group_add("chat_group_t1.all",self)
14
+		# TODO:JFI group name needs a namespace to prevent collisions
14 15
 		self.group_name= self.scope["url_route"]["kwargs"]["room_name"]
15 16
 		# await glob_cl.dev_group_add("chat_group_t1.:all",self)
16 17
 		await glob_cl.dev_group_add(self.group_name,self)
@@ -176,6 +177,7 @@ def time_difs(t0,tfin,tarr):
176 177
 	# t0,tfin,td0
177 178
 
178 179
 class DevMixin_R3():
180
+	# somewhat duplicated in v0.js
179 181
 	async def list_all_room_names(self,text_data):
180 182
 		p(self.scope["url_route"]["kwargs"],self.channel_name)
181 183
 		# p(self.room_name)

+ 26
- 2
py_rld/djc/rdir1/v0.py Ver fichero

@@ -1,15 +1,37 @@
1 1
 
2 2
 
3 3
 class DevRlist_M1():
4
+	# somewhat duplicated in i1.js
4 5
 	async def ws_conn(self, *a,**kw):
5 6
 		p("DevRlist_M1")
7
+		await glob_cl.dev_group_add("rlist_group_t1.all",self)
8
+		self.group_name= self.scope["url_route"]["kwargs"]["room_name"]
9
+		if self.group_name == glob_cl.dev_room_dashboard:
10
+			await glob_cl.dev_group_add("rlist_group_t1.invitee",self)
11
+
12
+		# await glob_cl.dev_group_add(self.group_name,self)
13
+		p("???",glob_cl.dev_room_dashboard,self.group_name == glob_cl.dev_room_dashboard)
14
+
6 15
 		pass
7 16
 	async def jm_mx1(self, *a,**kw):
8 17
 		p("jm_mx1")
9 18
 		pass
10
-	async def jm_mx2(self, *a,**kw):
19
+	async def jm_send_invite_status(self,text_data, *a,**kw):
20
+		# p("...",text_data)
21
+		await self.channel_layer.group_send("rlist_group_t1.invitee",{**text_data,"type":"rec_invite_status","room_name":self.group_name,"from":self.channel_name})
22
+
23
+	async def rec_invite_status(self,text_data, *a,**kw):
24
+		await self.send(text_data = json.dumps(text_data))
25
+	async def jm_invite(self, *a,**kw):
26
+		# await self.channel_layer.group_send("rlist_group_t1.invitee",{"type":"invite","room_name":self.group_name})
11 27
 		# p("jm_mx2")
12 28
 		pass
29
+
30
+	async def jm_list_all_room_names(self,text_data):
31
+		# await self.channel_layer.group_send("chat_group_t1.all",{"type":"list_all_room_names"})
32
+		# await self.list_all_room_names({"type":"list_all_room_names"})
33
+		await self.channel_layer.group_send("rlist_group_t1.all",{"type":"list_all_room_names"})
34
+
13 35
 	r'''
14 36
 	async def jsend(self, text_data):
15 37
 		p("jsend:",type(text_data))
@@ -17,4 +39,6 @@ class DevRlist_M1():
17 39
 		await self.send(text_data = json.dumps(text_data["payload"]))
18 40
 	# '''
19 41
 
20
-class_edit(Mixins.DevRlist,DevRlist_M1)
42
+class_edit(Mixins.DevRlist,DevRlist_M1,1)
43
+p("//")
44
+p("//")

+ 46
- 2
py_rld/djc/rdir1/vr0.py Ver fichero

@@ -1,4 +1,48 @@
1
-run_now()
2 1
 
3
-p("/")
2
+def list_all_mro_mthds(klass,mthd_name):
3
+	ret = []
4
+	called = set([None])
5
+	for cls_obj in klass.__mro__:
6
+		mthd = getattr(cls_obj,mthd_name,None)
7
+		if not mthd in called:
8
+			called.add(mthd)
9
+			ret.append(mthd)
10
+	return ret
11
+# assumes all methods of interest will be callable in decendant class
12
+def class_info(klass):
13
+	mthds = {}
14
+	cnt=0
15
+
16
+	# mro = 
17
+
18
+	for en in dir(klass):
19
+		if (en[:2]=="__"):continue
20
+		attr = getattr(klass,en,None)
21
+
22
+		if (not callable(attr)):continue
23
+		# p(en,type(attr))
24
+		# p(en,type(attr))
25
+		# p(attr)
26
+		m2 = list_all_mro_mthds(klass,en)
27
+		# if (len(m2)>1):
28
+		if 1:
29
+
30
+			p(len(m2),en)
31
+			for m in m2:
32
+				# p("\t",m)
33
+				p(" ",m)
34
+		cnt+=1
35
+	# p(len(klass.__mro__))
36
+	# p(len(set(klass.__mro__)))
37
+	# p(klass.__mro__)
4 38
 
39
+
40
+	p(cnt)
41
+
42
+
43
+
44
+run_now()
45
+# p("/")
46
+# class_info(Mixins.DevMixin)
47
+# class_info(Mixins.DevRlist)
48
+# p(class_info)

+ 1
- 0
swatch/z.txt Ver fichero

@@ -0,0 +1 @@
1
+zzzzzzzzzzzzzzzp

+ 0
- 0
swatch/z2.txt Ver fichero


+ 138
- 0
xf/nginx_tx/do_e1/d0.js Ver fichero

@@ -0,0 +1,138 @@
1
+
2
+
3
+
4
+function test_send_req(act_type="power_on"){
5
+
6
+	var tval_base = {
7
+		TOKEN:localStorage.do_token,
8
+	}
9
+	var tval = {
10
+		act_type,
11
+		droplet_id:188972518,
12
+	}
13
+	var tval_ret = glob_u.fns.merge_partial_template(tval,tval_base)
14
+
15
+	var treq = {
16
+		url:"https://api.digitalocean.com/v2/droplets/{{droplet_id}}/actions",
17
+		method:"POST",
18
+		data:{"type":"{{act_type}}"},
19
+		qz2:"z",
20
+	}
21
+	var req = glob_u.fns.merge_partial_template(treq,base_vapi_request)
22
+	var ret = render_stash_obj(req,tval_ret)
23
+	if (ret.data && typeof(ret.data)=="object"){
24
+		ret.data = JSON.stringify(ret.data)
25
+	}
26
+	var aii = $.ajax(ret)
27
+	clog({ret,aii},{req,tval,tval_ret})
28
+
29
+}
30
+function test_proc_resp(data,status,xhr){
31
+	clog("resp:",{that:this,data,status,xhr})
32
+}
33
+function test_proc_resp_err(data,status,xhr){
34
+	clog("resp err:",{that:this,data,status,xhr})
35
+
36
+}
37
+function test_on(argument) {
38
+	test_send_req()
39
+}
40
+function test_off(argument) {
41
+	test_send_req("power_off")
42
+	// body...
43
+}
44
+
45
+// 188972518
46
+// 
47
+
48
+base_vapi_request = {
49
+          // url: "https://api.digitalocean.com/v2/droplets",
50
+          // data: file.qs,
51
+          // cache:false,
52
+          // "passme":"abc124",
53
+          success: test_proc_resp,
54
+          error: test_proc_resp_err,
55
+          headers:{
56
+            "Content-Type": "application/json",
57
+            "Authorization": `Bearer {{TOKEN}}`,
58
+          }
59
+  }
60
+
61
+
62
+// localStorage.do_token
63
+// glob_u.fns.merge_partial_template
64
+// function(data,status,xhr){
65
+
66
+function normalize_json(obj,normalize_arr=true,opt={},depth=0){
67
+	
68
+	const max_depth=8
69
+	if (depth>max_depth){
70
+		console.error("normalize_json max depth exceeded",{obj,normalize_arr,opt,depth})
71
+	}
72
+	if (typeof(obj)!='object'){
73
+		return obj
74
+	}
75
+	if (!obj){
76
+		return obj
77
+	}
78
+
79
+	var ret
80
+	var rtmp
81
+	var k,v
82
+	if (Array.isArray(obj)){
83
+		rtmp = [...obj]
84
+		ret = []
85
+		if (normalize_arr){
86
+		rtmp.sort()
87
+		}
88
+		for (v of rtmp){
89
+			// ret.push(v)
90
+			ret.push(normalize_json(obj,normalize_arr,opt,depth+1))
91
+		}
92
+	} else {
93
+		ret = {}
94
+		rtmp = Object.keys(obj)
95
+		rtmp.sort()
96
+		for (k of rtmp){
97
+			ret[k] = obj[k]
98
+		}
99
+
100
+		// let keys
101
+	}
102
+		return ret
103
+
104
+}
105
+
106
+// Do we need to revisit this for injection attacks?
107
+function render_stash_obj(obj,hash,depth=0,scope={}){
108
+	// var ret = jc(obj)
109
+	// var k,v
110
+	if (depth>5){
111
+		console.error("render_stash_obj max depth exceeded",{obj,hash,depth,scope})
112
+	}
113
+
114
+	switch (typeof(obj)){
115
+		case "string":
116
+			return Mustache.render(obj,hash)
117
+		break;
118
+		case "object":
119
+			let ret = {}
120
+			let k,v
121
+			for ([k,v] of Object.entries(obj)){
122
+				ret[k] = render_stash_obj(v,hash,depth+1,scope)
123
+			}
124
+			return ret
125
+		break;
126
+		default:
127
+			return obj
128
+
129
+	}
130
+	// if (typeof(obj)==)
131
+
132
+	// return ret
133
+}
134
+
135
+
136
+
137
+
138
+

+ 426
- 0
xf/nginx_tx/do_e1/d1.js Ver fichero

@@ -0,0 +1,426 @@
1
+
2
+/*
3
+function dec_cb_ord(){
4
+  try {
5
+    clog("dec_cb_ord:",glob_u,glob_u.cls.reg_cb_ord)
6
+    glob_u.cls.reg_cb_ord.req_batch_run = glob_u.fns.req_batch_run
7
+  } catch (err){
8
+    clog("dec_cb_ord ERR:",err)
9
+  }
10
+}
11
+
12
+
13
+
14
+dec_cb_ord()
15
+*/
16
+
17
+
18
+function run_if_loaded(fn){
19
+  if (onload?.fno?.run_state){
20
+    fn()
21
+  }
22
+
23
+}
24
+
25
+
26
+function onload_event_disp(argument) {
27
+  // body...
28
+  // clog("onload_event_disp",arguments)
29
+  glob_u.cb.ord.run_cbs("PAGE:LOADED")
30
+}
31
+function init_do(argument) {
32
+  // body...
33
+
34
+  window.rldi.setint(400)
35
+  glob_u.fns.merge_partial_template(glob_u.data,{dosto:{
36
+    actions:{},
37
+    droplets:{},
38
+    sizes:{},
39
+    regions:{},
40
+  }
41
+
42
+
43
+
44
+})
45
+  glob_u.fns.merge_partial_template(glob_u,
46
+    {do:
47
+      {
48
+        partial_req_templates:{},
49
+        req_templates:{},
50
+      }
51
+  })
52
+  window.glob_do =glob_u.do
53
+  dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",ord_dec,nop)
54
+  if (!glob_u.cb.ord){
55
+    reg_onload_fn(onload_event_disp)
56
+    // dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"run_cbs",ord_dec,nop)
57
+    glob_u.cb.ord = new glob_u.cls.reg_cb_ord()
58
+
59
+
60
+    // glob_u.tvar.ord_inst = glob_u.cb.ord
61
+  }
62
+  glob_u.cb.ord.DATA =  glob_u.fns.gen_ord_decs(glob_u.cb.ord,"DATA:")
63
+    glob_u.cb.ord.init()
64
+}
65
+
66
+
67
+function reg_cb_or_run(fn,...a){
68
+  run_if_loaded(fn)
69
+  glob_u.cb.ord.reg_cb(fn,...a)
70
+  // clog({fn,a})
71
+}
72
+
73
+
74
+
75
+function init_power_req_templates(){
76
+    var fn_headers = {
77
+          success: resp_handler,
78
+          error: test_proc_resp_err,
79
+          headers:{
80
+            "Content-Type": "application/json",
81
+            "Authorization": `Bearer {{TOKEN}}`,
82
+          }  
83
+    }
84
+    var post_droplet = {
85
+          url:"https://api.digitalocean.com/v2/droplets/{{droplet_id}}/actions",
86
+          method:"POST",
87
+          // resp_tags:{tags:["post_action"]}
88
+          resp_tags:{tags:{"post_action":1}}
89
+          // data:{"type":"{{act_type}}"},
90
+    }
91
+
92
+    var get_droplet = {
93
+          url:"https://api.digitalocean.com/v2/droplets/{{droplet_id}}/actions",
94
+          method:"GET",
95
+          resp_tags:{tags:{"get_rads":1}}
96
+          // data:{"type":"{{act_type}}"},
97
+    }
98
+
99
+
100
+
101
+    // glob_u.do.partial_req_templates
102
+          // https://api.digitalocean.com/v2/droplets/{droplet_id}/actions
103
+    // glob_u.do.req_templates.power_on    = glob_u.fns.merge_partial_template({...fn_headers,...post_droplet},{data:{type:"power_on"},infox2:3})
104
+    glob_u.do.req_templates.power_on    = glob_u.fns.merge_partial_template({...fn_headers,...post_droplet},{data:{type:"power_on"}})
105
+    glob_u.do.req_templates.power_off   = glob_u.fns.merge_partial_template({...fn_headers,...post_droplet},{data:{type:"power_off"}})
106
+    glob_u.do.req_templates.power_cycle = glob_u.fns.merge_partial_template({...fn_headers,...post_droplet},{data:{type:"power_cycle"}})
107
+    glob_u.do.req_templates.shutdown    = glob_u.fns.merge_partial_template({...fn_headers,...post_droplet},{data:{type:"shutdown"}})
108
+    glob_u.do.req_templates.reboot      = glob_u.fns.merge_partial_template({...fn_headers,...post_droplet},{data:{type:"reboot"}})
109
+    // glob_u.do.req_templates.get_droplet_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{per_page:25,page:2}})
110
+    // glob_u.do.req_templates.get_droplet_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{page:2,per_page:25}})
111
+    // glob_u.do.req_templates.get_droplet_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{page:1,per_page:25}})
112
+
113
+    glob_u.do.req_templates.resize_droplet      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{type:"resize",size:"{{size_slug}}"}})
114
+//
115
+
116
+
117
+    glob_u.do.req_templates.get_droplet_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{per_page:200}})
118
+    // glob_u.do.req_templates.get_droplet_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{per_page:10}})
119
+
120
+    glob_u.do.req_templates.all_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/actions"},{data:{per_page:200}})
121
+    glob_u.do.req_templates.get_droplets      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/droplets"},{data:{per_page:200}})
122
+    glob_u.do.req_templates.get_regions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/regions"},{data:{per_page:200}})
123
+    glob_u.do.req_templates.get_sizes      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/sizes"},{data:{per_page:200}})
124
+
125
+
126
+    glob_u.do.req_templates.get_droplet      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/droplets/{{droplet_id}}"},{data:{per_page:200}})
127
+
128
+    // glob_u.do.req_templates.get_droplets      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/droplets"},{data:{per_page:200},infox2:2})
129
+    
130
+    glob_u.do.req_templates.few_droplet_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{per_page:2}})
131
+    glob_u.do.req_templates.few_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/actions"},{data:{per_page:20}})
132
+
133
+    glob_u.do.req_templates.all_actions_p      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet,url:"https://api.digitalocean.com/v2/actions"},{data:{per_page:200}})
134
+
135
+
136
+
137
+
138
+
139
+
140
+    // glob_u.do.req_templates.post_droplet_actions      = glob_u.fns.merge_partial_template({...fn_headers,...get_droplet},{data:{type:"reboot"}})
141
+
142
+
143
+}
144
+
145
+
146
+// rads
147
+// render_stash_obj
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+function test_send_req2(t){
156
+
157
+  var tval_base = {
158
+    TOKEN:localStorage.do_token,
159
+  }
160
+  var tval = {
161
+    droplet_id:188972518,
162
+    size_slug:"c-2",
163
+  }
164
+  glob_u.fns.merge_partial_template(tval,tval_base)
165
+  if (!t){
166
+    t="get_droplet_actions"
167
+  }
168
+  
169
+  // var ret =render_stash_obj(glob_u.do.req_templates.get_droplet_actions,tval)
170
+  var ret =render_stash_obj(glob_u.do.req_templates[t],tval)
171
+  // var ret =render_stash_obj(glob_u.do.req_templates.all_actions,tval)
172
+  // var ret =render_stash_obj(glob_u.do.req_templates.get_droplets,tval)
173
+  // var ret =render_stash_obj(glob_u.do.req_templates.post_droplet_actions,tval)
174
+
175
+  if (ret.data && typeof(ret.data)=="object" && ret.method=="POST"){
176
+  // if (ret.data && typeof(ret.data)=="object"){
177
+    ret.data = JSON.stringify(ret.data)
178
+  }
179
+  var aii = $.ajax(ret)
180
+  aii.request_param=ret
181
+  clog(aii)
182
+}
183
+
184
+
185
+// I'm not actually certain you can't get a response with data.region or something that is not is a different region object
186
+// JFI:TODO cleanup & refactor resp_tags
187
+function resp_handler(data,status,xhr){
188
+    var t_start,t_fin,t_diff,tk
189
+    // t_start = Date.now()
190
+    t_start = performance.now()
191
+
192
+    glob_u.data.resp = {that:this,data,status,xhr}
193
+    clog("resp:__",{that:this,data,status,xhr},xhr.request_param.resp_tags.get_rads)
194
+    var processed = {regions:{}}
195
+    if (xhr.request_param.resp_tags.tags.get_rads){
196
+
197
+    if (data.actions){
198
+      glob_u.cb.ord.DATA.run_cbs("actions",{data,processed}),tk="actions"
199
+    } else if (data.droplets){
200
+      glob_u.cb.ord.DATA.run_cbs("droplets",{data,processed}),tk="droplets"
201
+    } else if (data.sizes){
202
+      glob_u.cb.ord.DATA.run_cbs("sizes",{data,processed}),tk="sizes"
203
+    } else if (data.regions){
204
+      glob_u.cb.ord.DATA.run_cbs("regions",{data,processed}),tk="regions"
205
+    }
206
+
207
+    } else if (xhr.request_param.resp_tags.tags.post_action){
208
+      glob_u.cb.ord.DATA.run_cbs("action",{data,processed,action:data.action})
209
+    }
210
+    t_fin = performance.now()
211
+
212
+    // t_fin = Date.now()
213
+    t_diff = t_fin-t_start
214
+    glob_u.data.docnt.t[tk]= {t_start,t_fin,t_diff,tk}
215
+
216
+}
217
+
218
+// maybe just return slug or id instead of type?
219
+function get_obj_key(obj,type){
220
+  switch (type){
221
+    case "action":
222
+    case "droplet":
223
+      return obj.id
224
+    case "size":
225
+    case "region":
226
+      return obj.slug
227
+    default:
228
+      return "err"
229
+  }
230
+  return "err2"
231
+
232
+}
233
+function get_data_key_from_type(type){
234
+  return type + "s"
235
+}
236
+
237
+
238
+function maybe_create_update_doobj(_obj,o,type){
239
+  var obj = normalize_json(_obj)
240
+  var key = get_obj_key(obj,type)
241
+  var dosto_key = get_data_key_from_type(type)
242
+  var old_obj = glob_u.data.dosto[dosto_key][key]
243
+
244
+  try{
245
+  glob_u.fns.inc_map(glob_u.data.docnt[dosto_key],key)
246
+  if (type != "action"){
247
+  glob_u.fns.inc_map(glob_u.data.docnt.m,type+":"+key)
248
+
249
+  }
250
+
251
+} catch (err){
252
+  conole.error("ERR:",err)
253
+}
254
+  // clog("???",obj,type,key)
255
+  var doobj_change = compare_doobj(key,type,obj)
256
+  // clog("???/",doobj_change)
257
+  switch (doobj_change){
258
+    case "new":
259
+        // glob_u.cb.ord.DATA.run_cbs(`create:${type}`,{key,obj,type,old_obj,doobj_change})
260
+        // glob_u.cb.ord.DATA.run_cbs(`put:${type}`,{key,obj,type,old_obj,doobj_change})
261
+        glob_u.cb.ord.DATA.run_cbs(`put`,   {o,key,obj,type,old_obj,doobj_change,dosto_key})
262
+        glob_u.cb.ord.DATA.run_cbs(`create`,{o,key,obj,type,old_obj,doobj_change,dosto_key})
263
+
264
+      break;
265
+      // glob_u.cb.ord.DATA.run_cbs()
266
+    case "update":
267
+        glob_u.cb.ord.DATA.run_cbs(`put`,   {o,key,obj,type,old_obj,doobj_change,dosto_key})
268
+        glob_u.cb.ord.DATA.run_cbs(`update`,{o,key,obj,type,old_obj,doobj_change,dosto_key})
269
+
270
+        // glob_u.cb.ord.DATA.run_cbs(`update:${type}`,{key,obj,type,old_obj,doobj_change})
271
+        // glob_u.cb.ord.DATA.run_cbs(`put:${type}`,{key,obj,type,old_obj,doobj_change})
272
+      break;
273
+    case "identical":
274
+      break;
275
+    default:
276
+    }
277
+
278
+  // glob_u.data.dosto[dosto_key]
279
+}
280
+
281
+// we sort object attributes and arrays
282
+function compare_doobj(key,type,obj){
283
+  // return "identical"
284
+  var dosto_key = get_data_key_from_type(type)
285
+  // clog(key,type,obj,)
286
+  let old_obj = glob_u.data.dosto[dosto_key][key]
287
+  if (!old_obj){
288
+    return "new"
289
+  }
290
+  var obj_str = JSON.stringify(obj)
291
+  var old_obj_str = JSON.stringify(old_obj)
292
+  if (obj_str == old_obj_str){
293
+    return "identical"
294
+  } else {
295
+    return "update"
296
+
297
+  }
298
+  // old_obj
299
+}
300
+
301
+// incredibly inefficient 
302
+// IDK if we have to refactor "...o,action" etc may overwrite 
303
+// I take it back
304
+function init_data_fns(argument) {
305
+    function actions(o,scope,info) {
306
+      var k,v
307
+      for (v of o.data.actions){
308
+        glob_u.cb.ord.DATA.run_cbs("action",{...o,action:v})
309
+      }
310
+    }
311
+    function droplets(o,scope,info) {
312
+      var k,v
313
+      for (v of o.data.droplets){
314
+        glob_u.cb.ord.DATA.run_cbs("droplet",{...o,droplet:v})
315
+      }
316
+    }
317
+    function sizes(o,scope,info) {
318
+      var k,v
319
+      for (v of o.data.sizes){
320
+        glob_u.cb.ord.DATA.run_cbs("size",{...o,size:v})
321
+      }
322
+    }
323
+    function regions(o,scope,info) {
324
+      var k,v
325
+      for (v of o.data.regions){
326
+        glob_u.cb.ord.DATA.run_cbs("region",{...o,region:v})
327
+      }
328
+    }
329
+
330
+    function action(o,scope,info) {
331
+      // clog("action",o)
332
+      // region
333
+      if (o.action.region){
334
+
335
+      
336
+        glob_u.cb.ord.DATA.run_cbs("region",{...o,region:o.action.region})
337
+        o.action.region = "placeholder"
338
+      }
339
+
340
+
341
+      maybe_create_update_doobj(o.action,o,"action")
342
+    }
343
+    function droplet(o,scope,info) {
344
+      // [region,size,image]
345
+        glob_u.cb.ord.DATA.run_cbs("region",{...o,region:o.droplet.region})
346
+        o.droplet.region = "placeholder"
347
+        glob_u.cb.ord.DATA.run_cbs("size",{...o,size:o.droplet.size})
348
+        o.droplet.size = "placeholder"
349
+
350
+      maybe_create_update_doobj(o.droplet,o,"droplet")
351
+    }
352
+    function size(o,scope,info) {
353
+      // [none]
354
+      maybe_create_update_doobj(o.size,o,"size")
355
+    }
356
+    function region(o,scope,info) {
357
+      // [none]
358
+      maybe_create_update_doobj(o.region,o,"region")
359
+    }
360
+    function create(o,scope,info) {
361
+      glob_u.cb.ord.DATA.run_cbs(`create:${o.type}`,o)
362
+    }
363
+    function update(o,scope,info) {
364
+      glob_u.cb.ord.DATA.run_cbs(`update:${o.type}`,o)
365
+    }
366
+    function put(o,scope,info) {
367
+      // o.dosto_key
368
+      glob_u.data.dosto[o.dosto_key][o.key] = o.obj
369
+      glob_u.cb.ord.DATA.run_cbs(`put:${o.type}`,o)
370
+      var diff = recursiveDiff.getDiff(o.old_obj, o.obj)
371
+      clog("put",o,diff)
372
+
373
+    }
374
+    glob_u.cb.ord.DATA.reg_cb(create,   "create",   "fn")
375
+    glob_u.cb.ord.DATA.reg_cb(update,   "update",   "fn")
376
+    glob_u.cb.ord.DATA.reg_cb(put,      "put",      "fn")
377
+
378
+    glob_u.cb.ord.DATA.reg_cb(actions,  "actions",  "fn")
379
+    glob_u.cb.ord.DATA.reg_cb(action,   "action",   "fn")
380
+    glob_u.cb.ord.DATA.reg_cb(droplets, "droplets", "fn")
381
+    glob_u.cb.ord.DATA.reg_cb(droplet,  "droplet",  "fn")
382
+    glob_u.cb.ord.DATA.reg_cb(sizes,    "sizes",    "fn")
383
+    glob_u.cb.ord.DATA.reg_cb(size,     "size",     "fn")
384
+    glob_u.cb.ord.DATA.reg_cb(regions,  "regions",  "fn")
385
+    glob_u.cb.ord.DATA.reg_cb(region,   "region",   "fn")
386
+}
387
+
388
+
389
+
390
+init_do()
391
+init_power_req_templates()
392
+init_data_fns()
393
+
394
+function all_req(argument) {
395
+  glob_u.data.docnt = {
396
+    actions:new Map(),
397
+    droplets:new Map(),
398
+    sizes:new Map(),
399
+    regions:new Map(),
400
+    m:new Map(),
401
+    t:{actions:{},droplets:{},sizes:{},regions:{}},
402
+  }
403
+
404
+  test_send_req2("all_actions"),test_send_req2("get_droplets"),test_send_req2("get_regions"),test_send_req2("get_sizes")
405
+
406
+
407
+  setTimeout(after_cbs,1900)
408
+  // set
409
+  // body...
410
+
411
+
412
+}
413
+function after_cbs(){
414
+  clog(glob_u.data.docnt.t)
415
+  console.table(glob_u.data.docnt.t)
416
+}
417
+  glob_u.data.docnt = {
418
+    actions:new Map(),
419
+    droplets:new Map(),
420
+    sizes:new Map(),
421
+    regions:new Map(),
422
+    m:new Map(),
423
+    t:{actions:{},droplets:{},sizes:{},regions:{}},
424
+  }
425
+
426
+// 

+ 54
- 0
xf/nginx_tx/do_e1/d2.js Ver fichero

@@ -0,0 +1,54 @@
1
+
2
+function get_all_actions(){
3
+	for (var i = 32 - 1; i >= 0; i--) {
4
+	glob_u.do.req_templates.all_actions_p.data.page=i+1
5
+	test_send_req2("all_actions_p")
6
+		// clog([i+1])
7
+	}
8
+}
9
+
10
+function doinfo_t1(){
11
+  var mx = {
12
+    actions:new Map(),
13
+    droplets:new Map(),
14
+    sizes:new Map(),
15
+    regions:new Map(),
16
+    m:new Map(),
17
+    t:{actions:{},droplets:{},sizes:{},regions:{}},
18
+  }
19
+  // mx
20
+  var k,v
21
+  for (v of Object.values(glob_u.data.dosto.actions)){
22
+  	// clog(v)
23
+  	if (v.resource_type != "droplet"){
24
+  		clog(v)
25
+  	}
26
+  		glob_u.fns.inc_map(mx.m,v.type)
27
+
28
+  }
29
+  window.mx=mx
30
+  return glob_u.fns.map_to_obj(mx.m)
31
+  	// glob_u.fns.inc_map(mx)
32
+
33
+
34
+}
35
+
36
+
37
+function diff_doobj(obj1,obj2,depth=0,scope={diff_obj={
38
+	obj1:{},
39
+	obj2:{},
40
+	// obj2:{}
41
+},
42
+},loc_scope={}){
43
+	if (depth==0){
44
+
45
+	}
46
+
47
+	var type1 = typeof(obj1)
48
+	var type2 = typeof(obj2)
49
+	var keys1 
50
+	var keys2 
51
+
52
+
53
+}
54
+

+ 0
- 0
xf/nginx_tx/do_e1/d3.js Ver fichero


+ 0
- 0
xf/nginx_tx/do_e1/d4.js Ver fichero


+ 8
- 0
xf/nginx_tx/do_e1/do_e1.html Ver fichero

@@ -0,0 +1,8 @@
1
+
2
+
3
+<script class="rld" src="<!--#echo var="tx_dir" -->/d0.js?<!--#echo var="rtqs" -->"></script>
4
+<script class="rld" src="<!--#echo var="tx_dir" -->/d1.js?<!--#echo var="rtqs" -->"></script>
5
+<script class="rld" src="<!--#echo var="tx_dir" -->/d2.js?<!--#echo var="rtqs" -->"></script>
6
+<script class="rld" src="<!--#echo var="tx_dir" -->/d3.js?<!--#echo var="rtqs" -->"></script>
7
+<script class="rld" src="<!--#echo var="tx_dir" -->/d4.js?<!--#echo var="rtqs" -->"></script>
8
+

+ 45
- 0
xf/nginx_tx/invite_dev/inv0.css Ver fichero

@@ -0,0 +1,45 @@
1
+
2
+
3
+.invite_ui {
4
+	visibility: hidden;
5
+
6
+}
7
+.invite_ui .ui_tile {
8
+	margin: 0;
9
+}
10
+.on_hov {
11
+	/*visibility: hidden;*/
12
+	position: absolute;
13
+	bottom: -1em;
14
+	bottom: 2em;
15
+	width: 10em;
16
+	background-color: #800;
17
+	background-color: #004;
18
+
19
+}
20
+.invite_ui:hover .on_hov {
21
+	visibility: visible;
22
+}
23
+.info_q{
24
+	text-align: center;
25
+	height: 1.4em;
26
+	width: 1.4em;
27
+	border-radius: 100%;
28
+}
29
+
30
+
31
+
32
+.arroaw_ui {
33
+}
34
+.arroaw_ui:hover {
35
+	
36
+	background-color: #f2f3f4;
37
+	box-shadow: 0 4px 4px rgba(0,0,0,.25),0 0 0 1px rgba(0,0,0,.1)
38
+}
39
+.arroaw_ui:hover svg{
40
+	fill:  #000;
41
+
42
+}
43
+.arroaw_ui svg{
44
+	fill:  #fff;
45
+}

+ 113
- 0
xf/nginx_tx/invite_dev/inv1.js Ver fichero

@@ -0,0 +1,113 @@
1
+
2
+// window.w = window.w || {}
3
+
4
+
5
+// w.clog = console.log
6
+var clog = console.log
7
+// var clog = w.clog
8
+
9
+// clog("??")
10
+function nop(){}
11
+
12
+window.glob_u = window.glob_u || {
13
+	cb:{},
14
+	fns:{},
15
+	cls:{},
16
+	tvar:{},
17
+	data:{},
18
+	prom:{},
19
+	rrefs:{},
20
+	xj:{},
21
+	templates:{},
22
+}
23
+
24
+glob_u.fns.gen_sort_attr = function gen_sort_attr(attr){
25
+	return function gsort(a0,a1){
26
+		if (a0[attr] > a1[attr]){
27
+		return 1
28
+		} else if (a0[attr] < a1[attr]){
29
+		return -1
30
+		} else {
31
+		return 0
32
+		}
33
+	}
34
+}
35
+glob_u.fns.find_attr = function find_attr(elm,indx,arr){
36
+	if (elm && elm[this.attr] == this.val){
37
+		return 1
38
+	}
39
+}
40
+
41
+glob_u.fns.splice_out = function splice_out(arr,elm){
42
+	let i = arr.indexOf(elm)
43
+	if (i != -1){
44
+		return arr.splice(i,1)
45
+	}
46
+}
47
+
48
+
49
+
50
+function jclone(obj){
51
+	return Array.isArray(obj) ?  $.extend(true,[],obj) :  $.extend(true,{},obj)
52
+}
53
+function jx(obj){
54
+	return JSON.parse(JSON.stringify(obj))
55
+}
56
+
57
+function jclone_rval(obj){
58
+	if (typeof(obj) != "object"){
59
+		return obj
60
+	} else if (Array.isArray(obj)) {
61
+		return $.extend(true,[],obj)
62
+	} else {
63
+		return $.extend(true,{},obj)
64
+	}
65
+
66
+}
67
+
68
+// window.jc = jclone
69
+window.jc = jclone_rval
70
+
71
+
72
+
73
+
74
+
75
+// TODO:JFI eventually merge 
76
+// j9\dev_dep\misc_dev.js
77
+
78
+glob_u.fns.gen_ord_decs = function(ord,cb_prefix){
79
+	var reg_cb = function(cb,key_name,cb_name,override_level,push){
80
+		return ord.reg_cb(cb,cb_prefix+key_name,cb_name,override_level,push)
81
+	}
82
+
83
+	var run_cbs_lz = function(key,arg_obj,lazy=1){
84
+		if (lazy && cb_prefix+key in ord.cb_sto){
85
+			return ord.run_cbs(cb_prefix+key,arg_obj)
86
+		}
87
+	}
88
+	var run_cbs = function(key,arg_obj){
89
+			return ord.run_cbs(cb_prefix+key,arg_obj)
90
+		// split out later maybe?
91
+	}
92
+	function req_batch_run(key,arg_obj,combine){
93
+			return ord.req_batch_run(cb_prefix+key,arg_obj)
94
+
95
+	}
96
+
97
+	reg_cb.ord = ord
98
+	reg_cb.cb_prefix = cb_prefix
99
+	run_cbs.ord = ord
100
+	run_cbs.cb_prefix = cb_prefix
101
+
102
+	run_cbs_lz.ord = ord
103
+	run_cbs_lz.cb_prefix = cb_prefix
104
+	return {reg_cb,run_cbs,run_cbs_lz,req_batch_run}
105
+}
106
+
107
+
108
+// duplicated in jdev0
109
+glob_u.fns.merge_partial_template = function merge_partial_template(main,template){
110
+	let t = $.extend(true,{},template,main)
111
+	return $.extend(true,main,t)
112
+}
113
+

+ 290
- 0
xf/nginx_tx/invite_dev/inv2.js Ver fichero

@@ -0,0 +1,290 @@
1
+// FILE:WS0
2
+
3
+// TODO:JFI this file probably causes memory leaks
4
+
5
+
6
+window.glob_u.ws = window.glob_u.ws || {
7
+	sockets:{},
8
+	fns:{},
9
+	flags:{},
10
+} 
11
+
12
+window.glob_u.trc = window.glob_u.trc || {
13
+	arr:[],
14
+}
15
+
16
+
17
+
18
+// TODO:JFI I should factor out my development junk
19
+function trc_sto(s,o){
20
+	if (!glob_u?.prom?.init_db_resolve?.resolved){
21
+	var elm = {name:s,o,timestamp:Date.now()}
22
+	glob_u.trc.arr.push(elm)
23
+	// clog("_trc:sto",s,o.sto_event_type,elm.timestamp,o)
24
+	}	
25
+}
26
+
27
+
28
+
29
+window.glob_u.ws.fns.reconnect = function reconnect(o,close_event){
30
+	connect_ws(o.params)
31
+}
32
+
33
+
34
+// TODO:JFI These event handlers are less generic now
35
+
36
+
37
+window.glob_u.ws.fns.onclose = function onclose(event){
38
+	clog("WS_CLOSE",{that:this,readyState:this.readyState,args:[...arguments]})
39
+	// glob_u.ws.sockets.ws1.params.ord.run_cbs("WS_CLOSE:",{event,that:this})
40
+	glob_u.ws.sockets[this.params.socket_name].params.ord.run_cbs("WS_CLOSE:",{event,that:this})
41
+	setTimeout(this.params.fns.reconnect,1000)
42
+}
43
+
44
+window.glob_u.ws.fns.onmessage = function onmessage(event){
45
+	// clog("WS_MESSAGE",{that:this,args:[...arguments]})
46
+	// glob_u.ws.sockets.ws1.params.ord.run_cbs("WS_MESSAGE:",{event,that:this})
47
+	glob_u.ws.sockets[this.params.socket_name].params.ord.run_cbs("WS_MESSAGE:",{event,that:this})
48
+}
49
+
50
+window.glob_u.ws.fns.onerror = function onerror(event){
51
+	// clog("WS_ERROR",{that:this,args:[...arguments]})
52
+	// glob_u.ws.sockets.ws1.params.ord.run_cbs("WS_ERROR:",{event,that:this})
53
+	glob_u.ws.sockets[this.params.socket_name].params.ord.run_cbs("WS_ERROR:",{event,that:this})
54
+
55
+
56
+}
57
+window.glob_u.ws.fns.onopen = function onopen(event){
58
+
59
+	// clog("WS_OPEN???",{that:this,args:[...arguments]},{on_open_once:this.on_open_once,on_open_cbs:this.params.on_open_cbs})
60
+	// glob_u.ws.sockets.ws1.params.ord.run_cbs("WS_OPEN:",{event,that:this})
61
+	glob_u.ws.sockets[this.params.socket_name].params.ord.run_cbs("WS_OPEN:",{event,that:this})
62
+	return
63
+		var cb
64
+	if (this.on_open_once){
65
+		for (cb of this.on_open_once){
66
+			cb(event,this)
67
+		}
68
+	if (this?.params?.on_open_cbs){
69
+		for (cb of this?.params?.on_open_cbs){
70
+			cb(event,this)
71
+		}
72
+	}
73
+}
74
+}
75
+
76
+
77
+window.glob_u.ws.fns.ws_fns_factory = function ws_fns_factory(socket_opts){
78
+	var socket_name = socket_opts.socket_name
79
+	// const sockets = 
80
+	var v1 = "init"
81
+	var fns = {
82
+		get_socket(o){
83
+			return glob_u.ws.sockets[socket_name]
84
+		},
85
+		reconnect(){
86
+			var socket = fns.get_socket()
87
+			clog("RECONNECT",socket_opts,socket,socket?.DoNotReconnect)
88
+			// if (socket.DoNotReconnect || socket.params.DoNotReconnect || glob_u.ws?.flags?.DoNotReconnect){
89
+			if (socket.DoNotReconnect || !socket.params.AutoReconnect || glob_u.ws?.flags?.DoNotReconnect){
90
+				clog("RECONNECTION NOT ATTEMPTED",socket_opts)
91
+				return
92
+			} else {
93
+
94
+			}
95
+
96
+			connect_ws(socket_opts)
97
+		},
98
+		log_var(o){
99
+			clog("var:",v1)
100
+			return v1
101
+		},
102
+		set_var(val){
103
+			v1 = val
104
+			return v1
105
+		},
106
+		send_text(o){
107
+			var socket = fns.get_socket()
108
+			clog("send_text",{that:this,fns})
109
+			socket.send(JSON.stringify(o));
110
+		},
111
+		jsend(o){
112
+			var socket = fns.get_socket()
113
+			// clog("!!!",{that:this,fns})
114
+			socket.send(JSON.stringify(o));
115
+		},
116
+	} 
117
+	return fns
118
+}
119
+
120
+
121
+function connect_ws(o= {}){
122
+	// clog("connect_ws:",o,jc(o))
123
+	glob_u.fns.merge_partial_template(o,{on_open_cbs:[]})
124
+	var sockets = window.glob_u.ws.sockets
125
+	var old_socket = sockets[o.socket_name]
126
+	if (old_socket && old_socket.readyState == 1){
127
+		clog(`WS ${o.socket_name} is already CONNECTED:`,old_socket , o)
128
+		return
129
+
130
+	} else if (old_socket && (old_socket.readyState != 3 && old_socket.readyState != undefined )){
131
+		clog(`WS ${o.socket_name} exsists and in not closed:`,old_socket , o)
132
+		return
133
+
134
+	}
135
+
136
+	var socket = new WebSocket(o.url)
137
+	socket.on_open_once = []
138
+	socket.pre_init_msgs = []
139
+	socket.params = o
140
+	// if ()
141
+	Object.assign(o.fns, window.glob_u.ws.fns.ws_fns_factory(o))
142
+	// Object.assign(o.fns2, window.glob_u.ws.fns.ws_fns_factory(o))
143
+
144
+	Object.assign(socket,o.methods)
145
+
146
+	sockets[o.socket_name]=socket
147
+	// o.jsend ?    socket.jsend = o.jsend: 0
148
+	// clog("CONNECTING WS:",{o,socket})
149
+	return [socket,old_socket]
150
+}
151
+
152
+
153
+
154
+
155
+
156
+// FILE:WS1
157
+
158
+
159
+
160
+
161
+
162
+function create_ws_ord(){
163
+	if (!glob_u.cb.ws){
164
+
165
+	var ord = new glob_u.cls.reg_cb_ord()
166
+	glob_u.cb.ws = ord
167
+	glob_u.cb.ws.reg_cb = ord.reg_cb
168
+	glob_u.cb.ws.run_cbs = ord.run_cbs
169
+
170
+		glob_u.cb.ws.STO_EVENT =  glob_u.fns.gen_ord_decs(glob_u.cb.ws,"STO_EVENT:")
171
+
172
+	// glob_u.cb.ord_v1.estr =  glob_u.fns.gen_ord_decs(glob_u.cb.ord_v1.ord,"")
173
+	// glob_u.cb.ord_v1.run_cbs_lz = glob_u.cb.ord_v1.estr.run_cbs_lz
174
+	// glob_u.cb.ord_v1.ord.run_cbs_lz = glob_u.cb.ord_v1.run_cbs_lz
175
+
176
+
177
+
178
+	}
179
+}
180
+
181
+// TODO:JFI maybe this should be in a different file so we can more easily reuse base for other ws consumers (or not )
182
+window.glob_u.ws.fns.dispatch = function dispatch(o,obj_x,info){
183
+	var event = o.event
184
+	// socket = o.that
185
+	var data = JSON.parse(event.data)
186
+	// clog("WS_dispatch",data,socket.params.ord,data["CLIENT_KEY"])
187
+	// clog("trc:sto:ws_rec",data.CLIENT_KEY,data.sto_event_type,data)
188
+
189
+	trc_sto("ws_rec",data)
190
+	glob_u.ws.sockets.ws1.params.ord.run_cbs("WS_MESSAGE:"+data["CLIENT_KEY"],{event,that:this,data})
191
+		return
192
+	if (e.arguments[0].type == "message"){
193
+
194
+	var data = JSON.parse(e.arguments[0].data)
195
+
196
+    if ("type" in data && ws_handlers[data.type]){
197
+		ws_handlers[data.type](data,{that:e.that,event:e.arguments[0]})
198
+    } else {
199
+    	clog("NO HANDLER FOR",data.type)
200
+    }
201
+
202
+	clog("~WS",data,e)
203
+	} else if  (e.arguments[0].type == "open") {
204
+		ws_handlers.on_open(e)
205
+	}
206
+
207
+}
208
+
209
+
210
+function ws_reload(){
211
+	try{
212
+		if ((!glob_u.ws.sockets.ws1 || glob_u.ws.sockets.ws1.readyState == 3 || glob_u.ws.sockets.ws1.readyState == undefined)){
213
+			ws_helper()
214
+		} else {
215
+		glob_u.ws.sockets.ws1.close()
216
+		clog(glob_u.ws.sockets.ws1,glob_u.ws.sockets.ws1.readyState)
217
+		glob_u.ws.sockets.ws1.onclose = ws_helper
218
+		}
219
+
220
+	} catch (err){
221
+		clog(err)
222
+	}
223
+}
224
+
225
+
226
+function get_room_name(){
227
+
228
+	var room_name=location.pathname.match(/\/loc.([^\/]*)\//)
229
+	if (room_name){
230
+		room_name = room_name[1]
231
+	} else {
232
+	room_name = location.pathname.split("/").pop()
233
+
234
+	}
235
+	return room_name
236
+
237
+}
238
+
239
+
240
+
241
+
242
+function ws_helper(){
243
+	clog("WS_HELPER")
244
+	var fns = window.glob_u.ws.fns
245
+	var o = {
246
+		include_participants_data:1, 
247
+		include_ws_channel_data:1, // required for participants_data to work
248
+		// msto.participants and masto.ws_channels will be defined in either case so we don't need to handle cases where some users enable this and some don't
249
+		AutoReconnect:false,
250
+		AutoReconnect:true,
251
+		url:'wss://' + window.location.hostname  +`/djc_srv/ws/chat/${get_room_name()}`,
252
+		socket_name:"ws1",
253
+		ord:glob_u.cb.ws,
254
+
255
+		methods:{
256
+		onmessage:fns.dispatch,
257
+		onclose:fns.onclose,
258
+		onerror:fns.onerror,
259
+		onopen:fns.onopen,
260
+		},
261
+
262
+
263
+
264
+		methods:{
265
+		onmessage:fns.onmessage,
266
+		onclose:fns.onclose,
267
+		onerror:fns.onerror,
268
+		onopen:fns.onopen,
269
+		},
270
+
271
+
272
+		fns:{
273
+
274
+
275
+		// reconnect:fns.reconnect,
276
+		},
277
+	}
278
+	/*
279
+	if (window.glob_u.ws.ws1 && window.glob_u.ws.ws1.readyState == 1){
280
+		clog("WS ws1 is CONNECTED:",window.glob_u.ws.ws1)
281
+		return
282
+	}
283
+	*/
284
+	var socket = connect_ws(o)
285
+	// clog({socket})
286
+}
287
+window.glob_u.fns.connect_ws = connect_ws
288
+glob_u.fns.get_room_name=get_room_name
289
+create_ws_ord()
290
+glob_u.cb.ws.reg_cb(window.glob_u.ws.fns.dispatch,"WS_MESSAGE:","WS_MESSAGE")

+ 78
- 0
xf/nginx_tx/invite_dev/inv3.js Ver fichero

@@ -0,0 +1,78 @@
1
+
2
+function ws_rlist_init_helper(){
3
+	// clog("WS_HELPER")
4
+	var fns = window.glob_u.ws.fns
5
+	var room_name=glob_u.fns.get_room_name()
6
+	var o = {
7
+
8
+		include_participants_data:1, 
9
+		include_ws_channel_data:1, // required for participants_data to work
10
+		// msto.participants and msto.ws_channels will be defined in either case so we don't need to handle cases where some users enable this and some don't
11
+		// AutoReconnect:false,
12
+		AutoReconnect:true,
13
+
14
+
15
+		// the following options attributes 
16
+
17
+
18
+		url:'wss://' + window.location.hostname  +`/djc_srv/room_list/${room_name}`,
19
+		socket_name:"ws1",
20
+		ord:glob_u.cb.ws,
21
+
22
+
23
+		methods:{
24
+		onmessage:fns.onmessage,
25
+		onclose:fns.onclose,
26
+		onerror:fns.onerror,
27
+		onopen:fns.onopen,
28
+		},
29
+
30
+
31
+		fns:{
32
+
33
+
34
+		},
35
+	}
36
+
37
+	var socket = window.glob_u.fns.connect_ws(o)
38
+	// if (!glob_u.data.was_modded)
39
+	run_invite_status_update()
40
+	// clog({socket})
41
+}
42
+
43
+
44
+
45
+glob_u.cb.ws.reg_cb(run_invite_status_update,"WS_OPEN:","run_invite_status_update")
46
+function jsend_tmp_RENAME(m={}){
47
+	var socket = glob_u.ws.sockets.ws1
48
+	var jsend = socket.params.fns.jsend
49
+	var t = {
50
+		key:"tmp_dev_sto",
51
+	}
52
+	glob_u.fns.merge_partial_template(m,t)
53
+	jsend(m)
54
+}
55
+function invite_status_update(){
56
+	// clog("invite_status_update")
57
+	jsend_tmp_RENAME({key:"send_invite_status"})
58
+}
59
+function rerun_invite_status_update(interval){
60
+	clearInterval(glob_u.ws.sockets.ws1.params.intid)
61
+	glob_u.data.was_modded = 0
62
+
63
+	glob_u.data.invite_status_interval = interval
64
+	run_invite_status_update()
65
+
66
+}
67
+
68
+function run_invite_status_update(){
69
+	if (glob_u.data.was_modded){
70
+		return
71
+	}
72
+	glob_u.data.was_modded = 1
73
+	var interval = glob_u.data.invite_status_interval || 1000
74
+	glob_u.ws.sockets.ws1.params.intid = setInterval(invite_status_update,interval)
75
+}
76
+// glob_u.ws.sockets.ws1.params.intid
77
+
78
+

+ 29
- 0
xf/nginx_tx/invite_dev/inv4.js Ver fichero

@@ -0,0 +1,29 @@
1
+
2
+
3
+function on_modded(o,scope,info){
4
+
5
+	try{
6
+		if (glob_u.data.was_modded){
7
+			return
8
+		}
9
+	if (o.action.participant.role=="moderator"){
10
+	clog("on_modded!",{o,scope,infomthat:this})
11
+	ws_rlist_init_helper()
12
+		
13
+	}
14
+
15
+	} catch (err){
16
+		console.error("on_modded err:",err)
17
+	}
18
+}
19
+
20
+function update_invite_sto(){
21
+	merge_partial_template(msto.conference,{invite:{
22
+		invite:0,
23
+		mod_locked:0,
24
+	}})
25
+}
26
+
27
+
28
+glob_u.cb.ord_v1.MRX.reg_cb(on_modded,"PARTICIPANT_UPDATED","on_modded")
29
+

+ 34
- 0
xf/nginx_tx/invite_dev/inv5.js Ver fichero

@@ -0,0 +1,34 @@
1
+
2
+
3
+
4
+
5
+function add_invite_ui(){
6
+	
7
+	saftly_remove_v2(".invite_ui")
8
+	// return
9
+
10
+	var n = glob_u.templates.invite_ui_parsed.find(".invite_ui").clone()
11
+
12
+	// n.find('.div_v1').append(t)
13
+	// add_node_jev(n,`.fs_container2`,"append")
14
+	add_node_jev(n,`.popupmenu__slider_container`,"append")
15
+
16
+
17
+
18
+}
19
+
20
+
21
+
22
+
23
+
24
+
25
+// glob_u.cb.ord_v1.reg_cb(vspace_fs_toolbar_v2,"HTML:vspace_fs","vspace_fs_toolbar_v2",101)
26
+glob_u.cb.ord_v1.reg_cb(add_invite_ui,"HTML:vspace_fs","add_invite_ui",101)
27
+
28
+
29
+glob_u.templates.invite_ui  = `<!--#include virtual="/ign/xf/nginx_tx/invite_dev/invite_ui.html" -->`
30
+glob_u.templates.invite_ui_parsed = $(`<span>${glob_u.templates.invite_ui}</span>`)
31
+
32
+window.bodge_rfile ? bodge_rfile(`/ign/xf/nginx_tx/invite_dev/invite_ui.html`,`/usr/games/repos/ign4/xf/nginx_tx/invite_dev/inv5.js`):clog("NO BODGE RFILE")
33
+
34
+add_invite_ui()

+ 22
- 0
xf/nginx_tx/invite_dev/inv6.js Ver fichero

@@ -0,0 +1,22 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+// C:\bspace\repos\jc9\jitsi_corner9\react\features\base\icons\svg\menu-up.svg
11
+
12
+
13
+
14
+glob_u.templates.icons = glob_u.templates.icons || {}
15
+glob_u.templates.icons.menu_up  = `<!--#include virtual="/react/features/base/icons/svg/menu-up.svg" -->`
16
+glob_u.templates.icons.menu_up_parsed = $(`<span>${glob_u.templates.icons.menu_up}</span>`)
17
+glob_u.templates.icons.menu_down  = `<!--#include virtual="/react/features/base/icons/svg/menu-down.svg" -->`
18
+glob_u.templates.icons.menu_down_parsed = $(`<span>${glob_u.templates.icons.menu_down}</span>`)
19
+
20
+
21
+
22
+// react/features/base/icons/svg/menu-up.svg

+ 0
- 0
xf/nginx_tx/invite_dev/inv7.js Ver fichero


+ 2
- 0
xf/nginx_tx/invite_dev/invite_dev.html Ver fichero

@@ -5,6 +5,8 @@
5 5
 <script class="rld" src="<!--#echo var="tx_dir" -->/inv3.js?<!--#echo var="rtqs" -->"></script>
6 6
 <script class="rld" src="<!--#echo var="tx_dir" -->/inv4.js?<!--#echo var="rtqs" -->"></script>
7 7
 <script class="rld" src="<!--#echo var="tx_dir" -->/inv5.js?<!--#echo var="rtqs" -->"></script>
8
+<script class="rld" src="<!--#echo var="tx_dir" -->/inv6.js?<!--#echo var="rtqs" -->"></script>
9
+<script class="rld" src="<!--#echo var="tx_dir" -->/inv7.js?<!--#echo var="rtqs" -->"></script>
8 10
 
9 11
 <link class="rld" rel="stylesheet" href="<!--#echo var="tx_dir" -->/inv0.css?<!--#echo var="rtqs" -->">
10 12
 <link class="rld" rel="stylesheet" href="<!--#echo var="tx_dir" -->/inv1.css?<!--#echo var="rtqs" -->">

+ 23
- 0
xf/nginx_tx/invite_dev/invite_ui.html Ver fichero

@@ -0,0 +1,23 @@
1
+
2
+
3
+<span class="invite_ui">
4
+	<span class="on_hov">let the developer drop into your meeting if available</span>
5
+	<span class="ui_tile">Invite Joe (The dev)
6
+		<input type="checkbox" name="">
7
+
8
+
9
+
10
+<span class="arroaw_ui"><!--#include virtual="/react/features/base/icons/svg/arrow_up.svg" --></span>
11
+<span class="arroaw_ui"><!--#include virtual="/react/features/base/icons/svg/arrow_down.svg" --></span>
12
+
13
+
14
+	</span>
15
+	<span class="ui_tile info_q">?</span>
16
+
17
+
18
+</span>
19
+
20
+
21
+
22
+<span><!--#include virtual="/react/features/base/icons/svg/menu-down.svg" --></span>
23
+<span><!--#include virtual="/react/features/base/icons/svg/menu-up.svg" --></span>

+ 3
- 1
xf/nginx_tx/j9_dep/i0.js Ver fichero

@@ -243,7 +243,9 @@ function _method_dec_v1(fn,fn1,fn2,fn_name,cls,o){
243 243
 
244 244
 // jquery helper
245 245
 function add_node(n,rn,i) {
246
-	$(rn)[i](n)
246
+	// $(rn)[i](n)
247
+	// $(rn).addClass("add_node")[i](n)
248
+	$(rn).addClass("add_node")[i](n).addClass("added_node")
247 249
 }
248 250
 
249 251
 

+ 3
- 4
xf/nginx_tx/j9_dev/j6.css Ver fichero

@@ -11,16 +11,15 @@
11 11
 }
12 12
 
13 13
 .tbx_cont .popupmenu__slider_container{
14
-	/*display: inline-flex;*/
15 14
 	display: inline-flex;
16
-	/*display: flex;*/
17
-	/*display: inline-block;*/
18
-	/*outline: 2px solid red;*/
15
+
19 16
 	width: 66%;
17
+	width: calc(100% - 42px);
20 18
 	position: relative;
21 19
 	/*top:-20px;*/
22 20
 	/*padding-bottom: 20px;*/
23 21
 	/*padding-top: 20px;*/
22
+	/*outline: 1px solid white;*/
24 23
 	/*margin-bottom: 20px;*/
25 24
 
26 25
 }

+ 11
- 1
xf/nginx_tx/j9_dev/j9.css Ver fichero

@@ -1,11 +1,21 @@
1 1
 
2 2
 
3
-.details-container {
3
+.details-container.old {
4 4
 	bottom: 76px;
5 5
 	bottom: 80px;
6 6
 	top: unset;
7 7
 }
8 8
 
9
+.details-container > .subject {
10
+	margin-top: 8;
11
+	margin-bottom: 12;
12
+	/*outline: 1px solid white;*/
13
+	outline-offset: -1;
14
+	/*bottom: 76px;*/
15
+	/*bottom: 80px;*/
16
+	/*top: unset;*/
17
+}
18
+
9 19
 
10 20
 
11 21
 

+ 4
- 1
xf/nginx_tx/j9_dev/jev0.js Ver fichero

@@ -23,7 +23,10 @@ function add_node_jev(n,rn,i) {
23 23
 	glob_u.jev.jev_methods.init_p1(n)
24 24
 	
25 25
 	// var rn2 = rn 
26
-	$(rn)[i](n)
26
+
27
+	// $(rn)[i](n)
28
+	// $(rn).addClass("add_node add_node_jev")[i](n)
29
+	$(rn).addClass("add_node add_node_jev")[i](n).addClass("added_node added_node_jev")
27 30
 	glob_u.jev.jev_methods.init_p2(n)
28 31
 
29 32
 

+ 4
- 0
xf/nginx_tx/j9_dev/jev8.js Ver fichero

@@ -25,6 +25,10 @@ function fs_grid_calc(){
25 25
 	})
26 26
 	var fs = $(".fs_container")
27 27
 	var fs_node = fs[0]
28
+	if (!fs_node){
29
+		return
30
+	}
31
+
28 32
 	var o = fs_node.children
29 33
 	if (fs){
30 34
 		// fs.dataset.c_len

+ 16
- 3
xf/nginx_tx/prx_dev/p4.js Ver fichero

@@ -49,13 +49,14 @@ function run_cbs_ord_dec(o){
49 49
 
50 50
 }
51 51
 function _run_cbs_ord_dec(o){
52
+	// clog("ord_dec???")
52 53
 	return run_cbs_ord_dec(o)
53 54
 }
54 55
 
55 56
 function ord_inst_bak(o){
56 57
 	if (glob_u.tvar.ord_inst){
57 58
 		return
58
-	}
59
+	} else if (!glob_u.cb.ord_v1){return}
59 60
 	glob_u.tvar.ord_inst = {...glob_u.cb.ord_v1.ord}
60 61
 }
61 62
 function unreinit_ord(){
@@ -70,9 +71,21 @@ save_orig_class(window.glob_u.cls.reg_cb_ord)
70 71
 // _run_cbs_ub
71 72
 // dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",run_cbs_ord_dec,nop)
72 73
 // dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",_run_cbs_ord_dec,_run_cbs_ord_dec)
73
-dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",nop,_run_cbs_ord_dec)
74
+
75
+
76
+
77
+
78
+// dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",nop,_run_cbs_ord_dec)
79
+
80
+// dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",nop,nop)
81
+// glob_u.cb.ord_v1.ord.init()
82
+
83
+// glob_u.cb.ws.init()
84
+
85
+
86
+
87
+
74 88
 // dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",_run_cbs_ord_dec,nop)
75
-glob_u.cb.ord_v1.ord.init()
76 89
 // dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"run_cbs",ord_dec,ord_dec)
77 90
 // dec_class_method_v0(window.glob_u.cls.reg_cb_ord.prototype,"_run_cbs_ub",nop,nop)
78 91
 // window.glob_u.cls.reg_cb_ord

Loading…
Cancelar
Guardar