Testing
Objectives
- Setup our sample project for testing
- Discuss types of tests
- Write tests using PyTest
- Run the test suite
- Practice test driven development
- Check the test coverage of our project
Duration: 60 minutes
Testing is the only way to keep your code base maintained on multiple versions of Python, ensure its accuracy against known cases, and prevent regressions. In this lesson, we’ll go over the basics to testing, setup a test suit on our project, run it locally, and then run it on TravisCI. Finally, we’ll check the test coverage on our project.
Add (canned) library code to repository
For us to write tests, we’ll need come code to test. To save time, we’ve provided code for a simple library in the tutorial’s repository.
- Download the zip of the github repository (or clone if you prefer) `https://github.com/jrleeman/SettingUpOpenSource
- Copy the library folder
hugs
andsetup.py
into the base of your repository. - Commit and push this with
git add -A
, thengit commit -m "Adding library code"
The hugs
library (hugely useful geoscience stuff)
is a demo library that we’ve created for this tutorial. It contains
some geology/geophysics and atmospheric science equations and plots
that we can write tests for.
Activate and install hugs
- Activate the environment we created for the workshop
conda activate suos
If you didn’t setup the environment before we started, runconda env create
in the root of the repository. - In the base directory of the repository, install an editable version of the
hugs library (uses
setup.py
) withpip install -e .
Writing tests with PyTest
PyTest is one of the most commonly used Python testing frameworks. We are
going to cover the basic concept of test writing and explore the test
coverage of the hugs
library.
There are many types of software testing and schools of thought on it, but here we’ll define a few terms and how we’ll be using them in the context of this tutorial.
Unit Testing - Testing a single unit of code (function, method, etc) for the correct or expected outputs.
Integration Testing - Testing that multiple segments of code can function together as expected.
Regression Testing - Testing that previously developed functionality or bug fixes still function as expected.
Another buzz-word is test-driven-development (TDD). This is the process of writing the test for the expected behavior and API before development of the code. For example, writing the test for the correct output of a function before fixing a reported bug.
- First we need to install
PyTest
. Do this withconda install PyTest
- Verify your installation with
pytest --version
Pytest looks for files named test*.py
and will run the functions named
test*
in those files.
- Run the current test suite with
pytest
and observe the results. - Change a test result so that the tests will break and run again to see what a test failure looks like.
Creating Tests
Activity
- Write a test for the function
get_wind_components
to verify that it works with scalar values for the speed and direction. - Write another test for
get_wind_components
to verify that it works on an array of values. Write the array to test every 45 degrees of the compass including the end-member cases of 0 degrees and 360 degrees.
Solution
def test_wind_comps_basic():
"""Test the basic wind component calculation."""
speed = np.array([4, 4, 4, 4, 25, 25, 25, 25, 10.])
dirs = np.array([0, 45, 90, 135, 180, 225, 270, 315, 360])
s2 = np.sqrt(2.)
u, v = get_wind_components(speed, dirs)
true_u = np.array([0, -4 / s2, -4, -4 / s2, 0, 25 / s2, 25, 25 / s2, 0])
true_v = np.array([-4, -4 / s2, 0, 4 / s2, 25, 25 / s2, 0, -25 / s2, -10])
assert_array_almost_equal(true_u, u, 4)
assert_array_almost_equal(true_v, v, 4)
def test_wind_comps_scalar():
"""Test wind components calculation with scalars."""
u, v = get_wind_components(8, 150)
assert_almost_equal(u, -4, 3)
assert_almost_equal(v, 6.9282, 3)
Other Common Tests
Test that a warning is raised
Some functions will raise warnings and we want to ensure that indeed that is
happening. We can use pytest.warns
to check this. It’s used as a context
manager.
Activity
- Add a test to verify that the
get_wind_components
function to verfiy that a warning is raised when the wind direction is greater than 360 degrees. Don’t forget to verify that your test is working by first by using values that will not raise a warning.
Solution
def test_warning_direction():
"""Test that warning is raised wind direction > 360."""
with pytest.warns(UserWarning):
get_wind_components(3, 480)
Test that an exception is raised
In cases where an exception is raised, we want to check that it indeed is as
well. We do this similarly to the warning check using pytest.raises
as a
context manager.
Activity
Add a test to ensure that a ValueError
is raised on the snell_angle
function
when the top layer velocity is zero.
Solution
def test_snell_zero_velocity_top():
"""That that a value error is raised with a zero velocity top layer."""
with pytest.raises(ValueError):
snell_angle(12, 0, 4000)
Coverage with coverage.py and pytest-cov
We also want to know what the test coverage of our library is - have we missed anything? We can use coverage.py to check this and pytest-cov lets us do run this tool on all of our test suite and see the total library coverage.
- Run
py.test --cov=hugs
- Add a function with no tests
- Run it again
- Remove the added function


{% extends "registration/base.html" %} {% load i18n %} {% block title %}{% trans 'Check your email account' %}{% endblock %} {% block page_title %}{% trans 'Check your email account' %}{% endblock %} {% block registration_content %}
{% trans "You will receive an email and will have to click a link in that email to complete your registration." %}
{% endblock %}


Code of Conduct for PDX R Meetup
PDX R Meetup is dedicated to providing a harassment-free meetup experience for everyone regardless of gender, gender identity and expression, sexual orientation, disability, physical appearance, body size, race, age or religion. We do not tolerate harassment of meetup participants in any form. Sexual language and imagery is not appropriate for any meetup venue, including talks. PDX R meetup participants violating these rules may be sanctioned or expelled from meetup events at the discretion of the meetup organizers.
 Participants asked to stop any harassing behavior are expected to comply immediately.
If a participant engages in harassing behavior, the meetup organizers may take any action they deem appropriate, including warning the offender or expulsion from the meetup with no refund. If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of the meetup organizers immediately:
- Ted Laderas<EMAIL_ADDRESS>503-481-8470).


Located on the eastern side of a peninsula on the North west corner on Tasmania. It is an historic town with many preserved buildings. It is a fishing port.
Position 40° 46'09"S, 145° 18'04"E (harbour)
photo from www.mast.tas.gov.au
There is a boat harbour here but beware of the cross currents at its narrow entrance.
Ask the Harbour Master where to berth.
Water is available on the main jetty.
Fuel can be obtained from Stanley Fish Tel: 61 (3) 6458 1153 or Arnolds Fuel Tel: 0419 580 729.
Last updated April 2016,


A Representation is defined as the perceptible form of the information carried by a Business Object.
Representations (for example, messages or documents) are the perceptible carriers of information that are related to Business Objects.
A single Business Object can have a number of different Representations, but a Representation always belongs to one specific Business Object. A Representation may realize one or more Business Objects. A Meaning can be associated with a Representation that carries this Meaning.
The name of a Representation is preferably a noun.
Business. Passive Structure.
Paper Bill, Request Form, Claim Form, Online Form.


CM to intervene to quell rebellion in Hosapete
by DHNSChief Minister B S Yediyurappa is likely to intervene to quell a rebellion in Vijayanagar Legislative Assembly constituency ahead of the December 5 byelection.
The efforts of Deputy Chief Minister Govind Karjol, Health Minister Sriramulu and BJP general secretary N Ravikumar’s have failed to convince rebel candidate Kaviraj Urs to withdraw his nomination papers.
Urs has not lent ear to the aides of the chief minister who have assured him that he would be appointed as the chairman of a board or corporation. Hence, the chief minister is said to be arriving here soon to convince Urs.
Earlier, Urs had made his displeasure public when the party gave ticket to Anand Singh for the byelection. He later filed nomination papers as an independent candidate on Monday.
The party leaders had calculated that Urs would maintain distance from the party. But they are now worried as he has entered the fray.
Meanwhile, former MLA H R Gaviyappa and BJP Mahila Morcha state president Rani Samyuktha are also not taking part in the party’s activities. Gaviyappa has not entered the constituency after Singh received the party’s ticket. Gaviyappa had earlier rejected the chairmanship of Small Industries Corporation too. Minister Sriramulu’s efforts to convince him and Samyuktha have gone vain.


DROP TABLESPACE
Section: SQL Commands (7)Updated: 2012-08-14
Index Return to Main Contents
NAME
DROP TABLESPACE - remove a tablespaceSYNOPSIS
DROP TABLESPACE [ IF EXISTS ] tablespacename
DESCRIPTION
DROP TABLESPACE removes a tablespace from the system.
A tablespace can only be dropped by its owner or a superuser. The tablespace must be empty of all database objects before it can be dropped. It is possible that objects in other databases might still reside in the tablespace even if no objects in the current database are using the tablespace. Also, if the tablespace is listed in the temp_tablespaces setting of any active session, the DROP might fail due to temporary files residing in the tablespace.
PARAMETERS
- IF EXISTS
- Do not throw an error if the tablespace does not exist. A notice is issued in this case.
- tablespacename
- The name of a tablespace.
NOTES
DROP TABLESPACE cannot be executed inside a transaction block.
EXAMPLES
To remove tablespace mystuff from the system:
DROP TABLESPACE mystuff;
COMPATIBILITY
DROP TABLESPACE is a PostgreSQL extension.
SEE ALSO
CREATE TABLESPACE [create_tablespace(7)], ALTER TABLESPACE [alter_tablespace(7)]
Index
This document was created by man2html, using the manual pages.
Time: 05:34:15 GMT, December 24, 2015


| Cockpit Guide |
|---|
cockpit.js: Spawning Processescockpit.js: Spawning Processes — Spawning processes or scripts |
This is the API for spawning a process and receiving its output, as well as exit codes.
process = cockpit.spawn(args, [options])
Spawns a process on the system.
The args
should be an array starting with the executable and
containing all the arguments to pass on the command line. If args
is a string then it is interpreted as an executable name. The optional
options
argument is a javascript plain object and can contain
any of the following fields:
|
If set to |
|
The directory to spawn the process in. |
|
Controls where the standard error is sent. By default it is logged
to the journal. If set to |
|
The remote host to spawn the process on. If an alternate user or port is
required it can be specified as |
|
An optional array that contains strings to be used as
additional environment variables for the new process. These are
|
|
Launch the process in its own PTY terminal, and send/receive terminal input and output. |
|
Batch data coming from the process in blocks of at least this size. This is not a guarantee. After a short timeout the data will be sent even if the data doesn't match the batch size. Defaults to zero. |
|
The timeout for flushing any cached data in milliseconds. |
|
Set to Set to |
The spawned process is a promise that will complete if the process exits successfully, or fail if there's a problem. Some additional methods besides the standard promise methods are documented below.
The standard output of the process is made available via the spawned process object. Any non-UTF8 output from the process will be coerced into textual form. It is highly recommended that only textual output be produced by the command. The standard error is logged to the journal.
process = cockpit.script(script, [args], [options])
Run a shell script on the system.
This function spawns a Bourne shell script
process. The full text of the /bin/sh
shell script should be passed in as
the first argument. The args
can be an array of arguments, not including
the executable, which are passed to the script as $1
, $2
and
so on. Shebang options are not used or respected.
The options
is an optional javascript plain object and can include
any of the fields listed for the
cockpit.spawn()
function.
The spawned process is a promise that will complete if the script exits successfully, or fail if there's a problem. Some additional methods besides the standard promise methods are documented below.
The standard output of the process is made available via the spawned process object. Any non-UTF8 output from the process will be coerced into textual form. It is highly recommended that only textual output be produced by the command. The standard error is logged to the journal by default.
process.done(function(data[, message]) { ... })
This is a standard promise method. It sets up a handler to be called when the process finishes successfully.
The data
argument contains the standard output of the process.
If it a string, unless the process was opened in binary mode, in which case the
data
is an array of bytes. If a
process.stream()
handler is set up, then any standard output data consumed by the handler will not
be included in the data
argument.
If the process was spawned with the "err"
option set to
"message"
then the second argument will contain the standard error
output of the process.
process.fail(function(exception[, data]) { ... })
This is a standard jQuery promise method. It sets up a handler to be called when the process fails, terminates or exits.
The exception
object passed to the handler can have the
following fields:
|
A message describing the exception. If the process was spawned with
the |
|
A problem code string when
a problem occurred starting or communicating with the process. This is |
|
The numeric exit status of the process. This is |
|
A string representing a unix signal that caused the process to terminate.
This is |
If the process actually ran and produced output before failing, it will be available in
the data
argument. Otherwise this argument will be undefined
.
process.always(function() { ... })
This is a standard jQuery promise method. It sets up a handler to be called when the process completes, whether it exits successfully, fails, terminates, or exits with a failure.
process.stream(function(data) { ... })
This sets up a handler to be called when the process has standard output. The handler will be called multiple times. The handler will be called regardless of whether the process ends up exiting successfully or not.
Only one handler may be registered at a time. Registering an additional handler
replaces the previous one. The handler receives either string data
or
an array of binary bytes as its argument. A stream handler may return a number, which
indicates the number of characters or bytes consumed from data
. Any data
not consumed will be included again the next time the handler is called.
If a process.stream()
handler is set up, then the
process.done()
handlers will
only get any remaining data not consumed by the stream handler.
process.input(data, [stream])
This method writes data
to the standard input of the process.
If data
is null
or undefined
it is not sent.
The data
should be a string or an array of bytes if the process was
opened in binary mode.
If stream
is set to true
then this function may be
called again with further input. Otherwise the standard input of the process
is closed.
process.close([problem])
Close the process by closing its standard input and output. If problem
is
specified it should be a standard
problem code string. In this case the
process will be terminated with a signal.


15-744 Announcements
Announcements will be posted here.
- 5/01: Projects due 05/14
Project writeups are due 05/14 to make sure we have a few days to grade them before CSD black friday. Please disregard the earlier due date of 05/09.
- 4/16: Tools homework 2 update
If you haven't done part of of hw2 yet, we suggest pinging the host eep.lcs.mit.edu instead of www.cs.cmu.edu. www.cs seems to have a per-host IP ID counter, so it worked in the tests we ran from a single machine, but doesn't work when pinging from two hosts.
- 4/9: Tools homework 2 online
The second tools homework is now online. Note that scriptroute does not want to compile on andrew linux machines. Use either your own or a CS linux machine if you have problems.
- 4/1: Syllabus updated
The rest of the semester is filled in.
- 3/19: midterm and ps2 solutions
Midterm and problem set 2 solutions have been posted. (If you have not already, you can pick up your HWs and midterms from Jeff.)
- 3/18: scheduling project meetings
Please contact Barbara Gardillo, the course secretary, with the times your group can meet next Wednesday (bag AT cs DOT cmu DOT edu).
- 2/26: syllabus updated
The mobility lecture was moved to after spring break and the Best of Broadcast lecture inserted.
- 2/21: ps1 solutions annoted with points
Also, Q7 and Q9 had typos. Fixed now.
- 2/15: Bug fixed in ps1 solutions
The solution for TCP Tahoe was buggy. It's fixed.
- 2/14: Problem Set 2 is available
Check the assignments link.
- 2/14: ns Tutorial Recitation
Jeff will hold a short tutorial on ns this Friday at 3:00-4:30PM in WeH 5409.
- 2/13: Link for CSZ'92 fixed
The CSZ'92 postscript was buggy. The link now points to a verified good PDF.
- 2/7: Project proposals due 2/14.
The project proposals are due a week from today.
- 2/2: RED paper link updated
The paper link for RED has been updated. The postscript was buggy; the newly linked PDF is happy.
- 2/1: Office hour time selection on discussion site
Now that the class membership is a bit more stable, there's a post on the discussion site where people should express their preferences for office hour slots, if you have any. We'll have the actual hours established by Monday.
- 1/30: Problem set 1 small change
In section E, please draw the THREE RTTs following the loss, not just one. The problem set has been updated.
- 1/29: Problem set 1 available
The first theory problem set is now online.
- 1/28: Reading for Monday: Just a subset of GR
For Monday, you do NOT need to read all of GR yet. We\'ll be returning to this paper a bit later. For monday, please read the intro, section 2, skim over 6, and read the conclusion.
- 1/26: Announcements RSS feed now available
You can now subscribe to the 15-744 announcements as an RSS feed.
- 1/22: Fundamentals Review Recitation
The recitation for reviewing network fundamentals will be this Friday, 1/26 from 3-4:30PM in room WeH 4615A. The slides are available here, and more can be found on last fall's 15-441 page.
Last updated: 2019-07-18 02:06:52 +0800
[validate xhtml]


A special thanks to Death to the Stock Photo for providing the photographs that you see in this template. Visit their website to become a member.
A special thanks to Death to the Stock Photo for providing the photographs that you see in this template. Visit their website to become a member.
Turn your 2D designs into high quality, 3D product shots in seconds using free Photoshop actions by PSDCovers! Visit their website to download some of their awesome, free photoshop actions!
A special thanks to Death to the Stock Photo for providing the photographs that you see in this template. Visit their website to become a member.
This template features the 'Lato' font, part of the Google Web Font library, as well as icons from Font Awesome.


Eleven percent (11%) of the DB2 9 Fundamentals certification exam (Exam 730) is designed to test your knowledge about the mechanisms DB2 uses to protect data and database objects against unauthorized access and modification. The questions that make up this portion of the exam are intended to evaluate the following:
Your ability to identify the methods that can be used to restrict access to data stored in a DB2 database
Your ability to identify the authorization levels used by DB2
Your ability to identify the privileges used by DB2
Your ability to identify how specific authorizations and/or privileges are given to a user or group
Your ability to identify how specific authorizations and/or privileges are taken away from a user or group
This chapter is designed to introduce you to the various authorizations and privileges that are available with DB2 9 and to the tools that are used to give (grant) one or more of these authorizations and/or privileges to various users and groups. This chapter will also show you how to revoke one or more authorizations or privileges a user or group currently holds.


David Sundelius
MSc. Computer Science - algorithm, languages and logic from Chalmers University of Technology
Certified Professional Scrum Master I (PSM I), Professional Product Owner I (PSPO I) and Scaled Professional Scrum (SPS)
Agile consultant for Knowit System Development - currently working as a Scrum master and software architect
Contact information:
<EMAIL_ADDRESS>(+46)73-2435711
@ Copyright David Sundelius 2016


About
Hello. I am Ph.D. candidate in Users & Information Lab, KAIST. My research interest is in programming education, in particular, I aim to develop a novel system for effective programming education in a large scale.
My previous research includes a programming education platform that helps TAs understand the status of student with data-driven approach (L@S 2016) and an effective peer assessment tool for CS education that provides fine-grain code history visualization (CSCW 2017).
Education
- KAIST, Ph.D., School of Computing, 2017 - Present
- KAIST, M.S., School of Computing, 2017
- KAIST, B.S., Computer Science, 2015
Work Experience
- Backend Lead & Co-founder, Elice Corp., Daejeon, Korea, 2015 - Present
- Backend Advisor, Tanker Fund Corp., Seoul, Korea, 2016 - Present
- Backend Lead, Tanker Fund Corp., Seoul, Korea, 2015
- Backend Lead, Brew Glass Corp., Daejeon, Korea, 2014
- Research Intern, KAIST Users & Information Lab, Daejeon, Korea, 2014.9 - 2015.2
- Research Intern, KAIST Artificial Intelligence & Probabilistic Reasoning Lab, Daejeon, Korea, 2014.7 - 2014.9
- Research Intern, KAIST Intelligent Systems & Neurobotics Lab, Daejeon, Korea, 2012.12 - 2013.7
- SWE Intern, Kakao Corp., Jeju, Korea, 2012
Publications (Google Scholar Page)
-
Cocode: Providing Social Presence with Co-learner Screen Sharing in Online Programming Classes(Impact Recognition Award)Proceedings of the ACM on Human-Computer Interaction Vol. 5, No. CSCW2 (CSCW 2021)ACM DL PDF
-
Pythonpad: Server-free Python Hands-on Exercise for Online Programming ClassesProceedings of the 52nd ACM Technical Symposium on Computer Science Education (SIGCSE 2021, Poster)ACM DL PDF
-
Detecting Contract Cheaters in Online Programming Classes with Keystroke DynamicsProceedings of the Seventh ACM Conference on Learning @ Scale (L@S 2020, Work-In-Progress)ACM DL PDF
-
Cocode: Co-learner Screen Sharing for Social Translucence in Online Programming CoursesExtended Abstracts of the 2020 CHI Conference on Human Factors in Computing Systems (CHI 2020, Interactivity)ACM DL PDF
-
Non-Linear Editing of Text-Based ScreencastsProceedings of the 31th Annual ACM Symposium on User Interface Software & Technology (UIST 2018)ACM DL PDF Slides Code
-
Elicast: Embedding Interactive Exercises in Instructional Programming ScreencastsProceedings of the Fifth (2018) ACM Conference on Learning@Scale (L@S 2018)ACM DL PDF Slides Code
-
Non-Linear Editor for Text-Based ScreencastAdjunct Publication of the 30th Annual ACM Symposium on User Interface Software & Technology (UIST 2017, Poster)ACM DL PDF Poster
-
Eliph: Effective Visualization of Code History for Peer Assessment in Programming Education(Honorable Mention Paper Award)Proceedings of the 2017 ACM Conference on Computer Supported Cooperative Work and Social Computing (CSCW 2017)ACM DL PDF Slides
-
Eliph: Effective Visualization of Code History for Peer Assessment in Programming EducationCompanion of the 2017 ACM Conference on Computer Supported Cooperative Work and Social Computing (CSCW 2017, Demo)ACM DL PDF
-
Elice: An online CS Education Platform to Understand How Students Learn ProgrammingProceedings of the Third (2016) ACM Conference on Learning@Scale (L@S 2016, Work-In-Progress)ACM DL PDF Poster
-
Elivate: A Real-Time Assistant for Student and Lecturer on the Online CS Education Platform.Proceedings of the Third (2016) ACM Conference on Learning@Scale (L@S 2016, Demo)ACM DL PDF
Talks / Presentations
- 2018. 8. 1, HCI@KAIST 2018 Annual Summer Workshop, Daejeon, Korea. Speaker.
- 2018. 6. 28, L@S 2018, London, UK. Speaker.
- 2017. 10. 24, UIST 2017, Quebec, Canada. Speaker.
- 2017. 7. 20, HCI@KAIST 2017 Annual Summer Workshop, Daejeon, Korea. Speaker.
- 2017. 2. 28, CSCW 2017, Portland, US. Speaker.
References
- Alice Oh, Associate Professor, School of Computing, KAIST
Contact
Jungkook Park
pjknkda (at) kaist.ac.kr
Ph.D. Candidate
KAIST
Daejeon, Republic of Korea


Across: 1. Dunderhead's film absence... in lieu, seconds appearing (8) 5. Inclined to have deed polls reversed, after duplicated letters rejected (6) 10. Damaged ball 18, now ruined (5) 11. Beating was frightfully good - by nil! (9) 12. Mostly bad flush, frightfully withdrawn (7) 13. System: bar goods entering (7) 14. Frightfully bad? (8) 16. Provokes removal of new balls (5) 19. Frightfully bad? (5) 21. Frightfully good? (8) 24. Frightfully good? (7) 26. Ford set out to achieve a thaw (7) 27. Frightfully addresses, then tears off (9) 28. Grow and cut down, so they say (5) 29. Harvests slide frightfully after your first (6) 30. After May's first outing, they come back the same, and they mean the same (8) Down: 1. Providing him bib... easiest with drink (6) 2. Confusion of blokes finding hotel in support of library (9) 3. Perhaps pine for nice change (7) 4. Slander in periodical I believed (5) 6.  About 60% of porridge cooked in advance (5) 8. Frightfully good having hospital function as animal accommodation (8) 9. Grandpa perhaps said to abstain (8) 15. Smashed top of tall tree ... frightfully bad outside! (8) 17. Main toys I played with caused ill feeling (9) 18. With TV, can lay about not really paying attention (8) 20. Rode lap frantically with frightfully fast beast (7) 22. Suggest turning on barbeque (7) 23. Pressure on second lock (6) 25. Free Riesling offer is worrying (5) 26.


{% comment "License" %} % Copyright (c) 2018 ISP RAS (http://www.ispras.ru) % Ivannikov Institute for System Programming of the Russian Academy of Sciences % % Licensed under the Apache License, Version 2.0 (the "License"); % you may not use this file except in compliance with the License. % You may obtain a copy of the License at % % http://www.apache.org/licenses/LICENSE-2.0 % % Unless required by applicable law or agreed to in writing, software % distributed under the License is distributed on an "AS IS" BASIS, % WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. % See the License for the specific language governing permissions and % limitations under the License. {% endcomment %} {% load i18n %} {% if TableData|length %}
| {% trans 'Files' %} | {% trans 'Line coverage' %} | {% trans 'Function coverage' %} |
|---|


|
ViennaCL - The Vienna Computing Library
1.5.2
|
base functor class for traversing a statement More...
#include <helpers.hpp>
Public Member Functions | |
| void | call_before_expansion () const |
| void | call_after_expansion () const |
base functor class for traversing a statement
| void call_after_expansion | ( | ) | const [inline] |
Reimplemented in expression_generation_traversal.
| void call_before_expansion | ( | ) | const [inline] |
Reimplemented in expression_generation_traversal.


904 South Erie HighwayHamilton, OH 45011
P:<PHONE_NUMBER>
E<EMAIL_ADDRESS>Use this form to send us an email. We can help answer any questions you have and welcome any feedback you would like to give.


@import model.Competition @import football.model.KnockoutSpider @(competition: Competition, knockoutStage: KnockoutSpider)( implicit request: RequestHeader, context: model.ApplicationContext ) @football.views.html.fragments.componentStyles()


Thank you for purchasing Smart Forms. If you have any questions that are beyond the scope of this help file, please feel free to email me via my Codecanyon public profile page contact form here. Thank you so much once again, lets get started...
The forms use a single main CSS file which contains the general styling of all form elements as well as handling responsiveness through CSS3 Media Queries! In case you have any CSS resets such as Eric Mayers or Normalize in your website or web application, please make sure the form CSS files are loaded after / below the CSS file that contains your CSS reset rules to avoid any changes that may be caused by the reset, however this is still a rare case as the forms have their own reset rules :-). Additional optional stylesheets are used to style themes, we shall cover this in detail later on...
The forms do not depend on any images, fontawesome icons or javascript to fuction, they are entirely built using CSS3 and HTML5 therefore the fontawesome icons styleet and javacripts are all optional for those who need to use icons or javascript for purposes of ajax submition, form validation, masking or using the date-picker widget!
Internet Explorer Browser version 8 (IE8) has an additional fallback stylesheet for better enhancement and compartibility purposes, please note that this style is loaded via conditional comments, with an IF statement structure. For those who are using these forms to build your own custom forms, you will need additional Javascript files included via contitional comments, only for supporting placeholder attribute in old IE browsers IE9 and below, you can use any other placeholer plugins especially those that are not library dependent (ones that don't depend on libraries such as jQuery). If you don't need native placeholder support, just drop the contitional js files.
When you open the SOURCE folder, you will find 3 folders (dark, elegant and flat), each of these folder represent a style, each style has its different themes. Furher inside each style folder are three folders again! ( ajax, javascript and templates ).
TIP: For purposes of being organized, create a folder on your desktop or anywhere, copy the css, js, images folders from your chosen / preferred theme and paste them to your created folder - Next choose a template from the list of templates copy it to your folder and start to modify it to fit your needs, later we shall discuss how you can add validation and even some PHP to make it a fully working form.
In brief, your basic CSS and HTML should look like the codes below, before you start putting any form elements to the canvas, next we shall look at how to include some form elemnts:
<!DOCTYPE html>   <title> Smart Forms - Form Title </title> <meta charset="utf-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <link rel="stylesheet" type="text/css" href="css/smart-forms.css"> <link rel="stylesheet" type="text/css" href="css/font-awesome.min.css">
 <title> Smart Forms - Form Title </title> <meta charset="utf-8">  <meta name="viewport" content="width=device-width, initial-scale=1.0">  <link rel="stylesheet" type="text/css" href="css/smart-forms.css"> <link rel="stylesheet" type="text/css" href="css/font-awesome.min.css">
Inside the body section, wrap the form into two sections

The form body and form footer are inside the form tag, the form header section is above the form tag like below!

Get in touch

 <form method="post" action="/" id="contact">

 <button type="submit" class="button btn-primary">Submit</button>
 </form>

A simple contact form has markup that looks like below!

Get in touch

 <form method="post" action="/" id="contact">

 Your Personal Names  <input type="text" name="names" id="names" class="gui-input" placeholder="Enter name...">

 Your Email Address  <input type="email" name="email" id="email" class="gui-input"<EMAIL_ADDRESS>

 Telephone / Mobile   <input type="tel" name="telephone" id="telephone" class="gui-input" placeholder="Enter telephone...">

 Message / Comment   <textarea class="gui-textarea" id="comment" name="comment"></textarea>   Hint: Please enter between 80 - 300 characters.

 <button type="submit" class="button btn-primary">Submit</button>
 </form>

To build a form do the following

Get in touch

 <form method="post" action="/" id="contact">

 <button type="submit" class="button btn-primary">Submit</button>
 </form>

Input elements include all text input elements including the new HTML5 custom inputs, such as text, password, tel, search, email, url, the markup for inputs looks as follows.
Create an input type text, wrap it inside a label with a class field, thats it

  <input type="text" class="gui-input" placeholder="Input no icon">

  <input type="text" name="firstname" id="firstname" class="gui-input" placeholder="Text input icon left">

  <input type="text" name="firstname" id="firstname" class="gui-input" placeholder="Text input icon left">

Place the tooltip markup immediately below the input, please note that tooltips can be in 6 directions, left, left-top, left-bottom, right, right-top, right-bottom. You choose whichever suits your design and style...
The markup above will create an input type text field below with a label above it, when you click on the label text, the input will be focused because the label for="names"
is the same as the input id="names"
. The words Enter name...
are put there with the help of the new HTML5 form placeholder
attribute, please note that this attribute is only available in modern browsers, that is why we included the jQuery placeholder plugin to have it available in old Internet Explorer Browsers versions 9 and below.

 Icon left + tooltip left  <input type="text" name="names" id="names" class="gui-input" placeholder="Enter name...">  Hey buddy! iam a left tooltip. You notice me now huh?

To create another input but of a diffent type such as email, the markup will change a little bit, on the type="email"
part and the for=" "
for the label and id=" "
to match the label, and even the placeholer=" "
text will of course change to match your desired text!
@
, when you tap an input such as number, the touch pad keys change to numeric, so that somehow makes a huge difference and Improves the user experience for those viewing your forms on smart phones / mobile devices and tablets.

  <input type="email" name="email" id="email" class="gui-input" placeholder="Email input">

  <input type="tel" name="mobile" id="mobile" class="gui-input" placeholder="Telephone input">

  <input type="url" name="website" id="website" class="gui-input" placeholder="URL input">

  <input type="password" name="password" id="password" class="gui-input" placeholder="Password input">

  <textarea class="gui-textarea" id="comment" name="comment" placeholder="Text area"></textarea>   Hint: This is a hint below the textarea

  <select id="country" name="country"> <option value="">Select </option> <option value="AL">Albania</option> <option value="DZ">Algeria</option> <option value="AD">Andorra</option> </select>

  <select id="country" name="country"> <option value="">Select </option> <option value="AL">Albania</option> <option value="DZ">Algeria</option> <option value="AD">Andorra</option> </select>

  <select id="country" name="country" multiple> <option value="">Select </option> <option value="AL">Albania</option> <option value="DZ">Algeria</option> <option value="AD">Andorra</option> </select>

The markup for file-input / browser is also somehow different, its markup looks like below

   Choose File  <input type="file" class="gui-file" name="file1" id="file1" onChange="document.getElementById('uploader1').value = this.value;"> <input type="text" class="gui-input" id="uploader1" placeholder="no file selected" readonly>

For multiple file-inputs / browsers you will have to adjust the markup, for example the next uploader should look like this
NOTICE The name changed to name="file2"
and id="file2"
ALSO the on change and input below id changed to onChange="document.getElementById('uploader2')
and id="uploader2"
so the next uploader should also have those values changed for consistency.

   Choose File  <input type="file" class="gui-file" name="file2" id="file2" onChange="document.getElementById('uploader2').value = this.value;"> <input type="text" class="gui-input" id="uploader2" placeholder="no file selected" readonly>

  <input type="radio" name="radio1" checked>  Radio Option 1   <input type="radio" name="radio1">  Radio Option 2

  <input type="checkbox" name="checkbox1" checked>  Checkbox Option 1   <input type="checkbox" name="checkbox1">  Checkbox Option 2

A toggle switch can be a radio option or a checkbox option element depending on what your preferences are, to make toggle switches, they also use HTML5 data attribute for the text so you can eaily replace the data-on="YES"
and data-off="NO"
text with your own text instead of hacking the CSS. Make sure to use is shorter text though, it makes the switch look prettier, the markup will look like this:

  <input type="checkbox" name="switch1" id="switch1" value="switch1">   Switch 1    <input type="checkbox" name="switch2" id="switch2" value="switch2">   Switch 2

If you need a cleaner way to add a rating widget to your forms you will use the star rating markup, it also supports hover back after selection. Please note that the star rating works best with fontawesome icons, the alternative would be using unicode characters however they don't look smooth in IE.

 Customization
 <input class="rating-input" id="r5" type="radio" name="custom" checked> Excellent <input class="rating-input" id="r4" type="radio" name="custom"> Good <input class="rating-input" id="r3" type="radio" name="custom"> Tried <input class="rating-input" id="r2" type="radio" name="custom"> Fair <input class="rating-input" id="r1" type="radio" name="custom"> Poor

Sometimes you need to create a form input element with a button, the smart widget will come to your rescue, it has 3 sizes which can easily be modified to suite your needs.

  <input type="text" name="sub3" id="sub3" class="gui-input" placeholder="Smart widget right 120">  <button type="submit" class="button"> Subscribe </button>

Buttons inlude all input buttons, button tag buttons, link (a) buttons, cancel buttons and any element you want to turn into a button. Buttons come in 8 color themes default grey, black, blue, green, purple, red, yellow and primary. To add a button, go to the form buttons section and add a button element then add a button class to it..
 <input type="submit" value="Button" class="button">  <button class="button"> Button </button>   Button
<button class="button btn-rounded"> Button Rounded </button>
<button class="button pushed"> Button Pushed </button>
<button class="button button-left"> Button Left </button> <button class="button button-right"> Button Right </button>
<button class="button btn-pointed button-left"> Pointed Button Right </button> <button class="button btn-pointed button-right"> Pointed Button Right </button>
<button class="button"> Button Default </button> <button class="button btn-primary"> Button Primary </button> <button class="button btn-red"> Button Red </button> <button class="button btn-blue"> Button Blue </button> <button class="button btn-black"> Button Black </button> <button class="button btn-yellow"> Button Yellow </button> <button class="button btn-purple"> Button Purple </button> <button class="button btn-green"> Button Green </button>

Info Notification
 ×

Success Notification
 ×

Warning Notification
 ×

Error Notification
 ×

.frm-row
to create horizontal groups of columns .colm
..section
class ..frm-row
and .colm
are available for quickly making grid form layouts. .colm
must immediately be followed by a column number or value such as .colm4
, so the entire class will look like this class ="colm colm4
" .colm4
colm colm6 pad-r30
"Where by .pad-r30
adds a 30px padding to the right of the column, for the left side you can use something like .pad-l30
, if you are using your own classes, use padding instead of margin, it works better. A combination of all columns in a row must add up to 12 for example:
Two equal columns 6+6 = 12
Two unequal columns 5+7 = 12
Six equal columns 2+2+2+2+2+2 = 12
Three equal columns 4+4+4 = 12

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm1

.colm colm8

.colm colm4

.colm colm4

.colm colm4

.colm colm4

.colm colm6

.colm colm6

Below is an example of a two column grid using 6+6=12, in case you need something like 3 columns them colm6 will change to colm4 which is 4+4+4=12

  <input type="text" name="firstname" id="firstname" class="gui-input" placeholder="First name...">

  <input type="text" name="lastname" id="lastname" class="gui-input" placeholder="Last name...">

I am loading different styles depending on requirements - however the common ones are smart-forms.css, and fontawesome.css other styles are used for theme purposes or widgets. The forms come with eight themes default grey, primary, blue, red, yellow, black, purple, green.
all the main styling is done inside this css file - you can edit or modify form elements and styles indied this file to suit your needs, it comes with the default theme which is primary green
You can change the form background image by changing the following styles
/* @backgrounds :: modify or add yours below ------------------------------------------------------------------- */ .darkbg{ background:#6C82A2 url(../images/dark.png) repeat fixed; } .woodbg{ background:#E6CCA6 url(../images/wood.png) repeat fixed; }
You can change the form width dimensions by changing the following styles, modify or create your own styles
.wrap-0{ max-width:952px; } .wrap-1{ max-width:852px; } .wrap-2{ max-width:652px; } .wrap-3{ max-width:452px; }
You can change the form header by changing the following styles
/* @form header section ----------------------------------------- */ .smart-forms .form-header{ overflow:hidden; position:relative; padding:25px 30px; -webkit-border-radius:5px 5px 0 0 ; -moz-border-radius:5px 5px 0 0 ; -o-border-radius:5px 5px 0 0 ; border-radius:5px 5px 0 0 ; } .smart-forms .form-header h4 { font-family:"Roboto", Arial, Helvetica, sans-serif; text-align:left; font-weight:300; font-size:32px; padding:0; margin:0; } .smart-forms .form-header h4 i { font-size:38px; position:relative; margin-right:10px; top:2px; } /* @header themes :: primary + lite ---------------------------------------------- */ .smart-forms .header-primary { background-color:#4ebd4a; border-top:1px solid #A7D065; border-bottom:5px solid #3c9b39; } .smart-forms .header-lite{ background:#F3F5FA; border-top:1px solid #A7D065; border-bottom:1px solid #D9DDE5; } .smart-forms .header-lite:before{ content:""; background-color:#4ebd4a; position:absolute; height:8px; z-index:1; top:0px; right:0; left:0; } .smart-forms .header-primary h4{ color:#fff; } .smart-forms .header-lite h4{ color:#5D6A87; padding-top:5px; }
You can change the form body and footer styles by changing the following styles, modify or create your own styles
/* @form body + footer ------------------------------------------------------------------- */ .smart-forms .form-body{ padding:40px 30px; padding-bottom:20px; } .smart-forms .form-footer { overflow:hidden; padding:20px 25px; padding-top:25px; background: #F5F5F5; background: #F5F5F5 url(../images/foobg.png) top left repeat-x; }
The form grid helps us to create complex forms with complex alignments, the grid styles are below
/* @form columns ----------------------------------- */ .smart-forms .frm-row .colm{ min-height:1px; padding-left:10px; padding-right:10px; position:relative; float:left; } .smart-forms .frm-row .colm1{width:8.33%;} .smart-forms .frm-row .colm2{width:16.66%;} .smart-forms .frm-row .colm3{width:25%;} .smart-forms .frm-row .colm4{width:33.33%;} .smart-forms .frm-row .colm5{width:41.66%;} .smart-forms .frm-row .colm6{width:50%;} .smart-forms .frm-row .colm7{width:58.33%;} .smart-forms .frm-row .colm8{width:66.66%;} .smart-forms .frm-row .colm9{width:75%;} .smart-forms .frm-row .colm10{width:83.33%;} .smart-forms .frm-row .colm11{width:91.66%;} .smart-forms .frm-row .colm12{width:100%; } .smart-forms .frm-row .colm1-5{width:20%;} .smart-forms .frm-row .colm1-8{width:12.5%;}
The forms come with Three styles (FLAT, ELEGANT, DARK), and each style has - eight themes default grey, primary, blue, red, yellow, black, purple, green. You can choose any theme depending on your requirements. To easily create and manage themes, i created a folder inside the CSS folder named smart-themes inside smart-themes are 6 stylesheets representing 6 themes - two other themes (primary and default gray) come with the default stylesheet smart-forms.css so if you are using default themes you wont need to load an extra stylesheet.
To create your theme, go to the themes folder smart-themes, open one of the theme stylesheets for example if you want you can modify the blue theme - open blue.css, create a copy of it and rename it to your own theme eg gold.css now modify the element colors and background colors, hover colors and focus colors, you will notice that most colors have similar values and background colors so you can choose to replace the colors at will with yours, after making the necessary changes you will load your own theme.
The theme style loads just below the main form stylesheet, in the example below we've added a blue theme stylesheet from the smart-themes folder like this:
Please note that in our example we shall use the blue theme but all other themes will have similar adjustments in case used for example all that will change is the word blue to green or yellow or red or any other theme colors chosen the rest will be the same
  <link rel="stylesheet" type="text/css" href="css/smart-forms.css"> <link rel="stylesheet" type="text/css" href="css/smart-themes/blue.css"> <link rel="stylesheet" type="text/css" href="css/font-awesome.min.css">
The theme style loaded doesn't make all the necessary adjustments, you will have to make more changes to your forms so that the theme changes take complete effect. The reason for these further adjustments is because with smart forms, you can actually combine more than one theme styles inside a single form so that you have complete control over how your form looks like, so we shall make further adjustments to the following elements below by just hooking on a theme color:
On the form header add the blue theme color NOTICE: the header-blue class added, if your theme is green you will use header-green and so on like this:

Get in touch

On the form body add the theme blue color NOTICE: the theme-blue class added, if your theme is green you will use theme-green this takes care of the input hover and focus colors among other things:
<form method="post" action="/" id="contact">

 </form>
Buttons are located inside the form footer but you can put them any where NOTICE: the btn-blue class added, if your button is green you will use btn-green and the rest of the theme colors to match the themes

 <button type="submit" class="button btn-blue">Submit</button>

just add a class opton-blue or green or red after the option class depending on your theme, the same applies to radio options
 <input type="checkbox" name="checkbox1">  Checkbox Option 2
just add a class switch-blue or green or red after the option class depending on your theme
 <input type="checkbox" name="switch1" id="switch1" value="switch1">   Switch 1
Template samples
Inside there look for this sample form contact-form-with-google-map.html
Save a copy of it and open it in a text editor - your favourite (Dreamweaver, Coda, Notepad ++ or any)
to this
and by the way if you are incorporating the forms i your own template you dont even need the body section that comes with the forms, just copy all the contents with the body section.

to this

to something like this

or this

of course you will style header-custom
to your needs with CSS

to this

of course you will style form-body-custom
to your needs with CSS

to this

of course you will style form-footer-custom
to your needs with CSSSmart Forms depend on different jQuery plugins for progressive enhancement of some widgets. These plugins are included for various purposes
IMPORTANT You can include only the javacript you need, please dont include everything - for example if you are not using masking, then remove that plugin from your setup

Sometimes you need your form visitors not to skip some form elements or leaving them empty, the jQuery Validation plug-in helps us enforce clientside (browsers side) validation so that we get the information we’re after before the visitor submits the forms. Including validation plugins in the head section of your html document follows these simple steps:

We use the two jQuery validation plugins to perform form validation, the process of validating a form is quite straight forward - you have a form selector you want to validate lets say your form has an id as contact id="contact" We call, that ID, setup validation rules, setup validation messages, and lastly we setup error message placement
Next just below the above added scripts in the head section of our document, we add another script and inside it we put a function where we shall write all our validation rules, this function tells the browser that when all resources are loaded / on DOM ready do something:, it looks like below

The files used in the this example are located inside elegant folder > Javacript enhancements > form-validation-tests2.html
We create a simple test form with an ID id="contactform" to confirm that our validation plugins are working - load all the css and the above validation plugins and below the plugins load the above function in shot your javacript should look like this:

Our test form should look like this
Test form markup looks like this, please notice on the form i added an ID id="contactform":
So the $("#contactform") rule above, uses jQuery to select that form, and validate() applies the validation plug-in to the form. However, the form won’t get validated until you specify some validation rules. So first, you'll make the firstname field required which will produce an error message upon validation.
<form method="post" action="/" id="contactform">

 Simple validation rules

  <input type="text" name="firstname" id="firstname" class="gui-input required" placeholder="First name...">

  <input type="text" name="lastname" id="lastname" class="gui-input required" placeholder="Last name...">

 <button type="submit" class="button btn-primary"> Validate Form </button> <button type="reset" class="button"> Cancel </button>
 </form>
I have added a required class (class="gui-input required") on each form input to make the inputs respond to validation:
When you click the validate button the form should bring errors like this in the image below, Don’t worry about the appearance of the error message just yet. You’ll learn how to format error messages later on :
The files used in the this example are located inside elegant folder > Javacript enhancements > form-validation-tests3.html
The jQuery validation plugin allows us to go beyond the flow with validation, create custom methods, add highlights, custom error messages and placements, there are some things you can’t do with the basic validation methods, like assign different error messages for different validation problems, or require a specific number of characters for input. In these cases, you need to use the Validation plug-in's advanced approach for creating validation rules and error messages.
Lets add some form elements modify our function alittle bit now, intead the new one should look like this

Add opening and closing braces between the parentheses in validate(), add an empty line between the braces, and add a JavaScript comment at the end. The comment is a note to identify the end of the validate() function. You’ll soon be filling the script with braces and parentheses, so it can get tricky to remember which brace goes with what. This comment ( // end validate ) can help keep you from getting confused, but like all comments in code, it’s optional.
Next, you’ll create the basic skeleton for adding validation rules.

The above code creates an empty object, which you’ll fill with specific field names and validation methods. In addition, a JavaScript comment identifies the end of the rules object. Next, you’ll add rules for the firstname, lastname and useremail fields.

NOTE: the validation rule must correspond with the input name attribute like below name="useremail" , thats what we use to write the rule
<input type="email" name="useremail" class="gui-input" >
In the above, we’ve added another object literal. Using the useremail: rule as our example, The first part, useremail:, is the name of the field you wish to validate and matches the field’s name attribute (name="useremail") in the HTML markup shown above. Next, two validation methods are specified—the field is required:true (meaning visitors must fill it in if they want to submit the form), and the input email:true input entry must match the form of an email address.
Now when we test our form looks like below: Notice the: This field is required. message below the inputs we shall style that message later to make it red
The jQuery plugin also allows us to specify our own messages through another object

The above code represents yet another object literal, named messages. This object will contain any error messages you wish to add to your form fields. Again, the comment at the end — // end messages — is optional. Now you’ll add the actual error messages for our required fields. Please notice that rules ends with a comma because i have added another object below it

The messages actually look like rules, the only exception is that they have words in brackets, you can try any words of your choice there depending on your fields
The files used in the this example are located inside elegant folder > Javacript enhancements > form-validation-tests4.html
Checkboxes and radio buttons usually come in groups, and typically, adding validation to several checkboxes or radio buttons in a single group is a tricky process of finding all boxes or buttons in a group. Fortunately, the Validation plug-in takes care of the hard parts, and makes it easy for you to quickly validate the form options.
Checkboxes in a group usually share the same name attribute, so the Validation plug-in treats them as a group. In other words, the validation rule applies to all the checkboxes. In essence, for checkboxes in agroup the visitors are required to checkmark AT LEAST ONE checkbox before they can submit the form, however for checkboxes you can checkmark more than one but when one is selected, the rest in the group will be validated automatically...
In a related matter, a group of radio buttons always shares the same name, so even though you’ve added a single rule and error message, it will apply to all the radios in a group. Because the radio field is required, visitors must select ONLY one of the radio buttons to submit the form.
The gender group (female, male, other) are radio buttons, while the languages group (French, English and Chinese) is a checkbox group

After adding the rules for gender and languages You may notice something looks a bit odd: When the error messages for the checkbox and radio buttons appear, they come directly before the first checkbox and radio button (circled in red below ).
The Validation plug-in places the error message directly after the form field that you apply the validation rule to. Normally, that’s OK: When the message appears directly after a text field or select drop menu, it looks fine (as in the earlier examples). But in the case of radios and checkboxes, the message should go somewhere else, preferably after all of the checkboxes or radio buttons.
Fortunately, the Validation plug-in has a way to control the placement of error messages. You can create your own rules for error-message placement by passing another object literal to the validate() function.
Locate the validation script you added earlier, and type a comma after the closing brace for the messages object (but before the // end messages comment). Insert a blank line after the messages object, and then type:

The Validation plug-in is programmed to accept an optional errorPlacement object, which is just an anonymous function that determines where an error message is placed. Every error is sent through this function, so if you only want to change the placement of some error messages, you’ll need to use a conditional statement to identify the form elements whose errors you wish to place. The function receives both the error message and the form element the error applies to, so you can use a conditional statement to check whether the form field is either a radio button of a checkbox. If it is, the error message is added after the element containing the button or checkbox (option-group).
In our forms, we wrap a div around the group of checkboxes, and another div tag wraps the radio buttons with a class (.option-group). So the error message is placed just after the closing div tag using jQuery’s closest() function.
The files used in the this example are located inside elegant folder > Javacript enhancements > form-validation-tests5.html
The Validation plug-in has other optional highlight and unhighlight objects which help us to style and highlight errors in more advanced ways, since most elements are wrapped in a a div or label that has a class .field we shall add an error or success class to that element .field so that we can style elemnts form inside that element.
Lastly we shall define our own custom error classes for hghlighting which will help us to style the form elements, and also a custom error element instead of a label, our error element will be an em, we place these before the rules, see our final script below.

The following errors occurred:

Now the page has working form validation, but the error messages don’t look very good.  They’d look a lot better if they were bold, red, and appeared underneath the form field they apply to. You can make all of those formatting changes with a little simple CSS.
The CSS properties themselves are pretty basic: First, the font size is reduced, next, the color is changed to red, the inputs are given a red border and red background color. The display: block instruction informs the browser to treat the em tag after the element with an error class as a block-level element. That is, instead of putting the error message next to the form field, the browser treats the error like a paragraph of its own, with line breaks above and below.
Below are the full css rules that make all that possible
/* @validaion - error state ------------------------------------- */ .smart-forms .state-error .gui-input, .smart-forms .state-error .gui-textarea, .smart-forms .state-error.select > select, .smart-forms .state-error.select-multiple > select, .smart-forms .state-error input:hover + .checkbox, .smart-forms .state-error input:hover + .radio, .smart-forms .state-error input:focus + .checkbox, .smart-forms .state-error input:focus + .radio, .smart-forms .state-error .checkbox, .smart-forms .state-error .radio{ background:#FEE9EA; border-color:#DE888A; } .smart-forms .state-error .gui-input:focus, .smart-forms .state-error .gui-textarea:focus, .smart-forms .state-error.select > select:focus, .smart-forms .state-error.select-multiple > select:focus{ -webkit-box-shadow:0px 0px 3px #DE888A inset; -moz-box-shadow:0px 0px 3px #DE888A inset; -o-box-shadow:0px 0px 3px #DE888A inset; box-shadow:0px 0px 3px #DE888A inset; } .smart-forms .state-error .gui-input ~ .field-icon i, .smart-forms .state-error .gui-textarea ~ .field-icon i{ color: #DE888A; } .smart-forms .state-error.select .arrow { color: #DE888A; } .smart-forms .state-error.select > select:focus + .arrow{ color:#DE888A; } .smart-forms .state-error .gui-input ~ .input-hint, .smart-forms .state-error.file .gui-file:hover + .gui-input, .smart-forms .state-error .gui-textarea ~ .input-hint { border-color:#DE888A; } .smart-forms .state-error + em{ display: block!important; margin-top: 6px; padding: 0 3px; font-family:Arial, Helvetica, sans-serif; font-style: normal; line-height: normal; font-size:0.85em; color:#DE888A; } /* @validaion - success state -------------------------------------------------- */ .smart-forms .state-success .gui-input, .smart-forms .state-success .gui-textarea, .smart-forms .state-success.select > select, .smart-forms .state-success.select-multiple > select, .smart-forms .state-success input:hover + .checkbox, .smart-forms .state-success input:hover + .radio, .smart-forms .state-success input:focus + .checkbox, .smart-forms .state-success input:focus + .radio, .smart-forms .state-success .checkbox, .smart-forms .state-success .radio{ background:#F0FEE9; border-color:#A5D491; } .smart-forms .state-success .gui-input:focus, .smart-forms .state-success .gui-textarea:focus, .smart-forms .state-success.select > select:focus, .smart-forms .state-success.select-multiple > select:focus{ -webkit-box-shadow:0px 0px 3px #A5D491 inset; -moz-box-shadow:0px 0px 3px #A5D491 inset; -o-box-shadow:0px 0px 3px #A5D491 inset; box-shadow:0px 0px 3px #A5D491 inset; } .smart-forms .state-success .gui-input ~ .field-icon i, .smart-forms .state-success .gui-textarea ~ .field-icon i{ color: #A5D491; } .smart-forms .state-success.select .arrow { color: #A5D491; } .smart-forms .state-success.select > select:focus + .arrow{ color:#A5D491; } .smart-forms .state-success.select:before { border-left:1px solid #A5D491; } .smart-forms .state-success .gui-input ~ .input-hint, .smart-forms .state-success.file .gui-file:hover + .gui-input, .smart-forms .state-success .gui-textarea ~ .input-hint { border-color:#A5D491; }
Unlike Validation masking targets a given input selector, which can be a class or ID, it is usually better to use ID selectors for masking, some rules are listed below

  <input type="text" name="datepicker1" id="datepicker1" class="gui-input">

$(function(){ });
in case you have multiple pickers

  <input type="text" name="month-picker1" id="month-picker1" class="gui-input">

  <input type="text" name="timepicker1" id="timepicker1" class="gui-input">

var smartpickerWrapper
that stores our wrapper, we shall call it on beforeShow:
this means that before the timepicker shows, we wrap it around our created variable, then when the datepicker / timepicker closes onClose:
we remove our wrapper completely from DOM to prevent it adding more DOM elements in case another picker is opened. Infact if you are reading this manual for learning purposes, we can use a similar technique to create multiple themed datepickers / timepickers / monthpickers on the same page!
$('#selector').timepicker
we use $('#selector').datetimepicker
, the rest is normal stuff!
<link rel="stylesheet" type="text/css" href="css/smart-forms.css"> <link rel="stylesheet" type="text/css" href="css/smart-addons.css">

 <input type="text" name="stepper" id="stepper" class="gui-input">

sfcolor
- see example markup below! <input type="text" name="colorpicker1" id="colorpicker1" class="gui-input">

 <input type="text" name="countryList" id="countryList" class="gui-input" placeholder="Enter Country">

 Show Modal Form

Contact Form
 ×

 <form method="post" action="" id="smart-form">
 <button type="submit" class="button btn-primary"> Send Form </button> <button type="reset" class="button"> Cancel </button>
 </form>

 <form method="post" id="smart-form">
Your Details
 <fieldset>  </fieldset>
Project Details
 <fieldset>  </fieldset> </form>

.stp-two
represents the number of steps you can add upto 6 steps using .stp-two
, .stp-three
, .stp-four
, .stp-five
, .stp-six

.smart-steps
adds pointed steps while the CLASS .steps-progress
adds the progress bar below the steps
.smartfm-ctrl
and a data-URI with and id of your own choice since we shall use that ID to control the elements E.G data-show-id="ctr_personal"
<input type="radio" name="package" class="smartfm-ctrl" value="" data-show-id="ctr_personal"> <input type="radio" name="other" class="smartfm-ctrl" value="" data-show-id="show_other"> <input type="checkbox" name="xboxes" value="Success" class="smartfm-ctrl" data-show-id="box_success">
ctr_personal
like in the example below

LatLng(29.760193, -95.369390)
then change them to your location values

Files for Sending forms with ajax and PHP are located under each style inside a folder named Ajax and php
Smart Forms utilizes the power of PHPMailer() Class - A full-featured email creation and transfer class for PHP for sending emails, PHPMailer is probably the world's most popular code for sending email from PHP, being used by many open-source projects such as Drupal, SugarCRM, Yii, Joomla! and many more. It has a fully Integrated SMTP support - send without a local mail server, Multipart/alternative emails for mail clients that do not read HTML email, Support for 8bit, base64, binary, and quoted-printable encoding, SMTP authentication with LOGIN, PLAIN, NTLM and CRAM-MD5 mechanisms, Send emails with multiple TOs, CCs, BCCs and REPLY-TOs, DKIM and S/MIME encryption support and much more. For more about the project you can find it on GITHUB
When you extract the forms you find inside a folder named AJAX PHP . Inside that folder you will find two more folders inside Sendmail version and SMTP version
When you open either the Sendmail version or SMTP version you will find the same 7 forms actually. These forms demonstrate how you can combine AJAX and PHP - they are used for demo purposes BUT you can use them without any worries!
Below are some working ajax forms i have included in this package
In short most settings you need to make are located inside the settings folder settings.php in all the form folders, and that is the only single file you need to modify and setup your recepient email addresses subjects and much more...
$receiver_name = "My Company";
$receiver_subject = "New Contact Message";
$receiver_email =<EMAIL_ADDRESS>$recipients = false;
below to true
and then add the other email addresses, you can add other addresses or remove just follow the same order with a comma after a new address, replace<EMAIL_ADDRESS>with your other address, then enter the corresponding name - Recipient Name (optional)$recipients = false; if($recipients == true){ $recipients = array<EMAIL_ADDRESS>=> "Recipient Name"<EMAIL_ADDRESS>=> "Recipient Name" ); foreach($recipients as $email => $name){ $mail->AddBCC($email, $name); } }
$redirectForm = false; $redirectForm_url = "http://example.com/thankyou.php";
$poweredby_name = "Smart Forms"; $poweredby_url = "http://www.doptiq.com/smart-forms";
$generateCSV = false;
$csvFileName = "formcsv.csv";
$autoResponder = false;
// fill out your SMTP details below $SMTP_host = 'smtp1.example.com'; $SMTP_username = 'your-smtp-username'; $SMTP_password = 'your-smtp-password'; $SMTP_protocol = 'ssl'; $SMTP_port = 465;
Go to the head section of your form and include the required javascript files - like we've been doing, for most forms we need the following basic plugins below

Create a form and put all the necessary form elements eg, inputs, textareas, drop selects, radios and checkboxes, like this:-
<input type="text" name="firstname" class="gui-input" >
Go to your form the one yo've created - open it in a text editor - add a post method and call the processing script (smartprocess.php) like below
<form method="post" action="php/smartprocess.php" id="smart-form">
If your form includes people sending you file attachments (multipart data), don't forget the enctype, like below
<form method="post" action="php/smartprocess.php" id="smart-form" enctype="multipart/form-data">
Now open the js folder and smart-form.js create your own validation rules and messages according to your form
NOTE: the validation rule must correspond with the input name attribute like below name="useremail"
- the rule will be useremail:required
however since the input will accept only valid emails we add onother rule tp check whether its a valid email address just below useremail:required
we add email:true
, thats what we use to write the rule, we shall also use that name attribute to write the PHP, so that when someone fills a field, its content and values can be captured by PHP and sent to you, please refer to the Javascript section for more on validation
<input type="email" name="useremail" class="gui-input" >
For Dropdown selects, checkboxes and radios, do not forget the value=" "
attribute, it is what is captured and posted in PHP, for example
In the dropdown select below the name="fruits"
helps us in validation by setting a validation rule fruits:required
and Posting the fruit value selected with PHP for example if the some one who filled your form selected mango fruit option - value="mango"
is what will be POSTED to your email

  <select id="fruits" name="fruits"> <option value="">Select </option> <option value="mango">Mango</option> <option value="pawpaw">Pawpaw</option> <option value="orange">Orange</option> </select>

For radios and checkboxes, the same rule applies, notice the name="media[]
helps us in validation and posting the selected values in PHP, and the value="television"
helps to know and capture the exact media type that was ticked / checked. The box brackets []
after the name="media"
means that the checkboxes is a group with a similar name attribute media
for all the checkboxes. So we can use / write an array in PHP to Capture multiple values checked by the person who fills the form

  <input type="checkbox" name="media[]" value="television">  Television   <input type="checkbox" name="media[]" value="newspaper">  News Papers

smart-process.php file
- located inside the php folder of any of the forms - for purposes of learning we are going to use an example from the contact-form folder, its contents look like below: <?php if (!isset($_SESSION)) session_start(); if(!$_POST) exit; include dirname(__FILE__).'/settings/settings.php'; include dirname(__FILE__).'/functions/emailValidation.php'; /* Current Date Year ------------------------------- */ $currYear = date("Y"); /* --------------------------------------------------------------------------- : Register all form field variables here --------------------------------------------------------------------------- */ $sendername = strip_tags(trim($_POST["sendername"])); $emailaddress = strip_tags(trim($_POST["emailaddress"])); $sendersubject = strip_tags(trim($_POST["sendersubject"])); $sendermessage = strip_tags(trim($_POST["sendermessage"])); $captcha = strip_tags(trim($_POST["captcha"])); /* ---------------------------------------------------------------------- : Prepare form field variables for CSV export ----------------------------------------------------------------------- */ if($generateCSV == true){ $csvFile = $csvFileName; $csvData = array( "$sendername", "$emailaddress", "$sendersubject" ); } /* ------------------------------------------------------------------------- : Prepare serverside validation ------------------------------------------------------------------------- */ $errors = array(); //validate name if(isset($_POST["sendername"])){ if (!$sendername) { $errors[] = "You must enter a name."; } elseif(strlen($sendername) < 2) { $errors[] = "Name must be at least 2 characters."; } } //validate email address if(isset($_POST["emailaddress"])){ if (!$emailaddress) { $errors[] = "You must enter an email."; } else if (!validEmail($emailaddress)) { $errors[] = "Your must enter a valid email."; } } //validate subject if(isset($_POST["sendersubject"])){ if (!$sendersubject) { $errors[] = "You must enter a subject."; } elseif(strlen($sendersubject) < 4) { $errors[] = "Subject must be at least 4 characters."; } } //validate message / comment if(isset($_POST["sendermessage"])){ if (strlen($sendermessage) < 10) { if (!$sendermessage) { $errors[] = "You must enter a message."; } else { $errors[] = "Message must be at least 10 characters."; } } } // validate security captcha if(isset($_POST["captcha"])){ if (!$captcha) { $errors[] = "You must enter the captcha code"; } else if (($captcha) != $_SESSION['gfm_captcha']) { $errors[] = "Captcha code is incorrect"; } } if ($errors) { //Output errors in a list $errortext = ""; foreach ($errors as $error) { $errortext .= '
'. $error . "
"; } echo '
The following errors occured:

'. $errortext .'

'; } else{ include dirname(__FILE__).'/phpmailer/PHPMailerAutoload.php'; include dirname(__FILE__).'/templates/smartmessage.php'; $mail = new PHPMailer(); $mail->isSMTP(); $mail->Host = $SMTP_host; $mail->SMTPAuth = true; $mail->Username = $SMTP_username; $mail->Password = $SMTP_password; $mail->SMTPSecure = $SMTP_protocol; $mail->Port = $SMTP_port; $mail->IsHTML(true); $mail->From = $emailaddress; $mail->CharSet = "UTF-8"; $mail->FromName = $sendername; $mail->Encoding = "base64"; $mail->Timeout = 200; $mail->ContentType = "text/html"; $mail->addAddress($receiver_email, $receiver_name); $mail->Subject = $receiver_subject; $mail->Body = $message; $mail->AltBody = "Use an HTML compatible email client"; // For multiple email recepients from the form // Simply change recepients from false to true // Then enter the recipients email addresses // echo $message; $recipients = false; if($recipients == true){ $recipients = array<EMAIL_ADDRESS>=> "Recipient Name"<EMAIL_ADDRESS>=> "Recipient Name" ); foreach($recipients as $email => $name){ $mail->AddBCC($email, $name); } } if($mail->Send()) { /* ----------------------------------------------------------------- : Generate the CSV file and post values if its true ----------------------------------------------------------------- */ if($generateCSV == true){ if (file_exists($csvFile)) { $csvFileData = fopen($csvFile, 'a'); fputcsv($csvFileData, $csvData ); } else { $csvFileData = fopen($csvFile, 'a'); $headerRowFields = array( "Guest Name", "Email Address", "Subject" ); fputcsv($csvFileData,$headerRowFields); fputcsv($csvFileData, $csvData ); } fclose($csvFileData); } /* --------------------------------------------------------------------- : Send the auto responder message if its true --------------------------------------------------------------------- */ if($autoResponder == true){ include dirname(__FILE__).'/templates/autoresponder.php'; $automail = new PHPMailer(); $automail->isSMTP(); $automail->Host = $SMTP_host; $automail->SMTPAuth = true; $automail->Username = $SMTP_username; $automail->Password = $SMTP_password; $automail->SMTPSecure = $SMTP_protocol; $automail->Port = $SMTP_port; $automail->From = $receiver_email; $automail->FromName = $receiver_name; $automail->isHTML(true); $automail->CharSet = "UTF-8"; $automail->Encoding = "base64"; $automail->Timeout = 200; $automail->ContentType = "text/html"; $automail->AddAddress($emailaddress, $sendername); $automail->Subject = "Thank you for contacting us"; $automail->Body = $automessage; $automail->AltBody = "Use an HTML compatible email client"; $automail->Send(); } if($redirectForm == true){ echo ''; } echo '
Message has been sent successfully!
'; } else { echo '
Message not sent - server error occured!
'; } } ?>
$currYear = date("Y");
$sendername = strip_tags(trim($_POST["sendername"])); $emailaddress = strip_tags(trim($_POST["emailaddress"])); $sendersubject = strip_tags(trim($_POST["sendersubject"])); $sendermessage = strip_tags(trim($_POST["sendermessage"])); $captcha = strip_tags(trim($_POST["captcha"]));
Now lets open contact-form folder and open the index.php file and we look at the markup, you will notice that the first input element has a name="" attribute sendername and that is what we used to set validation and now it is what we are using to capture the data, the HTML for the first element looks like this :

  <input type="text" name="sendername" id="sendername" class="gui-input" placeholder="Enter name...">

so to capture the above field in PHP we used the line below :
$sendername = strip_tags(trim($_POST["sendername"]));
To set the validation rule for that field in javascript - look inside contact-form folder inside the js foldser smart-form.js, the rule looks like this :
rules: { sendername: { required: true } }
The same logic is used for the rest of the fields actually, like sendremail etc:
Now Lets say you want to add a telephone field to that same form
You will create a field with a name attribute telephne or smething you wnat, so your input should look like this
<input type="text" name="telephone" id="telephone" class="gui-input" placeholder="Enter Telephone...">
Go to your PHP below this line
$captcha = strip_tags(trim($_POST["captcha"]));
Add your newly created field
$telephone = strip_tags(trim($_POST["telephone"]));
Next open the templates folder (its located inside PHP) smartmessage.php file and add your newly created field there also, look for this line below

Message subject: '.$sendersubject.'

Add your newly created field below the above line like this:

Telephone number: '.$telephone.'

To set the validation rule for that field in javascript - look inside contact folder inside the js folder smartform.js, the rule should look like this below:
rules: { telephone: { required: true } }
messages: { telephone: { required: 'Please fill the telephone field' } }
$sendername = strip_tags(trim($_POST["sendername"])); $senderemail = strip_tags(trim($_POST["senderemail"])); $sendersubject = strip_tags(trim($_POST["sendersubject"])); $sendermessage = strip_tags(trim($_POST["sendermessage"]));
$errors = array();
//validate name if(isset($_POST["sendername"])){ if (!$sendername) { $errors[] = "You must enter a name."; } elseif(strlen($sendername) < 2) { $errors[] = "Name must be at least 2 characters."; } } // validate telephone field if(isset($_POST["telephone"])){ if (!$telephone) { $errors[] = "Please fill the telephone field"; } }
if ($errors) { $errortext = ""; foreach ($errors as $error) { $errortext .= '
'. $error . "
"; } echo '
The following errors occured:

'. $errortext .'

';
That should get you off the ground for the start - but if you find any challenges along the way, don't hesitate to contact me for help
For those who opt for SMTP instead of sendmail, all the forms function as the sendmail forms but the only difference is that you have to have the following details.
settings.php
in the section below// fill out your SMTP details below $SMTP_host = 'smtp1.example.com'; $SMTP_username = 'your-smtp-username'; $SMTP_password = 'your-smtp-password'; $SMTP_protocol = 'ssl'; $SMTP_port = 465;
$generateCSV = false;
Now that you have setup the forms you may need to add CSV export capabilities where by each time someone fills the form and sends it successfully the content is saved inside a CSV file like a database record, this is how you should go about it. Please note that this may require your server permissions
dataprocess.php
and dataview.php
These files are for purposes of displaying your form data as a table of data fully sortable and searchable like the way you work with database data$sendername = strip_tags(trim($_POST["sendername"])); $emailaddress = strip_tags(trim($_POST["emailaddress"])); $sendersubject = strip_tags(trim($_POST["sendersubject"])); $sendermessage = strip_tags(trim($_POST["sendermessage"]));
formcsv.csv
and also post the above values to the CSV file like below, please note that the values in the CSVData array match the ones above. Here are the CSV posted values. This should work even for your already existing forms if($generateCSV == true){ $csvFile = $csvFileName; $csvData = array( "$sendername", "$emailaddress", "$sendersubject" ); }
/* ----------------------------------------------------------------- : Generate the CSV file and post values if its true ----------------------------------------------------------------- */ if($generateCSV == true){ if (file_exists($csvFile)) { $csvFileData = fopen($csvFile, 'a'); fputcsv($csvFileData, $csvData ); } else { $csvFileData = fopen($csvFile, 'a'); $headerRowFields = array( "Sender Name", "Email Address", "Subject" ); fputcsv($csvFileData,$headerRowFields); fputcsv($csvFileData, $csvData ); } fclose($csvFileData); }
$headerRowFields = array
the names there will be the CSV top row header names. These are only written once. When you post values you should see a CSV file created inside the php folder your-form-url/php/csv/dataview.php
there you can also download the CSV file directly. When a person fills a form you can automaticalley send them a response to their email addresses. To do so you need to do the following
include dirname(__FILE__).'/templates/autoresponder.php'; $automail = new PHPMailer(); $automail->isSendmail(); $automail->From = $receiver_email; $automail->FromName = $receiver_name; $automail->isHTML(true); $automail->CharSet = "UTF-8"; $automail->Encoding = "base64"; $automail->Timeout = 200; $automail->ContentType = "text/html"; $automail->AddAddress($emailaddress, $firstname); $automail->Subject = "Thank you for contacting us"; $automail->Body = $automessage; $automail->AltBody = "Use an HTML compatible email client"; $automail->Send();
$automail->AddAddress($emailaddress, $firstname);
especially the $emailaddress
line represents the email address fileld you used on the form. <input type="text" name="myinput" id="myinput" class="gui-input">
$myinput = strip_tags(trim($_POST["myinput"]));
<textarea class="gui-textarea" name="mytextarea"></textarea>
$mytextarea = strip_tags(trim($_POST["mytextarea"]));
<select name="myselect"> <option value="">Select </option> <option value="mango">Mango</option> <option value="pawpaw">Pawpaw</option> <option value="orange">Orange</option> </select>
$myselect = strip_tags(trim($_POST["myselect"]));
<input type="radio" name="myradio" value="Female"> <input type="radio" name="myradio" value="Male">
$myradio = strip_tags(trim($_POST["myradio"]));
<input type="checkbox" name="mycheckbox[]" value="television"> <input type="checkbox" name="mycheckbox[]" value="newspaper">
$mycheckbox = $_POST["mycheckbox"]; if ($mycheckbox[0]!=""){ $mycheckbox_list = implode( '
', $mycheckbox); }
<select name="mymultiselect[]" multiple="multiple"> <option value="mango">Mango</option> <option value="pawpaw">Pawpaw</option> <option value="orange">Orange</option> </select>
$mymultiselect = $_POST["mymultiselect"]; if ($mymultiselect[0]!=""){ $mymultiselect_list = implode( '
', $mymultiselect); }
Now we go back to our JavaScript file where we set our validation - look inside contact folder (or other form folders) inside the js folder smart-form.js, then add the submit handler which should look like this below:
submitHandler:function(form) { $(form).ajaxSubmit({ target:'.result', beforeSubmit:function(){ }, error:function(){ }, success:function(){ $('.alert-success').show().delay(10000).fadeOut(); $('.field').removeClass("state-error, state-success"); if( $('.alert-error').length == 0){ $('#smart-form').resetForm(); reloadCaptcha(); } } }); }
When you hit the submit button on the working forms you will notice that the text changes to Sending... that is a simple function i added the sending text can be changed to any text of your choice by using this data attribute data-btntext-sending="Sending..."
<button data-btntext-sending="Sending..." type="submit" class="uit-button btn-blue"> Submit Form </button>
Open captcha.php and look for the lines below (rgba values only supported) - you can use a color picking tool to help you pick any colors with rgba values my favourite is Colorpix from color schemer + it's FREE of charge
$color = imagecolorallocate($image, 136, 136, 136);
Open captcha.php and look for the lines below (only Open Type Fonts (otf) OR True Type Fonts (ttf) are supported) replace with your font in the fonts folder located inside captcha
$font = 'fonts/zxxnoise.otf';
www.doptiq.com
avoid putting your form uploads folder in the root where someone can access it by just typing www.doptiq.com/uploads/
you can move your uploads folder one level above to something like www.doptiq.com/contact/uploads/
this way scripts wont be executed on your server tel
and number
input typles please change them to text
, that will fix some common masking issues! <input type="tel" class="gui-input" >
<input type="number" class="gui-input" >
<input type="text" class="gui-input" >
onclick=""
attribute to the parent labels enclosing the above mentioned elements.

  <input type="checkbox">  Checkbox 1   <input type="checkbox">  Checkbox 2

GD Library Installed
to generate the images, so please confirm whether your hosting server has this feature. Alternatively some anti-virus software and ad-block plugins may prevent your captcha image from showing! smart-form.js
and remove the following lines/* @custom validator method | check filesize | modern browsers only --------------------------------------------------------------------- */ $.validator.addMethod('filesize', function(value, element, param) { return this.optional(element) || (element.files[0].size <= param) });
rules and messages
also like thisorderfiles:{ required:true, extension:"jpg|png|pdf", filesize: 1048576 }
orderfiles:{ required:true, extension:"jpg|png|pdf" }
orderfiles:{ required:'Browse to add some order files', extension:'Sorry, file format not supported', filesize: 'File size exceeded, upload 1MB or less' }
orderfiles:{ required:'Browse to add some order files', extension:'Sorry, file format not supported' }
Once again, I'll be honored to extend a helping hand i case you meet any challenges along the way, don't hesitate to ask however small or trivial an issue may seem, and if you have any questions or suggestions regarding this item, please feel free to email me via my Codecanyon public profile page contact form HERE - ELFLAIRE . All the best wishes... while creating the SMARTEST FORM.
Regards - IGGA ELIA - a.k.a - elflaire


Out of Sight (R) *** 1/2 (out of ****)
Chemistry between romantic leads can make or break a film, and never in recent memory has it more "made" a film than in Steven Soderbergh's witty, slick, sexy adaptation of Elmore Leonard's novel. _Out_of_Sight_ jumps back and forth in time to tell the twisting tale of suave bank robber Jack Foley (George Clooney, rebounding well after his disastrous turn as the Caped Crusader), out to make one big score after escaping from prison; hot on his trail--and hot _for_ him--is tough U.S. Marshal Karen Sisco (the ever-sultry Jennifer Lopez), who falls hard for Jack's charms after being briefly locked in a trunk with him during his prison break.
Although _Out_of_Sight_'s intricately structured plot requires the audience's undivided attention, Soderbergh and screenwriter Scott Frank (who also adapted Leonard's _Get_Shorty_) are less concerned with story than they are dialogue and the quirky characters that deliver it, and the film offers a wide array of memorable personalities, such as Jack's collaborators in the planned big heist: stoner Glenn (Steve Zahn); the menacing Maurice, a.k.a. Snoopy (Don Cheadle); his clumsy bodyguard White Boy Bob (Keith Loneker); and Jack's partner Buddy (Ving Rhames). Most memorable of all, though, is the central duo of Jack and Karen, who are both acutely aware of the danger of their mutual attraction yet are completely powerless to resist the thrill. The impossibly glamorous and charismatic pair of Clooney and Lopez absolutely sizzle from their first moment together; the soulful, smoldering gazes they lay upon each other are sexier than any explicit scene could ever be. It is their effortless rapport that carries the film and jumpstarts its sometimes-flagging energy.
Michael Dequina
<EMAIL_ADDRESS>|<EMAIL_ADDRESS>Mr. Brown's Movie Site: http://welcome.to/mrbrown
CompuServe Hollywood Hotline: http://www.HollywoodHotline.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


iOS provides various framework to let you work with sound in your app. One of the frameworks that you can use to play and record audio file is the AV Foundation Framework. In this tutorial, I’ll walk you through the the framework and show you how to manage audio recording
AVAudioRecorder ?
An instance of the AVAudioRecorder class, called an audio recorder, provides audio recording capability in your application. Using an audio recorder you can:
Record until the user stops the recording
Record for a specified duration
Pause and resume a recording
Obtain input audio-level data that you can use to provide level metering
How to initialize an AVAudioRecorder
To prepare for recording using an audio recorder:
Specify a sound file URL.
Set up the audio session.
Configure the audio recorder’s initial state.
the url is the file system location to record to. And also need settings for the recording session,On success, an initialized AVAudioRecorder object. If nil, the outError parameter contains an NSError describing the failure.
an acc type record setting .for example
to ensure optimum performance and quality, you need to pick the right audio format and audio codec type. see Multimedia Programming Guide
so we can start a recording like this (In production code, you would include appropriate error handling)
some times we also need a callback to tell the recording progress, some exception handling When the recording is interrupted by the call.
To handle interruptions and the completion of recording, we need to add the AVAudioRecorderDelegate protocol names to the interface declaration for your implementation.
AudioHelper
A record class which is userfriendly and esay to use by developers.


Greetings ghosts and ghouls welcome to one of my many crypts. I welcome you with open bones to join me in some frightening tails from the internet. I have currated some ghastly links that you can click on if you dare.}
Scary Stories |
Haunted Places |
SCP Foundation |
Halloween Facts |
Please click on the pumpkins eyes or noses below to check out some fantastic narrators.


Select matches
Select all items that are also listed in the other pane.
Select uniques
Select all items that are only listed in this pane.
Select newer
Select all matches with a more recent modified date.
Select different
Select all matches with a different size or modified date.
Select uniques and newer
Select all items that are unique or newer.
Select uniques and different
Select all items that are unique or different.
Select selected
Select all items that are selected in the other pane.
{E4F10A3C-49E6-405D-8288-A23BD4EEAA6C} 100|Extension


Klopp warns Liverpool over late escapes after Palace triumph
by BeSoccerLate goals have lifted Liverpool to a commanding position in the Premier League but Jurgen Klopp knows change is needed.
Jurgen Klopp urged Liverpool to stop relying on late goals following the physically taxing 2-1 victory over Crystal Palace on Saturday.
Roberto Firmino prodded home an 85th-minute winner at Selhurst Park to preserve the Premier League leaders' eight-point advantage over second-placed Leicester City.
Sadio Mane put Liverpool ahead early in the second half, before Wilfried Zaha equalised eight minutes from full-time.
Firmino's intervention means the European champions have now snatched vital points with goals in the 85th minute or later from four of their past six league fixtures.
"You can't take it for granted," Reds boss Klopp told reporters.
"I don't like to talk about it. I understand why you are asking. It's not like 'very good, seven minutes to go, let's start winning now'. That's not what we are like.
"We don't think about it, we just know. We have had four years together. I know a lot about my team.
Featured links
- The latest football transfers news and rumours
- Neymar or Mbappé? Zidane choose
- Kante explains why he turned down PSG
- What Cristiano said about Messi to his Man Utd teammates
"I know what we want, I know what we have to do for it. But we're not the only team who knows that. It was difficult fitness-wise at Palace because there were so many different things.
 They are nine or 10 days away with their national teams. That's a lot of sessions."
Liverpool forged their fruitful habit last season, notably squeezing past Tottenham and Newcastle United in the final weeks of an absorbing title battle with Manchester City.
Andy Robertson, scorer in a thrilling turnaround against Aston Villa earlier this month, admitted decisive goals must start to come earlier.
"Scoring late is good and enjoyable but we would much rather be 2-0 or 3-0 up and see out the game," the left-back said.
"We cannot keep relying on it but it is good we have that mentality and we did not panic because we have been in this position so many times.
"I think that is why we took control of the game and scored the winner."


encode($value, $key = false)
The encode method encrypts a string value, optionally with a custom encryption key.
| 靜態 | 否 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 參數 |
|
|||||||||
| 回傳 | 字串 | |||||||||
| 範例 |
|
Crypt 類別允許加密或解密一個字串。Crypt 類別也可用於內部例如 Fuel Session 類別。
它使用由 PHPSecLib 提供的加密和雜湊方法，所以它不是依賴外部模組如 mcrypt 來作用的。
The Crypt class is configured through the app/config/crypt.php configuration file. It will be generated and populated with random values when you first use the Crypt class or if one of the required configuration values is missing.
Note that this will require write access to app/config/crypt.php! If this is not possible, make sure all configuration settings are set!
以下配置設定可以被定義：
| 變數 | 類型 | 預設 | 描述 |
|---|---|---|---|
| crypto_key | 字串 | n/a | Random encryption key value used in the encryption routines. Make sure you set this to something unique and random! |
| crypto_iv | 字串 | n/a | Random encryption initialisation vector used in the encryption routines. Make sure you set this to something unique and random! |
| crypto_hmac | 字串 | n/a | Random value used in the Hash-based Message Authentication Code (HMAC) routines. Make sure you set this to something unique and random! |
If you assign keys manually, note that they are base64_encoded, and the length must be a multiple of 4 to be able to decode it. Make sure the length is correct!
The encode method encrypts a string value, optionally with a custom encryption key.
| 靜態 | 否 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 參數 |
|
|||||||||
| 回傳 | 字串 | |||||||||
| 範例 |
|
The decode method decrypts a string value, optionally with a custom key.
| 靜態 | 否 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 參數 |
|
|||||||||
| 回傳 | mixed - String value with the decoded value, or false if the value could not be decoded. | |||||||||
| 範例 |
|