Show first ten characters, expand on click (or hover)
Here is a pure CSS solution. It's a bit clumsy, but jquery not required
pre {
width: 10em;
height: 1em;
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
background-color: lightgreen;
border-radius: 8px;
border: 2px solid #6c6;
transition: width 1s ease;
}
pre:hover {
width: 100%;
height: auto;
overflow: auto;
text-overflow: clip;
}
<pre>
Traceback (most recent call last):
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 69, in execute_job_and_create_log
output = self._execute_job_and_create_log()
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 127, in _execute_job_and_create_log
return self.execute_job_and_create_log__ftp()
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 133, in execute_job_and_create_log__ftp
return self._execute_job_and_create_log__ftp()
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 140, in _execute_job_and_create_log__ftp
port=self.job_group.remote.port, session_factory=SessionOnPort) as host:
File "/home/foobar_cok_p/lib/python2.7/site-packages/ftputil/host.py", line 72, in __init__
self._session = self._make_session()
File "/home/foobar_cok_p/lib/python2.7/site-packages/ftputil/host.py", line 135, in _make_session
session = factory(*args, **kwargs)
File "/home/foobar_cok_p/lib/python2.7/site-packages/ftputil/error.py", line 151, in __exit__
raise FTPOSError(*exc_value.args, original_exception=exc_value)
FTPOSError: [Errno 110] Timeout
Debugging info: ftputil 3.4, Python 2.7.13 (linux2)
</pre>
You could hide the pre's text by adding following CSS / class:
.hidden {
text-overflow: ellipsis;
width: 100px;
overflow: hidden;
white-space: nowrap;
}
To achive the desired behaviour, you could toggle this class on click.
$('pre').click(function() {
$(this).toggleClass('hidden')
})
Here is a working example:
https://codepen.io/anon/pen/PvQJxr
Try using details
and summary
. Its very easy and fast to implement.
Also you don't have to handle any click events or css classes or anything else.
Check out this snippet:
let text = $("pre").html()
let header = text.split('\n')[0] // The header is the first line
text = text.substr(header.length); // The text everything besides the first line
// Set the html inside of the pre tag to a details/summary tag combo
$("pre").html(`<details>
<summary>${header}</summary>
${text}
</details>`)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<pre>
Traceback (most recent call last):
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 69, in execute_job_and_create_log
output = self._execute_job_and_create_log()
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 127, in _execute_job_and_create_log
return self.execute_job_and_create_log__ftp()
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 133, in execute_job_and_create_log__ftp
return self._execute_job_and_create_log__ftp()
File "/home/foobar_cok_p/src/foobar/foobar/models/job.py", line 140, in _execute_job_and_create_log__ftp
port=self.job_group.remote.port, session_factory=SessionOnPort) as host:
File "/home/foobar_cok_p/lib/python2.7/site-packages/ftputil/host.py", line 72, in __init__
self._session = self._make_session()
File "/home/foobar_cok_p/lib/python2.7/site-packages/ftputil/host.py", line 135, in _make_session
session = factory(*args, **kwargs)
File "/home/foobar_cok_p/lib/python2.7/site-packages/ftputil/error.py", line 151, in __exit__
raise FTPOSError(*exc_value.args, original_exception=exc_value)
FTPOSError: [Errno 110] Timeout
Debugging info: ftputil 3.4, Python 2.7.13 (linux2)
</pre>