|
This is a toy live coding environment: programs run immediately as they are typed.
Pick something from the "Demos" menu or try the tutorials.
Want more info? See the intro or the docs
Want to hack this? Grab the source code!
Your browser doesn't seem to support 3D acceleration.
You'll still have fun, but you really want to try to get the 3D party going in your browser.
(psst! - it's worth it!).
All these examples starting with "webgl" are going to look silly in your browser (which doesn't seem to support 3D acceleration).
Why not try to get some awesome 3D action started?
Your browser doesn't seem to support audio.
Be a champion and try a newer browser.
(while you are at it, pick one that supports 3D such as Chrome or Firefox).
You've unlocked the "I borked the sound system" badge!
This sometime happens when playing lots of music.
Just re-start the browser to get everything back to normal.
(We know it's fun, we do this all the time, it's OK).
Your browser is way old.
We understand. We were there 5 years ago. Why not try a shinier browser?
(while you are at it, pick one that supports 3D such as Chrome or Firefox).


You should see a green rectangle below. If you see any red other than anti-aliasing, the test has failed.
xxxxx
xxxxx
This line should look normal.


{% extends 'welcomepage/base.html' %} {% block content %} Objective {{club.objective}} Description {{club.description}} Contact Information {{club.contact_info}} Events Here are a few events of {{ club.club_name}} {%for event in events %} {{event.event_name}} {{event.event_date}} {{event.venue}} {{event.event_desc}} View Event {% endfor %} Gallery Previous Next {%endblock%}
{{club.objective}}
{{club.description}}
{{club.contact_info}}
Here are a few events of {{ club.club_name}}
{{event.event_desc}}


Estate Planning and Body HeatBy Michael Asimow, UCLA Law School (January 1998) The neo-noir Body Heat (MGM 1981) has a captivatingly cynical plot, pleasingly reminiscent of the immortal Double Indemnity. The witty dialogue, photography, Lawrence Kasdan's direction, music, and acting are all superb. Florida sizzles, and apparently nothing is air conditioned. Kathleen Turner is a deliciously erotic Matty Walker. But our focus here is on William Hurt's role as lawyer Ned Racine. Body Heat presents a fully realized version of a particular kind of lawyerthe kind the profession can easily get along without. A graduate of Florida State's law school, Ned isn't likely to be named FSU alum of the year. He's the sort of small-time lawyer who tends to get into a lot of trouble. Ned isn't too smart (as Matty says "I like that in a man"). He's pretty incompetent. (He was successfully sued for malpractice a couple of years ago.) He doesn't seem to care about his clients. He really doesn't like being a lawyer much, he remarks at dinner. Judges and other lawyers don't respect himand with good reason. He drinks too much. He jogs faithfully, but lights up a cigarette when he's through.   He takes up with Matty, knowing that she is married.  The character of Ned Racine is discussed in greater detail in an article by John Burkoff, If God Wanted Lawyers to Fly, She Would have Given Them Wings: Life, Lust & Legal Ethics in Body Heat, 22 Okla. City U. L. Rev. 187 (1997) (an excellent law and film symposium by the way). Only law and film nerds would care much about the estate planning aspects of Body Heatbut therein hangs an interesting tale. Not to give away too much, a key plot element concerns Edmund Walker's wills. Edmund's first will left half of his estate to Matty, half in trust for his young niece Heather. But Matty is a bottom-line type of person; she wants to do away with Edmund and get all of his money, not just half. So she steals some of Racine's stationery and drafts a new will, forging the necessary signatures. Like Edmund's first will, the phony second will divides the loot 50-50 between Matty and Heather, but the bequest to Heather in the second will is deliberately drafted so as to violate the rule against perpetuities. As a result the bequest to Heather in the second will is invalid. Since Matty is the sole intestate heir, she takes the entire estate. But what was the perpetuities problem in the second will? We're not told exactly, but presumably the trust for Heather included a contingent remainder, where the contingency could not vest during the period of lives-in-being-plus-21-years. Under the traditional version of the rule against perpetuities, the presence of such a contingency (however unlikely to materialize) invalidates the gift (unless the will contained a "savings clause" which obviously it didn't). [Click here for more information about the Rule Against Perpetuities.] Trouble is, before the film was shot, Florida had abolished this form of the rule against perpetuities. Instead it took a wait-and-see approach, under which the gift remains valid unless and until the interest actually fails to vest within the perpetuities period. Thus under the Florida rule, the second will was entirely valid and Heather gets half. How could the film makers have made such an error? My colleague, perpetuities guru Jesse Dukeminier, tracked down the technical adviser to the movie. It seems that the film was originally set in New Jersey which at the time followed the traditional rule against perpetuities. Because of a Teamster's strike in the New York-New Jersey area, the movie was moved to Florida and the story rewritten to occur there. But nobody took into account that Florida's rule is different from New Jersey's. Moreover, as Jesse points out, even if Edmund's second will was partially invalid because of the perpetuities problem, the doctrine of dependent relative revocation should have applied. Under this doctrine, a will revocation is conditional. If a second will proves to be invalid, it's assumed the testator would want the first one to remain in effect if doing so would more closely carry out the testator's intent than would intestacy. Since it is obvious that Edmund intended to benefit Heather (she got half under both wills), the doctrine should have applied and the bequest to Heather under the first will should have remained in effect. As a result, Heather should have gotten half of Edmund's estate. The technical adviser missed this issue entirely.
|


Now, select your toppings!
We've got your order of a pizza with . Your total is and we'll have it ready in 30 minutes or less :)


Quartz Quick Start Guide (Primarily authored by Dafydd James)
Welcome to the QuickStart guide for Quartz.
After becoming familiar with the basic functioning of Quartz Scheduler, consider more advanced features such as Where, an Enterprise feature that allows jobs and triggers to run on specified Terracotta clients instead of randomly chosen ones.
Download and Install
First, Download the most recent stable release - registration is not required. Unpack the distribution and install it so that your application can see it.
The Quartz JAR Files
The Quartz package includes a number of jar files, located in root directory of the distribution. The main Quartz library is named quartz-xxx.jar (where xxx is a version number). In order to use any of Quartz’s features, this jar must be located on your application’s classpath.
Once you’ve downloaded Quartz, unzip it somewhere, grab the quartz-xxx.jar and put it where you want it. (If you need information on how to unzip files, go away and learn before you go anywhere near a development environment or the Internet in general. Seriously.)
I use Quartz primarily within an application server environment, so my preference is to include the Quartz JAR within my enterprise application (.ear or .war file). However, if you want to make Quartz available to many applications then simply make sure it’s on the classpath of your appserver. If you are making a stand-alone application, place it on the application’s classpath with all of the other JARs your application depends upon.
Quartz depends on a number of third-party libraries (in the form of jars) which are included in the distribution .zip file in the ‘lib' directory. To use all the features of Quartz, all of these jars must also exist on your classpath. If you’re building a stand-alone Quartz application, I suggest you simply add all of them to the classpath. If you’re using Quartz within an app server environment, at least some of the jars will likely already exist on the classpath, so you can afford (if you want) to be a bit more selective as to which jars you include.
|
Note
|
In an appserver environment, beware of strange results when accidentally including two different versions of the same jar. For example, WebLogic includes an implementation of J2EE (inside weblogic.jar) which may differ to the one in servlet.jar. In this case, it’s usually better to leave servlet.jar out of your application, so you know which classes are being utilized. |
The Properties File
Quartz uses a properties file called (kudos on the originality) quartz.properties
. This isn’t necessary at first, but to use anything but the most basic configuration it must be located on your classpath.
Again, to give an example based on my personal situation, my application was developed using WebLogic Workshop. I keep all of my configuration files (including quartz.properties) in a project under the root of my application. When I package everything up into a .ear file, the config project gets packaged into a .jar which is included within the final .ear. This automatically puts quartz.properties on the classpath.
If you’re building a web application (i.e. in the form of a .war file) that includes Quartz, you will likely want to place the quartz.properties file in the WEB-INF/classes folder in order for it to be on the classpath. Configuration
This is the big bit! Quartz is a very configurable application. The best way to configure Quartz is to edit a quartz.properties file, and place it in your application’s classpath (see Installation section above).
There are several example properties files that ship within the Quartz distribution, particularly under the examples/ directory. I would suggest you create your own quartz.properties file, rather than making a copy of one of the examples and deleting the bits you don’t need. It’s neater that way, and you’ll explore more of what Quartz has to offer.
Full documentation of available properties is available in the Quartz Configuration Reference.
To get up and running quickly, a basic quartz.properties
looks something like this:
org.quartz.scheduler.instanceName = MyScheduler org.quartz.threadPool.threadCount = 3 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
The scheduler created by this configuration has the following characteristics:
-
org.quartz.scheduler.instanceName
- This scheduler’s name will be "MyScheduler". -
org.quartz.threadPool.threadCount
- There are 3 threads in the thread pool, which means that a maximum of 3 jobs can be run simultaneously. -
org.quartz.jobStore.class
- All of Quartz’s data, such as details of jobs and triggers, is held in memory (rather than in a database). Even if you have a database and want to use it with Quartz, I suggest you get Quartz working with the RamJobStore before you open up a whole new dimension by working with a database.
Starting a Sample Application
Now you’ve downloaded and installed Quartz, it’s time to get a sample application up and running. The following code obtains an instance of the scheduler, starts it, then shuts it down:
// file: QuartzTest.java import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.impl.StdSchedulerFactory; import static org.quartz.JobBuilder.*; import static org.quartz.TriggerBuilder.*; import static org.quartz.SimpleScheduleBuilder.*; public class QuartzTest { public static void main(String[] args) { try { // Grab the Scheduler instance from the Factory Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // and start it off scheduler.start(); scheduler.shutdown(); } catch (SchedulerException se) { se.printStackTrace(); } } }
Once you obtain a scheduler using StdSchedulerFactory.getDefaultScheduler()
, your application will not terminate until you call scheduler.shutdown()
, because there will be active threads.
Note the static imports in the code example; these will come into play in the code example below.
If you have not set up logging, all logs will be sent to the console and your output will look something like this:
[INFO] 21 Jan 08:46:27.857 AM main [org.quartz.core.QuartzScheduler] Quartz Scheduler v.2.0.0-SNAPSHOT created. [INFO] 21 Jan 08:46:27.859 AM main [org.quartz.simpl.RAMJobStore] RAMJobStore initialized. [INFO] 21 Jan 08:46:27.865 AM main [org.quartz.core.QuartzScheduler] Scheduler meta-data: Quartz Scheduler (v2.0.0) 'Scheduler' with instanceId 'NON_CLUSTERED' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 50 threads. Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered. [INFO] 21 Jan 08:46:27.865 AM main [org.quartz.impl.StdSchedulerFactory] Quartz scheduler 'Scheduler' initialized from default resource file in Quartz package: 'quartz.properties' [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.impl.StdSchedulerFactory] Quartz scheduler version: 2.0.0 [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED started. [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED shutting down. [INFO] 21 Jan 08:46:27.866 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED paused. [INFO] 21 Jan 08:46:27.867 AM main [org.quartz.core.QuartzScheduler] Scheduler Scheduler_$_NON_CLUSTERED shutdown complete.
To do something interesting, you need code between the start()
and shutdown()
calls.
// define the job and tie it to our HelloJob class JobDetail job = newJob(HelloJob.class) .withIdentity("job1", "group1") .build(); // Trigger the job to run now, and then repeat every 40 seconds Trigger trigger = newTrigger() .withIdentity("trigger1", "group1") .startNow() .withSchedule(simpleSchedule() .withIntervalInSeconds(40) .repeatForever()) .build(); // Tell quartz to schedule the job using our trigger scheduler.scheduleJob(job, trigger);
You will also need to allow some time for the job to be triggered and executed before calling shutdown()
- for a simple example such as this, you might just want to add a Thread.sleep(60000)
call.
Now go have some fun!


Local Weather - Free Code Codecamp
N/A
Pressure: no data
Humidity: no data
Wind Speed: no data
Location not available
C
F


Contact Management
New Contact - Contact Type
Search
Contact Type
Select a Contact Type to begin.
Association
Married Couple
Person
Trust
Partnership
Federal Government
State Government
Local Government
Tribal Government
Foreign Government
Sole Proprietor
Corporation
Corporation, LLC.
Corporation, LLP.
Reset
Next


High-Spirited Chippa Ready For Chiefs!
by Soccer LadumaKaizer Chiefs can expect to come up against a high-spirited Chippa United side in their match tonight, if the latest information from the Port Elizabeth club’s camp is anything to go by.
Still in search of their first Absa Premiership win of the season, the Chilli Boys will host Amakhosi at the Nelson Mandela Bay Stadium, with newly appointed coach Norman Mapeza knowing very well that anything less than a win for his team will not be good enough in fight against relegation.
Read: Pirates’ Huge Soweto Derby Blow!
Following their 2-0 loss to Highlands Park in their previous league match, as well as their Telkom Knockout loss to Mamelodi Sundowns in a penalty shootout at the weekend, Chippa say the spirit in their camp is at an all-time high as they get ready to host high-flying Amakhosi.
Meanwhile, Chippa have confirmed that Thabo Rakhale, Mzikayise Mashaba, and Gregory Damons have all recovered from their respective injuries and are available for selection for the Chiefs clash.
Read: Heartbreak As Club Confirms Liquidation!
Furthermore, the Eastern Cape club is expected to welcome Boikanyo Komane after the player served his one-match suspension.


digiCamControl - Live View
.
.
Auto focus
Take photo
Close
Zoom live view 25 %
Zoom live view 33 %
Zoom live view 50 %
Zoom live view 60 %
Zoom live view 100 %
Zoom live show all
Focus -
Focus +
Focus --
Focus ++
Focus ---
Focus +++


Navigating your medical cannabis options can be overwhelming
MedCabinet is here to help
Both new and long-time medical cannabis patients often struggle to identify the best strain and dosage for them, particularly when trying to find a natural alternative to pharmaceuticals, spending countless hours researching testimonials and anecdotes. There’s a better way. Using state of the art machine learning technology, MedCabinet can help determine the best options for your health.
Your medical cannabis options are complex. State and local regulations on the production, sale, and use of medical cannabis differ considerably. As a result, the availablity of cannabis products varies widely. We know that this is a frequent source of frustration and confusion for patients, so MedCabinet automatically locates the nearest dispensary that carries each of your personalized recommendations.
Patients and providers deserve hard scientific data to guide their healthcare decisions. Federal regulations prohibit traditional clinical trials for cannabis products, and patients have long been forced to rely on word of mouth recommendations. MedCabinet brings data back into the medical cannabis conversation by carefully analyzing patients reports of the effects of different products and providing the results to patients in an easy to understand format.


Online
Users
users online - snapshot
Account settings
Login record
Logout
MAIN
Dashboard
Customers
Potential Customers
Mail Delivery
Contact Request
Quote Request
Mail Template
Mail Sender
Categories
Structure
Specification Filter
Products
Inventory
SETTINGS
My Account
Personal Info
Change Password
Accounts


Better Homes and Gardens
i. Scene or Posture
we are the bitches of Avenue X
most of us are dead anyways or drove home
there were Reward Miles involved
butted lines at concert, that kind of thing
weavers of failed delivery sexts, fishers of drive
c’mere and founder on the shoals kind of thing
a suspenseful clutch of talent, who knew?
mature would be ignore it
go home at noon like 4:50
sleep it off at the altar of the not totally unfortunate looking
any wad that gums it up
it’s yours for blowing, like
have you ever been punk?
it goes like this:
ii.  Was it grace waiting all night at a keyboard
for an unmentionable chord, was it kinder to be 40?
From her perch reciting: Homer calls it
atrugetoio the sea, unyielding
a barren downy bed, a nymph’s mucosal hug
Oh, baby girl. Your princess, etc. Find another row to hoe another.
iii. les neiges de J/O, New Jersey
Wake up in the 90’s like you crashed
the walking tour of the decade’s tallest
girlfriends and their driveways
& broke up the band
the names are still kinda special
they’re all burnout
vegetarians or you get the idea
bam!
they’re hot and you’re naked
Everyone looks good here
you could be a +1
Kay Gabriel is the author of Elegy Department Spring (BOAAT Press, 2017) and, with David W. Pritchard, Impropria Persona (Damask Press, 2017). She co-edits Vetch (vetchpoetry.org). Find her provocations on Twitter at @unit01barbie.


| < Day Day Up > |
Hack 54 Strip the Kernel
Don't be shy. A kernel stripped down to the bare essentials is a happy kernel. Picture the typical day in the life of a system administrator. Your mission, if you choose to accept it, is to achieve the impossible. Today, you're expected to:
Although there are many ways to go about this, the most efficient way is to strip down the kernel to its bare-bones essentials. Having this ability gives an administrator of an open source system a distinct advantage over his closed source counterparts. The first advantage to stripping the kernel is an obvious security boost. A vulnerability can't affect an option the kernel doesn't support. The second is a noticeable improvement in speed and performance. Kernels are loaded into memory and must stay in memory. You may be wasting precious memory resources if you're loading options you have no intention of ever using. If you've never compiled a kernel or changed more than one or two kernel options, I can hear you groaning now. You're probably thinking, "Anything but that. Kernels are too complicated to understand." Well, there is a lot of truth in the idea that you haven't really used an operating system until you've gone through that baptism of fire known as kernel compiling. However, you may not have heard that compiling a kernel isn't all that difficult. So, grab a spare afternoon and a test system; it's high time to learn how to hack a BSD kernel. I'll demonstrate on a FreeBSD system, but you'll find resources for other systems at the end of this hack. Before you start, double-check that you have the kernel source installed. On an Intel FreeBSD system, it lives in /usr/src/sys/i386/conf. If that directory doesn't exist, become the superuser and install it: # /stand/sysinstall Configure Distributions spacebar [ ] src to select it spacebar [ ] sys to select it tab to OK Next, navigate into that directory structure and check out its contents: # cd /usr/src/sys/i386/conf # ls ./ GENERIC.hints OLDCARD gethints.awk ../ Makefile PAE GENERIC NOTES SMP Two files are important: the original kernel configuration file, GENERIC, and NOTES. Note that NOTES is instead called LINT on 4.x FreeBSD systems. 6.2.1 Customizing Your KernelCustomizing a kernel is a very systematic process. Basically, you examine each line in the current configuration file, asking yourself, "Is this applicable to my situation?" If so, keep it. Otherwise, remove it. If you don't know, read NOTES for that option. I always customize my kernel in several steps. First, I strip out what I don't need. Then, I use buildkernel to test my new configuration file. If it doesn't build successfully, I know I've inadvertently removed something essential. Using the error message, I go back and research that missing line. If the build succeeds, I read through NOTES to see if there are any options I wish to add to the kernel. If I add anything, I'll do another buildkernel, followed by an installkernel if the build is successful. I find it much easier to troubleshoot if I separate my deletions from my additions. Let's copy over GENERIC and see about stripping it down: # cp GENERIC STRIPPED # vi STRIPPED # # GENERIC -- Generic kernel configuration file for FreeBSD/i386 # # For more information on this file, please read the handbook section on # Kernel Configuration Files: # # http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html # # The handbook is also available locally in /usr/share/doc/handbook # if you've installed the doc distribution, otherwise always see the # FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the # latest information. # # An exhaustive list of options and more detailed explanations of the # device lines is also present in the ../../conf/NOTES and NOTES files. # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. <IP_ADDRESS> CPU optionsThe first thing you'll notice is that this file is very well commented. It's also divided into sections, making it easier to remove things such as ISA NIC, SCSI, and USB support. The first section deals with CPU type: machine i386 cpu I486_CPU cpu I586_CPU cpu I686_CPU ident GENERIC Whenever you come across a section you're not sure about, look for that section in NOTES. Here, I'll search for CPU: # grep CPU NOTES Your output will include a few pages worth of CPU information. The first few lines describe which CPUs belong with the I486, I586, and I686 entries. Once you find your CPU, remove the two entries that don't apply. If you're not sure what type of CPU is installed on the system you're configuring, try: # grep CPU /var/run/dmesg.boot CPU: Intel(R) Pentium(R) III CPU 1133MHz (1138.45-MHz 686-class CPU) acpi_cpu0: <CPU> port 0x530-0x537 on acpi0 Since a Pentium III is considered to be an I686_CPU, I'll remove the I486_CPU and I586_CPU lines from this system's configuration file. The rest of the output from grep CPU NOTES contains extra lines that can be added to the kernel. Read through these to see if any apply to your specific CPU and the needs of the machine you are configuring. If so, make a note to try adding these later. <IP_ADDRESS> System-specific optionsThe next section contains a heck of a lot of options. If this is your first kernel, most of your research will be deciding which options you need for your particular system. I find the handbook most helpful here, as it lists the pros and cons of nearly every option. I always keep these options on all of my systems: options SCHED_4BSD # 4BSD scheduler options INET # InterNETworking options FFS # Berkeley Fast Filesystem options COMPAT_FREEBSD4 # Compatible with FreeBSD4 options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!] Note that that last listed option tells you to keep it. Do keep anything that contains such a comment. The rest of the options are specific to that system's needs. For example, does it need to support IPv6? Do you wish to use softupdates or the new MAC framework? Does this system need to be an NFS server or NFS client? Does this system have a CD-ROM attached or any SCSI devices? Does the system have multiple processors? If so, uncomment the next two lines; otherwise, you can safely remove them: # To make an SMP kernel, the next two are needed #options SMP # Symmetric MultiProcessor Kernel #options APIC_IO # Symmetric (APIC) I/O <IP_ADDRESS> Supported buses and media devicesThe next section deals with devices. First, we start with the buses: device isa device eisa device pci If you grep device NOTES, you'll see that you can also add the agp and mca buses if your system requires them. If your system doesn't use the isa or eisa buses, you can remove those lines. If you wish to disable floppy support on your server, removing these lines will do it: # Floppy drives device fdc Next, does your server use IDE or SCSI devices? If it uses IDE, the next section applies: # ATA and ATAPI devices device ata device atadisk # ATA disk drives device atapicd # ATAPI CDROM drives device atapifd # ATAPI floppy drives device atapist # ATAPI tape drives options ATA_STATIC_ID # Static device numbering Remember, you can remove the CD-ROM, floppy, and tape lines to suit your requirements. However, keep the other lines if you use an IDE hard drive. Conversely, if your system is all SCSI, delete the ATA lines and concentrate on this section: # SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices <snip> Keep the entries for the SCSI hardware your system is using, and remove the entries for the other devices. If your system doesn't have SCSI hardware, you can safely delete the entire SCSI section. The same logic applies to the following RAID section: # RAID controllers interfaced to the SCSI subsystem device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID device ciss # Compaq Smart RAID 5* device dpt # DPT Smartcache III, IV - See NOTES for options! device iir # Intel Integrated RAID device mly # Mylex AcceleRAID/eXtremeRAID and for the SCSI peripherals and RAID controllers sections: # SCSI peripherals device scbus # SCSI bus (required) device ch # SCSI media changers <snip> # RAID controllers device aac # Adaptec FSA RAID device aacp # SCSI passthrough for aac (requires CAM) <snip> <IP_ADDRESS> Peripheral support and power managementThe next few entries are usually keepers as it's always nice to have a working keyboard, unless you're using a headless system [Hack #26] . # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller device atkbd # AT keyboard The next line depends on whether you're using a serial or a PS/2 mouse: device psm # PS/2 mouse You'll probably want to keep your video driver: device vga # VGA video card driver However, you'll probably remove the splash device, unless you plan on configuring a splash screen [Hack #24] . device splash # Splash screen and screen saver support You'll have to choose a console driver. It can be either the default SCO driver or the pcvt driver (see the handbook for details): # syscons is the default console driver, resembling an SCO console device sc # Enable this for the pcvt (VT220 compatible) console driver #device vt #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor The next options refer to power management on laptops, as well as laptop PCMCIA cards. Unless your server is a laptop, you can remove these: # Power management support (see NOTES for more options) #device apm # Add suspend/resume support for the i8254. device pmtimer # PCCARD (PCMCIA) support # Pcmcia and cardbus bridge support device cbb # cardbus (yenta) bridge #device pcic # ExCA ISA and PCI bridges device pccard # PC Card (16-bit) bus device cardbus # CardBus (32-bit) bus Do you plan on using your serial and parallel ports? If not, the next section allows you to disable them: # Serial (COM) ports device sio # 8250, 16[45]50 based serial ports # Parallel port device ppc device ppbus # Parallel port bus (required) device lpt # Printer device plip # TCP/IP over parallel device ppi # Parallel port interface device #device vpo # Requires scbus and da <IP_ADDRESS> Interface supportNow it's time to support your system's NICs. Here's one way to find out the device names of your interfaces: # grep Ethernet /var/run/dmesg.boot rl0: Ethernet address: 00:05:5d:d2:19:b7 rl1: Ethernet address: 00:05:5d:d1:ff:9d ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0x9800-0x981f irq 10 at device 11.0 on pci0 Once you know which interfaces are in your system, remove the NICs that aren't. If your system doesn't contain any ISA or wireless NICs, you can safely remove those entire sections. Do make note of this comment, though: # PCI Ethernet NICs that use the common MII bus controller code. # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! device miibus # MII bus support device dc # DEC/Intel 21143 and various workalikes <snip> Any NICs underneath that comment require that miibus entry. If you forget it, your kernel won't build. Fortunately, the error message will have the word miibus in it. Next come the pseudodevices. If you plan on using encryption, keep the random device. You'll probably also need to keep the loop and ether devices. If you use an analog modem to connect to your service provider, keep the ppp and tun devices. Otherwise, remove them, along with the slip device. Several applications—including emacs, xterm, script, and the notorious telnet—require the pty device. Depending upon the use of your server, you may be able to remove that device. If it breaks needed functionality, you can always recompile it back into your kernel. Are you planning on using memory disks? If not, you can remove md. If you're not sure, try reading man mdmfs. If you previously removed IPv6 support with options INET6, you might as well remove these two devices as well: device gif # IPv6 and IPv4 tunneling device faith # IPv6-to-IPv4 relaying (translation) The next device has some security implications, as it is required in order to run a packet sniffer such as tcpdump. However, it's also required if your system is a DHCP client. If neither applies, remove the bpf device: # The `bpf' device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! device bpf # Berkeley packet filter <IP_ADDRESS> USB supportDoes your system have any USB devices? If so, you need a host controller as well as USB bus support. First, determine which type of USB host controller you have. man uhci and man ohci describe which hardware goes with which controller. Once you've found your hardware, keep the appropriate interface entry: # USB support device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface Also, don't forget to keep that USB bus line: device usb # USB Bus (required) Are you confused about the next three USB options? Fortunately, each has a manpage. Try man udbp, man ugen, and man uhid to see if any apply to your particular situation. #device udbp # USB Double Bulk Pipe devices device ugen # Generic device uhid # "Human Interface Devices" Next, keep the devices you have installed and remove the rest. Again, note that USB NICs need that miibus entry we saw earlier. Also, some entries require device scbus and device da. Double-check your SCSI sections. If you removed these devices earlier and need them, add them to this section. device ukbd # Keyboard device ulpt # Printer device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse device urio # Diamond Rio 500 MP3 player device uscanner # Scanners # USB Ethernet, requires mii device aue # ADMtek USB ethernet device axe # ASIX Electronics USB ethernet device cue # CATC USB ethernet device kue # Kawasaki LSI USB ethernet Finally, the only option group left is Firewire support. If you need it, keep the entire section, and double-check that you have a device scbus and device da entry somewhere in your configuration file. If you don't need Firewire support, remove the entire section: # FireWire support device firewire # FireWire bus code device sbp # SCSI over FireWire (Requires scbus and da) device fwe # Ethernet over FireWire (non-standard!) Whew. We finally made it through the configuration file. Congratulations! You now have a much better idea of the hardware on your system and can rest easily in the knowledge that soon no extra drivers will be wasting memory resources. Not only that, your next kernel configuration will go much more quickly as you've already researched the possibilities. 6.2.2 Building the New KernelNow comes the moment of truth. Will the configuration file actually build? To find out: # cd /usr/src
# make buildkernel KERNCONF=
STRIPPED Replace STRIPPED with whatever name you called your kernel configuration file. If all goes well, you should just get your prompt back after a period of time, which varies depending upon the speed of your CPU. If you instead get an error message, you probably forgot miibus, scbus, or da, and the message will reflect that. Add the missing line and try again. Occasionally you'll get a kernel that just refuses to build, even when you're sure the configuration file is fine. If that's the case, try building GENERIC. If that fails, you have a hardware issue. I once inherited a system with a flaky motherboard. I tried a few kernel compiles, which took forever before finally resulting in an error code 1. Fortunately, I use removable drives, so I simply inserted the drive into another system, successfully compiled the kernel, and then returned the drive to the flaky system for the actual kernel install. 6.2.3 Keeping Track of Your OptionsOnce I have a successful build, I like to document what I removed from the original kernel. This is easily done: # echo "These are the lines I deleted" > changes.txt \ & diff GENERIC STRIPPED >> changes.txt The diff utility will list the differences between the original and my version of the kernel configuration file. Note that I used >> to append those differences without removing my previously echoed comment. See [Hack #92] for more examples that use diff. Before installing the kernel, read through NOTES to see if there are any lines you wish to add. Additionally, if you wish to take advantage of memory addresses over 4 GB, carefully read through PAE and its section in the handbook to see if it is appropriate for your situation. If you add any lines, repeat the make buildkernel command when you are finished. I also like to append my additions to my changes.txt file: # echo "And these are the lines I added" >> changes.txt \ & diff GENERIC STRIPPED >> changes.txt Note that this time it is very important I remember to append both my comment and the output of diff by using two > characters. 6.2.4 Installing the New KernelNow, let's install the kernel: # cd /usr/src # make installkernel KERNCONF=STRIPPED This process is much quicker than building the kernel. However, the kernel won't actually be loaded into memory until you reboot. Before you do that, it's always a good idea to print out the "If Something Goes Wrong" page of the FreeBSD Handbook, just in case something goes wrong. See http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-trouble.html#KERNELCONFIG-NOBOOT. It's rare that a kernel will install but not boot, but it never hurts to be prepared ahead of time. 6.2.5 See Also
|
| < Day Day Up > |


Hi, my name is Amanda Hewlett. I'm a hairstylist and makeup artist at Kharma Design Studio in Victoria, B.C.
I'm a bubbly, happy person who is extremely passionate about what I do. I love making my clients feel well taken care of and beautiful (or handsome) when they leave my chair!
Hair Services
Women's Cut & Blowout $40-45
Women's Wash & Blowout $25
Up-Do $70
Color starting from $40-60
Partial Highlights $45-65
Full Highlights $60-80
Balayage or Ombre $90+
Color per bowl $10-20
Men's Cut & Style $20-25
Child Cut (0-9 years) $15
Youth Cut (10-15 years) $25
Tape-in Extensions by consultation
Makeup Services for weddings & special events Price by consultation


Ethereum (ETH) Holding Crucial Support While Bitcoin Is Declining
- Ethereum price is still struggling to climb above $186, $188 and $190 resistances against the US Dollar.
- The price is currently declining and it seems like it could retest the $180 support area.
- There are two major bearish trend lines forming with resistance near $186 on the hourly chart of ETH/USD (data feed via Kraken).
- Bitcoin is under a lot of pressure and it recently decline below the $8,500 support.
Ethereum price is holding an important support versus the US Dollar, while climbing vs bitcoin. ETH price might retest the $180 or $178 support area in the near term.
Ethereum Price Analysis
Recently, Ethereum found a strong buying interest near the $178 level against the US Dollar. As a result, ETH price started an upward move above the $180 and $182 levels.
Moreover, the price broke the $185 resistance and the 100 hourly simple moving average. However, the upward move was capped by the $186 resistance area. A high was formed near $186 and the price is currently correcting lower.
It broke the 23.6% Fib retracement level of the recent wave from the $177 low to $186 high. At the moment, the price is trading near the $184 level and the 100 hourly simple moving average.
An immediate support is near the $182 level. Besides, the 50% Fib retracement level of the recent wave from the $177 low to $186 high is also near the $182 level. The main support is near the $180 level, below which the price is likely to revisit the $178 support area.
On the upside, Ethereum price is still struggling to climb above $186, $188 and $190 resistances. More importantly, there are two major bearish trend lines forming with resistance near $186 on the hourly chart of ETH/USD.
If there is a clear break above both the trend lines, the price is likely to make an attempt to surpass the $188 resistance area. Having said that, a clear break and close above the $190 resistance is needed for a sustained move higher in the near term.
Looking at the chart, Ethereum price is somehow holding the $180 and $178 levels. On the other hand, bitcoin is declining and it even traded below the $8,500 support level. Therefore, there are high chances of a decent upward move as long as ETH price is trading above the $180 and $178 support levels.
ETH Technical Indicators
Hourly MACD – The MACD for ETH/USD is slowly gaining pace in the bearish zone.
Hourly RSI – The RSI for ETH/USD is currently gaining bearish momentum and is well below the 50 level.
Major Support Level – $180
Major Resistance Level – $186


7-Segment Display
Behavior
Displays the values of its eight one-bit inputs. Segments
are either
colored or light gray depending on the inputs. The correspondence is as
follows.
(Manufacturers vary as to how they map inputs to segments; the
correspondence used here is based on Texas Instruments'
TIL321.)
Pins
- North edge, first from left (input, bit width 1)
- Controls the middle horizontal segment.
- North edge, second from left (input, bit width 1)
- Controls the upper vertical segment on the left side.
- North edge, third from left (input, bit width 1)
- Controls the upper horizontal segment.
- North edge, fourth from left (input, bit width 1)
- Controls the upper vertical segment on the right side.
- South edge, first from left (input, bit width 1)
- Controls the lower vertical segment on the left side.
- South edge, second from left (input, bit width 1)
- Controls the bottom horizontal segment.
- South edge, third from left (input, bit width 1)
- Controls the lower vertical segment on the right side.
- South edge, fourth from left (input, bit width 1)
- Controls the decimal point.
Attributes
- On Color
- The color with which to draw the display segments and decimal point when
they are on.
- Off Color
- The color with which to draw the display segments and decimal point when
they are off.
- Background
- The color with which to draw the display's background (transparent by default).
- Active On High?
- If
yes
, then the segments light when the corresponding input is 1.
If no
, they light when the corresponding input is 0.
Poke Tool Behavior
None.
Text Tool Behavior
None.
Back to Library Reference


Places Visited
Add a place:
Place name
Location
Landmarks (separated by comma)
Season
Notes (separated by comma)
Add
Places:
Place name:
Location:
Season:
Landmarks
Notes


CodeCommit Repository Trigger
Trigger
is a property of the AWS::CodeCommit::Repository resource that defines the actions to take
in response to events that occur in the CodeCommit repository.
Syntax
To declare this entity in your AWS CloudFormation template, use the following syntax:
JSON
{ "Branches" : [
String, ...
], "CustomData" :String
, "DestinationArn" :String
, "Events" : [String, ...
], "Name" :String
}
YAML
Branches: -
String
CustomData:String
DestinationArn:String
Events: -String
Name:String
Properties
Branches
-
The names of the branches in the CodeCommit repository that contain events that you want to include in the trigger. If you don't specify at least one branch, the trigger applies to all branches.
Required: No
Type: List of String values
CustomData
-
When an event is triggered, additional information that CodeCommit includes when it sends information to the target.
Required: No
Type: String
DestinationArn
-
The Amazon Resource Name (ARN) of the resource that is the target for this trigger. For valid targets, see Manage Triggers for an CodeCommit Repository in the AWS CodeCommit User Guide.
Required: No
Type: String
Events
-
The repository events for which CodeCommit sends information to the target, which you specified in the
DestinationArn
property. If you don't specify events, the trigger runs for all repository events. For valid values, see the RepositoryTrigger data type in the AWS CodeCommit API Reference.Required: No
Type: List of String values
Name
-
A name for the trigger.
Required: Yes
Type: String


Formatting and structuring multi-parameter spatiotemporal data is often a time-consuming task. This package offers functions and data structures designed to easily organize and visualize these data for applications in geology, paleolimnology, dendrochronology, and paleoclimate. See Dunnington and Spooner (2018) <doi:10.1139/facets-2017-0026>.
| Version: | 1.0.4 |
| Depends: | R (≥ 3.2.2) |
| Imports: | ggplot2, dplyr (≥ 0.7), jsonlite (≥ 1.2), tibble, magrittr, stringr, readr, tidyr, lubridate, rlang, tidyselect, withr, fs |
| Suggests: | testthat, RSQLite, dbplyr, sf (≥ 0.5.5), covr, knitr, rmarkdown, hms |
| Published: | 2018-12-08 |
| Author: | Dewey Dunnington [aut, cre] |
| Maintainer: | Dewey Dunnington <dewey at fishandwhistle.net> |
| BugReports: | https://github.com/paleolimbot/mudata/issues |
| License: | GPL-2 |
| URL: | https://github.com/paleolimbot/mudata |
| NeedsCompilation: | no |
| Materials: | README |
| CRAN checks: | mudata2 results |
| Reference manual: | mudata2.pdf |
| Vignettes: |
mudata mudata_create |
| Package source: | mudata2_1.0.4.tar.gz |
| Windows binaries: | r-devel: mudata2_1.0.4.zip, r-release: mudata2_1.0.4.zip, r-oldrel: mudata2_1.0.4.zip |
| OS X binaries: | r-release: mudata2_1.0.3.tgz, r-oldrel: mudata2_1.0.3.tgz |
| Old sources: | mudata2 archive |
| Reverse imports: | rclimateca |
Please use the canonical form https://CRAN.R-project.org/package=mudata2 to link to this page.


source file: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/boto3/docs/__init__.py
file stats: 12 lines, 3 executed: 25.0% covered
1. # Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. 2. # 3. # Licensed under the Apache License, Version 2.0 (the "License"). You 4. # may not use this file except in compliance with the License. A copy of 5. # the License is located at 6. # 7. # http://aws.amazon.com/apache2.0/ 8. # 9. # or in the "license" file accompanying this file. This file is 10. # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 11. # ANY KIND, either express or implied. See the License for the specific 12. # language governing permissions and limitations under the License. 13. import os 14. 15. from boto3.docs.service import ServiceDocumenter 16. 17. 18. def generate_docs(root_dir, session): 19. """Generates the reference documentation for botocore 20. 21. This will go through every available AWS service and output ReSTructured 22. text files documenting each service. 23. 24. :param root_dir: The directory to write the reference files to. Each 25. service's reference documentation is loacated at 26. root_dir/reference/services/service-name.rst 27. 28. :param session: The boto3 session 29. """ 30. services_doc_path = os.path.join(root_dir, 'reference', 'services') 31. if not os.path.exists(services_doc_path): 32. os.makedirs(services_doc_path) 33. 34. for service_name in session.get_available_services(): 35. docs = ServiceDocumenter(service_name, session).document_service() 36. service_doc_path = os.path.join( 37. services_doc_path, service_name + '.rst') 38. with open(service_doc_path, 'wb') as f: 39. f.write(docs)


These instructions are for the current release version, 1.2.0. For assistance with beta or release candidate versions, or for questions or problems not addressed by this documentation or the tips page, visit the UI Layout discussion group:
UI Layout creates a 'page-layout' that has auto-sizing 'center pane' surrounded by up to four collapsible and resizable 'border panes' (north, south, east & west). It can also create multiple headers & footers inside each pane.
UI Layout创建了这样一种页面布局，它由一个可自动尺寸自适应的中心面板(center pane)和环绕在中心面板四周的四个可拆装的、可变尺寸的区域面板(border panes)，它们分别是东，南，西，北(north,south, east, west)。另外它还可以在各自的面板中创建多个头(header)和底(footer)。
For more complex layouts, you can nest layouts within layouts. Or use an iframe as a pane to create a 'sub-form' that can have its own layout. The possibilities are unlimited - from simple fixed headers or sidebars to rich applications.
如果需要更复杂的布局，你能够在一个布局中嵌套布局，或者使用iframe作为面板并在其上穿件自己的布局。各种可能的组合是无限的，从最简单的头部区域定义或者边条到富客户应用都是可行的。
Layouts are created from existing elements (divs, iframes, etc), so will degrade gracefully. You can even make some regions invisible, so they simple will not show if the user does not have Javascript enabled.
布局建立在各种已存在的页面元素上(div，iframes.....)，从而布局可以被很优雅的进行拆机、组合。你甚至能够让某些区域不可见，由此如果用户没有javascript支持，它们就可以简单的不被显示出来。
Open All Sections(展开所有章节) Close All Sections(关闭所有章节)
Required(必须)
Optional(可选)
We're unaware of any browsers that do not work, but only these have been tested:
我们不知道在那些浏览器下我们的组件不能正常工作，但是以下的浏览器都是经过验证能够正常工作的。
After viewing a demo, click 'Back' to return to this page
SEE MORE demos & samples on our demos page.
This is a minimalist layout with all 4 border-panes, with basic styling added for demo purposes (applyDefaultStyles = true):
以下是一个包括所有四个区域面板的布局的最简写法，它使用了用于演示目的的基础样式(applyDefaultStyles = true):

Center

North

South

East

West

VIEW this example page: example.html
To help you understand layout options and instructions, here is the terminology used...
为了能够帮助您更好的理解布局组件的选项与结构，以下是使用的名词术语的解释：
The layout container is the element specifed when creating a layout. Most commonly this will be the 'body' element, but you could put a layout inside any block-element, including inside a 'pane' of another layout (a nested layout).
布局容器指的是在创建布局对象时需要进行指定的元素，大多数情况下这个容器可能是body元素，但是实际上你可以指定任何一个块元素（block-element）作为容器，在其内部创建布局，这里指的容器也包括了一个已有布局对象的任何一个面板（pane），也就是说创建了一个嵌入布局。
Here is an example that creates a layout covering the entire page ('body'), and a second layout that is inside the 'center pane' of the first layout:
下面的例子演示了以整个页面('body')为容器作为容器创建第一个布局对象，然后在第一个布局对象的中心面板('center pane')中创建第二个布局对象：
$("body").layout(); $("body > .ui-layout-center").layout();You can see a sample of this layout in the complex.html demo page.
你能够在如下演示页面看到这样的布局方式 复杂布局演示页面.
When a border-layout is created, it has up to five regions: 'north', 'south', 'west', 'east' and 'center'. (Only a center region is required) These regions/elements are referred to as 'panes' - as in window-panes. Most options apply only to the 'border-panes', meaning all except the center-pane.
当一个区域布局被创建，它由五个区域组成：北、南、西、东、中( 'north', 'south', 'west', 'east' and 'center'). (其中只有中心区域是必须的) 这些区域或者叫做元素被称为'面板(panes)' - 就像窗户的分格. 绝大多数的选择项只是应用到 '边界区域面板(border-panes)', 意思是指除了中心面板(center-pane)的其他面板.
NOTE: All panes are existing DIVs (or other elements) in your HTML mark-up— panes are NOT auto-generated. The pane elements must be direct 'children' of the container element - i.e., not nested inside other elements. There is an exception for nesting inside a FORM, or if you use an ID as a selector instead of the default class-selectors.
注意:所有面板都应该是你的HTML代码中已经存在的DIV(或者其他元素)— 面板是不会被自动生成的。面板元素必须是容器元素的直接子孙 , 而不能是包含在其他元素内部的元素. 也存在一个例外，如包含在一个表单(FORM)内的元素，, 或者你使用ID作为选择器代替默认的CSS class选择器.
TIP: Using an IFRAME as a pane works great! Since the iframe auto-sizes, you will never again have TWO vertical scrollbars on your page. This website's Discussion and Issues pages use a layout with an iframe to incorporate pages from other websites.
提示: 使用IFRAME作为面板工作时非常正常的也是个不错的选择! 由于iframe是尺寸自适应的，故而你就不再需要为出现两重纵向滚动条而烦恼了. 如下的网址的This website's Discussion and Issues 页面就是使用iframe作为布局元素展示其他网站页面。
In this document, when 'PANE' is written in uppercase, it means one of the panes. For example: "ui-layout-PANE" means "ui-layout-north" , or "ui-layout-center" , etc.
在本文中，当 'PANE' 以大写字母方式书写时，意味着它是区域布局的面板元素之一。 例如: "ui-layout-PANE" 指的是 "ui-layout-north" , 或者 "ui-layout-center" , 以及其他类似情况.
The auto-generated resizer-bar and toggler-button elements (DIVs) are 'attached' to their correpsonding border-pane and have related classNames, for example: "ui-layout-resizer-west" is the resizer-bar for the west-pane: "ui-layout-pane-west" .
边界面板都具有它们自己的resizer-bar和 toggler-button，此二者都是以 (DIV)的形式存在，并会被自动创建到它们所对应的面板上，而且还会被冠以相对应的CSS class名(className), 例如: "ui-layout-resizer-west" 就代表着面板西( "ui-layout-pane-west" )所对应的 resizer-bar: .
'Pane spacing' refers to the space on the 'inside edge' of a border-pane. For the north pane, this is the bottom edge, for the west pane, it's the right edge. A pane can have -0- spacing, which means no space between it and the adjacent panes. If a pane has no spacing, then it cannot have a resizer-bar or toggler-button.
面板间距指的是边界面板的内边界(inside edge)所对应的的间隔区域. 对于北面板而言，指的就是底部边界，对于西面板而已，指的就是右边界。一个面板的间距可以为0，这就意味着在它和比邻的面板之间没有任何的间距，如果面板没有间距那就意味着此面板没有resizer-bar或者toggler-button.
Spacing can be different when the pane is open than when closed: Each pane has options for spacing_open and spacing_closed
面板在开或者闭的不同状态时间距可以使不同的，每个边界面板都有各自的的选项针对 spacing_open 和 spacing_closed
A DIV element is created that fills the 'spacing' between panes. The resizer DIV is always the full width of the spacing and the full height of the pane. Panes can have different spacing set for open and closed states - the resizer-bar is automatically resized and repositioned each time a pane is opened or closed.
尺寸调节是一个 DIV元素，它被创建并填充到面板间的间距空间中。它总是占满间距的全部宽度和面板的全部高度。面板在开、闭状态时可以设定不同的间距，尺寸调节条会自动进行自身的尺寸调节与重定位以适应面板的开、闭操作。
Actually there is not a separate 'slider-bar' element - the resizer-bar acts as a slider-bar when the pane is 'closed'. Clicking or hovering the resizer/slider bar will 'slide a pane open', meaning it slides over top of the adjacent panes without resizing them. When the mouse moves off the pane, it automatically slides closed again. This feature can be customized or disabled for each pane in the layout options.
实际上并不存在独立的滑动条('slider-bar')元素,当面板处在关闭状态时尺寸调节条(resizer-bar)就是滑动条。当鼠标点击它或者鼠标符号悬浮在其上时，面板就会滑动展开,也就是说面板活动展开并悬浮于比邻面板的 上层而并不是对它进行尺寸调节。当鼠标移出此面板的范围，此面板就会自动的滑动关闭，此特性可被布局模型的各个面板所定制或者取消。
A DIV element is created inside the resizer DIV. This DIV acts as a 'toggler-button' to open and close a pane. You can make this look like anything you want by adding color, borders, and/or a background-image to it. Or you can insert text, images or custom HTML inside the toggler using the togglerContent options.
切换按钮是创建在尺寸调节条DIV之中的一个DIV元素。此 DIV作为切换按钮，功用就是用以打开或者关闭面板。在此DIV上你可以做任何事，颜色、边框、背景图片、文本、或者使用togglerContent选项加入你定制的Html内容.
The toggler button always fills the full width of the resizer-bar (inside resizer borders). Toggler length is an option, which can be either a pixel-value, like 50, or it can be "100%" (or -1). If set to 100%, the toggler completely covers the resizer-bar (except for resizer borders). Note that this prevents 'resizing' when the pane is open, and 'sliding open' when the pane is closed.
切换按钮总会占满尺寸调节条的整个宽度(在调节条内部). 切换按钮的长度是可选择定义的，它能够定义为像素值(pixel),例如50， 或者能被定义为百分百，例如100%,或者-1.如果长度被设定为100%，则会覆盖整个调节条(除了调节条的边框)。 注意在切换按钮上，无论面板是开状态下的调节尺寸功能以及面板关闭状态下的划开功能都是被阻止的，也就是不响应。
Each pane can have different Toggler lengths, and these can be different depending on whether the pane is open or closed, for example:
不同的面板可以具有自己不同尺寸的切換按鈕並且在面板的开、闭不同状态下按钮可以被设定为不同的长度, 例如:
, togglerLength_open: 50 , togglerLength_closed: "100%" , north__togglerLength_open: "100%" , south__togglerLength_open: "100%"
布局对象是通过在容器上调用layout方法进行创建的，而且可以传递一组布局的属性设定(可选):
$('body').layout( [options] );
如果一个布局对象实例被指定给一个对象指针(建议这样)...
var myLayout = $('body').layout();
...则此布局实例对象的一组属性、方法、工具能被使用、调用、存取以对此实例进行控制或者查看:
// init instance var
var myLayout = $('body').layout();
// read layout 'options'
var is_west_resizable = myLayout.options.west.resizable;
var north_maxHeight = myLayout.options.north.maxSize;
// get layout 'state'
var is_west_open = myLayout.state.west.isOpen;
var north_size = myLayout.state.north.size;
// layout methods
myLayout.toggle("north");
myLayout.sizePane("west", 300);
// layout utilities
myLayout.addPinBtn("#myPinButton", "west");
myLayout.allowOverflow("north");
这是一个面板对象数组 (panes.north, panes.south, etc). 每一个面板元素都已经被jQuery进行包裹。如果在布局中某个面板不存在，例如没有南部面板，则 panes.south == false，而不会被处理成为jQuery元素。
一个哈希结构，它存储着所有用于创建布局的属性，它既包括了默认值也包括了用户自定义属性。属性会被以"Sub-Key"格式返回，关于这种格式请看下文中的相关介绍。
一个哈希结构，它存储了所有元素的尺寸，包括布局容器，这些尺寸包括了 top, bottom, left, right的边框、填充，还有 outerWidth, outerHeight, innerWidth, innerHeight .
var containerWidth = myLayout.state.container.innerWidth; var isWestOpen = !myLayout.state.west.isClosed;SEE Reading the Layout-State for more information.
大部分的方法都需要指定一个面板，通常情况下会是一个边界面板，如: "north" , "south" , "east" or "west" .
切换指定面板的开闭状态 -对它的当前状态取反。
Open the specified pane. If the pane is already open, nothing happens. If the pane is currently 'hidden' (not just 'closed'), then the pane will be unhidden and opened. 展开指定的面板。如果指定的面板已经是展开的，则什么也不会发生。如果面板当下处于"隐藏"状态(不仅是关闭状态(closed)),则面板会显示出来并展开。
Close the specified pane. If the pane is already closed, nothing happens. 关闭指定的面板，如果面板已经处于关闭状态，则什么也不会发生。
Hide the specified pane. When a pane is hidden, it has no spacing or resizer-bar or toggler-button - it is completely invisible, as if it did not exist. 隐藏指定的面板，当面板处于隐藏状态时，则面板是完全不可见的，当然也不会有间隔、拖拉条或者切换按钮，就像他它是完全不存在一样。
Un-hide the specified pane. Normally also opens the pane, but if you pass 'false' as the second parameter, then pane will un-hide, but be 'closed' (slider-bar and toggler now visible). 使指定的面板从隐藏状态下显示出来。通常情况下也会展开此面板，如果你将第二个参数设置为'false'，则此面板会被展示出来但是会处于关闭状态(滑动条、切换按钮时可见的)。
This sizes the pane in the direction it opens and closes - for north and south panes, size=outerHeight, for east and west panes, size=outerWidth. The pane will only resize within its minSize and maxSize limits. 这个方法用于重新设置面板的尺寸、具体指的是面板所在方向上的，而且是在开、闭不同状态下的。如：南、北面板就是面板的外部高度，如东、西面板指的就是外部宽度了。面板尺寸调整只会在最大、最小值限定范围内变化。
Resizes the 'content container' inside the specified pane. Content is resized automatically when the pane is resized or opened, so this method only needs to be called manually if something 'changes the height' of a header or footer element in the pane.SEE Content Scrolling (Headers & Footers) for more information.
在指定面板内重新设定内容容器的尺寸， Resizes the 'content container' inside the specified pane. Content is resized automatically when the pane is resized or opened, so this method only needs to be called manually if something 'changes the height' of a header or footer element in the pane.SEE Content Scrolling (Headers & Footers) for more information.
Resizes the entire layout to fit its container. This method runs automatically for all layouts when the browser window is resized.When a layout is inside another element (its 'container'), and that container-element can be 'sized' without resizing the entire window, then layout.resizeAll() should be called so the inner-layout will resize when its container resizes.
In the example below, a 'resize callback' is added to the outerLayout.center pane because it is the container for the innerLayout:
outerLayout = $("body").layout({ center__onresize: "innerLayout.resizeAll" }); innerLayout = $("div.ui-layout-center").layout();
SEE Tips, Tricks and Utilities for details on these special utility methods.
Layout options are passed when creating a layout. There are options to customize almost every aspect of a layout, but all options are optional. You can use the default options to create a fast and simple layout, or create a completely custom look for your application. Callback options can also help integrate a layout with your design.
You can either pass the options inline:
$("body").layout({ option1: value, option2: value });
OR it may be convenient to save them in a var and pass that:
var myOptions = { option1: value, option2: value };
$("body").layout( myOptions );
There are 2 different formats you can use to specify options:
With this format, every option must be inside either the 'defaults' sub-key or a sub-key for a specific 'pane'...
These are the options for the 'Inner Layout' on the complex demo page
$("body").layout({
defaults: {
fxName: "slide"
, fxSpeed: "slow"
, spacing_closed: 14
, initClosed: true
}
, north: {
fxName: "none"
, spacing_closed: 8
, togglerLength_closed: "100%"
}
, south: {
fxName: "none"
, spacing_closed: 8
, togglerLength_closed: "100%"
}
});
List format uses prefixes to identify pane-specific options instead of separate sub-keys. The prefix is the pane's name and TWO underscores, eg: "north__fxName" . Options specified without a prefix (eg, fxName) are considered 'defaults'. You can also prefix default options - "defaults__fxName" - but the prefix is not necessary.
These are the same options shown above, but in list format. List format allows options to be specified in any order, so related default & pane-specific options are grouped together here:
$("body").layout({
fxName: "slide"
, fxSpeed: "slow"
, north__fxName: "none"
, south__fxName: "none"
, spacing_closed: 14
, north__spacing_closed: 8
, south__spacing_closed: 8
, north__togglerLength_closed: "100%"
, south__togglerLength_closed: "100%"
, initClosed: true
}
Options specified for an individual 'pane' always override options specified as 'defaults'.
If the north, south and east panes should be 'closed' when the layout is created - so only the west pane is open - then just 2 options are needed:
initClosed: true
west__initClosed: false
This causes all panes except west to be closed when created.
Options with 'selector' in their name - like 'contentSelector' - require a COMPLETE jQuery selector string. So if the selector is a className, start it with a period (.) - if the selector is an ID, start it with a pound sign (#). Any valid jQuery selector string can be used.
Options with 'class' in their name - like 'togglerClass' - do NOT start with a period. The classNames specified are applied to the element, plus are used as a root for additional classNames. For example, if you set this options
togglerClass: "myToggler"
This would generate ALL these classes for the toggler-button on the west-pane:
class="myToggler
myToggler-west
myToggler-open
myToggler-west-open"
When the west pane is closed, the last two classes would change to:
class="...
myToggler-closed
myToggler-west-closed"
This provides total control of elements using CSS - you can apply global styles using "myToggler" or "myToggler-closed", and styles for specific elements using "myToggler-west" or "myToggler-west-open".
NOTE: Use the default classes if you want to use a standard 'Layout theme'. If you are using custom layout styles, then you can change the default class-names using the options.
Options can be set as 'defaults', which apply to ALL border-panes - or be set for specific panes (eg, "north"). There are a few options cannot be set as defaults, including 'paneSelector', 'resizerCursor' and the pane-callback options.
Options are listed indicating their default values. Where applicable, a list and/or description of other possible values is shown in brackets.
When this is enabled, the layout will apply basic styles directly to resizers & buttons. This is intended for quick mock-ups, so that you can 'see' your layout immediately.Normally this should be set as a default option, but it can be set 'per-pane':
// enable for ALL panes (List-style options) $("body").layout({ applyDefaultStyles: true }); // enable for all except the west-pane $("body").layout({ applyDefaultStyles: true , west__applyDefaultStyles: false });If this option is enabled, use "!important" to override the default styles.
// 'important' required ONLY when applyDefaultStyles=true .ui-layout-pane { background-color: #EEE !important; } .ui-layout-resizer { background-color: #666 !important; }TIP: Disable or remove this option once you create your own layout styles or specify a layout-theme stylesheet. For sample layout CSS, view the code in the simple.html demo – that CSS replicates the styles applied by this option.
This option handles of bookmarks that are passed on the URL of the page:http://www.site.com/page.html#myBookmark
The default functionality of bookmarks is broken when using a layout because the position and scrolling of pane elements are altered after the page loads. Enabling this option (enabled by default) causes the bookmark to be re-applied after the layout is created, causing the 'pane' containing the bookmark/anchor to be scrolled to bring it into view.
This option should be left enabled in most cases, but if content in the layout-panes is never bookmarked, then you could disabled it.
NOTE: This is a global option, so set in the top level of the options:
// Sub-Key or List style options $("body").layout({ scrollToBookmarkOnLoad: false });
If 'true', then when moused-over, the pane's zIndex is raised and overflow is set to 'visible'. This allows pop-ups and drop-downs to overlap adjacent panes.WARNING: Enable this only for panes that do not scroll!
SEE Working with Drop-Downs and Pop-Ups for more information.
Can a pane be closed?
When open, can a pane be resized?
When closed, can a pane 'slide open' over adjacent panes?
Default values are: ".ui-layout-north", ".ui-layout-west", etc.
Any valid jQuery selector string can be used - classNames, IDs, etc.To allow for 'nesting' of layouts, there are rules for how pane-elements are related to the layout-container. More flexibility was added in version 1.1.2 to handle panes are nested inside a 'form' or other element.
Rules for the relationship between a pane and its container:
- When an 'ID' is specified for paneSelector, the pane-element only needs to be a descendant of the container– it does NOT have to be a 'child'.
- When a 'class-name' is specified for paneSelector, the pane-element must be EITHER:
- a child of the container, or...
- a child of a form-element that is a child of the container
(must be the 'first form' inside the container)Example: Panes are 'children of the container' (normal):
$(document).ready(function() { // all panes are 'children' of body (normal) $("body").layout(); });

 Example: Panes are 'children of the first child-form':
$(document).ready(function() { // 'body' is the container - NOT 'form' $("body").layout(); });   <form>

 </form> <form>

 </form> Example: ID-selectors allow panes to be deeply nested:
$(document).ready(function() { // panes only need to be 'descendants' of container $("body").layout({ // using custom 'ID' paneSelectors north__paneSelector: "#north" , west__paneSelector: "#west" , center__paneSelector: "#center" }); });   <form>

 </form> Example: Using different selectors/features together:
$(document).ready(function() { $("body").layout(); /* east & west panes require 'ID' selectors because they are 'nested inside a div' */ west__paneSelector: "#west" , east__paneSelector: "#east" /* north & south panes are 'children of body' default-selectors shown just for reference */ , north__paneSelector: ".ui-layout-north" , south__paneSelector: ".ui-layout-center" */ /* center pane is a 'child of the first form' default-selector shown just for reference */ , center__paneSelector: ".ui-layout-center" }); });

  <form>
 </form>

Selector string for INNER div/element. This div will auto-size so only it scrolls, and not the entire pane.Same class-name could be used for divs inside all panes.
SEE Content-Scrolling below for more information.
Selector string for INNER divs/elements. These elements will be 'ignored' when calculations are done to auto-size the content element. This may be necessary if there are elements inside the pane that are absolutely-positioned and intended to 'overlay' other elements.Same class-name could be used for elements inside all panes
Used for auto-generated classNames for each 'layout pane':
// default classes applied to the 'west pane' class="ui-layout-pane ui-layout-pane-west ui-layout-pane-open ui-layout-pane-west-open"The last two classes change when the pane is closed:
class="... ui-layout-pane-closed ui-layout-pane-west-closed"
Used for auto-generated classNames for each 'resizer-bar':
class="ui-layout-resizer ui-layout-resizer-west ui-layout-resizer-open ui-layout-resizer-west-open"The last two classes change when the pane is closed:
class="... ui-layout-resizer-closed ui-layout-resizer-west-closed"If the pane was 'slid open', 2 additional classes are generated:
class="... ui-layout-resizer-sliding ui-layout-resizer-west-sliding"When a pane is 'resized', the 'real resizer-bar' gets 2 additional classes:
class="... ui-layout-resizer-drag ui-layout-resizer-west-drag"The 'cloned resizer-bar' – which is actually 'dragged' – gets 2 different styles:
class="... ui-layout-resizer-dragging ui-layout-resizer-west-dragging"See Classes Added During Resizing for more information.
Used for auto-generated classNames for each 'toggler-button':
class="ui-layout-toggler ui-layout-toggler-open ui-layout-toggler-west ui-layout-toggler-west-open"The last two classes change when the pane is closed:
class="... ui-layout-toggler-closed ui-layout-toggler-west-closed"The toggler is 'inside' the resizer, so can also be accessed using those classes:
/* CSS Rule - hide toggler while resizing */ .ui-layout-resizer-drag ui-layout-toggler { display: none; }
This is used as a prefix when generating classNames for 'custom buttons'.
(Do not confuse with normal 'toggler-buttons')FIRST, the 'type' (action) of the button is appended:
- ui-layout-button-toggle
- ui-layout-button-open
- ui-layout-button-close
- ui-layout-button-pin
THEN, the 'pane name' of the button is appended, like:
- ui-layout-button-toggle-west
- ui-layout-button-open-south
Here are the generated styles for a custom 'close-button' for the 'west-pane':
class="ui-layout-button-close ui-layout-button-close-west"Pin-buttons have additional classes added for 'pin-up' and 'pin-down' states:
class="ui-layout-button-pin ui-layout-button-pin-west ui-layout-button-pin-up ui-layout-button-pin-west-up"The last two classes change when the pane is 'pinned' (open):
class="... ui-layout-button-pin-down ui-layout-button-pin-west-down"SEE Creating Custom Toggler Buttons for more info.
Specifies the initial size of the panes - 'height' for north & south panes - 'width' for east and west. If "auto", then pane will size to fit its content - most useful for north/south panes (to auto-fit your banner or toolbar), but also works for east/west panes.You normally will want different sizes for the panes, but a 'default size' can be set
Minimum-size limit when resizing a pane (0 = as small as pane can go)
Maximum-size limit when resizing a pane (0 = as large as pane can go)
Spacing between pane and adjacent pane - when pane is 'open' or 'closed'
Tip when resizer-bar can be 'dragged' to resize a pane
This is the cursor when the mouse is over the 'resizer-bar'. However, if the mouse is over the 'toggler-button' inside the resizer bar, then the cursor is a 'pointer' - ie, the togglerCursor instead of the resizerCursor.
Opacity of resizer bar when 'dragging' to resize a pane.This value is passed to the ui.draggable widget
Leave this set to '1' if you want to use CSS to control opacity. Otherwise you must use !important to override the specified opacity.
When enabled, layout will 'mask' iframes on the page when the resizer-bar is 'dragged' to resize a pane. This solved problems related to dragging an element over an iframe.If desired, you can mask only specific iframes and/or only when specific panes are resized:
// mask ALL iframes when ANY pane is resized $('body').layout({ maskIframesOnResize: true }); // mask specific iframes when specific panes are resized $('body').layout({ west__maskIframesOnResize: "#iframe1, #iframe2" , east__maskIframesOnResize: ".ui-layout-pane iframe" });The mask is a DIV with the class
ui-layout-mask
By default the DIV is transparent, but it can be give am overlay effect by adding color and opacity:
/* CSS Rule - give iframe-mask shading */ .ui-layout-mask { background-color: #666; opacity: 0.1; filter: alpha(opacity=10); /* for IE */ }
Tip when the resizer-bar will trigger 'sliding open'
Cursor when resizer-bar will trigger 'sliding open' - ie, when pane is 'closed'
Trigger events to 'slide open' and 'slide closed' a pane
Tip on toggler when pane is 'open' or 'closed'.
Length of toggler-button when pane is 'open' or 'closed'.Length means 'width' for north/south togglers, and 'height' for east/west togglers.
"100%" OR -1 means 'full height/width of resizer bar' - 0 means 'hidden'
If true, the toggler-button is hidden when a pane is 'slid-open'. This makes sense because the user only needs to 'mouse-off' to close the pane.You could set this 'false' and use CSS to do the same thing:
/* CSS Rule - hide toggler when sliding-open */ .ui-layout-resizer-sliding ui-layout-toggler { display: none; }
Alignment of toggler button inside the resizer-bar when pane is 'open' or 'closed'.A positive integer means a pixel offset from top or left
A negative integer means a pixel offset from bottom or right
Position-Keywords: "left", "center", "right", "top", "middle", "bottom"
Usually a background-image is set in CSS to customize a toggler-button. However, you can also put text inside a toggler by using these options. The text is wrapped in a SPAN, which is then added inside the toggler DIV. The SPAN classes identify them as either 'open' or 'closed' content:
$('body').layout({ west__togglerContent_open: "‹" // "‹" , west__togglerContent_closed: "›" // "›" , east__togglerContent_open: "›" // "›" , east__togglerContent_closed: "‹" // "‹" }); // would generates this HTML for the west-toggler  ‹ › You MUST add CSS to format the toggler-text or else it will only be '1px'!
/* format the text inside the toggler */ .ui-layout-toggler .content { font-size: 12px; /* IMPORTANT: default = 1px */ font-weight: bold; text-align: center; }NOTE: If you want a background-color or border on the toggler-button, set it on the 'toggler' element - NOT on the toggler 'content' element.
The inner text-span will be automatically centered inside the toggler button.
If 'true', then 'cursor hotkeys' are enabled. Can be set per-pane if desired.These default hotkeys cannot be changed - only enabled or disabled.
The cursor/arrow key must be pressed in combination with CTRL -or- SHIFT
- Toggle North-pane: CTRL+Up or SHIFT+Up
- Toggle South-pane: CTRL+Down or SHIFT+Down
- Toggle West-pane: CTRL+Left or SHIFT+Left
- Toggle East-pane: CTRL+Right or SHIFT+Right
The SHIFT+ARROW combinations are ignored if pressed while the cursor is in a form field, allowing users to 'select text' — eg: SHIFT+Right in a TEXTAREA
Custom hotkeys must be pressed in combination with either the CTRL or SHIFT key - or both together. Use this option to choose which modifier-key(s) to use with the customHotKey.If this option is missing or invalid, "CTRL+SHIFT" is assumed.
NOTE: The ALT key cannot be used because it is not detected by some browsers.
If a hotkey is specified, it is automatically enabled. It does not matter whether 'cursor hotkeys' are also enabled – those are separate.You can specify any of the following values:
- letter from A to Z
- number from 0 to 9
- Javascript charCode value for the key
The customHotkeys option must be set separately for each pane, but the customHotkeyModifier option can be set once, as the 'default' for all panes.
Animation effect for open/close. Choose a preset effect OR can specify a custom fxName as long as you also specify fxSettings (even if fxSettings is just empty - {})
Speed of animations – standard jQuery keyword like 'fast', or a millisecond value.
You can customize the default animation settings by passing new settings, like:If a non-standard effect is specified, then fxSettings is REQUIRED (can be 'empty' though)
$("body").layout({ fxName: "slide" , fxSettings: { duration: 500, easing: "bounceInOut" } });
$("body").layout({ fxName: "blind" , speed: 1000 // optional , north__fxSettings: { direction: "vertical" } , west__fxSettings: { direction: "horizontal" } , east__fxSettings: {} // empty fxSettings is still valid! });It's also possible to extend the 'default' layout effects by passing a special key:
$("body").layout({ effects: { // MODIFY a standard effect slide: { all: { duration: 500, easing: "bounceInOut" } } // ADD a new effect , blind: { all: {} , north: { direction: "vertical" } , south: { direction: "vertical" } , east: { direction: "horizontal" } , west: { direction: "horizontal" } } } });You MUST use the sub-key option format to update default effects.
(This will change when Layout is updated to the UI widget API)
If 'true', then pane is 'closed' when layout is created
If 'true', then pane is 'hidden' when layout is created - no resizer or spacing is visible, as if the pane does not exist!
Callback function name - activate when pane is 'closed'SEE Using Callback Functions below.
Callback function name - activate when pane is 'closed'SEE Using Callback Functions below.
Callback function name - activate when pane is 'opened'SEE Using Callback Functions below.
Callback function name - activate when pane is 'closed'SEE Using Callback Functions below.
Callback function name - activate when pane is 'resized' - either manually or as a result of the container resizing.SEE Using Callback Functions below.
As of version 1.1.1, a 'state' object was added to UI Layout. This hash object contains the 'current dimensions' for all panes, plus logic-vars indicating each pane's 'current state'. For example: Is the west pane open or closed? What is its current size?
This object is exposed as a 'state' property (eg: myLayout.state) so it can be read by custom code. All state properties are READ-ONLY
All state data must be referenced 'by pane'. Most logic-vars (eg: isClosed) apply only to 'border panes'.
var state = myLayout.state;
// current state
var isWestPaneOpen = !state.west.isClosed;
var isSouthPaneHidden = state.south.isHidden;
var isEastPaneSliding = state.east.isSliding;
// current dimensions
var westCurrentSize = state.west.size;
var westMinimumSize = state.west.minSize;
var containerInnerWidth = state.container.innerWidth;
var containerPaddingLeft = state.container.paddingLeft;
State functionality is not yet finished.
Eventually a complete set of dimensions, including padding and borders, will be available for ALL panes, including the center. Details on this will be added here when it is complete.
In the meantime, you can measure the panes youself if needed.
Is the pane 'closed'? If not closed, then could be EITHER 'open normally' OR 'sliding open'.
When a pane is 'sliding', it was opened by sliding over-top of other panes. The pane is 'open', but only temporarily - until the user moves their mouse off.This is different from when a pane is 'opened normally', and becomes fixed in place, and all adjacent panes are resized.
When isSliding=true, isClosed=false - when it slides closed again, isClosed=true.
When a pane is 'opened normally', isClosed=false AND isSliding=false.
This is only true when the user is in the process of 'dragging' the resizer bar.
A 'hidden pane' is not the same as a 'closed pane'. When a pane is hidden, it is as if it does not exist - there is no resizer-bar or toggler-button visible, and the 'pane spacing' collapses.So if a pane is hidden, you must have some other way to make it visible again. This means a custom button or some other custom code that calls the show() command.
When there is 'not enough room' for a pane to be displayed, it is automatically hidden. In this case, isHidden=true AND noRoom=true.This is different than hiding a pane using the hide() command, because when there is enough room for the pane to appear (by resizing or closing a pane), the hidden pane will reappear automatically.
This is the only logic var that also applies to the 'center-pane'.
The state.PANE.size property is the 'current size'. This is different from options.PANE.size, which was the 'initial size' specified when the layout was created.
Numerous size values are available, including minSize & maxSize. These are constantly updated based on the layout's current state. (You can read the initial minSize/maxSize from 'layout.options')
The state pane-size can be combined with state-logic data when 'saving the current layout state'.
SEE State Management on the Tips & Tricks page for an example of how 'layout state' can be persisted.
Callbacks can be set for open, close and resize events for each pane. The callback option can be:
There are 5 types of pane-events that will trigger a callback:
EACH type of pane-event has 3 callback options, for example:
The 'start' callback fires BEFORE the event starts, so 'onopen_start' fires before the pane starts to open.
If a 'start' callback function returns 'false', the event will be cancelled.
$("body").layout({
onopen_start: function () {
// STOP the pane from opening
return false; // false = Cancel
}
});
NOTE: If an event is 'automatically triggered' by layout logic – like closing a pane when there is insufficient room – then the event cannot be cancelled. In this case, returning false will have no effect.
The 'end' callback fires AFTER the event completes. So onopen_end will fire after the pane has opened, including the completion of all animations.
Callback options without a suffix are really 'end' callbacks, so onopen is the same as onopen_end. These options exist for backwards compatibility, and for simpler code, since most of the time it will be the 'end' callbacks you will use.
NOTE: If BOTH 'onopen' and 'onopen_end' options are set, the 'onopen_end' option takes precidence and the 'onopen' option is ignored.
Five parameters are automatically returned to all callback functions, in this order:
When a layout is created, numerous CSS class-names are added to the original 'pane' elements, as well as the generated 'resizer-bar' and 'toggler-button' elements.
These options are used to set the 'base' class-names (default values shown):
paneClass: "ui-layout-pane"
resizerClass: "ui-layout-resizer"
togglerClass: "ui-layout-toggler"
Each of the 3 element types - panes, resizers and togglers - has multiple class-names generated based on these options. Some classes change to indicate on whether the pane is open or closed. This comprehensive set of auto-generated classes make it easy for CSS rules to target all the elements as a group, specifically, and by 'state' (open/closed).
Here are classes for all 'west' elements, using the default class-names:
Pane Element (hard-coded DIV or IFRAME)
This is the result when the auto-generated classes are added to the west pane:

When the pane is 'closed', the last two classes CHANGE:

NOTE: Each pane must have a unique 'paneSelector' in the HTML markup. The default selector is a class-name, eg:
 . However, an ID or other class-name could be used instead, so to avoid confusion with the auto-generated classes, the "ui-layout-west" class-name is NOT INCLUDED in the code samples above.
Resizer Element (auto-generated DIV)
This is the result when the auto-generated classes are added to the west resizer:

When the pane is 'closed', the last two classes CHANGE:

If a pane is 'slid open' - instead of being opened normally - two additional classes are generated:
So this is the complete set of classes when the west pane is 'slid open':

These extra classes allow the resizer-bar to be styled differenty when a pane is 'sliding'. For example, the resizer-bar could be grey when the pane is 'open' normally, but transparent if it is 'slid open'.
Toggler Element (auto-generated DIV)
This is the result when the auto-generated classes are added to the west toggler:

When the pane is 'closed', the last two classes CHANGE:

Using the default classes makes it easy to apply a 'layout theme'. However, if there is more than one layout on a page, you may want to change the class-name for one of them so each layout can have different CSS - for example: The complex demo uses custom class-names for the 'outer layout' to differentiate it from the 'inner layout', which uses the default class-names.
When a pane is being "resized", a clone of the resizer-bar is created by ui.draggable. During the dragging process, classes are added to both the real resizer-bar (which does not move) and the cloned resizer-bar (which is 'dragging'). When dragging is completed, the cloned element is deleted, the real resizer-bar is moved to the new position, and the 'drag' classes are removed.
These are the classes added to the west-pane elements while resizing is in-progress:
REAL Resizer-bar
The 'drag' classes are added to the 4 regular classes already on the resizer bar
class="ui-layout-resizer
ui-layout-resizer-west
ui-layout-resizer-open
ui-layout-resizer-west-open
ui-layout-resizer-drag
ui-layout-resizer-west-drag"
CLONED Resizer-bar
The cloned bar inherits the 4 regular classes from the real resizer-bar - the 'dragging' classes are added to these:
class="ui-layout-resizer
ui-layout-resizer-west
ui-layout-resizer-open
ui-layout-resizer-west-open
ui-draggable-dragging
ui-layout-resizer-dragging
ui-layout-resizer-west-dragging"
To use graphics for resizer-bars and toggler-buttons, specify them as background-images in your CSS. Different graphics and/or opacity can be specified for each 'state' - open, closed, resizing and hover (using the :hover pseudo-class).
The complex demo uses a variety of colors, images and opacity to create a range of effects. Pane-spacing can also be used to control appearance. Each pane can have different options and be styled independant of the others.
If you add custom buttons using the layout utilities described below, a number of additional styles are auto-generated for the button-elements.
SEE Special Utility Methods below for a list of the button classes.
If an ID is specified as a 'paneSelector', then the generated resizer-bar and toggler-button for that pane are automatically given corresponding IDs, for example...
If these options are used when creating a layout...
layout({
north__paneSelector: "#header"
, west__paneSelector: "#Menu"
});
The associated resizer and toggler elements will be given a similar ID - by appending "-resizer" or "-toggler" to the ID of the 'pane'...
// resizer & toggler for the NORTH ('header') pane

// resizer & toggler for the WEST ('menu') pane

NOTE: This does not affect the auto-generated 'class-names' added to the elements.
There are 2 options for this feature (class-names shown are defaults):
When initializing a pane, the layout code searches for: $Pane.children(s.contentSelector) . If a content element is found (usually a div or an iframe), it will be auto-sized to fill the vertical space not used by other child-elements. If the space is not enough to display all the content, then the content element will 'scroll'.
This makes all elements above the content element look like a 'header', and everything below like a 'footer'. All this is done by just dynamically resizing the content element - there is no special CSS, and no other elements are touched.
The content element can have unlimited siblings - header, subheader, footer, etc. The code loops through all other elements to calculate the height that remains to fit the content element. If there is not enough room, the content element is completely hidden.
To exclude an element(s) from the height calculations - like an absolutely positioned element - add a selector for it/them in the contentIgnoreSelector option. Anything matching this selector is 'ignored' when measuring.
The content element is resized every time the pane containing it is resized or opened. You can also manually trigger a resize from your own code using the resizeContent() method, eg:
myLayout.resizeContent("west");
A number of utility methods are provided to integrate custom buttons and other code with your layout. These utilities are available as 'methods' of the layout instance.
All sample code below assumes the layout-instance is assigned to 'myLayout', like so:
var myLayout = $("body").layout();
Custom buttons can be hard-coded in HTML by using basic layout methods:
<button onclick="myLayout.toggle('west')">
Toggle West Pane</button>

Close West Pane
SEE the simple demo for samples of hard-coded buttons.
These 3 utilities provide another way to create buttons to open and close panes. First create the element(s) to use as a button, then call the utility you want and pass these parameters:
- selector - a jQuery selector string to access the button element(s)
- pane - the pane the button is to control: "north", "south", "east" or "west"
Location does not matter, so a button in the north-pane (eg, a toolbar) can toggle the east-pane (eg, a help-panel).
Examples using 'ID' and 'class' selectors for button-elements:
addOpenBtn("#tbarShowHelpButton", "east"); addToggleBtn(".ui-layout-pane-north .custom-toggle-button" , "west");Two classes are automatically added to the button-element, based on the buttonClass option, which has a default value of "ui-layout-button":
- ui-layout-button-ACTION
- ui-layout-button-ACTION-PANE
Examples for each type of button - assumes buttons control the 'west pane':
class="ui-layout-button-toggle ui-layout-button-toggle-west" class="ui-layout-button-close ui-layout-button-close-west" class="ui-layout-button-open ui-layout-button-open-west"SEE the complex demo - the square 'close' buttons in the east/west panes utilize these utilities.
This utility makes an element act like a 'pin button' a common and intuitive interface device.
SEE the complex demo to see how pin-buttons work.
Classes similar to the utilities above are added, plus two additional classes to indicate the 'current state' of the pin (up/down):
- ui-layout-button-pin
- ui-layout-button-pin-west
- ui-layout-button-pin-up
- ui-layout-button-pin-west-up
When the pin is 'down' (pinned), the last two classes change to:
- ui-layout-button-pin-down
- ui-layout-button-pin-west-down
These classes can be used to change the background-image via CSS, as is done in the complex demo.
When a layout is created, each pane becomes a container for all the elements inside it. Elements that need to 'popup', like a dialog box, should be put in the 'body' of the page - not inside one of the panes. This allows the popup to overlay all the panes.
However, sometimes a popup or drop-down (like a 'menu') needs to originate from inside a pane. For example, the north-pane may hold a toolbar with drop-down menus that need to appear over-top of the panes below. For this to work, the pane containing the drop-down element must:
NOTE: The z-index of the popup element itself is irrelevant outside the pane. It is the pane that contains the popup element that must be 'above' the adjacent panes. Since pane-animations change their z-indexes, setting z-index in your CSS will not work.
If you have a layout where only 1-pane has popups, then just put that pane 'last' in your HTML mark-up, and give it the style: 'overflow: visible'. This will make all popups and drop-downs from that pane work normally.
However, if you have a layout with drop-downs or popups in multiple panes, then this pair of layout utilities provide a solution...
The allowOverflow utility raises a pane's z-index so popups work properly.
The 'elem_or_pane' parameter can be either:
- The 'pane element', or a 'decendant element' of the pane, that contains the popup, or
- The 'name' of the pane containing the popup, ie: "north", "south", "east", "west" or "center"
The resetOverflow utility puts the pane back to its normal z-index. It accepts the same parameter as allowOverflow, and should be called when the popup closes. However, when allowOverflow is called, all other panes are automatically reset anyway.
Examples:
// using a 'list' mouse-over event
 // using the 'pane' mouse-over event
 // called from the code that initiates a popup myLayout.allowOverflow('north'); showMyPopup();The allowOverflow method can also be automatically attached to panes using the showOverflowOnHover option. This makes things more automatic, but there are some scenarios where you need to control this from in your code.
SEE the simple demo for working examples of pop-ups and drop-downs.
NOTE: Using allowOverflow on a 'scrolling pane' causes the scrollbar to disappear and the pane contents to 'overflow' on top of the pane below. This can be seen by hovering the pop-up in the East pane of the simple demo.


{% extends "layout.html" %} {% block page_title %} Bank account registered - Bank details - Anti-money laundering registration - GOV.UK {% endblock %} {% block content %} {% include "includes/phase_banner_research.html" %} Bank account registered This section is: Bank details You have registered 1 bank account. Do you want to register another bank account? Yes No {% endblock %}
This section is: Bank details
You have registered 1 bank account.


--- layout: minimal_about_me title: "About me" permalink: /about/index.html description: "Software Engineer" ---
You can learn more about me at my site: http://luisrodriguezeng.com/


{% extends "base.html" %} {% block body %}
Step 1: Add host data and take web interface screenshots on the Setup page.
Step 2: View the screenshots in Web Scout page.
Step 3: Click on thumbnails to view more information on each interface, take notes, and perform automated default credential checking.
To get started, make your way over to the Setup page. There you can:
The first step is to add hosts to Kraken. Kraken's Setup page provides your with file upload functionality to provide your Nmap XML file and the ability to specifiy IP addresses, IP ranges, hostnames, and specific URLs to screenshot. The second step is to click the "Take Screenshots" button. Celery workers will screenshots all hosts and interfaces in the database. The progress field will display a completion percentage and will show 'SUCCESS' when complete. This may take a while depending on how many screenshots need to be taken. The screenshot-taking Celery task currently uses 5 workers, each with a Selenium headless PhantomJS web driver, so it can be fairly resource intensive.
During the screenshot taking process, interfaces are categorized by type if possible, and any known default credentials are displayed in the 'viewer.html' page. Some identified interfaces have credential checking modules associated with them. These allow for mass, automated default credential checking with the results stored in each host's metadata.
Once all of your screenshots are taken, visit Web Scout page to see the listing of your web interfaces. Each host is displayed in it's own field. Each web interace hosted by that host is grouped into that field along with IP, hostname, and basic port information. Clicking a screenshot thumbnail will pop up a larger image along with more detailed information about that interface and host. Within this popup you can take notes, check the check boxes for HTTP Authentication and Default Credentials, and mark the host as reviewed. If the host has a module for checking default credentials, you will see a target glyphicon next to the 'Default Credentials' checkbox. Hit save to record those notes in the database.
Clicking "KrakenView" will open another tab where that will attempt to load that interface into an iframe with a Kraken toolbar at the top. The toolbar allows you to take the same notes you can with the popup and provides you with any known default credentials. There is also an external link in case the page is not able to load in the iframe.
You can cycle through the interfaces on each page using the popup by either clicking the Next/Previous buttons or hitting the right/left arrows on your keyboard. The workflow Kraken was designed for is to go through a couple of Web Scout pages using the popup and open web interfaces with KrakenView in the background as you go (Ctrl + left-click for Windows or Option + left-click for Mac). Afterwards, go through the tabs and take notes as you go.
All of your notes can be reviewed in Reports. There you will find lists for interfaces with default credentials and HTTP authentication, as well as all interfaces where notes were entered. All activity perform is recorded in the Logs. Lastly, when the scanning functionality is used to add hosts to Kraken, subsequent scans of thoses hosts or ranges could discover new hosts or be unable to reach others. These two conditions are tracked in Kraken's Web Scout's inventory page. Stale hosts, or hosts that were not seen on subsequent scans will have a gray color. Newly found hosts will display as bright green.


Call me Mel
My name is Phemelo Tseke, aka Mel. My journey with Front-end development was an unconventional one. Before, the jump into web development, my focus was set on UI/UX Design, but I was quite unfulfilled with the idea of just creating high fidelity prototypes. I needed the thrill of putting together the final product. Until this particular moment, all my learning related to Front-end development has been theoretical. Enrolling in The Zuri Internship Program I am excited to practice my skills, learn from the wonderful Zuri team and grow.
When I'm not binge watching The Amazing World of Gumball I'm reading and practicing efficiency within my programming. I believe in the tech industry you are always learning as things evolve, and being a new-comer it helps familiarizing myself with both previous teachings and newer ones.
Self-Taught? How?
I am self-taught front-end developer who, before writing any code, watched a lot of tutorials to grasp concepts and learn how the languages I was learning are you used to programme. I started with learning HTML with Programming with Mosh. Two month buried in theory I believe it's time to put my knowledge and skill to test. HTML was very enjoyable and really sets a stepping stone to being excited about programming in general.
I later moved to CSS with Traversy Media and fell in love immediately with it. Vanilla CSS is such a powerful tool which fascinates me greatly, which in turn makes me quite excited to learning CSS frameworks and libraries in the future. I am a very artistic person (hence I initially gravitated towards design) so I immersed myself into CSS theory and I'm looking forward to learning advanced features.
Who is Zuri?
Zuri Training is a organization that specializes in helping developers and designers gain experience to enter the job market. Zuri training prides itself in providing not only experience but also mentorship for its participants, guiding them and carving excellent tech industry employers. It also provides various tracks that include, back end, front end, design and entrepreneurship (this is not an exhaustive list)
For more on Zuri Training visit their Zuri Training page.
Why The Zuri Internship?
I joined Zuri Training because I want introduce myself into the normal workflow of a front end developer. I also enrolled to benefit from the knowledge, practical training and working on real-world projects.
There quite a few things I would like to achieve, which include:
- In-depth JavaScript knowledge
- Working on projects I can include in my portfolio
- Improving on various web development layout skills
- Of cause, become part of the Zuri Team network
- Become a Zuri mentor