Adding Escaped Quotes to Highcharts label - html

I want to add the clickable telephone numbers to a High Charts Organizational Chart.
The data for each text box looks like:
nodes: [{
id: 'CEO',
title: 'The Boss',
name: 'Jo Bloggs',
},{
I tried to escape the " marks with &#39 but that did not help, i.e.:
nodes: [{
id: 'CEO',
title: 'The Boss',
name: '<a href=&#39tel: 123456&#39>Jo Bloggs</a>',
},{

Consider use the Unicode Character 'QUOTATION MARK' (U+0022) \u0022.
Example:
nodes: [{
id: 'CEO',
title: 'The Boss',
name: '<a href=\u0022tel: 123456\u0022>Jo Bloggs</a>',
},{
See working jsfiddle and check the value Employee - Torstein Hønsi:
Example:
{
id: 'CPO',
title: 'CPO',
name: '<a href=\u0022#\u0022>Employee - Torstein Hønsi</a>',
image: 'https://wp-assets.highcharts.com/www-highcharts-com/blog/wp-content/uploads/2020/03/17131213/Highsoft_03998_.jpg'
}

Related

Working with Contentful Rich text with Jekll

I'm trying to render a rich text field coming from Contentful into Jekyll.... but I can't get it to work. Has anyone had success with this? I already installed https://github.com/contentful/rich-text-renderer.rb as a gem & plugin, but there aren't any directions to make it work with Jekyll.
I am able to get the first paragraph with {{ page.body.content[0].content[0].value }} but clearly that's not the way. and {{ page.body.content | rich_text }} throws an error.
Anyone know how to get this to work?
here's the YML file if it helps
- sys:
id: 58za8Qb9b9ahqvxcTBTESb
created_at: !ruby/object:DateTime 2022-05-30 06:05:14.325000000 Z
updated_at: !ruby/object:DateTime 2022-05-30 17:45:38.289000000 Z
content_type_id: blogPost
revision: 8
title: This is for you Christine
link: this-is-for-you-christine
short_description: A working blog using Contentful and Jekyll
body:
nodeType: document
data: {}
content:
- nodeType: paragraph
data: {}
content:
- nodeType: text
value: 'Here it is... a wonderful thing. A headless static site-generated
blog. My JAMstack, you ask: '
marks: []
data: {}
- nodeType: unordered-list
data: {}
content:
- nodeType: list-item
data: {}
content:
- nodeType: paragraph
data: {}
content:
- nodeType: text
value: Contentful - CMS
marks: []
data: {}
- nodeType: list-item
data: {}
content:
- nodeType: paragraph
data: {}
content:
- nodeType: text
value: 'Github - repository, '
marks: []
data: {}
- nodeType: list-item
data: {}
content:
- nodeType: paragraph
data: {}
content:
- nodeType: text
value: 'Jekyll - SSG, '
marks: []
data: {}
- nodeType: list-item
data: {}
content:
- nodeType: paragraph
data: {}
content:
- nodeType: text
value: Netlify - hosting
marks: []
data: {}
- nodeType: list-item
data: {}
content:
- nodeType: paragraph
data: {}
content:
- nodeType: text
value: 'IDE - Gitpod '
marks: []
data: {}
- nodeType: paragraph
data: {}
content:
- nodeType: text
value: The cost of running. ABSOLUTELY FREE! Time to set up... once I knew
what to do, we won't discuss research time... but we can say I deserve another
3-day weekend. Aside... learned that I can understand developers speaking
in Portuguese... cause, yes, that's what it took! Anyway... time to set
up... under an hour. You're welcome! Of course, you are asking why this
is one large block paragraph? I still have to figure out displaying rich
text.
marks: []
data: {}
So it turns out that Contentful has a longText/Markdown option. So no need for rich text.

Kivy multiple toggle buttons all read in a single function

Trying to have multiple toggle buttons on a single screen be "saved" when a button is pressed. I am trying to take the values from the .kv into the python code to save. Was trying to use the gender1: gender1 --- gender1.self to try and objectproperty in the python code, but would have to do that for every button, if that is even a solution?
.kv
<UserProfile>:
name: "profile"
gender1: gender1.__self__
BoxLayout:
BoxLayout:
orientation: 'vertical'
Label:
text: 'Gender'
ToggleButton:
id: gender1
text: 'Male'
group: 'sex'
state: 'down'
ToggleButton:
id: gender2
text: 'Female'
group: 'sex'
ToggleButton:
id: gender3
text: 'Mixed'
group: 'sex'
BoxLayout:
orientation: 'vertical'
Label:
text: 'Hand'
ToggleButton:
id: hand1
text: 'Right'
group: 'hand'
state: 'down'
ToggleButton:
id: hand2
text: 'Left'
group: 'hand'
BoxLayout:
orientation: 'vertical'
Label:
text: 'Position'
ToggleButton:
id: position1
text: 'Forward'
state: 'down'
ToggleButton:
id:position2
text: 'Defense'
ToggleButton:
id:position3
text: 'Goalie'
Button:
text: 'Submit'
on_press: root.checkstate()
.py
class UserProfile(Screen):
def checkstate(self, **kwargs):
buttonids = []
for a in self.ids:
buttonids.append(a)
print(buttonids)
for id in buttonids:
print(self.{id}.state)
# a = self.ids
# for b in a:
# c = self.b.state
# print(c)
Was trying to show a couple ways I attempted...
In addition, if someone could possibly provide a decent tutorial or link to a good local storage example I'd appreciate that as well...

How can I describe this JSON object in swagger parameters?

I've looked at a few other related questions and I still can't seem to find what I'm looking for. This is an example JSON payload being sent to an API I'm writing:
{
"publishType": "Permitable",
"electricalPanelCapacity": 0.0,
"roofConstruction": "Standard/Pitched",
"roofType": "Composition Shingle",
"systemConstraint": "None",
"addedCapacity": 0.0,
"isElectricalUpgradeRequired": false,
"cadCompletedBy": "94039",
"cadCompletedDate": "2017-02-01T02:18:15Z",
"totalSunhourDeficit": 5.0,
"designedSavings": 5.0,
"isDesignedWithinTolerance": "N/A",
"energyProduction": {
"january": 322.40753170051255,
"february": 480.61501312589826,
"march": 695.35215022905118,
"april": 664.506907341219,
"may": 877.53769491124172,
"june": 785.56924358327,
"july": 782.64347308783363,
"august": 760.1123565793057,
"september": 574.67050827435878,
"october": 524.53797441350321,
"november": 324.31132291046379,
"december": 280.46921069200033
},
"roofSections": [{
"name": "North East Roof 4",
"roofType": "Composition Shingle",
"azimuth": 55.678664773137086,
"tilt": 15.0,
"solmetricEstimate": 510.42831656979456,
"shadingLoss": 14.0,
"systemRating": 580.0,
"sunHours": 0.88004882167205956,
"moduleCount": 2,
"modules": [{
"moduleRating": 290.0,
"isovaPartNumber": "CDS-MON-007070",
"partCount": 2
}]
}, {
"name": "South West Roof 3",
"roofType": "Composition Shingle",
"azimuth": 235.67866481720722,
"tilt": 38.0,
"solmetricEstimate": 3649.1643776261653,
"shadingLoss": 59.0,
"systemRating": 5220.0,
"sunHours": 0.69907363556056812,
"moduleCount": 18,
"modules": [{
"moduleRating": 290.0,
"isovaPartNumber": "CDS-MON-007070",
"partCount": 18
}]
}, {
"name": "South East Roof",
"roofType": "Composition Shingle",
"azimuth": 145.67866477313709,
"tilt": 19.0,
"solmetricEstimate": 2913.1406926526984,
"shadingLoss": 31.0,
"systemRating": 2900.0,
"sunHours": 1.0045312733285168,
"moduleCount": 10,
"modules": [{
"moduleRating": 290.0,
"isovaPartNumber": "CDS-MON-007070",
"partCount": 10
}]
}],
"SystemConfiguration": {
"inverters": [{
"isovaPartNumber": "ENP-INV-007182",
"partCount": 30
}]
}
}
Describing all the beginning parameters was easy.
/post/new-cad/{serviceNumber}:
post:
summary: Publish a new CAD record.
description: Creates a new CAD record under the provided service number and returns the name of the new CAD record, the unique SF ID, and the deep link URL for Salesforce.
parameters:
- name: serviceNumber
in: path
description: The service number for the solar project you're interested in publishing to.
required: true
type: string
- name: publishType
in: formData
description: The type of CAD record to publish (Proposal, Permitable, or AsBuilt).
required: true
type: string
- name: electricalPanelCapacity
in: formData
required: true
type: number
format: double
- name: roofConstruction
in: formData
description: New, Flat Roof, Open Beam, Standard/Pitched
required: true
type: string
- name: roofType
in: formData
description: Composition Shingle, Membrane (Rubber, TPO, PVC, EPDM), Metal - Corrugated (S-Curve), Metal - Standing Seam, Metal - Trapezoidal, Multi Roof Type, Rolled Comp, Silicone, Tar & Gravel, Tile - Flat, Tile - S-Curve, or Tile - W-Curve
type: string
- name: systemConstraint
in: formData
description: Usage, None, Roof, Electrical, Shading, or 10kW Max
required: true
type: string
- name: addedCapacity
in: formData
required: true
type: number
format: double
- name: isElectricalUpgradeRequired
in: formData
type: boolean
- name: cadCompletedBy
in: formData
description: Employee ID of record author.
type: number
required: true
- name: cadCompletedDate
in: formData
description: The date the CAD record was completed.
type: string
format: date
required: true
- name: totalSunhourDeficit
in: formData
type: number
format: double
- name: designedSavings
in: formData
type: number
format: double
- name: isDesignedWithinTolerance
in: formData
type: string
description: Yes, No, or N/A
And yields the expected result in Swagger-UI:
But now I'm struggling with the last parts of the example JSON payload above. I'm unsure how to express the energyProduction key which is an object with a key for each month of the year. I'm also unsure how to describe roofSections which is an array of objects and systemConfiguration which is an object with a property inverters whose value is an array of objects.
I'm going over the swagger documentation quite a bit but I'm still pretty confused and hoping maybe someone here can explain things a little better to me.
I figured it out. Turns out formData is not what I should have been using for my parameters. Instead I needed to use body and define the structure of the JSON that would populate the body. Here is the completed design file using a body parameter with an object schema and describes all the nested objects and arrays as well.
/new-cad/{serviceNumber}:
post:
summary: Publish a new CAD record.
description: Creates a new CAD record under the provided service number and returns the name of the new CAD record, the unique SF ID, and the deep link URL for Salesforce.
parameters:
- name: serviceNumber
in: path
description: The service number for the solar project you're interested in publishing to.
required: true
type: string
- name: cadData
in: body
description: A JSON payload containing the data required to publish a new CAD record.
required: true
schema:
type: object
properties:
publishType:
type: string
default: "Proposal"
enum: ["Proposal","Permitable","AsBuilt"]
electricalPanelCapacity:
type: number
roofConstruction:
type: string
default: "New"
enum: ["New","Flat Roof","Open Beam","Standard/Pitched"]
roofType:
type: string
enum: ["Composition Shingle","Membrane (Rubber, TPO, PVC, EPDM)","Metal - Corrugated (S-Curve)","Metal - Standing Seam","Metal - Trapezoidal","Multi Roof Type","Rolled Comp","Silicone","Tar & Gravel","Tile - Flat","Tile - S-Curve","Tile - W-Curve"]
systemConstraint:
type: string
default: "None"
enum: ["None","Usage","Roof","Electrical","Shading","10kW Max"]
addedCapacity:
type: number
default: 0
isElectricalUpgradeRequired:
type: boolean
cadCompletedBy:
type: string
cadCompletedDate:
type: string
totalSunhourDeficit:
type: number
designedSavings:
type: number
isDesignedWithinTolerance:
type: string
default: "N/A"
enum: ["N/A","Yes","No"]
energyProduction:
type: object
properties:
january:
type: number
february:
type: number
march:
type: number
april:
type: number
may:
type: number
june:
type: number
july:
type: number
august:
type: number
september:
type: number
october:
type: number
november:
type: number
december:
type: number
roofSections:
type: array
items:
type: object
properties:
name:
type: string
roofType:
type: string
enum: ["Composition Shingle","Membrane (Rubber, TPO, PVC, EPDM)","Metal - Corrugated (S-Curve)","Metal - Standing Seam","Metal - Trapezoidal","Multi Roof Type","Rolled Comp","Silicone","Tar & Gravel","Tile - Flat","Tile - S-Curve","Tile - W-Curve"]
azimuth:
type: number
tilt:
type: number
solmetricEstimate:
type: number
shadingLoss:
type: number
systemRating:
type: number
sunHours:
type: number
moduleCount:
type: integer
modules:
type: array
items:
type: object
properties:
moduleRating:
type: number
isovaPartNumber:
type: string
partCount:
type: integer
systemConfiguration:
type: object
properties:
inverters:
type: array
items:
type: object
properties:
isovaPartNumber:
type: string
partCount:
type: integer
tags:
- NEW-CAD
responses:
200:
description: CAD record created successfully.
schema:
type: object
properties:
cadName:
type: string
sfId:
type: string
sfUrl:
type: string
examples:
cadName: some name
sfId: a1o4c0000000GGAQA2
sfUrl: http://some-url-to-nowhere.com
204:
description: No project could be found for the given service number.
500:
description: Unexpected error. Most likely while communicating with Salesforce.
schema:
type: string
So now I can still get the serviceNumber from the path while everything else comes in the request body. One thing to keep in mind here is that you cannot use all the same Swagger Data Types. For example I tried to use double for one of the properties and Swagger complained that it couldn't parse type double. I was very confused until I finally found the section of the docs describing the difference between formData parameters and a body parameter (of which you can only have one, because it describes the entire request body). Basically you can only use data types that are supported by the JSON schema.
Swagger-UI now shows a single textarea instead of multiple input fields for each parameter. Not as pretty but it works great. You can click the "Example Value" box on the right and it places a predefined JSON template in the textarea for you so you can just fill in the values.
If you are just learning Swagger like I am I hope this helps!

Ruby - Formatting json into string

I need to convert a JSON response into a well-formatted string, more like a table.
Example,
[{id: 1, name: "Panda", description: ""}, {id: 2, name: "koala", description: ""},...]
To be converted as,
Id | Name |Description
1 | Panda |
2 | Koala test |
and for the text to be automatically wrapped inside the cell width.
Any help would be appreciated.
Thank you.
First you need to parse JSON result.
data = JSON.parse(result)
Then use that parsed result to generate the pattern.
data = [
{ id: 1, name: 'Panda', description: '' },
{ id: 2, name: 'koala', description: '' }
]
puts 'Id | Name |Description'
data.each do |entry|
puts "#{entry[:id]} | #{entry[:name]} |#{entry[:description]}"
end
Hope this helps!

SQL LIKE search error only on one row of table

This is weird, it never happens to me before
Im on the rails console, because my search form is not working, for some reason when i do a search using the row called 'nombre', the search doesnt work, this is the output data:
First, I will show you my table data:
2.3.0 :035 > Item.all
Item Load (0.6ms) SELECT "items".* FROM "items"
=> #<ActiveRecord::Relation [#<Item id: 1, nombre: "Melamina Blanca", espesor: 18, material: "MDF", quantity: 14, created_at: "2016-08-04 00:56:13", updated_at: "2016-08-30 00:05:01">, #<Item id: 2, nombre: "Melamina Gris Grafito", espesor: 15, material: "Aglo", quantity: 9, created_at: "2016-08-04 00:56:13", updated_at: "2016-08-30 00:05:01">, #<Item id: 3, nombre: "Melamina Azul", espesor: 18, material: "MDF", quantity: 26, created_at: "2016-08-04 00:56:13", updated_at: "2016-08-30 00:05:01">, #<Item id: 4, nombre: "Melamina Rojs", espesor: 18, material: "MDF", quantity: 5, created_at: "2016-08-04 00:56:13", updated_at: "2016-08-30 00:05:01">]>
2.3.0 :036 >
So as you can see, the first item, the name (nombre) is 'Melamina Blanca'
If I do the search, I get the following:
item = Item.where("nombre LIKE ?", "Blanca")
Item Load (0.8ms) SELECT "items".* FROM "items" WHERE (nombre LIKE 'Blanca')
=> #<ActiveRecord::Relation []>
So I tried to search by another row, on this case called 'Material'
item = Item.where("material LIKE ?", "Aglo")
Item Load (0.5ms) SELECT "items".* FROM "items" WHERE (material LIKE 'Aglo')
=> #<ActiveRecord::Relation [#<Item id: 2, nombre: "Melamina Gris Grafito", espesor: 15, material: "Aglo", quantity: 9, created_at: "2016-08-04 00:56:13", updated_at: "2016-08-30 00:05:01">]>
I get a correct search, I tried with the other rows and all of them work, except the one I need, which is 'nombre'
Any ideas why?
I think the problem is you are searching for an exact match. To search for a pattern string, you have to use % which defines wildcards.
Try
Item.where("nombre LIKE ?", "%Blanca%")
This will look for records with names that contain "Blanca" in it.
If you want to search for names that start with "Blanca", use
Item.where("nombre LIKE ?", "Blanca%")
Or for names ending with "Blanca", use
Item.where("nombre LIKE ?", "%Blanca")
Note: Your search across material "Aglo" was successful because the material field in the record contained the exact string "Aglo".
Hope this helps!