Extract data from Object Array - javascript

this is about image to text (OCR) converter using terrasect. Refering to a working codepen demo at here, I managed to extract the text using data.text in my code. May I ask how to extract the numbers (Highlighted in Green) which is 936 and 385 in my case? I have tried using data.html but does not work.
I will aprreciate any help I can get. You will have to upload an image with words for it to work since it is an OCR Reader.
Image with text:
https://i.ibb.co/gZLWbjC/dog.jpg
function result(data){
var r = $(".result");
console.log(data);
r.append(
"<div class='sixteen wide column output'>success" +
"<div class='ui message'><pre>" + data.text +"</pre></div>" +
"</div>"
);
}

You could use DOMParser to parse the HTML and then get the page_1 element and then get its title. After that, you could parse the title to get the numbers by selecting the numbers between bbox and ;, then you could take the third and fourth number.
Modify the function result(data) to this:
function result(data){
var r = $(".result");
const parser = new DOMParser();
const parsed = parser.parseFromString(data.html, 'text/html');
const firstOccurrence = parsed.getElementById('page_1').getAttribute('title');
const numbers = firstOccurrence.split('bbox ')[1].split(';')[0].split(' ');
console.log("green numbers:", numbers[2], numbers[3])
r.append(
"<div class='sixteen wide column output'>success" +
"<div class='ui message'><pre>" + data.text +"</pre></div>" +
"</div>"
);
}
Here is the working fork codepen.

Related

SPARX Enterprise Architect. Add Note to Diagram with formatted text using Scripting

I'm trying to add a note to a diagram with formatted text similar to the Diagram Properties
I tried
dgmElement.Notes = currentPackage.Elements.AddNew("","Text");
and
dgmElement.Notes = currentPackage.Elements.AddNew("", "Note");
dgmElement.Notes
= "Classification:" + "UNCLASSIFIED" + String.fromCharCode(13)
+ "Model Type: " + "SV1-SFFSESVSE SEASDEAER" + String.fromCharCode(13)
+ "Diagram Status:" + "APPPROVED" + String.fromCharCode(13)
+ "Date Modified: " + currentDiagram.ModifiedDate + String.fromCharCode(13) ;
but neither returns the desired format.
Both are possible. EA renders a note frame around a note. Text will appear without a frame.
Formatting like in the diagram properties can be achieved by adding tab chars. For "advanced" formatting like bold text you need to use the repository operations GetFieldFromFormat and GetFormatFromField (see the help) to convert the text from and to EA's internal memo format.
This is a Python example but you can probably translate it to your target language:
dia = rep.getDiagramByGUID("{81B59BAD-B22F-4375-AA73-C489958A3D6B}")
pck = rep.getPackageByID(dia.packageID)
text = pck.elements.addNew("", "Text")
text.notes = rep.getFieldFromFormat("TXT", "a\tb\r\nc\td")
# note the \r\n for a newline. Windoze
text.update
dobj = dia.diagramObjects.addNew("l=10;r=110;t=-20;b=-80", "") # coord. on diagram
dobj.elementID = text.elementId
dobj.update
rep.reloadDiagram (dia.diagramID)
In the above example the text could as well have been assigned directly to text.notes since it's a simple case. However, you could as well supply rtf or html this way and txt would be formatted regarding special chars.

GoogleTagManager do not seem to accept base64 encoded picture

Is it me or GoogleTagManager do not seem to accept base64 encoded pictures?
Exemple with the very basic code below with a very basic image.
I get the following error :
- Type : JavaScript Too Long"
- Description :
"The JavaScript in your Arbitrary HTML tag has too many contiguous non-whitespace characters (e.g. an array literal '[1,2,..]' that is too long). Try inserting spaces between statements to allow compilation (e.g. change '[1,2,...]' to '[1, 2, ...]')."
Is there no way to implement this in GTM, beside putting the js somewhere else than directly into GTM?
Best,
J.
<script type="text/javascript">
var myurl = "http://wwww.toto.com";
var myimg = "data:image/jpeg;base64,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";
$("#beta-ad").empty();
$('<div/>', { id: "1" }).insertBefore($("#beta-ad"));
$("#1").append('<img src="' + myimg + '" style="display:inline; width: auto;" ></img>')
</script>
I think this is by design. But the workaround proposed by #Matus works.
To get around the issue of having to generate JS for a very long base base 64 encoded string I wrote a utility function, splitting the string into chunks of 150 (which GTM accepts), and generating the JS concatenation code.
You can then drop this code into your GTM tag, and reference the base64 variable.
function splitString(string, size, multiline) {
var matchAllToken = (multiline == true) ? '[^]' : '.';
var re = new RegExp(matchAllToken + '{1,' + size + '}', 'g');
var responses = string.match(re);
var value = "var base64='';";
responses.forEach(response => {
value += "base64+='" + response + "';";
});
return value;
}
var base64 = 'eyJ3aWRnZXRfc2.... etc';
var gtmString = splitString(base64, 150, true);
console.log(gtmString);
http://jsfiddle.net/azqpdwxg/2/

Pupulate Dom HTML fom JSON and coffeescript

I'm pretty new to coffee script.
I'm building a widget for Ubersicht
According to the documentation, I need to specify a command, an update interval and some style
So far, I have been able to tweak other existing widgets, but I've come to a roadblock when trying to create one of my own.
I want to iterate trhough a JSON array and populate a table.
I have tried following the example found here:
How to iterate through JSON hash with coffeescript
But I don't see what I'm doing wrong. The dom inspector throws an error saying there is an unexpected indent. I've been up all night trying to figure this out. Please help.
# ######################
# index.coffee
#######################
refreshFrequency: 5000
style: """
white1 = rgba(white,1)
white05 = rgba(white,0.5)
white02 = rgba(white,0.2)
black02 = rgba(black,0.2)
icon-size = 28px
//bottom 220px + 49
//right 0px
overflow hidden
#font-face
font-family Helvetica Neue
.user_data
color white1
white-space nowrap
width 176px
padding 8px 0
align-items center
display flex
.text,
font-size 8pt
font-weight 200
color white1
text-overflow ellipsis
"""
todayfile = '~/Desktop/today.txt'
command: "cat #{todayfile}"
render: -> """
<table class="user_data text"><br>
</table>
"""
update: (output, domEl) ->
dom = $(domEl)
data = JSON.parse output
alloc = data?.name?.user_name?.allocated_hours
for keys, values of data
text = '<tr><td>' + data.name[i] + '</td></tr>' + '<tr><td>' + data.user_name[i] + '</td></tr>' + '<tr><td>' + data.allocated_hours[i] + '</td></tr>'
dom.find(".user_data").innerHTML =
And the JSON file
{"results":[{"user_id":"63","user_name":"blueboy","name":" (Super Man)","allocated_hours":"7"},{"user_id":"510","user_name":"allblack","name":" (Batman)","allocated_hours":"7"},{"user_id":"418","user_name":"ladyinred","name":" (Wonder Woman)","allocated_hours":"8"}]}
refreshFrequency: 5000
This is not how you assign variables:
Variable assignment is with =, i.e. refreshFrequency = 5000
Assigning items in an Object is done with :, i.e.:
my_object =
refreshFrequency: 5000
You've repeated this error several times ;-) Note that you also use = for function assignment, so render: -> is also wrong and needs to be render = ->.
The indentation of your update function is off:
update: (output, domEl) ->
dom = $(domEl)
data = JSON.parse output
alloc = data?.name?.user_name?.allocated_hours
for keys, values of data
text = '<tr><td>' + data.name[i] + '</td></tr>' + '<tr><td>' + data.user_name[i] + '</td></tr>' + '<tr><td>' + data.allocated_hours[i] + '</td></tr>'
dom.find(".user_data").innerHTML =
Why is the line for keys, values of data on a new indentation level? The start of new block should never be on a new indentation level, only its contents.
Your script also ends abruptly with innerHTML =, which is incorrect.
Once I fixed the above errors, the file compiled ;-) This is, of course, no guarantee that it also does what you want ;-) I can't really make sense of the script, as such, and seems more like half a script...

Replace array-mapped variables with the actual variable name/string?

I am trying to edit a Greasemonkey/jQuery script. I can't post the link here.
The code is obfuscated and compressed with minify.
It starts like this:
var _0x21e9 = ["\x67\x65\x74\x4D\x6F\x6E\x74\x68", "\x67\x65\x74\x55\x54\x43\x44\x61\x74\x65", ...
After "decoding" it, I got this:
var _0x21e9=["getMonth","getUTCDate","getFullYear", ...
It is a huge list (500+ ). Then, it has some variables like this:
month = date[_0x21e9[0]](), day = date[_0x21e9[1]](), ...
_0x21e9[0] is getMonth, _0x21e9[1] is getUTCDate, etc.
Is it possible to replace the square brackets with the actual variable name? How?
I have little knowledge in javascript/jQuery and can not "read" the code the way it is right now.
I just want to use some functions from this huge script and remove the others I do not need.
Update: I tried using jsbeautifier.org as suggested here and in the duplicated question but nothing changed, except the "indent".
It did not replace the array variables with the decoded names.
For example:
jsbeautifier still gives: month = date[_0x21e9[0]]().
But I need: month = date["getMonth"]().
None of the online deobfuscators seem to do this, How can I?
Is there a way for me to share the code with someone, at least part of it? I read I can not post pastebin, or similar here. I can not post it the full code here.
Here is another part of the code:
$(_0x21e9[8] + vid)[_0x21e9[18]]();
[8] is "." and [18] is "remove". Manually replacing it gives a strange result.
I haven't seen any online deobfuscator that does this yet, but the principle is simple.
Construct a text filter that parses the "key" array and then replaces each instance that that array is referenced, with the appropriate array value.
For example, suppose you have a file, evil.js that looks like this (AFTER you have run it though jsbeautifier.org with the Detect packers and obfuscators? and the Unescape printable chars... options set):
var _0xf17f = ["(", ")", 'div', "createElement", "id", "log", "console"];
var _0x41dcx3 = eval(_0xf17f[0] + '{id: 3}' + _0xf17f[1]);
var _0x41dcx4 = document[_0xf17f[3]](_0xf17f[2]);
var _0x41dcx5 = _0x41dcx3[_0xf17f[4]];
window[_0xf17f[6]][_0xf17f[5]](_0x41dcx5);
In that case, the "key" variable would be _0xf17f and the "key" array would be ["(", ")", ...].
The filter process would look like this:
Extract the key name using text processing on the js file. Result: _0xf17f
Extract the string src of the key array. Result:
keyArrayStr = '["(", ")", \'div\', "createElement", "id", "log", "console"]';
In javascript, we can then use .replace() to parse the rest of the JS src. Like so:
var keyArrayStr = '["(", ")", \'div\', "createElement", "id", "log", "console"]';
var restOfSrc = "var _0x41dcx3 = eval(_0xf17f[0] + '{id: 3}' + _0xf17f[1]);\n"
+ "var _0x41dcx4 = document[_0xf17f[3]](_0xf17f[2]);\n"
+ "var _0x41dcx5 = _0x41dcx3[_0xf17f[4]];\n"
+ "window[_0xf17f[6]][_0xf17f[5]](_0x41dcx5);\n"
;
var keyArray = eval (keyArrayStr);
//-- Note that `_0xf17f` is the key name we already determined.
var keyRegExp = /_0xf17f\s*\[\s*(\d+)\s*\]/g;
var deObsTxt = restOfSrc.replace (keyRegExp, function (matchStr, p1Str) {
return '"' + keyArray[ parseInt(p1Str, 10) ] + '"';
} );
console.log (deObsTxt);
if you run that code, you get:
var _0x41dcx3 = eval("(" + '{id: 3}' + ")");
var _0x41dcx4 = document["createElement"]("div");
var _0x41dcx5 = _0x41dcx3["id"];
window["console"]["log"](_0x41dcx5);
-- which is a bit easier to read/understand.
I've also created an online page that takes JS source and does all 3 remapping steps in a slightly more automated and robust manner. You can see it at:
jsbin.com/hazevo
(Note that that tool expects the source to start with the "key" variable declaration, like your code samples do)
#Brock Adams solution is brilliant, but there is a small bug: it doesn't take into account simple quoted vars.
Example:
var _0xbd34 = ["hello ", '"my" world'];
(function($) {
alert(_0xbd34[0] + _0xbd34[1])
});
If you try to decipher this example, it will result on this:
alert("hello " + ""my" world")
To resolve this, just edit the replacedSrc.replace into #Brock code:
replacedSrc = replacedSrc.replace (nameRegex, function (matchStr, p1Str) {
var quote = keyArry[parseInt (p1Str, 10)].indexOf('"')==-1? '"' : "'";
return quote + keyArry[ parseInt (p1Str, 10) ] + quote;
} );
Here you have a patched version.
for (var i = 0; i < _0x21e9.length; i++) {
var funcName = _0x21e9[i];
_0x21e9[funcName] = funcName;
}
this will add all the function names as keys to the array. allowing you to do
date[_0x21e9["getMonth"]]()

eval javascript function IE6 taking long time

I have the below chunk of code. I've debugged through and located the snippet that is causing a long delay in IE6.
Basically the code loops through a document converting it to XML and sending to a PDF. On Ubuntu and Firefox 4 it takes 3 seconds. On IE it can take up to 40 seconds regularly.
/**
* This function builds up the XML to be saved to the DM.
*/
function getXMLToSave(){
var text="<workbook><sheet><name>Adv4New</name>";
//show_props(document.adv4.row10col1, "document.adv4.row10col1");
for(i=1;i<157;i++){
text = text + "<row number='" + i + "'>";
for(j=1;j<=7;j++){
text = text + "<col ";
//alert(eval('document.adv4.row'+i+'col'+j+'.readonly'));
try{
text = text + "number='" + j + "' label='" + eval('document.adv4.row'+i+'col'+j+'.className')+ "'";
}
catch (e) {
text = text + "number='" + j + "' label=''";
}
try {
if(eval('document.adv4.row'+i+'col'+j).readOnly)
text = text + " type='readonly'";
else
text = text + " type=''";
}
catch (e) {
text = text + " type=''";
}
try {
text = text + " color='" + eval('document.adv4.row'+i+'col'+j+'.style.color') + "'";
}
catch (e) {
text = text + " color=''";
}
text = text + ">";
try {
// don't wrap in a CDATA (like previously), but run cleanNode
// this fixes html entities
var content = eval('document.adv4.row'+i+'col'+j+'.value');
text = text + cleanNode(content);
}
catch (e) {
text = text + "0";
}
text = text + "</col>";
}
text = text + "</row>";
}
text = text + "</sheet></workbook>";
return text;
}
I believe its the eval function causing the delay in IE6. Is there a neat solution to fix this. Thanks very much
Why are you using eval in the firts place?
eval('document.adv4.row'+i+'col'+j+'.style.color')
Use bracket notation!
document.adv4["row"+i+"col"+j].style.color
You don't need eval() at all:
text = text + "number='" + j + "' label='" + document.adv4['row' + i + 'col' + j].className + "'";
Also, in IE6 (but not in newer browsers), building up large strings by repeatedly adding more content is really, really slow. It was way faster in that browser to build up strings by creating an array of substrings and then joining them all together when finished with all the pieces.
Don't use eval EVAL is EVIL. Having said that, you really shouldn't care about IE6: Even MS doesn't support it any longer, why should you bother?
Anyhow, change all eval calls like:
eval('document.adv4.row'+i+'col'+j+'.value');
to
document.adv4['row' + i + 'col' + j].value;
To access the elements directly. Remember that Nodes are objects, so their properties can be accessed either using the dot-notation (foo.bar) or the "associative array" notation: foo['bar'], the latter being very useful when you need the value of a variable to access properties
Don't use eval - period. The eval() should be renamed to evil(). There is almost no situation where you really need to use the eval function.
In this case you can use document.getElementById() to find a DOM node with a specific id.
It's likely that it's all the string concatentation that makes it slow. Each time you add something to the text, it will copy all the previous text into a new string.
Newer browsers have optimised code for this special case, so for them the impact is less.
Instead of concatenating strings like this:
text = text + "something";
use an array instead:
var text = [];
then add items to the array using the push method:
text.push("<workbook><sheet><name>Adv4New</name>");
Finally just join the strings together:
return text.join('');
One solution could be generating a color array (or maybe an object if you need it) and then using it.
But then, ask yourself the question "Should I really support IE6?"

Categories

Resources