Kivy/MD - why is my MDLabel in Scrollview showing the last line when it initially displays (w/image and code)? - kivy

I have a Scrollview with an MDLabel in it. When I invoke this MDDialog the MDLabel displays but it display the last page of text on screen initially. I want it to display the first page of text and then let me scroll down.
In this example, if I click and drag my mouse, I can scroll up, but my mousewheel will not scroll up as it does on other Scrollviews I have.
How do I display the first page of text in MDLabel intially?
What my scrollview and MDLabel look like - click here for image
Py - complete run-able minimal code:
from kivymd.app import MDApp
from kivy.lang import Builder
kv = """
MDBoxLayout:
orientation: "vertical"
size_hint_y: None
height: "400dp"
markup: True
ScrollView:
do_scroll_x: False
do_scroll_y: True
size_hint: None, None
size: "500dp", "700dp"
pos_hint: {"center_x": .5, "center_y": 1}
MDLabel:
id: MLogfileText
size_hint: 1,None
text: "Log file"
halign: "left"
text_color: self.theme_cls.primary_light
"""
class ColorLabelApp(MDApp):
def build(self):
screen = Builder.load_string(kv)
screen.ids.MLogfileText.text = (" (first line) Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. (last line)")
return screen
ColorLabelApp().run()

Bind the label's height to its texture_size[1] (i.e. height) as,
MDLabel:
padding: [20, 20]
id: MLogfileText
size_hint: 1,None
height: self.texture_size[1]

Related

How to use typography of material angular dart components with Dart 2?

I wanted to use the material typography in the components with the help of material angular_dart components. How can I do that?
app_component.html
<section class="layout">
<h1 class="headline">The headline goes here!</h1>
<h2 class="sub-headline">Lorem ipsum is placeholder text commonly used in the graphic, print, and publishing industries for previewing layouts and visual mockups.</h2>
<div class="body-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
</section>
app_component.scss
#import 'package:angular_components/css/material/material';
:host {
}
.headline {
}
.sub-headline {
}
.body-text {
}
There are a bunch of mixins you can use here:
For your example:
#import 'package:angular_components/css/material/material';
.headline {
#include mat-font-headline;
}
.sub-headline {
#include mat-font-subhead;
}
.body-text {
#include mat-font-body;
}

Swift 3 - How to use JSON Array in custom Tabbar?

I am fresher in iOS Development.I am using Tabman for Tab like layout.I want to populate tabbar items with my json array.
my json:-
{
"ManagerName": null,
"ManagerCellNo": null,
"DayDescrList": [
{
"DaySeq": 1,
"Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda. ",
"DescrSeq": 1,
"HotelId": 1,
"HotelNm": "ABC"
},
{
"DaySeq": 2,
"Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.",
"DescrSeq": 1,
"HotelId": 1,
"HotelNm": "ABC"
},
{
"DaySeq": 3,
"Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.",
"DescrSeq": 1,
"HotelId": 2,
"HotelNm": "ABC"
},
{
"DaySeq": 4,
"Descr": "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.",
"DescrSeq": 1,
"HotelId": 3,
"HotelNm": "ABC"
}
]
I want to use 'DayDescrList's 'DaySeq' as my tabbar items.
I am using Alamofire and SwiftyJSON.
what i am trying in code:-
func alamoget() {
Alamofire.request("URL").responseJSON(completionHandler: { (responseData) in
if ((responseData.result.value) != nil) {
let swiftyJSONVar = JSON(responseData.result.value!)
if let resData = swiftyJSONVar["DayDescrList"].arrayObject {
self.arrRes = resData as! [[String:AnyObject]]
}
}
})
}
func viewControllers(forPageboyViewController pageboyViewController: PageboyViewController) -> [UIViewController]? {
let storyboard = UIStoryboard(name:"Main",bundle:Bundle.main)
var dict = arrRes[(targetIndex)!]
var viewControllers = [UIViewController] ()
var tabBarItems : [TabmanBar.Item] = []
for i in 0 ..< dict["DaySeq"] {
let vc = storyboard.instantiateViewController(withIdentifier: "childvc") as! childvc
vc.index = i+1
tabBarItems.append(Item(title: String(format: "Day %i",vc.index!)))
viewControllers.append(vc)
}
self.bar.items = tabBarItems
return viewControllers
}
My viewDidLoad() Method
override func viewDidLoad() {
super.viewDidLoad()
alamoget()
self.dataSource = self
self.bar.location = .top
}
Please Help me
Still not enough code to get how you are using the datasource, but anyway
We need to reload tabs right after new data received:
var arrRes: [[String:AnyObject]] = [] {
didSet{
reloadTabs()
}
}
func reloadTabs(){
//if you have an additionl datasource array, we will prepare a new
guard let controllers = viewControllers(forPageboyViewController: YourPageboyViewController) else{
return
}
//then we need to reload bars in the main queue
DispatchQueue.main.async{ [weak self] in
self?.reloadPages()
}
}
If the method viewControllers(forPageboyViewController pageboyViewController: PageboyViewController) is using as a data sourse, just add reloadPages() inside the alamofire completion and you don't need to add any other code:
func alamoget() {
Alamofire.request("URL").responseJSON(completionHandler: { (responseData) in
if ((responseData.result.value) != nil) {
let swiftyJSONVar = JSON(responseData.result.value!)
if let resData = swiftyJSONVar["DayDescrList"].arrayObject {
self.arrRes = resData as! [[String:AnyObject]]
DispatchQueue.main.async{ [weak self] in
self.reloadPages()
}
}
}
})
}

Cannot convert value of type 'UIImage' to expected argument type 'String'

I am lost, is there any alternative?
let swiftCourse = Course(buttonImage: #imageLiteral(resourceName: "cover_developer"),
title: "Become a Developer",
instructor: "Duc Tran",
featureImage: #imageLiteral(resourceName: "developer"),
introductionVideoURL: URL(String: "https://www.youtube.com/watch?v=Inn2K-V3NFI"),
description: "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.")
The way your class Course is set up, presumably it is expecting a String.
Change the argument in the constructor to simply "cover_developer".
Replace your code and try:
let swiftCourse = Course(buttonImage:"cover_developer",
title: "Become a Developer",
instructor: "Duc Tran",
featureImage: "developer",
introductionVideoURL: URL(String: "https://www.youtube.com/watch?v=Inn2K-V3NFI"),
description: "Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.")

rake db:seed for some reason doesn't want to build association

I have this code in seeds.rb:
user = User.create({email: "test#mail.com", login:"test_account", password: "password123"})
article=user.articles.build({:name=>"Test Article",
:description=>"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
:body=> "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." ,
:approved => true})
article.save!
But when I go to console:
2.1.1 :001 > Article.last
Article Load (0.8ms) SELECT "articles".* FROM "articles" ORDER BY "articles"."id" DESC LIMIT 1
=> #<Article id: 15, name: "Test Article", description: "Lorem ipsum dolor sit amet, consectetur adipisicin...", body: "Lorem ipsum dolor sit amet, consectetur adipisicin...", approved: true, user_id: nil, created_at: "2016-01-30 22:55:58", updated_at: "2016-01-30 22:55:58">
It has user_id equal to nil, which is not what I expect.
Strange thing. I can change syntax and use user_id instead of build method.
But when I add :user_id => user.id it is still nil, if I use :user_id => User.last.id nil again, but when I add :user_id => 1 or any manual value it works. As If my last user had id nil, but it has id 2.

Rails: Keep simple_format from adding line breaks to lists?

Here's the input HTML:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
If I pass that through Rails' simple_format the output is:
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p>
<p><ul>
<br /> <li>Item 1</li>
<br /> <li>Item 2</li>
<br /> <li>Item 3</li>
</ul></p>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
Notice the <br />'s before each list item.
How can I get simple_format to not do that?
Ultimately what I want to do is add paragraph tags around content that isn't already wrapped in some sort of tag (ie. blockquote, ul, ol).
I hit the same problem. Here's how to solve it!
Wrap the simple_format output in a div like this:
<div class="single-spacing">
<%= simple_format #your_content %>
</div>
Then add this to your CSS file:
.single-spacing {
ul br {
display: none;
}
}
Or, when you actually want some br inside a list, you can add this CSS instead:
.single-spacing{
ul li br:first-child, ol li br:first-child {
display: none;
}
}
I tried to add this as a class to the simple_format itself (which is an option), but it didn't work for some reason. Putting it in a DIV does.
Not sure why simple_format adds these extra 's to a simple list, but hey ho.
Michael
As far as i'm aware, simple_format is designed to just work around line breaks '\n' (which are created when you press the enter key)
simple_format creates a <br /> for \n and <p> for \n\n
simple_format is not really designed to work with existing html input but more for text_area fields from databases and text strings etc.
see rails docs for examples: ActionView - simple_format
A couple of suggestions could be just wrap your entire input using content_tag:
<%= content_tag :p, :class => "strong" do -%>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<% end -%>
or maybe if possible format your html without linebreaks:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<ul> <li>Item 1 </li> <li>Item 2</li> <li>Item 3</li> </ul>
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
These are both pretty hackish, the best solution would be to have all the input stored as html before it gets called to be displayed. But not knowing how your obtaining the input, it is hard to suggest a way to do that.
You can try to disable sanitize param
simple_format html_input, {}, sanitize: false}
and it will work, but you should keep in mind there is no sanitize

Resources