Skip to content

Commit 0a409ce

Browse files
committed
clean tree
1 parent 6a331ed commit 0a409ce

File tree

7 files changed

+229
-86
lines changed

7 files changed

+229
-86
lines changed

.github/workflows/automation.yml

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,28 @@ name: CI
33
on:
44
push:
55
branches:
6-
- master
6+
- master
77
pull_request:
88
branches:
9-
- master
9+
- master
1010
create:
1111
branches:
12-
- master
12+
- master
1313

1414
jobs:
15-
updateKeyword:
15+
about:
1616
runs-on: ubuntu-latest
1717
steps:
1818
- name: Checkout
1919
uses: actions/checkout@v2
20-
20+
2121
- name: Jaid/action-sync-node-meta
2222
uses: jaid/[email protected]
2323
with:
2424
direction: overwrite-github # default is overwrite-file
2525
githubToken: ${{ secrets.GITHUB }}
26-
27-
ci:
26+
27+
release:
2828
runs-on: ubuntu-latest
2929
steps:
3030
- name: Checkout
@@ -41,27 +41,26 @@ jobs:
4141
@semantic-release/github
4242
env:
4343
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
44-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # Auto Changog generator
45-
44+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} # Auto Changog generator
45+
4646
docs:
4747
runs-on: ubuntu-latest
4848
steps:
4949
- name: Checkout
5050
uses: actions/checkout@v2
51-
51+
5252
- name: update documentation
5353
uses: CoCreate-app/CoCreate-docs@master
54-
55-
54+
5655
cdn:
5756
runs-on: ubuntu-latest
5857
steps:
5958
- name: Checkout
6059
uses: actions/checkout@v2
61-
60+
6261
- name: upload cdn
6362
uses: CoCreate-app/CoCreate-s3@master
6463
with:
6564
aws-key-id: ${{ secrets.AWSACCESSKEYID }}
6665
aws-access-key: ${{ secrets.AWSSECERTACCESSKEY }}
67-
source: './dist/CoCreate-calculations.min.js'
66+
source: "./dist/CoCreate-calculation.min.js"

demo/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ <h1 data-calculation="l1 + {id1} * 5 + {id3}/{id2}/0 + {id2}"></h1>
3434
}
3535
</script>
3636

37-
<script src="https://server.cocreate.app/js/CoCreate.min.js"></script>
37+
<script src="https://server.cocreate.app/CoCreateJS/dist/CoCreate.js"></script>
3838

3939

4040
</body>

dist/CoCreate-calculation.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/CoCreate-calculation.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"name": "@cocreate/calculations",
2+
"name": "@cocreate/calculation",
33
"version": "1.0.1",
44
"description": "A simple calculation component in vanilla javascript. Easy configuration using data-attributes and/or JavaScript API. Great for getting values from multiple elements and calculating to produce a result.",
55
"keywords": [
@@ -21,12 +21,11 @@
2121
"html5-framework",
2222
"javascript-framework"
2323
],
24-
"publishConfig": {
25-
"access": "public"
26-
},
24+
"publishConfig": { "access": "public" },
2725
"scripts": {
28-
"start": "npx webpack --config webpack.config.js --watch",
26+
"start": "npx webpack --config webpack.config.js",
2927
"build": "NODE_ENV=production npx webpack --config webpack.config.js",
28+
"dev": "npx webpack --config webpack.config.js --watch",
3029
"docs": "node ./node_modules/@cocreate/docs/src/index.js"
3130
},
3231
"repository": {
@@ -39,18 +38,24 @@
3938
"url": "https://github.com/CoCreate-app/CoCreate-calculations/issues"
4039
},
4140
"homepage": "https://cocreate.app/docs/calculations",
41+
"funding": {
42+
"type": "GitHub Sponsors ❤",
43+
"url": "https://github.com/sponsors/CoCreate-app"
44+
},
45+
"main": "./src/index.js",
4246
"devDependencies": {
43-
"@babel/core": "^7.12.10",
44-
"@babel/preset-env": "^7.12.11",
45-
"babel-loader": "^8.2.2",
47+
"@babel/core": "^7.9.6",
48+
"@babel/preset-env": "^7.9.6",
49+
"babel-loader": "^8.1.0",
4650
"clean-webpack-plugin": "^3.0.0",
4751
"html-webpack-plugin": "^4.5.0",
4852
"uglifyjs-webpack-plugin": "^2.2.0",
49-
"webpack": "^5.14.0",
50-
"webpack-cli": "^4.3.1",
51-
"webpack-log": "^3.0.1"
53+
"webpack": "^5.24.4",
54+
"webpack-cli": "^4.5.0",
55+
"webpack-log": "^3.0.1",
56+
"file-loader": "^6.2.0",
57+
"style-loader": "^2.0.0",
58+
"terser-webpack-plugin": "^5.1.1"
5259
},
53-
"dependencies": {
54-
"@cocreate/docs": "^1.0.3"
55-
}
60+
"dependencies": { "@cocreate/docs": "^1.0.3" }
5661
}

src/CoCreate-calculation.js renamed to src/index.js

Lines changed: 123 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
import CoCreateObserver from '@cocreate/observer'
2+
import ccutils from '@cocreate/utils';
3+
import crdt from '@cocreate/crdt'
4+
import CoCreateInput from '@cocreate/input'
5+
import floatingLabel from '@cocreate/floating-label'
6+
import htmltags from '@cocreate/htmltags'
7+
18
var CoCreateCalculation = {
29
init: function() {
310
this.initCalculationElements();
@@ -17,10 +24,10 @@ var CoCreateCalculation = {
1724
}
1825

1926
for (let i=0; i<calculationElements.length; i++) {
20-
if (CoCreate.observer.getInitialized(calculationElements[i], "calculation_init")) {
27+
if (CoCreateObserver.getInitialized(calculationElements[i], "calculation_init")) {
2128
return;
2229
}
23-
CoCreate.observer.setInitialized(calculationElements[i], "calculation_init")
30+
CoCreateObserver.setInitialized(calculationElements[i], "calculation_init")
2431

2532
this.initCalculationElement(calculationElements[i]);
2633
}
@@ -31,25 +38,87 @@ var CoCreateCalculation = {
3138

3239
const self = this;
3340
let data_calculation = ele.getAttribute('data-calculation');
34-
let ids = this.getIds(data_calculation);
35-
41+
let ids = this.getIds(data_calculation);
42+
43+
let selectors = [];
3644
for (let i = 0; i < ids.length; i++) {
3745
let id = ids[i];
3846

39-
let input = document.getElementById(id);
47+
let input = null;
48+
try {
49+
input = document.querySelector(id);
50+
} catch (error) { input = null; }
51+
4052
if (input) {
4153
input.addEventListener('input', function() {
4254
self.setCalcationResult(ele);
4355
})
4456

4557
input.addEventListener('CoCreateInput-setvalue', function() {
46-
console.log('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
47-
self.setCalcationResult(ele)
58+
// self.setCalcationResult(ele)
4859
})
4960

61+
if (input.hasAttribute('data-calculation')) {
62+
input.addEventListener('changedCalcValue', function(e) {
63+
self.setCalcationResult(ele)
64+
})
65+
}
66+
67+
} else {
68+
//. add event of special operator
69+
70+
let selector = this.__getOperatorSelector(id);
71+
if (selector) {
72+
selectors.push(selector)
73+
}
5074
}
5175
}
5276

77+
if (selectors.length > 0) {
78+
document.addEventListener('changedCalcValue', function(e) {
79+
80+
let isMatched = false;
81+
selectors.forEach(selector => {
82+
if (e.target.matches(selector)) {
83+
isMatched = true; return;
84+
}
85+
})
86+
87+
if (isMatched) {
88+
self.setCalcationResult(ele);
89+
}
90+
})
91+
}
92+
},
93+
94+
__getOperatorSelector(value) {
95+
let result = /SUM\(\s*([\w\W]+)\s*\)/g.exec(value);
96+
if (result && result[1]) {
97+
return result[1].trim();
98+
}
99+
return null;
100+
},
101+
102+
calculationSpecialOperator(value) {
103+
let self = this;
104+
let sum = null;
105+
let result = /SUM\(\s*([\w\W]+)\s*\)/g.exec(value);
106+
if (result) {
107+
let selector = result[1].trim()
108+
109+
if (value.trim().indexOf('SUM') == 0) {
110+
let elements = document.querySelectorAll(selector)
111+
sum = 0;
112+
elements.forEach(el => {
113+
let tmpValue = self.__getElementValue(el);
114+
tmpValue = Number(tmpValue);
115+
if (!Number.isNaN(tmpValue)) {
116+
sum += tmpValue;
117+
}
118+
})
119+
}
120+
}
121+
return sum
53122
},
54123

55124

@@ -58,35 +127,69 @@ var CoCreateCalculation = {
58127

59128
let calString = this.replaceIdWithValue(data_calculation);
60129

61-
console.log(calString);
62130
if (calString) {
63131
let result = calculation(calString);
64132
if (ele.tagName == 'INPUT' || ele.tagName == 'TEXTAREA' || ele.tagName == 'SELECT') {
65133
ele.value = result
66-
// if (window.CoCreateInput) {
67-
// window.CoCreateInput.save(ele)
68-
// }
134+
135+
if (ccutils.isUsageY(ele)) {
136+
ele.value = "";
137+
crdt.replaceText({
138+
collection: ele.getAttribute('data-collection'),
139+
document_id: ele.getAttribute('data-document_id'),
140+
name: ele.getAttribute('name'),
141+
value: result.toString()
142+
})
143+
} else {
144+
CoCreateInput.save(ele);
145+
}
146+
147+
if (floatingLabel) {
148+
floatingLabel.update(ele, ele.value)
149+
}
69150
} else {
70151
ele.innerHTML = result;
71-
// if (window.CoCreateHtmlTags) {
72-
// window.CoCreateHtmlTags.save(ele);
73-
// }
152+
htmltags.saveContent(ele);
74153
}
154+
155+
//. set custom event
156+
var event = new CustomEvent('changedCalcValue', {
157+
bubbles: true,
158+
})
159+
ele.dispatchEvent(event);
75160
}
76161

77162
},
163+
164+
__getElementValue: function(element) {
165+
if (element.tagName == 'INPUT' || element.tagName == 'TEXTAREA' || element.tagName == 'SELECT') {
166+
return element.value;
167+
} else {
168+
return element.innerHTML;
169+
}
170+
},
78171

79172
replaceIdWithValue: function(data_calculation) {
80173
let ids = this.getIds(data_calculation);
81-
174+
82175
for (let i=0; i < ids.length; i++) {
83176
let id = ids[i];
84177

85-
let input = document.getElementById(id);
178+
let input = null;
179+
180+
try {
181+
input = document.querySelector(id);
182+
} catch (error) { input = null; }
183+
184+
let value = null;
86185
if (input) {
87-
let value = Number(input.value);
186+
value = Number(this.__getElementValue(input));
187+
} else {
188+
value = this.calculationSpecialOperator(id);
189+
}
88190

89-
data_calculation = data_calculation.replace(new RegExp('{' + id + '}', 'g'), value);
191+
if (value != null && !Number.isNaN(value)) {
192+
data_calculation = data_calculation.replaceAll('{' + id + '}', value);
90193
}
91194
}
92195

@@ -173,7 +276,7 @@ function calculation(string) {
173276

174277
CoCreateCalculation.init();
175278

176-
CoCreate.observer.init({
279+
CoCreateObserver.init({
177280
name: 'CoCreateCalculationChangeValue',
178281
observe: ['attributes'],
179282
attributes: ['value'],
@@ -184,7 +287,7 @@ CoCreate.observer.init({
184287
}
185288
});
186289

187-
CoCreate.observer.init({
290+
CoCreateObserver.init({
188291
name: 'CoCreateCalculationInit',
189292
observe: ['subtree', 'childList'],
190293
include: '[data-calculation]',

0 commit comments

Comments
 (0)