Overview
| Comment: | [core] [js] avoid avoid functions overriding in common objects prototypes |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk | core |
| Files: | files | file ages | folders |
| SHA3-256: |
51af80e9429d234c73a79e11c9b9c076 |
| User & Date: | olr on 2017-04-28 15:00:22 |
| Original Comment: | [js] avoid avoid functions overriding in common objects prototypes |
| Other Links: | manifest | tags |
Context
|
2017-04-30
| ||
| 12:23 | [fr] confusion son / sont check-in: c6acd80ef5 user: olr tags: trunk, fr | |
|
2017-04-28
| ||
| 15:00 | [core] [js] avoid avoid functions overriding in common objects prototypes check-in: 51af80e942 user: olr tags: trunk, core | |
|
2017-04-27
| ||
| 11:24 | [fr] faux positif: si nécessaire check-in: b32cdfdbe2 user: olr tags: trunk, fr | |
Changes
Modified gc_core/js/jsex_map.js from [975706110f] to [181b814a6e].
1 2 3 | // Map | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
// Map
if (Map.prototype.__grammalecte__ === undefined) {
Map.prototype._shallowCopy = function () {
let oNewMap = new Map();
for (let [key, val] of this.entries()) {
oNewMap.set(key, val);
}
return oNewMap;
}
Map.prototype._get = function (key, defaultValue) {
let res = this.get(key);
if (res !== undefined) {
return res;
}
return defaultValue;
}
Map.prototype._toString = function () {
// Default .toString() gives nothing useful
let sRes = "{ ";
for (let [k, v] of this.entries()) {
sRes += (typeof k === "string") ? '"' + k + '": ' : k.toString() + ": ";
sRes += (typeof v === "string") ? '"' + v + '", ' : v.toString() + ", ";
}
sRes = sRes.slice(0, -2) + " }"
return sRes;
}
Map.prototype._update = function (dDict) {
for (let [k, v] of dDict.entries()) {
this.set(k, v);
}
}
Map.prototype._updateOnlyExistingKeys = function (dDict) {
for (let [k, v] of dDict.entries()) {
if (this.has(k)){
this.set(k, v);
}
}
}
Map.prototype.__grammalecte__ = true;
}
|
Modified gc_core/js/jsex_regex.js from [35ff67872c] to [de380ed036].
1 2 3 | // regex | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
// regex
if (RegExp.prototype.__grammalecte__ === undefined) {
RegExp.prototype._exec2 = function (sText, aGroupsPos, aNegLookBefore=null) {
let m;
while ((m = this.exec(sText)) !== null) {
// we have to iterate over sText here too
// because first match doesn’t imply it’s a valid match according to negative lookbefore assertions,
// and even if first match is finally invalid, it doesn’t mean the following eligible matchs would be invalid too.
if (aNegLookBefore !== null) {
// check negative look before assertions
if ( !aNegLookBefore.some(sRegEx => (RegExp.leftContext.search(sRegEx) >= 0)) ) {
break;
}
} else {
break;
}
}
if (m === null) {
return null;
}
let codePos;
let iPos = 0;
m.start = [m.index];
m.end = [this.lastIndex];
if (m.length > 1) {
// there is subgroup(s)
if (aGroupsPos !== null) {
// aGroupsPos is defined
for (let i = 1; i <= m.length-1; i++) {
codePos = aGroupsPos[i-1];
if (typeof codePos === "number") {
// position as a number
m.start.push(m.index + codePos);
m.end.push(m.index + codePos + m[i].length);
} else if (codePos === "$") {
// at the end of the pattern
m.start.push(this.lastIndex - m[i].length);
m.end.push(this.lastIndex);
} else if (codePos === "w") {
// word in the middle of the pattern
iPos = m[0].search("[ ~’,()«»“”]"+m[i]+"[ ,’~()«»“”]") + 1 + m.index
m.start.push(iPos);
m.end.push(iPos + m[i].length)
} else if (codePos === "*") {
// anywhere
iPos = m[0].indexOf(m[i]) + m.index;
m.start.push(iPos);
m.end.push(iPos + m[i].length)
} else if (codePos === "**") {
// anywhere after previous group
iPos = m[0].indexOf(m[i], m.end[i-1]-m.index) + m.index;
m.start.push(iPos);
m.end.push(iPos + m[i].length)
} else if (codePos.startsWith(">")) {
// >x:_
// todo: look in substring x
iPos = m[0].indexOf(m[i]) + m.index;
m.start.push(iPos);
m.end.push(iPos + m[i].length);
} else {
console.error("# Error: unknown positioning code in regex [" + this.source + "], for group[" + i.toString() +"], code: [" + codePos + "]");
}
}
} else {
// no aGroupsPos
for (let subm of m.slice(1)) {
iPos = m[0].indexOf(subm) + m.index;
m.start.push(iPos);
m.end.push(iPos + subm.length);
}
}
}
return m;
}
RegExp.prototype.__grammalecte__ = true;
}
|
Modified gc_core/js/jsex_string.js from [c771aa921e] to [adf06fbda5].
1 2 3 | // String | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
// String
if (String.prototype.__grammalecte__ === undefined) {
String.prototype._count = function (sSearch, bOverlapping) {
// http://jsperf.com/string-ocurrence-split-vs-match/8
if (sSearch.length <= 0) {
return this.length + 1;
}
let nOccur = 0;
let iPos = 0;
let nStep = (bOverlapping) ? 1 : sSearch.length;
while ((iPos = this.indexOf(sSearch, iPos)) >= 0) {
nOccur++;
iPos += nStep;
}
return nOccur;
}
String.prototype._isDigit = function () {
return (this.search(/^[0-9⁰¹²³⁴⁵⁶⁷⁸⁹]+$/) !== -1);
}
String.prototype._isLowerCase = function () {
return (this.search(/^[a-zà-öø-ÿ0-9-]+$/) !== -1);
}
String.prototype._isUpperCase = function () {
return (this.search(/^[A-ZÀ-ÖØ-ߌ0-9-]+$/) !== -1);
}
String.prototype._isTitle = function () {
return (this.search(/^[A-ZÀ-ÖØ-ߌ][a-zà-öø-ÿ'’-]+$/) !== -1);
}
String.prototype._toCapitalize = function () {
return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
}
String.prototype._expand = function (oMatch) {
let sNew = this;
for (let i = 0; i < oMatch.length ; i++) {
let z = new RegExp("\\\\"+parseInt(i), "g");
sNew = sNew.replace(z, oMatch[i]);
}
return sNew;
}
String.prototype._trimRight = function (sChars) {
let z = new RegExp("["+sChars+"]+$");
return this.replace(z, "");
}
String.prototype._trimLeft = function (sChars) {
let z = new RegExp("^["+sChars+"]+");
return this.replace(z, "");
}
String.prototype._trim = function (sChars) {
let z1 = new RegExp("^["+sChars+"]+");
let z2 = new RegExp("["+sChars+"]+$");
return this.replace(z1, "").replace(z2, "");
}
String.prototype.__grammalecte__ = true;
}
|