WordPress Landing Pages - Version 1.5.3

Version Description

  • Impression tracking bug fix.
  • Bringing Inbound Tracking to All Posts/Pages
Download this release

Release Info

Developer adbox
Plugin Icon 128x128 WordPress Landing Pages
Version 1.5.3
Comparing to
See all releases

Code changes from version 1.5.9 to 1.5.3

Files changed (97) hide show
  1. LICENSE +339 -339
  2. README.md +171 -171
  3. classes/class.activation.php +0 -195
  4. classes/class.activation.update-processes.php +0 -128
  5. classes/class.activation.upgrade-routines.php +0 -185
  6. classes/class.plugin-updater.php +0 -198
  7. css/admin-global-settings.css +204 -204
  8. css/admin-install-plugins.css +12 -12
  9. css/admin-landing-page-list.css +360 -360
  10. css/admin-lp-cpt-only-style.css +91 -94
  11. css/admin-post-edit.css +148 -148
  12. css/admin-post-new.css +90 -90
  13. css/admin-style.css +473 -473
  14. css/admin-templates.css +47 -47
  15. css/admin-tour.css +216 -216
  16. css/customizer-load.css +68 -75
  17. css/customizer.frontend.css +155 -156
  18. css/customizer.media-uploader.css +33 -33
  19. css/frontend/global-landing-page-style.css +39 -39
  20. css/frontend/index.php +1 -1
  21. css/images/index.php +1 -1
  22. css/index.php +1 -1
  23. css/jquery.qtip.min.css +3 -3
  24. css/new-customizer-admin.css +240 -240
  25. images/cta-install.png +0 -0
  26. images/github-help.jpg +0 -0
  27. images/image.php +56 -58
  28. images/index.php +1 -1
  29. images/leads-install.png +0 -0
  30. index.php +1 -1
  31. js/admin/admin.global-settings.js +43 -43
  32. js/admin/admin.install-plugins.js +30 -30
  33. js/admin/admin.landing-page-list.js +159 -159
  34. js/admin/admin.post-edit-ab-testing.js +71 -71
  35. js/admin/admin.post-edit.js +613 -613
  36. js/admin/admin.post-new.js +142 -142
  37. js/admin/admin.store.js +4 -4
  38. js/admin/admin.templates-upload.js +24 -24
  39. js/admin/index.php +1 -1
  40. js/admin/intro.js +758 -758
  41. js/admin/new-customizer-admin.js +57 -57
  42. js/admin/tour/tour.post-edit.js +10 -10
  43. js/admin/tour/tour.post-list.js +7 -7
  44. js/customizer.load.js +125 -125
  45. js/customizer.save.js +472 -475
  46. js/index.php +1 -1
  47. js/jquery.bindfirst.js +14 -14
  48. js/jquery.easing.min.js +44 -44
  49. js/jquery.tablesorter.js +1030 -1030
  50. js/jquery.total-storage.min.js +21 -21
  51. js/libraries/index.php +1 -1
  52. js/libraries/jpicker/css/jPicker-1.1.6.css +231 -231
  53. js/libraries/jpicker/css/jPicker.css +16 -16
  54. js/libraries/jpicker/images/Thumbs.db +0 -0
  55. js/libraries/jquery-datepicker/jquery.timepicker.css +51 -51
  56. js/libraries/jquery-datepicker/jquery.timepicker.js +691 -691
  57. js/libraries/jquery-datepicker/jquery.timepicker.min.js +2 -2
  58. js/libraries/jquery-datepicker/lib/base.css +389 -389
  59. js/libraries/jquery-datepicker/lib/base.js +13 -13
  60. js/libraries/jquery-datepicker/lib/datepair.js +204 -204
  61. js/libraries/jquery-datepicker/picker_functions.js +47 -47
  62. js/libraries/jquery-qtip/jquery.qtip.min.js +1 -1
  63. js/libraries/jquery-qtip/load.qtip.js +55 -55
  64. js/libraries/tiny_mce/license.txt +504 -504
  65. js/libraries/tiny_mce/plugins/advhr/css/advhr.css +5 -5
  66. js/libraries/tiny_mce/plugins/advhr/editor_plugin_src.js +56 -56
  67. js/libraries/tiny_mce/plugins/advhr/js/rule.js +43 -43
  68. js/libraries/tiny_mce/plugins/advhr/rule.htm +58 -58
  69. js/libraries/tiny_mce/plugins/advimage/css/advimage.css +13 -13
  70. js/libraries/tiny_mce/plugins/advimage/editor_plugin_src.js +49 -49
  71. js/libraries/tiny_mce/plugins/advimage/image.htm +235 -235
  72. js/libraries/tiny_mce/plugins/advimage/js/image.js +464 -464
  73. js/libraries/tiny_mce/plugins/advlink/css/advlink.css +8 -8
  74. js/libraries/tiny_mce/plugins/advlink/editor_plugin_src.js +60 -60
  75. js/libraries/tiny_mce/plugins/advlink/js/advlink.js +543 -543
  76. js/libraries/tiny_mce/plugins/advlink/link.htm +338 -338
  77. js/libraries/tiny_mce/plugins/advlist/editor_plugin_src.js +175 -175
  78. js/libraries/tiny_mce/plugins/autolink/editor_plugin_src.js +184 -184
  79. js/libraries/tiny_mce/plugins/autoresize/editor_plugin_src.js +119 -119
  80. js/libraries/tiny_mce/plugins/autosave/editor_plugin_src.js +433 -433
  81. js/libraries/tiny_mce/plugins/autosave/langs/en.js +3 -3
  82. js/libraries/tiny_mce/plugins/bbcode/editor_plugin_src.js +119 -119
  83. js/libraries/tiny_mce/plugins/contextmenu/editor_plugin_src.js +163 -163
  84. js/libraries/tiny_mce/plugins/directionality/editor_plugin_src.js +84 -84
  85. js/libraries/tiny_mce/plugins/emotions/editor_plugin_src.js +42 -42
  86. js/libraries/tiny_mce/plugins/emotions/emotions.htm +42 -42
  87. js/libraries/tiny_mce/plugins/emotions/js/emotions.js +43 -43
  88. js/libraries/tiny_mce/plugins/emotions/langs/en_dlg.js +1 -1
  89. js/libraries/tiny_mce/plugins/example/dialog.htm +22 -22
  90. js/libraries/tiny_mce/plugins/example/editor_plugin_src.js +83 -83
  91. js/libraries/tiny_mce/plugins/example/js/dialog.js +19 -19
  92. js/libraries/tiny_mce/plugins/example/langs/en.js +3 -3
  93. js/libraries/tiny_mce/plugins/example/langs/en_dlg.js +3 -3
  94. js/libraries/tiny_mce/plugins/example_dependency/editor_plugin_src.js +50 -50
  95. js/libraries/tiny_mce/plugins/fullpage/css/fullpage.css +142 -142
  96. js/libraries/tiny_mce/plugins/fullpage/editor_plugin_src.js +405 -405
  97. js/libraries/tiny_mce/plugins/fullpage/fullpage.htm +0 -92
LICENSE CHANGED
@@ -1,339 +1,339 @@
1
- GNU GENERAL PUBLIC LICENSE
2
- Version 2, June 1991
3
-
4
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
- Everyone is permitted to copy and distribute verbatim copies
7
- of this license document, but changing it is not allowed.
8
-
9
- Preamble
10
-
11
- The licenses for most software are designed to take away your
12
- freedom to share and change it. By contrast, the GNU General Public
13
- License is intended to guarantee your freedom to share and change free
14
- software--to make sure the software is free for all its users. This
15
- General Public License applies to most of the Free Software
16
- Foundation's software and to any other program whose authors commit to
17
- using it. (Some other Free Software Foundation software is covered by
18
- the GNU Lesser General Public License instead.) You can apply it to
19
- your programs, too.
20
-
21
- When we speak of free software, we are referring to freedom, not
22
- price. Our General Public Licenses are designed to make sure that you
23
- have the freedom to distribute copies of free software (and charge for
24
- this service if you wish), that you receive source code or can get it
25
- if you want it, that you can change the software or use pieces of it
26
- in new free programs; and that you know you can do these things.
27
-
28
- To protect your rights, we need to make restrictions that forbid
29
- anyone to deny you these rights or to ask you to surrender the rights.
30
- These restrictions translate to certain responsibilities for you if you
31
- distribute copies of the software, or if you modify it.
32
-
33
- For example, if you distribute copies of such a program, whether
34
- gratis or for a fee, you must give the recipients all the rights that
35
- you have. You must make sure that they, too, receive or can get the
36
- source code. And you must show them these terms so they know their
37
- rights.
38
-
39
- We protect your rights with two steps: (1) copyright the software, and
40
- (2) offer you this license which gives you legal permission to copy,
41
- distribute and/or modify the software.
42
-
43
- Also, for each author's protection and ours, we want to make certain
44
- that everyone understands that there is no warranty for this free
45
- software. If the software is modified by someone else and passed on, we
46
- want its recipients to know that what they have is not the original, so
47
- that any problems introduced by others will not reflect on the original
48
- authors' reputations.
49
-
50
- Finally, any free program is threatened constantly by software
51
- patents. We wish to avoid the danger that redistributors of a free
52
- program will individually obtain patent licenses, in effect making the
53
- program proprietary. To prevent this, we have made it clear that any
54
- patent must be licensed for everyone's free use or not licensed at all.
55
-
56
- The precise terms and conditions for copying, distribution and
57
- modification follow.
58
-
59
- GNU GENERAL PUBLIC LICENSE
60
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
-
62
- 0. This License applies to any program or other work which contains
63
- a notice placed by the copyright holder saying it may be distributed
64
- under the terms of this General Public License. The "Program", below,
65
- refers to any such program or work, and a "work based on the Program"
66
- means either the Program or any derivative work under copyright law:
67
- that is to say, a work containing the Program or a portion of it,
68
- either verbatim or with modifications and/or translated into another
69
- language. (Hereinafter, translation is included without limitation in
70
- the term "modification".) Each licensee is addressed as "you".
71
-
72
- Activities other than copying, distribution and modification are not
73
- covered by this License; they are outside its scope. The act of
74
- running the Program is not restricted, and the output from the Program
75
- is covered only if its contents constitute a work based on the
76
- Program (independent of having been made by running the Program).
77
- Whether that is true depends on what the Program does.
78
-
79
- 1. You may copy and distribute verbatim copies of the Program's
80
- source code as you receive it, in any medium, provided that you
81
- conspicuously and appropriately publish on each copy an appropriate
82
- copyright notice and disclaimer of warranty; keep intact all the
83
- notices that refer to this License and to the absence of any warranty;
84
- and give any other recipients of the Program a copy of this License
85
- along with the Program.
86
-
87
- You may charge a fee for the physical act of transferring a copy, and
88
- you may at your option offer warranty protection in exchange for a fee.
89
-
90
- 2. You may modify your copy or copies of the Program or any portion
91
- of it, thus forming a work based on the Program, and copy and
92
- distribute such modifications or work under the terms of Section 1
93
- above, provided that you also meet all of these conditions:
94
-
95
- a) You must cause the modified files to carry prominent notices
96
- stating that you changed the files and the date of any change.
97
-
98
- b) You must cause any work that you distribute or publish, that in
99
- whole or in part contains or is derived from the Program or any
100
- part thereof, to be licensed as a whole at no charge to all third
101
- parties under the terms of this License.
102
-
103
- c) If the modified program normally reads commands interactively
104
- when run, you must cause it, when started running for such
105
- interactive use in the most ordinary way, to print or display an
106
- announcement including an appropriate copyright notice and a
107
- notice that there is no warranty (or else, saying that you provide
108
- a warranty) and that users may redistribute the program under
109
- these conditions, and telling the user how to view a copy of this
110
- License. (Exception: if the Program itself is interactive but
111
- does not normally print such an announcement, your work based on
112
- the Program is not required to print an announcement.)
113
-
114
- These requirements apply to the modified work as a whole. If
115
- identifiable sections of that work are not derived from the Program,
116
- and can be reasonably considered independent and separate works in
117
- themselves, then this License, and its terms, do not apply to those
118
- sections when you distribute them as separate works. But when you
119
- distribute the same sections as part of a whole which is a work based
120
- on the Program, the distribution of the whole must be on the terms of
121
- this License, whose permissions for other licensees extend to the
122
- entire whole, and thus to each and every part regardless of who wrote it.
123
-
124
- Thus, it is not the intent of this section to claim rights or contest
125
- your rights to work written entirely by you; rather, the intent is to
126
- exercise the right to control the distribution of derivative or
127
- collective works based on the Program.
128
-
129
- In addition, mere aggregation of another work not based on the Program
130
- with the Program (or with a work based on the Program) on a volume of
131
- a storage or distribution medium does not bring the other work under
132
- the scope of this License.
133
-
134
- 3. You may copy and distribute the Program (or a work based on it,
135
- under Section 2) in object code or executable form under the terms of
136
- Sections 1 and 2 above provided that you also do one of the following:
137
-
138
- a) Accompany it with the complete corresponding machine-readable
139
- source code, which must be distributed under the terms of Sections
140
- 1 and 2 above on a medium customarily used for software interchange; or,
141
-
142
- b) Accompany it with a written offer, valid for at least three
143
- years, to give any third party, for a charge no more than your
144
- cost of physically performing source distribution, a complete
145
- machine-readable copy of the corresponding source code, to be
146
- distributed under the terms of Sections 1 and 2 above on a medium
147
- customarily used for software interchange; or,
148
-
149
- c) Accompany it with the information you received as to the offer
150
- to distribute corresponding source code. (This alternative is
151
- allowed only for noncommercial distribution and only if you
152
- received the program in object code or executable form with such
153
- an offer, in accord with Subsection b above.)
154
-
155
- The source code for a work means the preferred form of the work for
156
- making modifications to it. For an executable work, complete source
157
- code means all the source code for all modules it contains, plus any
158
- associated interface definition files, plus the scripts used to
159
- control compilation and installation of the executable. However, as a
160
- special exception, the source code distributed need not include
161
- anything that is normally distributed (in either source or binary
162
- form) with the major components (compiler, kernel, and so on) of the
163
- operating system on which the executable runs, unless that component
164
- itself accompanies the executable.
165
-
166
- If distribution of executable or object code is made by offering
167
- access to copy from a designated place, then offering equivalent
168
- access to copy the source code from the same place counts as
169
- distribution of the source code, even though third parties are not
170
- compelled to copy the source along with the object code.
171
-
172
- 4. You may not copy, modify, sublicense, or distribute the Program
173
- except as expressly provided under this License. Any attempt
174
- otherwise to copy, modify, sublicense or distribute the Program is
175
- void, and will automatically terminate your rights under this License.
176
- However, parties who have received copies, or rights, from you under
177
- this License will not have their licenses terminated so long as such
178
- parties remain in full compliance.
179
-
180
- 5. You are not required to accept this License, since you have not
181
- signed it. However, nothing else grants you permission to modify or
182
- distribute the Program or its derivative works. These actions are
183
- prohibited by law if you do not accept this License. Therefore, by
184
- modifying or distributing the Program (or any work based on the
185
- Program), you indicate your acceptance of this License to do so, and
186
- all its terms and conditions for copying, distributing or modifying
187
- the Program or works based on it.
188
-
189
- 6. Each time you redistribute the Program (or any work based on the
190
- Program), the recipient automatically receives a license from the
191
- original licensor to copy, distribute or modify the Program subject to
192
- these terms and conditions. You may not impose any further
193
- restrictions on the recipients' exercise of the rights granted herein.
194
- You are not responsible for enforcing compliance by third parties to
195
- this License.
196
-
197
- 7. If, as a consequence of a court judgment or allegation of patent
198
- infringement or for any other reason (not limited to patent issues),
199
- conditions are imposed on you (whether by court order, agreement or
200
- otherwise) that contradict the conditions of this License, they do not
201
- excuse you from the conditions of this License. If you cannot
202
- distribute so as to satisfy simultaneously your obligations under this
203
- License and any other pertinent obligations, then as a consequence you
204
- may not distribute the Program at all. For example, if a patent
205
- license would not permit royalty-free redistribution of the Program by
206
- all those who receive copies directly or indirectly through you, then
207
- the only way you could satisfy both it and this License would be to
208
- refrain entirely from distribution of the Program.
209
-
210
- If any portion of this section is held invalid or unenforceable under
211
- any particular circumstance, the balance of the section is intended to
212
- apply and the section as a whole is intended to apply in other
213
- circumstances.
214
-
215
- It is not the purpose of this section to induce you to infringe any
216
- patents or other property right claims or to contest validity of any
217
- such claims; this section has the sole purpose of protecting the
218
- integrity of the free software distribution system, which is
219
- implemented by public license practices. Many people have made
220
- generous contributions to the wide range of software distributed
221
- through that system in reliance on consistent application of that
222
- system; it is up to the author/donor to decide if he or she is willing
223
- to distribute software through any other system and a licensee cannot
224
- impose that choice.
225
-
226
- This section is intended to make thoroughly clear what is believed to
227
- be a consequence of the rest of this License.
228
-
229
- 8. If the distribution and/or use of the Program is restricted in
230
- certain countries either by patents or by copyrighted interfaces, the
231
- original copyright holder who places the Program under this License
232
- may add an explicit geographical distribution limitation excluding
233
- those countries, so that distribution is permitted only in or among
234
- countries not thus excluded. In such case, this License incorporates
235
- the limitation as if written in the body of this License.
236
-
237
- 9. The Free Software Foundation may publish revised and/or new versions
238
- of the General Public License from time to time. Such new versions will
239
- be similar in spirit to the present version, but may differ in detail to
240
- address new problems or concerns.
241
-
242
- Each version is given a distinguishing version number. If the Program
243
- specifies a version number of this License which applies to it and "any
244
- later version", you have the option of following the terms and conditions
245
- either of that version or of any later version published by the Free
246
- Software Foundation. If the Program does not specify a version number of
247
- this License, you may choose any version ever published by the Free Software
248
- Foundation.
249
-
250
- 10. If you wish to incorporate parts of the Program into other free
251
- programs whose distribution conditions are different, write to the author
252
- to ask for permission. For software which is copyrighted by the Free
253
- Software Foundation, write to the Free Software Foundation; we sometimes
254
- make exceptions for this. Our decision will be guided by the two goals
255
- of preserving the free status of all derivatives of our free software and
256
- of promoting the sharing and reuse of software generally.
257
-
258
- NO WARRANTY
259
-
260
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
- FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
- OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
- PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
- OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
- TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
- PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
- REPAIR OR CORRECTION.
269
-
270
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
- WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
- REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
- INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
- OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
- TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
- YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
- PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
- POSSIBILITY OF SUCH DAMAGES.
279
-
280
- END OF TERMS AND CONDITIONS
281
-
282
- How to Apply These Terms to Your New Programs
283
-
284
- If you develop a new program, and you want it to be of the greatest
285
- possible use to the public, the best way to achieve this is to make it
286
- free software which everyone can redistribute and change under these terms.
287
-
288
- To do so, attach the following notices to the program. It is safest
289
- to attach them to the start of each source file to most effectively
290
- convey the exclusion of warranty; and each file should have at least
291
- the "copyright" line and a pointer to where the full notice is found.
292
-
293
- WordPress Landing Pages
294
- Copyright (C) 2013 Inbound Now
295
-
296
- This program is free software; you can redistribute it and/or modify
297
- it under the terms of the GNU General Public License as published by
298
- the Free Software Foundation; either version 2 of the License, or
299
- (at your option) any later version.
300
-
301
- This program is distributed in the hope that it will be useful,
302
- but WITHOUT ANY WARRANTY; without even the implied warranty of
303
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
- GNU General Public License for more details.
305
-
306
- You should have received a copy of the GNU General Public License along
307
- with this program; if not, write to the Free Software Foundation, Inc.,
308
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
-
310
- Also add information on how to contact you by electronic and paper mail.
311
-
312
- If the program is interactive, make it output a short notice like this
313
- when it starts in an interactive mode:
314
-
315
- Gnomovision version 69, Copyright (C) year name of author
316
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
- This is free software, and you are welcome to redistribute it
318
- under certain conditions; type `show c' for details.
319
-
320
- The hypothetical commands `show w' and `show c' should show the appropriate
321
- parts of the General Public License. Of course, the commands you use may
322
- be called something other than `show w' and `show c'; they could even be
323
- mouse-clicks or menu items--whatever suits your program.
324
-
325
- You should also get your employer (if you work as a programmer) or your
326
- school, if any, to sign a "copyright disclaimer" for the program, if
327
- necessary. Here is a sample; alter the names:
328
-
329
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
-
332
- {signature of Ty Coon}, 1 April 1989
333
- Ty Coon, President of Vice
334
-
335
- This General Public License does not permit incorporating your program into
336
- proprietary programs. If your program is a subroutine library, you may
337
- consider it more useful to permit linking proprietary applications with the
338
- library. If this is what you want to do, use the GNU Lesser General
339
- Public License instead of this License.
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ WordPress Landing Pages
294
+ Copyright (C) 2013 Inbound Now
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ {signature of Ty Coon}, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
README.md CHANGED
@@ -1,171 +1,171 @@
1
- [![Build Status](https://travis-ci.org/inboundnow/landing-pages.png?branch=master)](https://travis-ci.org/inboundnow/landing-pages)
2
-
3
- landing-pages
4
- =============
5
-
6
- WordPress Landing Pages - Plugin
7
-
8
- === WordPress Landing Pages ===
9
-
10
- Contributors: David Wells, adbox
11
- Donate link: mailto:Hudson.Atwell@gmail.com
12
- License: GPLv2 or later
13
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
- Tags: landing pages, inbound marketing, conversion pages, split testing, a b test, a b testing, a/b test, a/b testing, coming soon page, email list, landing page, list building, maintenance page, squeeze page, inbound now, landing-pages, splash pages, cpa, click tracking, goal tracking, analytics
15
- Requires at least: 3.3
16
- Tested up to: 3.5
17
- Stable Tag: 1.1.0.1
18
-
19
- Create landing pages for your WordPress site. Monitor and improve conversion rates, run A/B split tests, customize your own templates and more.
20
-
21
- == Description ==
22
-
23
- This plugin creates landing pages (a.k.a. conversion or splash pages) for your WordPress site. It gives site owners the ability to monitor and track conversion rates, run a/b or multivariate split tests on landing pages, and most importantly increase lead flow!
24
-
25
- The landing page plugin was specifically designed with inbound marketing best practices in mind and will help you drive & convert more leads on your site.
26
-
27
- Landing pages are an ideal way to convert more of your passive website visitors into active leads or email list subscribers.
28
-
29
- = Highlights =
30
-
31
- * Create beautiful Landing Pages on your WordPress site.
32
- * Visual Editor to view changes being made on the fly!
33
- * Track conversion rates on your landing pages for continual optimization.
34
- * Easily clone existing landing pages and run A/B Split tests on variations.
35
- * Use your current WordPress theme or choose from our library of custom landing page designs.
36
- * Pre-populate Forms with visitor information to increase conversion rates
37
- * Gather lead intelligence and track lead activity with <a href="http://wordpress.org/plugins/leads/screenshots/">WordPress Leads</a>
38
- * Extend functionality with our growing repository of <a href="http://www.inboundnow.com/market/category/landing-pages/extensions/">third party add ons</a>.
39
- * Easily implement your own custom landing page design.
40
-
41
- This plugin is form agnostic meaning it will work with any form system you use.
42
-
43
- Recommended form plugins (Gravity forms, Ninja Forms or Contact form 7)
44
-
45
- = About the Plugin =
46
-
47
- http://www.youtube.com/watch?v=BzcD6PgvLP4
48
-
49
- = Developers & Designers =
50
-
51
- We built the landing page plugin as a framework! Need A/B testing out of the box implemented for your existing designs? Use WordPress Landing Pages to quickly spin up new landing pages that have all the functionality your clients will need.
52
-
53
- You can quickly take your existing designs and implement them using our <a href="http://docs.inboundnow.com/landing-pages/dev">templating framework</a>.
54
-
55
- The plugin is also fully extendable and has a number of actions, filters, and hooks available for use. If a hook doesn't exist, simply ask and we can implement custom changes.
56
-
57
- == Installation ==
58
-
59
- 1. Upload `landing-pages` folder to the `/wp-content/plugins/` directory
60
- 1. Activate the plugin through the 'Plugins' menu in WordPress
61
-
62
- == Frequently Asked Questions ==
63
- *Can I create my own landing page designs?,
64
- *Yes! You can learn how to <a href="http://docs.inboundnow.com/landing-pages/dev/creating-templates">create your own landing page template here</a>.
65
-
66
- == Screenshots ==
67
-
68
- 1. Landing Page Custom Post Type
69
- 2. Track conversion rates and continuously improve your landing pages
70
- 3. Manage Split Testing Page
71
- 4. Choose from a ton of pre-made templates, use your existing design, or design your own theme!
72
-
73
- == Changelog ==
74
-
75
- = 1.1.0.1 =
76
-
77
- * Fixed: Variation saves for custom css and custom js.
78
- * Fixed: jQuery error related to wysiwyg content formatting.
79
-
80
- = 1.0.9.9 =
81
- * Improved extension metabox loading for quicker load times and optimized meta data storage.
82
- * Phased out more 'old method' split testing components.
83
- * Improved .htaccess parsing.
84
- * Addressed issue with line breaks being removed from WYSIWYG editors.
85
-
86
- = 1.0.9.4 =
87
- * Added in tours for the edit screen and the list of landing page screen for new users to learn how to use the tool quickly and easily
88
- * Updated conversion tracking for wp-leads addon plugin
89
- * Added in option for default templates to toggle on/off navigation
90
-
91
- = 1.0.9.3 =
92
-
93
- * Removed old A/B split testing and the new system is fully in place!
94
-
95
- = 1.0.9.0 =
96
-
97
- * Added in A/B stats to the main landing page list view
98
-
99
- = 1.0.8.6 =
100
-
101
- * Release new and improved version of A/B testing!
102
- * Ajax saving on landing page options for faster page edits
103
- * Frontend Visual Editor to see what you are editing/changing
104
- * Enabled frontend editor for use on normal pages and posts
105
-
106
- = 1.0.8.5 =
107
-
108
- Providing better conversion and impression tracking for landing pages that are set as homepage.
109
-
110
- = 1.0.8.4 =
111
-
112
- Fixing activation bug
113
-
114
- = 1.0.8.1 =
115
-
116
- Fixing issue with jquery submission errors.
117
-
118
- = 1.0.7.9 =
119
-
120
- Added capability to activate and update license keys for premium extensions. Added ability to define white listed HTML elements for Form Standardization process.
121
-
122
- = 1.0.7.3 =
123
-
124
- Fixed issue with WP_List_table causing posts to to save or edit propperly Attempt 001
125
-
126
- = 1.0.7.1 =
127
-
128
- Added cookie based auto-field population & lead data collection to core.
129
-
130
- = 1.0.5.6 =
131
-
132
- Fixed issue with global setting's radio buttons not holding new set values.
133
-
134
- = 1.0.5.3 =
135
-
136
- Solutions for custom post type wp rewrite issue on activation.
137
-
138
- = 1.0.5.1 =
139
-
140
- Introducing version control system for extensions.
141
-
142
- = 1.0.4.4 =
143
-
144
- Migrating store to new location. Updating version control systems
145
-
146
- = 1.0.4.2 =
147
-
148
- Added new defitions to form standardization parser. Limited .htaccess rewrites to plugin activation to try and mitigate .htaccess corruptions.
149
-
150
- = 1.0.4.1 =
151
-
152
- Fixed issue with conversions not recording on some servers by forcing form submittal to wait until ajax has completely finnished loading before continuing to process form.
153
-
154
- = 1.0.3.9 =
155
-
156
- Fixed issue with plugins and wp core refusing to update on some installations when landing page plugin is activated.
157
-
158
- = 1.0.3.8 =
159
-
160
- Debugging cross browser impressions and conversion tracking. Implemented soltion for url-to-postid conversions that's compatible with the /slug/ removal extension for landing pages plugin.
161
- Added email validation check to prevent false positives when form standardization is turned on.
162
-
163
- = 1.0.3.7 =
164
-
165
- Bug Fix: 'Clear Stats' button.
166
-
167
- = 1.1 =
168
-
169
- Released
170
-
171
-
1
+ [![Build Status](https://travis-ci.org/inboundnow/landing-pages.png?branch=master)](https://travis-ci.org/inboundnow/landing-pages)
2
+
3
+ landing-pages
4
+ =============
5
+
6
+ WordPress Landing Pages - Plugin
7
+
8
+ === WordPress Landing Pages ===
9
+
10
+ Contributors: David Wells, adbox
11
+ Donate link: mailto:Hudson.Atwell@gmail.com
12
+ License: GPLv2 or later
13
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
+ Tags: landing pages, inbound marketing, conversion pages, split testing, a b test, a b testing, a/b test, a/b testing, coming soon page, email list, landing page, list building, maintenance page, squeeze page, inbound now, landing-pages, splash pages, cpa, click tracking, goal tracking, analytics
15
+ Requires at least: 3.3
16
+ Tested up to: 3.5
17
+ Stable Tag: 1.1.0.1
18
+
19
+ Create landing pages for your WordPress site. Monitor and improve conversion rates, run A/B split tests, customize your own templates and more.
20
+
21
+ == Description ==
22
+
23
+ This plugin creates landing pages (a.k.a. conversion or splash pages) for your WordPress site. It gives site owners the ability to monitor and track conversion rates, run a/b or multivariate split tests on landing pages, and most importantly increase lead flow!
24
+
25
+ The landing page plugin was specifically designed with inbound marketing best practices in mind and will help you drive & convert more leads on your site.
26
+
27
+ Landing pages are an ideal way to convert more of your passive website visitors into active leads or email list subscribers.
28
+
29
+ = Highlights =
30
+
31
+ * Create beautiful Landing Pages on your WordPress site.
32
+ * Visual Editor to view changes being made on the fly!
33
+ * Track conversion rates on your landing pages for continual optimization.
34
+ * Easily clone existing landing pages and run A/B Split tests on variations.
35
+ * Use your current WordPress theme or choose from our library of custom landing page designs.
36
+ * Pre-populate Forms with visitor information to increase conversion rates
37
+ * Gather lead intelligence and track lead activity with <a href="http://wordpress.org/plugins/leads/screenshots/">WordPress Leads</a>
38
+ * Extend functionality with our growing repository of <a href="http://www.inboundnow.com/market/category/landing-pages/extensions/">third party add ons</a>.
39
+ * Easily implement your own custom landing page design.
40
+
41
+ This plugin is form agnostic meaning it will work with any form system you use.
42
+
43
+ Recommended form plugins (Gravity forms, Ninja Forms or Contact form 7)
44
+
45
+ = About the Plugin =
46
+
47
+ http://www.youtube.com/watch?v=BzcD6PgvLP4
48
+
49
+ = Developers & Designers =
50
+
51
+ We built the landing page plugin as a framework! Need A/B testing out of the box implemented for your existing designs? Use WordPress Landing Pages to quickly spin up new landing pages that have all the functionality your clients will need.
52
+
53
+ You can quickly take your existing designs and implement them using our <a href="http://docs.inboundnow.com/landing-pages/dev">templating framework</a>.
54
+
55
+ The plugin is also fully extendable and has a number of actions, filters, and hooks available for use. If a hook doesn't exist, simply ask and we can implement custom changes.
56
+
57
+ == Installation ==
58
+
59
+ 1. Upload `landing-pages` folder to the `/wp-content/plugins/` directory
60
+ 1. Activate the plugin through the 'Plugins' menu in WordPress
61
+
62
+ == Frequently Asked Questions ==
63
+ *Can I create my own landing page designs?,
64
+ *Yes! You can learn how to <a href="http://docs.inboundnow.com/landing-pages/dev/creating-templates">create your own landing page template here</a>.
65
+
66
+ == Screenshots ==
67
+
68
+ 1. Landing Page Custom Post Type
69
+ 2. Track conversion rates and continuously improve your landing pages
70
+ 3. Manage Split Testing Page
71
+ 4. Choose from a ton of pre-made templates, use your existing design, or design your own theme!
72
+
73
+ == Changelog ==
74
+
75
+ = 1.1.0.1 =
76
+
77
+ * Fixed: Variation saves for custom css and custom js.
78
+ * Fixed: jQuery error related to wysiwyg content formatting.
79
+
80
+ = 1.0.9.9 =
81
+ * Improved extension metabox loading for quicker load times and optimized meta data storage.
82
+ * Phased out more 'old method' split testing components.
83
+ * Improved .htaccess parsing.
84
+ * Addressed issue with line breaks being removed from WYSIWYG editors.
85
+
86
+ = 1.0.9.4 =
87
+ * Added in tours for the edit screen and the list of landing page screen for new users to learn how to use the tool quickly and easily
88
+ * Updated conversion tracking for wp-leads addon plugin
89
+ * Added in option for default templates to toggle on/off navigation
90
+
91
+ = 1.0.9.3 =
92
+
93
+ * Removed old A/B split testing and the new system is fully in place!
94
+
95
+ = 1.0.9.0 =
96
+
97
+ * Added in A/B stats to the main landing page list view
98
+
99
+ = 1.0.8.6 =
100
+
101
+ * Release new and improved version of A/B testing!
102
+ * Ajax saving on landing page options for faster page edits
103
+ * Frontend Visual Editor to see what you are editing/changing
104
+ * Enabled frontend editor for use on normal pages and posts
105
+
106
+ = 1.0.8.5 =
107
+
108
+ Providing better conversion and impression tracking for landing pages that are set as homepage.
109
+
110
+ = 1.0.8.4 =
111
+
112
+ Fixing activation bug
113
+
114
+ = 1.0.8.1 =
115
+
116
+ Fixing issue with jquery submission errors.
117
+
118
+ = 1.0.7.9 =
119
+
120
+ Added capability to activate and update license keys for premium extensions. Added ability to define white listed HTML elements for Form Standardization process.
121
+
122
+ = 1.0.7.3 =
123
+
124
+ Fixed issue with WP_List_table causing posts to to save or edit propperly Attempt 001
125
+
126
+ = 1.0.7.1 =
127
+
128
+ Added cookie based auto-field population & lead data collection to core.
129
+
130
+ = 1.0.5.6 =
131
+
132
+ Fixed issue with global setting's radio buttons not holding new set values.
133
+
134
+ = 1.0.5.3 =
135
+
136
+ Solutions for custom post type wp rewrite issue on activation.
137
+
138
+ = 1.0.5.1 =
139
+
140
+ Introducing version control system for extensions.
141
+
142
+ = 1.0.4.4 =
143
+
144
+ Migrating store to new location. Updating version control systems
145
+
146
+ = 1.0.4.2 =
147
+
148
+ Added new defitions to form standardization parser. Limited .htaccess rewrites to plugin activation to try and mitigate .htaccess corruptions.
149
+
150
+ = 1.0.4.1 =
151
+
152
+ Fixed issue with conversions not recording on some servers by forcing form submittal to wait until ajax has completely finnished loading before continuing to process form.
153
+
154
+ = 1.0.3.9 =
155
+
156
+ Fixed issue with plugins and wp core refusing to update on some installations when landing page plugin is activated.
157
+
158
+ = 1.0.3.8 =
159
+
160
+ Debugging cross browser impressions and conversion tracking. Implemented soltion for url-to-postid conversions that's compatible with the /slug/ removal extension for landing pages plugin.
161
+ Added email validation check to prevent false positives when form standardization is turned on.
162
+
163
+ = 1.0.3.7 =
164
+
165
+ Bug Fix: 'Clear Stats' button.
166
+
167
+ = 1.1 =
168
+
169
+ Released
170
+
171
+
classes/class.activation.php DELETED
@@ -1,195 +0,0 @@
1
- <?php
2
-
3
-
4
- if ( !class_exists('Landing_Pages_Activation') ) {
5
-
6
- class Landing_Pages_Activation {
7
-
8
- static $version_wp;
9
- static $version_php;
10
- static $version_cta;
11
- static $version_leads;
12
- static $version_lpah;
13
-
14
- public static function activate() {
15
- self::load_static_vars();
16
- self::run_version_checks();
17
- self::activate_plugin();
18
- self::run_updates();
19
- }
20
-
21
- public static function deactivate() {
22
- global $wp_rewrite;
23
- $wp_rewrite->flush_rules();
24
- }
25
-
26
- public static function load_static_vars() {
27
-
28
- self::$version_wp = '3.6';
29
- self::$version_php = '5.3';
30
- self::$version_cta = '1.2.1';
31
- self::$version_leads = '1.2.1';
32
- self::$version_lpah = '1.0.8';
33
- }
34
-
35
- public static function activate_plugin() {
36
-
37
- /* Update DB Markers for Plugin */
38
- self::store_version_data();
39
-
40
- /* Set Default Settings */
41
- self::set_default_settings();
42
-
43
- }
44
-
45
- /* This method loads public methods from the Landing_Pages_Activation_Update_Routines class and automatically runs them if they have not been run yet.
46
- * We use transients to store the data, which may not be the best way but I don't have to worry about save/update/create option and the auto load process
47
- */
48
-
49
- public static function run_updates() {
50
-
51
- /* Get list of updaters from Landing_Pages_Activation_Update_Routines class */
52
- $updaters = get_class_methods('Landing_Pages_Activation_Update_Routines');
53
-
54
- /* Get transient list of completed update processes */
55
- $completed = ( get_option( 'lp_completed_upgrade_routines' ) ) ? get_option( 'lp_completed_upgrade_routines' ) : array();
56
-
57
- /* Get the difference between the two arrays */
58
- $remaining = array_diff( $updaters , $completed );
59
-
60
- /* Loop through updaters and run updaters that have not been ran */
61
- foreach ( $remaining as $updater ) {
62
-
63
- Landing_Pages_Activation_Update_Routines::$updater();
64
- $completed[] = $updater;
65
-
66
- }
67
-
68
- /* Update this transient value with list of completed upgrade processes */
69
- update_option( 'lp_completed_upgrade_routines' , $completed );
70
-
71
- }
72
-
73
- /* Creates transient records of past and current version data */
74
- public static function store_version_data() {
75
-
76
- $old = get_transient('lp_current_version');
77
- set_transient( 'lp_previous_version' , $old );
78
- set_transient( 'lp_current_version' , LANDINGPAGES_CURRENT_VERSION );
79
-
80
- }
81
-
82
- public static function set_default_settings() {
83
- add_option( 'lp_global_css', '', '', 'no' );
84
- add_option( 'lp_global_js', '', '', 'no' );
85
- add_option( 'lp_global_lp_slug', 'go', '', 'no' );
86
- update_option( 'lp_activate_rewrite_check', '1');
87
-
88
- /* Set's welcome page redirect transient */
89
- set_transient( '_landing_page_activation_redirect', true, 30 );
90
- /* We've had issues with this not working.
91
- global $wp_rewrite;
92
- $wp_rewrite->flush_rules();
93
- */
94
- }
95
-
96
- /* Aborts activation and details
97
- * @param args ARRAY of message details
98
- */
99
- public static function abort_activation( $args ) {
100
- echo $args['title'] . '<br>';
101
- echo $args['message'] . '<br>';
102
- echo 'Details:<br>';
103
- print_r ($args['details']);
104
- echo '<br>';
105
- echo $args['solution'];
106
-
107
- deactivate_plugins( LANDINGPAGES_FILE );
108
- exit;
109
- }
110
-
111
-
112
- /* Checks if plugin is compatible with current server PHP version */
113
- public static function run_version_checks() {
114
-
115
- global $wp_version;
116
-
117
- /* Check PHP Version */
118
- if ( version_compare( phpversion(), self::$version_php, '<' ) ) {
119
- self::abort_activation(
120
- array(
121
- 'title' => 'Installation aborted',
122
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
123
- 'details' => array(
124
- __( 'Server PHP Version' , 'landing-pages' ) => phpversion(),
125
- __( 'Required PHP Version' , 'landing-pages' ) => self::$version_php
126
- ),
127
- 'solultion' => sprintf( __( 'Please contact your hosting provider to upgrade PHP to %s or greater' , 'landing-pages' ) , self::$version_php )
128
- )
129
- );
130
- }
131
-
132
- /* Check WP Version */
133
- if ( version_compare( $wp_version , self::$version_wp, '<' ) ) {
134
- self::abort_activation( array(
135
- 'title' => 'Installation aborted',
136
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
137
- 'details' => array(
138
- __( 'WordPress Version' , 'landing-pages' ) => $wp_version,
139
- __( 'Required WordPress Version' , 'landing-pages' ) => self::$version_wp
140
- ),
141
- 'solultion' => sprintf( __( 'Please update landing pages to version %s or greater.' , 'landing-pages' ) , self::$version_wp )
142
- )
143
- );
144
- }
145
-
146
- /* Check CTA Version */
147
- if ( defined('WP_CTA_CURRENT_VERSION') && version_compare( WP_CTA_CURRENT_VERSION , self::$version_cta , '<' ) ) {
148
- self::abort_activation( array(
149
- 'title' => 'Installation aborted',
150
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
151
- 'details' => array(
152
- __( 'Calls to Action Version' , 'landing-pages' ) => WP_CTA_CURRENT_VERSION,
153
- __( 'Required Calls to Action Version' , 'landing-pages' ) => self::$version_cta
154
- ),
155
- 'solultion' => sprintf( __( 'Please update Calls to Action to version %s or greater.' , 'landing-pages' ) , self::$version_cta )
156
- )
157
- );
158
- }
159
-
160
- /* Check Leads Version */
161
- if ( defined('WPL_CURRENT_VERSION') && version_compare( WPL_CURRENT_VERSION , self::$version_leads , '<' ) ) {
162
- self::abort_activation( array(
163
- 'title' => 'Installation aborted',
164
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
165
- 'details' => array(
166
- __( 'Leads Version' , 'landing-pages' ) => WPL_CURRENT_VERSION,
167
- __( 'Required Leads Version' , 'landing-pages' ) => self::$version_leads
168
- ),
169
- 'solultion' => sprintf( __( 'Please update Leads to version %s or greater.' , 'landing-pages' ) , self::$version_leads )
170
- )
171
- );
172
- }
173
-
174
- /* Check Extension Version */
175
- if ( defined('LP_HOMEPAGE_CURRENT_VERSION') && version_compare( LP_HOMEPAGE_CURRENT_VERSION , self::$version_lpah , '<' ) ) {
176
- self::abort_activation( array(
177
- 'title' => 'Installation aborted',
178
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
179
- 'details' => array(
180
- __( 'Extension: Landing Page as Homepage' , 'landing-pages' ) => LP_HOMEPAGE_CURRENT_VERSION,
181
- __( 'Required extension version' , 'landing-pages' ) => self::$version_lpah
182
- ),
183
- 'solultion' => sprintf( __( 'Please update extension to version %s or greater.' , 'landing-pages' ) , self::$version_lpah )
184
- )
185
- );
186
- }
187
-
188
- }
189
- }
190
-
191
- /* Add Activation Hook */
192
- register_activation_hook( LANDINGPAGES_FILE , array( 'Landing_Pages_Activation' , 'activate' ) );
193
- register_deactivation_hook( LANDINGPAGES_FILE , array( 'Landing_Pages_Activation' , 'deactivate' ) );
194
-
195
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class.activation.update-processes.php DELETED
@@ -1,128 +0,0 @@
1
- <?php
2
-
3
- /* Public methods in this class will be run at least once during plugin activation script. */
4
- /* Updater methods fired are stored in transient to prevent repeat processing */
5
-
6
- if ( !class_exists('Landing_Pages_Activation_Update_Processes') ) {
7
-
8
- class Landing_Pages_Activation_Update_Processes {
9
-
10
- /*
11
- * UPDATE METHOD
12
- * Migrates data stored in wp_content and lp-conversion-area
13
- */
14
- public static function migrate_theme_meta_data_1_5_6() {
15
-
16
- /* for all landing pages load variations */
17
- $landing_pages = get_posts( array (
18
- 'post_type' => 'landing-page',
19
- 'posts_per_page' => -1
20
- ));
21
-
22
- foreach ($landing_pages as $page) {
23
- /* for all variations loop through and migrate_data */
24
-
25
- $variations = ( get_post_meta($page->ID,'lp-ab-variations', true) ) ? $variations : array();
26
-
27
- foreach ($variations as $key=>$vid) {
28
- echo $vid;
29
-
30
- }
31
-
32
- }
33
-
34
-
35
- }
36
-
37
- /*
38
- * UPDATE METHOD
39
- * Moves legacy templates to uploads folder
40
- */
41
- public static function updater_move_legacy_templates() {
42
-
43
- /* move copy of legacy core templates to the uploads folder and delete from core templates directory */
44
- $templates_to_move = array('rsvp-envelope','super-slick');
45
- chmod(LANDINGPAGES_UPLOADS_PATH, 0755);
46
-
47
- $template_paths = lp_get_core_template_paths();
48
- if (count($template_paths)>0)
49
- {
50
- foreach ($template_paths as $name)
51
- {
52
- if (in_array( $name, $templates_to_move ))
53
- {
54
- $old_path = LANDINGPAGES_PATH."templates/$name/";
55
- $new_path = LANDINGPAGES_UPLOADS_PATH."$name/";
56
-
57
- /*
58
- echo "oldpath: $old_path<br>";
59
- echo "newpath: $new_path<br>";
60
- */
61
-
62
- @mkdir($new_path , 0775);
63
- chmod($old_path , 0775);
64
-
65
- self::move_files( $old_path , $new_path );
66
-
67
- rmdir($old_path);
68
- }
69
- }
70
- }
71
- }
72
-
73
- /* Private Method - Moves files from one folder the older. This is not an updater process */
74
- private static function move_files( $old_path , $new_path ) {
75
-
76
- $files = scandir($old_path);
77
-
78
- if (!$files) {
79
- return;
80
- }
81
-
82
- foreach ($files as $file) {
83
- if (in_array($file, array(".",".."))) continue;
84
-
85
- if ($file==".DS_Store")
86
- {
87
- unlink($old_path.$file);
88
- continue;
89
- }
90
-
91
- if (is_dir($old_path.$file))
92
- {
93
- @mkdir($new_path.$file.'/' , 0775);
94
- chmod($old_path.$file.'/' , 0775);
95
- lp_move_template_files( $old_path.$file.'/' , $new_path.$file.'/' );
96
- rmdir($old_path.$file);
97
- continue;
98
- }
99
-
100
- /*
101
- echo "oldfile:".$old_path.$file."<br>";
102
- echo "newfile:".$new_path.$file."<br>";
103
- */
104
-
105
- if (copy($old_path.$file, $new_path.$file)) {
106
- unlink($old_path.$file);
107
- }
108
- }
109
-
110
- $delete = (isset($delete)) ? $delete : false;
111
-
112
- if (!$delete) {
113
- return;
114
- }
115
- }
116
-
117
- }
118
-
119
- }
120
-
121
-
122
- /* Declare Helper Functions here */
123
- function lp_move_template_files( $old_path , $new_path )
124
- {
125
-
126
-
127
-
128
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class.activation.upgrade-routines.php DELETED
@@ -1,185 +0,0 @@
1
- <?php
2
-
3
- /* Public methods in this class will be run at least once during plugin activation script. */
4
- /* Updater methods fired are stored in transient to prevent repeat processing */
5
-
6
- if ( !class_exists('Landing_Pages_Activation_Update_Routines') ) {
7
-
8
- class Landing_Pages_Activation_Update_Routines {
9
-
10
- /*
11
- * @introduced: 1.5.7
12
- * @migration-type: Meta pair migragtion
13
- * @migration: convert meta key lp-conversion-area to template-name-conversion-area-content-{vid}
14
- */
15
- public static function migrate_legacy_conversion_area_contents() {
16
-
17
- /* for all landing pages load variations */
18
- $landing_pages = get_posts( array (
19
- 'post_type' => 'landing-page',
20
- 'posts_per_page' => -1
21
- ));
22
-
23
- foreach ($landing_pages as $post) {
24
- //echo 'post id:' . $post->ID;
25
- //echo '<br>';
26
- /* for all variations loop through and migrate_data */
27
- ( get_post_meta($post->ID,'lp-ab-variations', true) ) ? $variations = get_post_meta($post->ID,'lp-ab-variations', true) : $variations = array( '0' => '0' );
28
-
29
- foreach ($variations as $key=>$vid) {
30
-
31
- ($vid) ? $suffix = '-' . $vid : $suffix = '';
32
-
33
- $selected_template = get_post_meta( $post->ID , 'lp-selected-template' . $suffix , true );
34
-
35
- if ( !$selected_template ) {
36
- continue;
37
- }
38
-
39
- /* discover legacy main content */
40
- ( $vid ) ? $conversion_area_content = get_post_meta( $post->ID , 'conversion-area-content' . $suffix , true ) : $conversion_area_content = get_post_meta( $post->ID , 'lp-conversion-area' , true );
41
-
42
- /* Now if the new key is not already poplated, copy the content to the new key */
43
- $check = get_post_meta( $post->ID , $selected_template .'-conversion-area-content' . $suffix , true );
44
- if (!$check) {
45
- update_post_meta( $post->ID , $selected_template .'-conversion-area-content' . $suffix , $conversion_area_content );
46
- }
47
-
48
- }
49
-
50
- }
51
- }
52
- /*
53
- * @introduced: 1.5.7
54
- * @migration-type: Meta pair migragtion
55
- * @migration: mirgrates post_content and content-{vid} values to template-name-main-content-{vid}
56
-
57
- */
58
- public static function migrate_legacy_main_content() {
59
-
60
- /* for all landing pages load variations */
61
- $landing_pages = get_posts( array (
62
- 'post_type' => 'landing-page',
63
- 'posts_per_page' => -1
64
- ));
65
-
66
- foreach ($landing_pages as $post) {
67
-
68
- /* for all variations loop through and migrate_data */
69
- ( get_post_meta($post->ID,'lp-ab-variations', true) ) ? $variations = get_post_meta($post->ID,'lp-ab-variations', true) : $variations = array( '0' => '0' );
70
-
71
- foreach ($variations as $key=>$vid) {
72
-
73
- ($vid) ? $suffix = '-' . $vid : $suffix = '';
74
-
75
- $selected_template = get_post_meta( $post->ID , 'lp-selected-template' . $suffix , true );
76
- if ( !$selected_template ) {
77
- continue;
78
- }
79
-
80
- /* discover legacy main content */
81
- ( $vid ) ? $content = get_post_meta( $post->ID , 'content' . $suffix , true ) : $content = $post->post_content;
82
-
83
- /* Now if the new key is not already poplated, copy the content to the new key */
84
- $check = get_post_meta( $post->ID , $selected_template .'-main-content' . $suffix , true );
85
- if (!$check) {
86
- update_post_meta( $post->ID , $selected_template .'-main-content' . $suffix , $content );
87
- }
88
-
89
- }
90
-
91
- }
92
- }
93
-
94
- /*
95
- * UPDATE METHOD
96
- * Moves legacy templates to uploads folder
97
- */
98
- public static function updater_move_legacy_templates() {
99
-
100
- /* move copy of legacy core templates to the uploads folder and delete from core templates directory */
101
- $templates_to_move = array('rsvp-envelope','super-slick');
102
- chmod(LANDINGPAGES_UPLOADS_PATH, 0755);
103
-
104
- $template_paths = lp_get_core_template_paths();
105
- if (count($template_paths)>0)
106
- {
107
- foreach ($template_paths as $name)
108
- {
109
- if (in_array( $name, $templates_to_move ))
110
- {
111
- $old_path = LANDINGPAGES_PATH."templates/$name/";
112
- $new_path = LANDINGPAGES_UPLOADS_PATH."$name/";
113
-
114
- /*
115
- echo "oldpath: $old_path<br>";
116
- echo "newpath: $new_path<br>";
117
- */
118
-
119
- @mkdir($new_path , 0775);
120
- chmod($old_path , 0775);
121
-
122
- self::move_files( $old_path , $new_path );
123
-
124
- rmdir($old_path);
125
- }
126
- }
127
- }
128
- }
129
-
130
- /* Private Method - Moves files from one folder the older. This is not an updater process */
131
- private static function move_files( $old_path , $new_path ) {
132
-
133
- $files = scandir($old_path);
134
-
135
- if (!$files) {
136
- return;
137
- }
138
-
139
- foreach ($files as $file) {
140
- if (in_array($file, array(".",".."))) continue;
141
-
142
- if ($file==".DS_Store")
143
- {
144
- unlink($old_path.$file);
145
- continue;
146
- }
147
-
148
- if (is_dir($old_path.$file))
149
- {
150
- @mkdir($new_path.$file.'/' , 0775);
151
- chmod($old_path.$file.'/' , 0775);
152
- lp_move_template_files( $old_path.$file.'/' , $new_path.$file.'/' );
153
- rmdir($old_path.$file);
154
- continue;
155
- }
156
-
157
- /*
158
- echo "oldfile:".$old_path.$file."<br>";
159
- echo "newfile:".$new_path.$file."<br>";
160
- */
161
-
162
- if (copy($old_path.$file, $new_path.$file)) {
163
- unlink($old_path.$file);
164
- }
165
- }
166
-
167
- $delete = (isset($delete)) ? $delete : false;
168
-
169
- if (!$delete) {
170
- return;
171
- }
172
- }
173
-
174
- }
175
-
176
- }
177
-
178
-
179
- /* Declare Helper Functions here */
180
- function lp_move_template_files( $old_path , $new_path )
181
- {
182
-
183
-
184
-
185
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
classes/class.plugin-updater.php DELETED
@@ -1,198 +0,0 @@
1
- <?php
2
-
3
-
4
- if ( class_exists('Landing_Pages_Activation') ) {
5
-
6
- class Landing_Pages_Activation {
7
-
8
- static $version_wp;
9
- static $version_php;
10
- static $version_cta;
11
- static $version_leads;
12
-
13
- public function activate() {
14
-
15
- self::load_static_vars();
16
- self::run_version_checks();
17
- self::activate_plugin();
18
- self::run_updates();
19
- }
20
-
21
- public function deactivate() {
22
- global $wp_rewrite;
23
- $wp_rewrite->flush_rules();
24
- }
25
-
26
- public function load_static_vars() {
27
-
28
- self::$version_wp = '3.6';
29
- self::$version_php = '5.3';
30
- self::$version_cta = '1.2.1';
31
- self::$version_leads = '1.2.1';
32
- self::$version_lpah = '1.0.8';
33
- }
34
-
35
- public static function activate_plugin() {
36
-
37
- /* Update DB Markers for Plugin */
38
- self::store_version_data();
39
-
40
- /* Set Default Settings */
41
- self::set_default_settings();
42
-
43
- }
44
-
45
- /* This method loads public methods from the Landing_Pages_Activation_Update_Processes class and automatically runs them if they have not been run yet.
46
- * We use transients to store the data, which may not be the best way but I don't have to worry about save/update/create option and the auto load process
47
- */
48
-
49
- public static function run_updates() {
50
-
51
-
52
- /* Get list of updaters from Landing_Pages_Activation_Update_Processes class */
53
- $updaters = get_class_methods('Landing_Pages_Activation_Update_Processes');
54
-
55
- /* Get transient list of completed update processes */
56
- $completed = ( get_transient( 'lp_completed_updaters' ) ) ? get_transient( 'lp_completed_updaters' ) : array();
57
- print_r($completed);exit;
58
- /* Get the difference between the two arrays */
59
- $remaining = array_diff( $updates , $completed );
60
-
61
- /* Loop through updaters and run updaters that have not been ran */
62
- foreach ( $remaining as $updater ) {
63
-
64
- Landing_Pages_Activation_Update_Processes::$updater();
65
- $completed[] = $updater;
66
-
67
- }
68
-
69
- /* Update this transient value with list of completed upgrade processes */
70
- update_transient( 'lp_completed_updaters' , $completed );
71
-
72
- }
73
-
74
- /* Creates transient records of past and current version data */
75
- public static function store_version_data() {
76
-
77
- $old = get_transient('lp_current_version');
78
- set_transient( 'lp_previous_version' , $old );
79
- set_transient( 'lp_current_version' , LANDINGPAGES_CURRENT_VERSION );
80
-
81
- }
82
-
83
- public static function set_default_settings() {
84
- add_option( 'lp_global_css', '', '', 'no' );
85
- add_option( 'lp_global_js', '', '', 'no' );
86
- add_option( 'lp_global_lp_slug', 'go', '', 'no' );
87
- update_option( 'lp_activate_rewrite_check', '1');
88
-
89
- /* Set's welcome page redirect transient */
90
- set_transient( '_landing_page_activation_redirect', true, 30 );
91
- /* We've had issues with this not working.
92
- global $wp_rewrite;
93
- $wp_rewrite->flush_rules();
94
- */
95
- }
96
-
97
- /* Aborts activation and details
98
- * @param args ARRAY of message details
99
- */
100
- public static function abort_activation( $args ) {
101
- echo $args['title'] . '<br>';
102
- echo $args['message'] . '<br>';
103
- echo 'Details:<br>';
104
- print_r ($args['details']);
105
- echo '<br>';
106
- echo $args['solution'];
107
-
108
- deactivate_plugins( LANDINGPAGES_FILE );
109
- exit;
110
- }
111
-
112
-
113
- /* Checks if plugin is compatible with current server PHP version */
114
- public static function run_version_checks() {
115
-
116
- global $wp_version;
117
-
118
- /* Check PHP Version */
119
- if ( version_compare( phpversion(), $php, '<' ) ) {
120
- self::abort_activation(
121
- array(
122
- 'title' => 'Installation aborted',
123
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
124
- 'details' => array(
125
- __( 'Server PHP Version' , 'landing-pages' ) => phpversion(),
126
- __( 'Required PHP Version' , 'landing-pages' ) => self::$version_php
127
- ),
128
- 'solultion' => sprintf( __( 'Please contact your hosting provider to upgrade PHP to %s or greater' , 'landing-pages' ) , self::$version_php )
129
- )
130
- );
131
- }
132
-
133
- /* Check WP Version */
134
- if ( version_compare( $wp_version , self::$version_wp, '<' ) ) {
135
- self::abort_activation( array(
136
- 'title' => 'Installation aborted',
137
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
138
- 'details' => array(
139
- __( 'WordPress Version' , 'landing-pages' ) => $wp_version,
140
- __( 'Required WordPress Version' , 'landing-pages' ) => self::$version_wp
141
- ),
142
- 'solultion' => sprintf( __( 'Please update landing pages to version %s or greater.' , 'landing-pages' ) , self::$version_wp )
143
- )
144
- );
145
- }
146
-
147
- /* Check CTA Version */
148
- if ( defined('WP_CTA_CURRENT_VERSION') && version_compare( WP_CTA_CURRENT_VERSION , self::$version_cta , '<' ) ) {
149
- self::abort_activation( array(
150
- 'title' => 'Installation aborted',
151
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
152
- 'details' => array(
153
- __( 'Calls to Action Version' , 'landing-pages' ) => WP_CTA_CURRENT_VERSION,
154
- __( 'Required Calls to Action Version' , 'landing-pages' ) => self::$version_cta
155
- ),
156
- 'solultion' => sprintf( __( 'Please update Calls to Action to version %s or greater.' , 'landing-pages' ) , self::$version_cta )
157
- )
158
- );
159
- }
160
-
161
- /* Check Leads Version */
162
- if ( defined('WPL_CURRENT_VERSION') && version_compare( WPL_CURRENT_VERSION , self::$version_leads , '<' ) ) {
163
- self::abort_activation( array(
164
- 'title' => 'Installation aborted',
165
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
166
- 'details' => array(
167
- __( 'Leads Version' , 'landing-pages' ) => WPL_CURRENT_VERSION,
168
- __( 'Required Leads Version' , 'landing-pages' ) => self::$version_leads
169
- ),
170
- 'solultion' => sprintf( __( 'Please update Leads to version %s or greater.' , 'landing-pages' ) , self::$version_leads )
171
- )
172
- );
173
- }
174
-
175
- /* Check Extension Version */
176
- if ( defined('LP_HOMEPAGE_CURRENT_VERSION') && version_compare( LP_HOMEPAGE_CURRENT_VERSION , self::$version_lpah , '<' ) ) {
177
- self::abort_activation( array(
178
- 'title' => 'Installation aborted',
179
- 'message' => __('Landing Plugin could not be installed' , 'landing-pages'),
180
- 'details' => array(
181
- __( 'Extension: Landing Page as Homepage' , 'landing-pages' ) => LP_HOMEPAGE_CURRENT_VERSION,
182
- __( 'Required extension version' , 'landing-pages' ) => self::$version_lpah
183
- ),
184
- 'solultion' => sprintf( __( 'Please update extension to version %s or greater.' , 'landing-pages' ) , self::$version_lpah )
185
- )
186
- );
187
- }
188
-
189
- do_action('lp_activate_update_db');
190
- }
191
- }
192
-
193
-
194
- /* Add Activation Hook */
195
- register_activation_hook( LANDINGPAGES_FILE , array( 'Landing_Pages_Activation' , 'activate' ) );
196
- register_deactivation_hook( LANDINGPAGES_FILE , array( 'Landing_Pages_Activation' , 'deactivate' ) );
197
-
198
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
css/admin-global-settings.css CHANGED
@@ -1,205 +1,205 @@
1
-
2
- .nav-tab-special-inactive{
3
- border-color: #DFDFDF #DFDFDF #FFFFFF;
4
- border-top-left-radius: 3px;
5
- border-top-right-radius: 3px;
6
- border-width: 1px 1px 0;
7
- color: #AAAAAA;
8
- display: inline-block;
9
- font-size: 12px;
10
- line-height: 16px;
11
- margin: 0 6px -1px 0;
12
- padding: 4px 14px 6px;
13
- text-decoration: none;
14
- text-shadow: 0 1px 0 #FFFFFF;
15
- cursor:pointer;
16
- }
17
-
18
- .nav-tab-special-active{
19
- border-color: #DFDFDF #DFDFDF transparent !important;
20
- border-top-left-radius: 3px;
21
- border-top-right-radius: 3px;
22
- border-width: 1px 1px 1px;
23
- color: #000;
24
- display: inline-block;
25
- font-size: 12px;
26
- line-height: 16px;
27
- margin: 0 6px -1px 0;
28
- padding: 4px 14px 6px;
29
- text-decoration: none;
30
- text-shadow: 0 1px 0 #FFFFFF;
31
- cursor:pointer;
32
- background: rgba(241,241,241, 1) !important;
33
-
34
- }
35
-
36
- .lp-tab-display textarea {
37
- width:90%;
38
- }
39
- .lp-tab-display {
40
- width: 70%;
41
- }
42
-
43
- .lp-settings-tab-sidebar {
44
- float: right;
45
- width: 26%; }
46
-
47
- .lp-sidebar-settings {
48
- background: #fff ;
49
- border: 1px solid #EBEBEA;
50
- -webkit-box-shadow: inset 1px 1px 1px #f9f9f9;
51
- -moz-box-shadow: inset 1px 1px 1px #f9f9f9;
52
- box-shadow: inset 1px 1px 1px #f9f9f9;
53
- padding: 15px 15px 15px;
54
- margin-bottom: 20px;
55
- margin-right: 20px;
56
- }
57
- .lp-sidebar-settings .review-button {
58
- background: #94BA65 ;
59
- border: 1px solid rgba(0,0,0,0.15);
60
- -webkit-border-radius: 2px;
61
- -moz-border-radius: 2px;
62
- border-radius: 2px;
63
- -webkit-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
64
- -moz-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
65
- box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
66
- color: #fff;
67
- cursor: pointer;
68
- display: inline-block;
69
- font-family: inherit;
70
- font-size: 22px;
71
- font-weight: bold;
72
- text-decoration: none;
73
- padding: 8px 15px;
74
- margin-top: 5px;
75
- margin-bottom: 5px;
76
- text-shadow: -1px -1px 1px rgba(0,0,0,0.15);
77
- }
78
- .lp-sidebar-settings h2 {
79
- font-size: 21px;
80
- line-height: 24px;
81
- margin: 0px 0px 5px;
82
- text-shadow: 1px 1px 1px #fff; }
83
- .lp-sidebar-settings small {
84
- display: block;
85
- margin-top: 5px;
86
- }
87
- .lp-sidebar-settings input[type="image"] {
88
- margin: auto;
89
- margin-left: 90px;
90
- }
91
- #lp-additional-resources {
92
- padding-top: 15px;
93
- margin-left: 10px;
94
- }
95
- #lp-additional-resources hr {
96
- margin-bottom: 15px;
97
- margin-left: -29px;
98
- color: rgb(233, 233, 233);
99
- opacity: .7;
100
- border: 1px solid;
101
- }
102
- #lp-wordpress-site-status {
103
-
104
- color: #000;
105
- }
106
- #php-sql-lp-version h3{
107
- color: #000;
108
- margin-bottom: 0px;
109
- margin-top: 0px;
110
- padding-top: 0px;
111
- font-size: 1.5em;
112
- }
113
- #sys-inbound-form {
114
- display: none;
115
- }
116
- #sys-inbound-form h2 {
117
- display: inline-block;
118
- }
119
- #inbound-download-sysinfo {
120
- margin-left: 12px;
121
- }
122
- .lp-tab-display #php-sql-lp-version th {
123
- padding: 10px;
124
- padding-left: 0px;
125
- }
126
- #lp-main {
127
- padding-top: 0px;
128
- }
129
- #copy-inbound-info {
130
- min-height: 400px;
131
- }
132
- .nav-tab-wrapper {
133
- margin-left: -20px;
134
- padding-left: 33px !important;
135
- }
136
- #lp-main h4, h3.lp_global_settings_header {
137
- margin-top: 0px;
138
- padding-top: 0px;
139
- padding-top: 0px;
140
- font-family: "HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;
141
- font-weight: 400;
142
- line-height: 1.6em;
143
- font-size: 20px;
144
- padding-bottom: 0px;
145
- margin-bottom: 5px;
146
- }
147
- #htaccess-contents {
148
- margin-top: 20px;
149
- }
150
- #more-templates , #more-addons, #custom-templates {
151
- width: 29%;
152
- display: inline-block;
153
- background: #FCFDFE;
154
- padding: 5px;
155
- margin-right: 10px;
156
- border: 1px solid #E0E0E0;
157
- -moz-border-radius: 7px;
158
- border-radius: 7px;
159
- overflow: hidden;
160
- position: relative;
161
- }
162
- #more-templates img, #more-addons img, #custom-templates img {
163
- margin: auto;
164
- }
165
- #php-sql-lp-version {
166
- display:block;
167
- }
168
- .lp-tab-display
169
- {
170
- padding:13px;
171
- }
172
-
173
- .lp-tab-display td
174
- {
175
- padding:10px;
176
- }
177
- .lp-tab-display th
178
- {
179
- padding:10px;
180
- }
181
-
182
- .lp-tab-display th,.lp-tab-display .lp-gs-th
183
- {
184
- width:300px;
185
- font-size: 14px;
186
- font-weight:300px;
187
- text-align:left;
188
- }
189
-
190
- .lp_license_status_invalid{
191
- display:inline;
192
- padding-left:10px;
193
- color:red;
194
- font-style:italic;
195
- }
196
-
197
- .lp_license_status_valid{
198
- display:inline;
199
- padding-left:10px;
200
- color:green;
201
- font-style:italic;
202
- }
203
- #php-sql-lp-version {
204
- display: none;
205
  }
1
+
2
+ .nav-tab-special-inactive{
3
+ border-color: #DFDFDF #DFDFDF #FFFFFF;
4
+ border-top-left-radius: 3px;
5
+ border-top-right-radius: 3px;
6
+ border-width: 1px 1px 0;
7
+ color: #AAAAAA;
8
+ display: inline-block;
9
+ font-size: 12px;
10
+ line-height: 16px;
11
+ margin: 0 6px -1px 0;
12
+ padding: 4px 14px 6px;
13
+ text-decoration: none;
14
+ text-shadow: 0 1px 0 #FFFFFF;
15
+ cursor:pointer;
16
+ }
17
+
18
+ .nav-tab-special-active{
19
+ border-color: #DFDFDF #DFDFDF transparent !important;
20
+ border-top-left-radius: 3px;
21
+ border-top-right-radius: 3px;
22
+ border-width: 1px 1px 1px;
23
+ color: #000;
24
+ display: inline-block;
25
+ font-size: 12px;
26
+ line-height: 16px;
27
+ margin: 0 6px -1px 0;
28
+ padding: 4px 14px 6px;
29
+ text-decoration: none;
30
+ text-shadow: 0 1px 0 #FFFFFF;
31
+ cursor:pointer;
32
+ background: rgba(241,241,241, 1) !important;
33
+
34
+ }
35
+
36
+ .lp-tab-display textarea {
37
+ width:90%;
38
+ }
39
+ .lp-tab-display {
40
+ width: 70%;
41
+ }
42
+
43
+ .lp-settings-tab-sidebar {
44
+ float: right;
45
+ width: 26%; }
46
+
47
+ .lp-sidebar-settings {
48
+ background: #fff ;
49
+ border: 1px solid #EBEBEA;
50
+ -webkit-box-shadow: inset 1px 1px 1px #f9f9f9;
51
+ -moz-box-shadow: inset 1px 1px 1px #f9f9f9;
52
+ box-shadow: inset 1px 1px 1px #f9f9f9;
53
+ padding: 15px 15px 15px;
54
+ margin-bottom: 20px;
55
+ margin-right: 20px;
56
+ }
57
+ .lp-sidebar-settings .review-button {
58
+ background: #94BA65 ;
59
+ border: 1px solid rgba(0,0,0,0.15);
60
+ -webkit-border-radius: 2px;
61
+ -moz-border-radius: 2px;
62
+ border-radius: 2px;
63
+ -webkit-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
64
+ -moz-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
65
+ box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
66
+ color: #fff;
67
+ cursor: pointer;
68
+ display: inline-block;
69
+ font-family: inherit;
70
+ font-size: 22px;
71
+ font-weight: bold;
72
+ text-decoration: none;
73
+ padding: 8px 15px;
74
+ margin-top: 5px;
75
+ margin-bottom: 5px;
76
+ text-shadow: -1px -1px 1px rgba(0,0,0,0.15);
77
+ }
78
+ .lp-sidebar-settings h2 {
79
+ font-size: 21px;
80
+ line-height: 24px;
81
+ margin: 0px 0px 5px;
82
+ text-shadow: 1px 1px 1px #fff; }
83
+ .lp-sidebar-settings small {
84
+ display: block;
85
+ margin-top: 5px;
86
+ }
87
+ .lp-sidebar-settings input[type="image"] {
88
+ margin: auto;
89
+ margin-left: 90px;
90
+ }
91
+ #lp-additional-resources {
92
+ padding-top: 15px;
93
+ margin-left: 10px;
94
+ }
95
+ #lp-additional-resources hr {
96
+ margin-bottom: 15px;
97
+ margin-left: -29px;
98
+ color: rgb(233, 233, 233);
99
+ opacity: .7;
100
+ border: 1px solid;
101
+ }
102
+ #lp-wordpress-site-status {
103
+
104
+ color: #000;
105
+ }
106
+ #php-sql-lp-version h3{
107
+ color: #000;
108
+ margin-bottom: 0px;
109
+ margin-top: 0px;
110
+ padding-top: 0px;
111
+ font-size: 1.5em;
112
+ }
113
+ #sys-inbound-form {
114
+ display: none;
115
+ }
116
+ #sys-inbound-form h2 {
117
+ display: inline-block;
118
+ }
119
+ #inbound-download-sysinfo {
120
+ margin-left: 12px;
121
+ }
122
+ .lp-tab-display #php-sql-lp-version th {
123
+ padding: 10px;
124
+ padding-left: 0px;
125
+ }
126
+ #lp-main {
127
+ padding-top: 0px;
128
+ }
129
+ #copy-inbound-info {
130
+ min-height: 400px;
131
+ }
132
+ .nav-tab-wrapper {
133
+ margin-left: -20px;
134
+ padding-left: 33px !important;
135
+ }
136
+ #lp-main h4, h3.lp_global_settings_header {
137
+ margin-top: 0px;
138
+ padding-top: 0px;
139
+ padding-top: 0px;
140
+ font-family: "HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;
141
+ font-weight: 400;
142
+ line-height: 1.6em;
143
+ font-size: 20px;
144
+ padding-bottom: 0px;
145
+ margin-bottom: 5px;
146
+ }
147
+ #htaccess-contents {
148
+ margin-top: 20px;
149
+ }
150
+ #more-templates , #more-addons, #custom-templates {
151
+ width: 29%;
152
+ display: inline-block;
153
+ background: #FCFDFE;
154
+ padding: 5px;
155
+ margin-right: 10px;
156
+ border: 1px solid #E0E0E0;
157
+ -moz-border-radius: 7px;
158
+ border-radius: 7px;
159
+ overflow: hidden;
160
+ position: relative;
161
+ }
162
+ #more-templates img, #more-addons img, #custom-templates img {
163
+ margin: auto;
164
+ }
165
+ #php-sql-lp-version {
166
+ display:block;
167
+ }
168
+ .lp-tab-display
169
+ {
170
+ padding:13px;
171
+ }
172
+
173
+ .lp-tab-display td
174
+ {
175
+ padding:10px;
176
+ }
177
+ .lp-tab-display th
178
+ {
179
+ padding:10px;
180
+ }
181
+
182
+ .lp-tab-display th,.lp-tab-display .lp-gs-th
183
+ {
184
+ width:300px;
185
+ font-size: 14px;
186
+ font-weight:300px;
187
+ text-align:left;
188
+ }
189
+
190
+ .lp_license_status_invalid{
191
+ display:inline;
192
+ padding-left:10px;
193
+ color:red;
194
+ font-style:italic;
195
+ }
196
+
197
+ .lp_license_status_valid{
198
+ display:inline;
199
+ padding-left:10px;
200
+ color:green;
201
+ font-style:italic;
202
+ }
203
+ #php-sql-lp-version {
204
+ display: none;
205
  }
css/admin-install-plugins.css CHANGED
@@ -1,13 +1,13 @@
1
- #the-list .inbound-install-notice, #the-list .inbound-install-notice-links, .click-to-activate, .click-to-activate-bulk {
2
- display: none;
3
- }
4
- .click-to-activate, .click-to-activate-bulk {
5
- vertical-align: top !important;
6
- padding-top: 0px !important;
7
- }
8
- .click-to-activate span, .click-to-activate-bulk span {
9
- color: #04A204;
10
- padding-right: 10px;
11
- font-size: 40px;
12
- text-shadow: none;
13
  }
1
+ #the-list .inbound-install-notice, #the-list .inbound-install-notice-links, .click-to-activate, .click-to-activate-bulk {
2
+ display: none;
3
+ }
4
+ .click-to-activate, .click-to-activate-bulk {
5
+ vertical-align: top !important;
6
+ padding-top: 0px !important;
7
+ }
8
+ .click-to-activate span, .click-to-activate-bulk span {
9
+ color: #04A204;
10
+ padding-right: 10px;
11
+ font-size: 40px;
12
+ text-shadow: none;
13
  }
css/admin-landing-page-list.css CHANGED
@@ -1,361 +1,361 @@
1
- /* CSS for Landing Page List */
2
- #stats {
3
- width: 270px;
4
- }
5
-
6
- #thumbnail-lander {
7
- width: 132px;
8
- }
9
-
10
- #title {
11
- width: 255px;
12
- }
13
-
14
- #impressions, #cr, #actions {
15
- width: 99px;
16
- text-align: center;
17
- }
18
-
19
- #cr {
20
- width: 120px;
21
- }
22
- #cb {
23
- width: 20px;
24
- }
25
- .clear_stats {
26
- color: red;
27
- }
28
- .hover-description {
29
- display: block;
30
- color: grey;
31
- font-size: 10px;
32
- font-style: italic;
33
- }
34
- .lp-pop-description {
35
- padding: 10px;
36
- padding-left: 4px;
37
- padding-top: 6px;
38
- }
39
- .lp-bottom-controls {
40
- margin-left: 12px;
41
- color: red;
42
- font-size: 12px;
43
- margin-right: 8px;
44
- }
45
- .lp-delete-var-stats {
46
- display: inline-block;
47
- }
48
- .lp-pop-description {
49
- display: block;
50
- max-width: 325px;
51
- }
52
-
53
- .lp-pop-close {
54
- font-size: 11px;
55
- position: absolute;
56
- font-weight: 100;
57
- right: 10px;
58
- top: 3px;
59
- }
60
-
61
- .winner-lp {
62
- background-color: #E2FFC9;
63
- }
64
-
65
- .lp-pop-edit a{
66
- color:#fff;
67
- }
68
-
69
- .lp-extra {
70
- margin-left: 10px;
71
- }
72
-
73
- .lp-win {
74
- color: green;
75
- font-size: 14px;
76
- font-weight: bold;
77
- text-shadow: 1px 1px 1px rgba(255,255,255,0.5);
78
- }
79
-
80
- .lp-paused {
81
- color: red;
82
- font-size: 12px;
83
- }
84
-
85
- .lp-pop-controls {
86
- display: inline-block;
87
- margin-top: 8px;
88
- }
89
-
90
- .lp-pop-edit {
91
- display: inline-block !important;
92
- margin-right: 11px !important;
93
- margin-left: 5px !important;
94
- }
95
-
96
- .qtip {
97
- background: #fff;
98
- }
99
-
100
- .qtip-tip {
101
- height: 10px !important;
102
- }
103
-
104
- .qtip-content, .lp-pop-description, .lp-pop-preview a {
105
- color:#333;
106
-
107
- }
108
-
109
- .lp-pop-preview a, .lp-pop-edit a {
110
- text-decoration: none;
111
- }
112
-
113
- .qtip-titlebar
114
- {
115
- position: relative;
116
- padding: 0px;
117
- }
118
-
119
- .qtip-jtools
120
- {
121
- border: 2px solid rgba(172, 172, 172, 1);
122
- }
123
-
124
- .qtip-title {
125
- position: relative;
126
- margin: 0 0 5px;
127
- padding: 12px 17px 14px 14px;
128
- line-height: 19px;
129
- font-size: 19px;
130
- color: #fff;
131
- text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
132
- background: #8cc1e9;
133
- background-image: -webkit-gradient(linear,left bottom,left top,from(#72a7cf),to(#8cc1e9));
134
- background-image: -webkit-linear-gradient(bottom,#72a7cf,#8cc1e9);
135
- background-image: -moz-linear-gradient(bottom,#72a7cf,#8cc1e9);
136
- background-image: -o-linear-gradient(bottom,#72a7cf,#8cc1e9);
137
- background-image: linear-gradient(to top,#72a7cf,#8cc1e9);
138
- }
139
- .stats li {
140
- border-bottom: 1px solid #EBEBEA;
141
- padding: 6px 20px;
142
- margin: 0;
143
- font-size: 13px;
144
- vertical-align: top;
145
- padding-left: 5px;
146
- padding-right: 5px;
147
- }
148
-
149
- .stats li:hover
150
- {
151
- background:#e0e0e0;
152
- }
153
-
154
- .wp-list-table td.stats .show-stats, .show-stats, .variation-winner-is {
155
- display: none;
156
- }
157
-
158
- .wp-list-table td.stats .show-stats {
159
- margin-top: 10px;
160
- padding-top: 0px;
161
- margin-left: 4px;
162
- position: absolute;
163
- }
164
-
165
- td.stats.column-stats {
166
- border: 1px solid #EBEBEA;
167
-
168
- }
169
-
170
- .wp-list-table td.stats {
171
- padding-left: 0px;
172
- padding-right: 0px;
173
- }
174
-
175
- .lp-current-winner{
176
- background-color: rgb(226, 255, 201);
177
- }
178
-
179
- #impressions span, #cr span, #actions span {
180
- text-align: center;
181
- float: none;
182
- }
183
-
184
- .lp-varation-stat-ul {
185
- min-width: 270px;
186
- }
187
-
188
- .status-0 {
189
- background-color: #F9DBDB !important;
190
- font-weight: normal;
191
- color: rgb(117, 117, 117) !important;
192
- }
193
-
194
- .wp-list-table td.impressions, .wp-list-table td.actions, .wp-list-table td.cr{
195
- font-size: 18px;
196
- color: #000;
197
- margin: 0;
198
- text-align: center;
199
- padding-top: 15px;
200
- border-right: 1px solid #EBEBEA;
201
- }
202
-
203
- .wp-list-table td.cr {
204
- }
205
-
206
- .row-title {
207
- font-size: 15px!important;
208
- margin-top: 2px !important;
209
- display: inline-block;
210
- }
211
-
212
- .wp-list-table td.actions {
213
- }
214
- .post-state .states{
215
- font-size:10px;
216
- padding:3px 8px 3px 8px;
217
- -moz-border-radius:2px;
218
- -webkit-border-radius:2px;
219
- border-radius:2px;
220
- }
221
- .post-state .password{background:#000;color:#fff;}
222
- .post-state .pending{background:#83CF21 !important;color:#fff;}
223
- .post-state .private{background:#E0A21B;color:#fff;}
224
- .post-state .draft{background:#006699;color:#fff;}
225
- #hide-stats, .show-stats-top {
226
- color: #21759b;
227
- font-size: 9px;
228
- padding-left: 10px;
229
- }
230
-
231
- .stats li:last-child{
232
- border-bottom: none;
233
- }
234
-
235
- .no-stats-yet {
236
- padding-left: 7px;
237
- padding-top: 6px;
238
- color: #777;
239
- font-size: 11px;
240
- display: none;
241
- }
242
-
243
- .widefat td.stats {
244
- border-top: none;
245
- padding-top: 0px;
246
- }
247
-
248
- .widefat td.stats ul {
249
- font-size: 12px;
250
- border-top: none;
251
- width: 100%;
252
- border-bottom: none;
253
- margin-bottom: -2px;
254
- padding-bottom: 0px;
255
- display: inline-block;
256
- margin-top: 0px;
257
- }
258
- .lp-numbers {
259
- font-size: 13px;
260
- min-width: 199px;
261
- display: inline-block;
262
- }
263
- .introjs-showElement .row-actions {
264
- visibility: visible;}
265
- .lp-impress-num {
266
- display: inline-block;
267
- text-align: center;
268
- min-width: 30px;
269
- padding-right: 5px;
270
- padding-left: 5px;
271
- }
272
-
273
- .lp-no-stats {
274
- display: inline-block;
275
- padding-left: 10px;
276
- color: #ccc;
277
- }
278
-
279
- .lp-impress-num, .lp-con-num, .cr-number {
280
- font-weight: bold;
281
- font-size: 19px;
282
- }
283
-
284
- .visit-text {
285
- display: inline-block;
286
- min-width: 60px;
287
- }
288
-
289
- .lp-con-num {
290
- display: inline-block;
291
- padding-left: 4px;
292
- padding-right: 4px;
293
- }
294
-
295
- .lp-letter, .cr-number, .cr-number.cr-empty-0 {
296
- display: inline-block;
297
-
298
- font-size: 20px;
299
- min-width: 16px;
300
- min-height: 20px;
301
- border-radius: 3px;
302
- background: #f3f3f3;
303
- background-image: -webkit-gradient(linear,left top,left bottom,from(#fefefe),to(#f4f4f4));
304
- background-image: -webkit-linear-gradient(top,#fefefe,#f4f4f4);
305
- background-image: -moz-linear-gradient(top,#fefefe,#f4f4f4);
306
- background-image: -o-linear-gradient(top,#fefefe,#f4f4f4);
307
- background-image: linear-gradient(to bottom,#fefefe,#f4f4f4);
308
- border-color: #bbb;
309
- color: #333;
310
- text-shadow: 0 1px 0 #fff;
311
- font-family: sans-serif;
312
- cursor: pointer;
313
- border-width: 1px;
314
- border-style: solid;
315
- padding: 1px;
316
- padding-left: 4px;
317
- text-align: center;
318
- padding-right: 5px;
319
- padding-top: 6px;
320
- margin-right: 5px;
321
- }
322
-
323
- .cr-number {
324
- margin-left: 5px;
325
- padding-left: 5px;
326
- background-color: #21759b;
327
- background-image: -webkit-gradient(linear,left top,left bottom,from(#2a95c5),to(#21759b));
328
- background-image: -webkit-linear-gradient(top,#2a95c5,#21759b);
329
- background-image: -moz-linear-gradient(top,#2a95c5,#21759b);
330
- background-image: -ms-linear-gradient(top,#2a95c5,#21759b);
331
- background-image: -o-linear-gradient(top,#2a95c5,#21759b);
332
- background-image: linear-gradient(to bottom,#2a95c5,#21759b);
333
- border-color: #21759b;
334
- border-bottom-color: #1e6a8d;
335
- -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
336
- box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
337
- color: #fff;
338
- text-shadow: 0 1px 0 rgba(0,0,0,0.1);
339
- font-weight: normal;
340
- margin-right: 0px !important;
341
- }
342
- .cr-number.cr-empty-0 {
343
- font-weight: normal !important;
344
- color: #ccc;
345
- box-shadow: none;
346
- -webkit-box-shadow: none;
347
- }
348
- a.cr-number:hover {
349
- background-color: #278ab7;
350
- background-image: -webkit-gradient(linear,left top,left bottom,from(#2e9fd2),to(#21759b));
351
- background-image: -webkit-linear-gradient(top,#2e9fd2,#21759b);
352
- background-image: -moz-linear-gradient(top,#2e9fd2,#21759b);
353
- background-image: -ms-linear-gradient(top,#2e9fd2,#21759b);
354
- background-image: -o-linear-gradient(top,#2e9fd2,#21759b);
355
- background-image: linear-gradient(to bottom,#2e9fd2,#21759b);
356
- border-color: #1b607f;
357
- -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
358
- box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
359
- color: #fff;
360
- text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
361
  }
1
+ /* CSS for Landing Page List */
2
+ #stats {
3
+ width: 270px;
4
+ }
5
+
6
+ #thumbnail-lander {
7
+ width: 132px;
8
+ }
9
+
10
+ #title {
11
+ width: 255px;
12
+ }
13
+
14
+ #impressions, #cr, #actions {
15
+ width: 99px;
16
+ text-align: center;
17
+ }
18
+
19
+ #cr {
20
+ width: 120px;
21
+ }
22
+ #cb {
23
+ width: 20px;
24
+ }
25
+ .clear_stats {
26
+ color: red;
27
+ }
28
+ .hover-description {
29
+ display: block;
30
+ color: grey;
31
+ font-size: 10px;
32
+ font-style: italic;
33
+ }
34
+ .lp-pop-description {
35
+ padding: 10px;
36
+ padding-left: 4px;
37
+ padding-top: 6px;
38
+ }
39
+ .lp-bottom-controls {
40
+ margin-left: 12px;
41
+ color: red;
42
+ font-size: 12px;
43
+ margin-right: 8px;
44
+ }
45
+ .lp-delete-var-stats {
46
+ display: inline-block;
47
+ }
48
+ .lp-pop-description {
49
+ display: block;
50
+ max-width: 325px;
51
+ }
52
+
53
+ .lp-pop-close {
54
+ font-size: 11px;
55
+ position: absolute;
56
+ font-weight: 100;
57
+ right: 10px;
58
+ top: 3px;
59
+ }
60
+
61
+ .winner-lp {
62
+ background-color: #E2FFC9;
63
+ }
64
+
65
+ .lp-pop-edit a{
66
+ color:#fff;
67
+ }
68
+
69
+ .lp-extra {
70
+ margin-left: 10px;
71
+ }
72
+
73
+ .lp-win {
74
+ color: green;
75
+ font-size: 14px;
76
+ font-weight: bold;
77
+ text-shadow: 1px 1px 1px rgba(255,255,255,0.5);
78
+ }
79
+
80
+ .lp-paused {
81
+ color: red;
82
+ font-size: 12px;
83
+ }
84
+
85
+ .lp-pop-controls {
86
+ display: inline-block;
87
+ margin-top: 8px;
88
+ }
89
+
90
+ .lp-pop-edit {
91
+ display: inline-block !important;
92
+ margin-right: 11px !important;
93
+ margin-left: 5px !important;
94
+ }
95
+
96
+ .qtip {
97
+ background: #fff;
98
+ }
99
+
100
+ .qtip-tip {
101
+ height: 10px !important;
102
+ }
103
+
104
+ .qtip-content, .lp-pop-description, .lp-pop-preview a {
105
+ color:#333;
106
+
107
+ }
108
+
109
+ .lp-pop-preview a, .lp-pop-edit a {
110
+ text-decoration: none;
111
+ }
112
+
113
+ .qtip-titlebar
114
+ {
115
+ position: relative;
116
+ padding: 0px;
117
+ }
118
+
119
+ .qtip-jtools
120
+ {
121
+ border: 2px solid rgba(172, 172, 172, 1);
122
+ }
123
+
124
+ .qtip-title {
125
+ position: relative;
126
+ margin: 0 0 5px;
127
+ padding: 12px 17px 14px 14px;
128
+ line-height: 19px;
129
+ font-size: 19px;
130
+ color: #fff;
131
+ text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
132
+ background: #8cc1e9;
133
+ background-image: -webkit-gradient(linear,left bottom,left top,from(#72a7cf),to(#8cc1e9));
134
+ background-image: -webkit-linear-gradient(bottom,#72a7cf,#8cc1e9);
135
+ background-image: -moz-linear-gradient(bottom,#72a7cf,#8cc1e9);
136
+ background-image: -o-linear-gradient(bottom,#72a7cf,#8cc1e9);
137
+ background-image: linear-gradient(to top,#72a7cf,#8cc1e9);
138
+ }
139
+ .stats li {
140
+ border-bottom: 1px solid #EBEBEA;
141
+ padding: 6px 20px;
142
+ margin: 0;
143
+ font-size: 13px;
144
+ vertical-align: top;
145
+ padding-left: 5px;
146
+ padding-right: 5px;
147
+ }
148
+
149
+ .stats li:hover
150
+ {
151
+ background:#e0e0e0;
152
+ }
153
+
154
+ .wp-list-table td.stats .show-stats, .show-stats, .variation-winner-is {
155
+ display: none;
156
+ }
157
+
158
+ .wp-list-table td.stats .show-stats {
159
+ margin-top: 10px;
160
+ padding-top: 0px;
161
+ margin-left: 4px;
162
+ position: absolute;
163
+ }
164
+
165
+ td.stats.column-stats {
166
+ border: 1px solid #EBEBEA;
167
+
168
+ }
169
+
170
+ .wp-list-table td.stats {
171
+ padding-left: 0px;
172
+ padding-right: 0px;
173
+ }
174
+
175
+ .lp-current-winner{
176
+ background-color: rgb(226, 255, 201);
177
+ }
178
+
179
+ #impressions span, #cr span, #actions span {
180
+ text-align: center;
181
+ float: none;
182
+ }
183
+
184
+ .lp-varation-stat-ul {
185
+ min-width: 270px;
186
+ }
187
+
188
+ .status-0 {
189
+ background-color: #F9DBDB !important;
190
+ font-weight: normal;
191
+ color: rgb(117, 117, 117) !important;
192
+ }
193
+
194
+ .wp-list-table td.impressions, .wp-list-table td.actions, .wp-list-table td.cr{
195
+ font-size: 18px;
196
+ color: #000;
197
+ margin: 0;
198
+ text-align: center;
199
+ padding-top: 15px;
200
+ border-right: 1px solid #EBEBEA;
201
+ }
202
+
203
+ .wp-list-table td.cr {
204
+ }
205
+
206
+ .row-title {
207
+ font-size: 15px!important;
208
+ margin-top: 2px !important;
209
+ display: inline-block;
210
+ }
211
+
212
+ .wp-list-table td.actions {
213
+ }
214
+ .post-state .states{
215
+ font-size:10px;
216
+ padding:3px 8px 3px 8px;
217
+ -moz-border-radius:2px;
218
+ -webkit-border-radius:2px;
219
+ border-radius:2px;
220
+ }
221
+ .post-state .password{background:#000;color:#fff;}
222
+ .post-state .pending{background:#83CF21 !important;color:#fff;}
223
+ .post-state .private{background:#E0A21B;color:#fff;}
224
+ .post-state .draft{background:#006699;color:#fff;}
225
+ #hide-stats, .show-stats-top {
226
+ color: #21759b;
227
+ font-size: 9px;
228
+ padding-left: 10px;
229
+ }
230
+
231
+ .stats li:last-child{
232
+ border-bottom: none;
233
+ }
234
+
235
+ .no-stats-yet {
236
+ padding-left: 7px;
237
+ padding-top: 6px;
238
+ color: #777;
239
+ font-size: 11px;
240
+ display: none;
241
+ }
242
+
243
+ .widefat td.stats {
244
+ border-top: none;
245
+ padding-top: 0px;
246
+ }
247
+
248
+ .widefat td.stats ul {
249
+ font-size: 12px;
250
+ border-top: none;
251
+ width: 100%;
252
+ border-bottom: none;
253
+ margin-bottom: -2px;
254
+ padding-bottom: 0px;
255
+ display: inline-block;
256
+ margin-top: 0px;
257
+ }
258
+ .lp-numbers {
259
+ font-size: 13px;
260
+ min-width: 199px;
261
+ display: inline-block;
262
+ }
263
+ .introjs-showElement .row-actions {
264
+ visibility: visible;}
265
+ .lp-impress-num {
266
+ display: inline-block;
267
+ text-align: center;
268
+ min-width: 30px;
269
+ padding-right: 5px;
270
+ padding-left: 5px;
271
+ }
272
+
273
+ .lp-no-stats {
274
+ display: inline-block;
275
+ padding-left: 10px;
276
+ color: #ccc;
277
+ }
278
+
279
+ .lp-impress-num, .lp-con-num, .cr-number {
280
+ font-weight: bold;
281
+ font-size: 19px;
282
+ }
283
+
284
+ .visit-text {
285
+ display: inline-block;
286
+ min-width: 60px;
287
+ }
288
+
289
+ .lp-con-num {
290
+ display: inline-block;
291
+ padding-left: 4px;
292
+ padding-right: 4px;
293
+ }
294
+
295
+ .lp-letter, .cr-number, .cr-number.cr-empty-0 {
296
+ display: inline-block;
297
+
298
+ font-size: 20px;
299
+ min-width: 16px;
300
+ min-height: 20px;
301
+ border-radius: 3px;
302
+ background: #f3f3f3;
303
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#fefefe),to(#f4f4f4));
304
+ background-image: -webkit-linear-gradient(top,#fefefe,#f4f4f4);
305
+ background-image: -moz-linear-gradient(top,#fefefe,#f4f4f4);
306
+ background-image: -o-linear-gradient(top,#fefefe,#f4f4f4);
307
+ background-image: linear-gradient(to bottom,#fefefe,#f4f4f4);
308
+ border-color: #bbb;
309
+ color: #333;
310
+ text-shadow: 0 1px 0 #fff;
311
+ font-family: sans-serif;
312
+ cursor: pointer;
313
+ border-width: 1px;
314
+ border-style: solid;
315
+ padding: 1px;
316
+ padding-left: 4px;
317
+ text-align: center;
318
+ padding-right: 5px;
319
+ padding-top: 6px;
320
+ margin-right: 5px;
321
+ }
322
+
323
+ .cr-number {
324
+ margin-left: 5px;
325
+ padding-left: 5px;
326
+ background-color: #21759b;
327
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#2a95c5),to(#21759b));
328
+ background-image: -webkit-linear-gradient(top,#2a95c5,#21759b);
329
+ background-image: -moz-linear-gradient(top,#2a95c5,#21759b);
330
+ background-image: -ms-linear-gradient(top,#2a95c5,#21759b);
331
+ background-image: -o-linear-gradient(top,#2a95c5,#21759b);
332
+ background-image: linear-gradient(to bottom,#2a95c5,#21759b);
333
+ border-color: #21759b;
334
+ border-bottom-color: #1e6a8d;
335
+ -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
336
+ box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
337
+ color: #fff;
338
+ text-shadow: 0 1px 0 rgba(0,0,0,0.1);
339
+ font-weight: normal;
340
+ margin-right: 0px !important;
341
+ }
342
+ .cr-number.cr-empty-0 {
343
+ font-weight: normal !important;
344
+ color: #ccc;
345
+ box-shadow: none;
346
+ -webkit-box-shadow: none;
347
+ }
348
+ a.cr-number:hover {
349
+ background-color: #278ab7;
350
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#2e9fd2),to(#21759b));
351
+ background-image: -webkit-linear-gradient(top,#2e9fd2,#21759b);
352
+ background-image: -moz-linear-gradient(top,#2e9fd2,#21759b);
353
+ background-image: -ms-linear-gradient(top,#2e9fd2,#21759b);
354
+ background-image: -o-linear-gradient(top,#2e9fd2,#21759b);
355
+ background-image: linear-gradient(to bottom,#2e9fd2,#21759b);
356
+ border-color: #1b607f;
357
+ -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
358
+ box-shadow: inset 0 1px 0 rgba(120,200,230,0.6);
359
+ color: #fff;
360
+ text-shadow: 0 -1px 0 rgba(0,0,0,0.3);
361
  }
css/admin-lp-cpt-only-style.css CHANGED
@@ -1,95 +1,92 @@
1
- #main-title-area #lp-main-headline {
2
- width: 100%;
3
-
4
- font-size: 23px;
5
- line-height: 100%;
6
- outline: 0 none;
7
- padding: 0px 7px;
8
- padding-top: 8px;
9
- }
10
- #main-title-header h3 {
11
- display: inline-block;
12
- padding-left: 0px;
13
- }
14
- #titlediv {
15
- margin-bottom: 0px;
16
- }
17
- #TB_window {
18
- z-index: 999999999999;
19
- }
20
- .currently_selected{
21
- position: absolute;
22
- top: 72px;
23
- left: 16px;
24
- font-size: 19px;
25
- line-height: 21px;
26
- padding-top: 15px;
27
- text-align: center;
28
- background: black;
29
- width: 90%;
30
- height: 36px;
31
- color: white;
32
- opacity: 0.5;
33
- border-radius: 7px;
34
- }
35
- .lp-template-selector-container ul#template-filter li {
36
- display: inline-block;
37
- padding: 5px;
38
- padding-top: 0px;
39
- margin-right: 5px;
40
- text-align: center;
41
- margin-bottom: 10px;
42
- }
43
- .lp-template-selector-container ul#template-filter {
44
- line-height: 30px;
45
- margin-top: 10px;
46
- margin-bottom: 0px;
47
- }
48
- .lp-template-selector-container ul#template-filter a {
49
- margin-right: 0px;
50
- padding: 0px;
51
- font-weight: bold;
52
- text-decoration: none;
53
- }
54
- ul#template-filter .button-primary a {
55
- color:#fff;
56
- }
57
- #more-templates-button {
58
- display: inline-block;
59
- vertical-align: middle;
60
- float: none !important;
61
- font-weight: normal;
62
- margin-left: 20px;
63
- }
64
- #lp_2_form_content .hndle em {
65
- font-size: 13px;
66
- }
67
- .template-thumbnail
68
- {
69
- width:100%;
70
- height:190px;
71
- -webkit-border-radius: 4px;
72
- -khtml-border-radius: 4px;
73
- -moz-border-radius: 4px;
74
- border-radius: 4px;
75
- background-color: #A9A9A9;
76
- -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px,rgba(0, 0, 0, 0.3) 0 2px 5px;
77
- -moz-box-shadow: rgba(0,0,0,0.2) 0 0 0 1px,rgba(0,0,0,0.3) 0 2px 5px;
78
- box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px,rgba(0, 0, 0, 0.3) 0 2px 5px;
79
- }
80
-
81
- ul#template-filter{ margin: 0px 0; padding: 0; padding-left: 0px; line-height: 64px; }
82
- ul#template-filter li{ display: inline; }
83
- ul#template-filter a{ margin-right: 0.5em; padding: 0em 1em; font-weight: bold; text-decoration: none; }
84
- ul#template-filter .button-primary a:hover { color:#fff;}
85
- ul#template-filter a.current{ background-color: #DDD; }
86
-
87
- #template-item{ float: left; margin-right: 18px; overflow: hidden; margin: 0px 0 0 0; padding: 0; list-style: none; width: 300px; margin-bottom: 10px; }
88
- #template-item div{ display: block; }
89
- /* #template-item div a{ display: block; width: 163px; height: 120px; overflow: hidden; border: 1px solid #CDCDCD; background: #eee; }*/
90
- #template-item li p{ font-size: 11px; line-height: 15px; color: #AAA; margin: 5px 0; }
91
- #template-box .lp_tooltip_templates{
92
- bottom: 6px;
93
- position: absolute;
94
- right: 8px;
95
  }
1
+ #main-title-area #lp-main-headline {
2
+ width: 100%;
3
+
4
+ font-size: 23px;
5
+ line-height: 100%;
6
+ outline: 0 none;
7
+ padding: 0px 7px;
8
+ padding-top: 8px;
9
+ }
10
+ #main-title-header h3 {
11
+ display: inline-block;
12
+ padding-left: 0px;
13
+ }
14
+ #titlediv {
15
+ margin-bottom: 0px;
16
+ }
17
+ .currently_selected{
18
+ position: absolute;
19
+ top: 72px;
20
+ left: 16px;
21
+ font-size: 19px;
22
+ line-height: 21px;
23
+ padding-top: 15px;
24
+ text-align: center;
25
+ background: black;
26
+ width: 90%;
27
+ height: 36px;
28
+ color: white;
29
+ opacity: 0.5;
30
+ border-radius: 7px;
31
+ }
32
+ .lp-template-selector-container ul#template-filter li {
33
+ display: inline-block;
34
+ padding: 5px;
35
+ padding-top: 0px;
36
+ margin-right: 5px;
37
+ text-align: center;
38
+ margin-bottom: 10px;
39
+ }
40
+ .lp-template-selector-container ul#template-filter {
41
+ line-height: 30px;
42
+ margin-top: 10px;
43
+ margin-bottom: 0px;
44
+ }
45
+ .lp-template-selector-container ul#template-filter a {
46
+ margin-right: 0px;
47
+ padding: 0px;
48
+ font-weight: bold;
49
+ text-decoration: none;
50
+ }
51
+ ul#template-filter .button-primary a {
52
+ color:#fff;
53
+ }
54
+ #more-templates-button {
55
+ display: inline-block;
56
+ vertical-align: middle;
57
+ float: none !important;
58
+ font-weight: normal;
59
+ margin-left: 20px;
60
+ }
61
+ #lp_2_form_content .hndle em {
62
+ font-size: 13px;
63
+ }
64
+ .template-thumbnail
65
+ {
66
+ width:100%;
67
+ height:190px;
68
+ -webkit-border-radius: 4px;
69
+ -khtml-border-radius: 4px;
70
+ -moz-border-radius: 4px;
71
+ border-radius: 4px;
72
+ background-color: #A9A9A9;
73
+ -webkit-box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px,rgba(0, 0, 0, 0.3) 0 2px 5px;
74
+ -moz-box-shadow: rgba(0,0,0,0.2) 0 0 0 1px,rgba(0,0,0,0.3) 0 2px 5px;
75
+ box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px,rgba(0, 0, 0, 0.3) 0 2px 5px;
76
+ }
77
+
78
+ ul#template-filter{ margin: 0px 0; padding: 0; padding-left: 0px; line-height: 64px; }
79
+ ul#template-filter li{ display: inline; }
80
+ ul#template-filter a{ margin-right: 0.5em; padding: 0em 1em; font-weight: bold; text-decoration: none; }
81
+ ul#template-filter .button-primary a:hover { color:#fff;}
82
+ ul#template-filter a.current{ background-color: #DDD; }
83
+
84
+ #template-item{ float: left; margin-right: 18px; overflow: hidden; margin: 0px 0 0 0; padding: 0; list-style: none; width: 300px; margin-bottom: 10px; }
85
+ #template-item div{ display: block; }
86
+ /* #template-item div a{ display: block; width: 163px; height: 120px; overflow: hidden; border: 1px solid #CDCDCD; background: #eee; }*/
87
+ #template-item li p{ font-size: 11px; line-height: 15px; color: #AAA; margin: 5px 0; }
88
+ #template-box .lp_tooltip_templates{
89
+ bottom: 6px;
90
+ position: absolute;
91
+ right: 8px;
 
 
 
92
  }
css/admin-post-edit.css CHANGED
@@ -1,149 +1,149 @@
1
- #titlediv #title, #lp-notes-area input {
2
- background-color: #f1f1f1;
3
- border: solid 1px #dfdfdf;
4
- box-shadow: none;
5
- }
6
-
7
- #wpbody-content {
8
- overflow: visible !important;
9
- }
10
- h2#convert-header {
11
- margin-bottom: 0px;
12
- }
13
- .quicktags-toolbar, .wp_themeSkin tr.mceFirst td.mceToolbar {
14
- height: 38px;
15
- }
16
- .mceIframeContainer.mceFirst.mceLast iframe{
17
- height: 335px !important;
18
- }
19
- #lp-notes-area input {
20
- width: 100%;
21
- color: #AAAAAA;
22
- padding-top: 7px;
23
- }
24
- #local-storage-notice {
25
- display: none !important;
26
- }
27
- #lp-notes-area input:focus{
28
- color: #000;
29
- }
30
- #date-picking span {
31
- vertical-align: bottom;
32
- }
33
- #template-display-options .hndle {
34
- background-color: transparent;
35
- background-image: none !important;
36
- }
37
- #titlediv #title:focus, #lp-notes-area input:focus{
38
- border: solid 1px #dfdfdf;
39
- }
40
- .select2-container {
41
- min-width: 320px;
42
- }
43
- .lp-delete-var-stats, .lp-clear-success {
44
- color: red;
45
- opacity: .7;
46
- font-size: 9px;
47
- float: right;
48
- font-weight: normal;
49
- }
50
-
51
- .lp-clear-success{
52
- color: green;
53
- }
54
-
55
- #post-body-content .a_b_tabs {
56
- padding: 0px;
57
- margin-bottom: 9px;
58
- margin-left: -22px;
59
- padding-left: 22px;
60
- margin-top: 5px;
61
- margin-right: -20px;
62
- position: relative;
63
- }
64
-
65
- #wp-landing-page-myeditor-wrap #landing-page-myeditor_path_row {
66
- display: none;
67
- }
68
-
69
- #wp-landing-page-myeditor-wrap #wp-landing-page-myeditor-editor-container {
70
- min-height: 200px;
71
- }
72
-
73
- #adminmenu .wp-menu-arrow div {
74
- left: -2px;
75
- }
76
-
77
- #add-lp-notes {
78
- display: none;
79
- vertical-align: middle;
80
- font-weight: 600;
81
- padding-right: 2px;
82
- }
83
-
84
- .add-new-h2, #lp-current-view, #switch-lp, #preview-action {
85
- display: none;
86
- }
87
-
88
- #lp-notes-area {
89
- position: relative;
90
- }
91
-
92
- #post-body-content #main-title-area {
93
- margin-top: 5px;
94
- margin-bottom: 15px;
95
- position: relative;
96
- }
97
-
98
- #main-title-area .button-primary.new-save-lp {
99
- position: absolute !important;
100
- top: 1px !important;
101
- font-size: 17px !important;
102
- padding-top: 3px !important;
103
- right: 0px !important;
104
- height: 31px !important;
105
- width: 70px !important;
106
- }
107
- #lp-notes-area .button-primary.new-save-lp {
108
- position: absolute !important;
109
- top: 0px !important;
110
- font-size: 14px !important;
111
- padding-top: 0px !important;
112
- right: 0px !important;
113
- height: 24px !important;
114
- width: 66px !important;
115
- }
116
- #main-title-area .lp-success-message, #lp-notes-area .lp-success-message {
117
- position: absolute !important;
118
- top: 1px !important;
119
- font-size: 11px !important;
120
- padding-top: 3px !important;
121
- right: 0px !important;
122
- height: 17px !important;
123
- vertical-align: middle;
124
- margin-top: 0px;
125
- padding-bottom: 0px;
126
- }
127
-
128
- #main-title-area .button-primary.new-save-lp {
129
- padding-top: 6px !important;
130
- }
131
-
132
- #main-title-area .lp-success-message {
133
- margin-top: 4px;
134
- }
135
- #post-body .new-save-lp-frontend {
136
- font-weight: 200;
137
- top: 2px;
138
- font-size: 14px;
139
- margin-left: 21px;
140
- line-height: 28px;
141
- height: 30px;
142
- float:right;
143
- margin-right:19px;
144
- }
145
- @media screen and (max-width: 782px) {
146
- #launch-visual-editer {
147
- display: none;
148
- }
149
  }
1
+ #titlediv #title, #lp-notes-area input {
2
+ background-color: #f1f1f1;
3
+ border: solid 1px #dfdfdf;
4
+ box-shadow: none;
5
+ }
6
+
7
+ #wpbody-content {
8
+ overflow: visible !important;
9
+ }
10
+ h2#convert-header {
11
+ margin-bottom: 0px;
12
+ }
13
+ .quicktags-toolbar, .wp_themeSkin tr.mceFirst td.mceToolbar {
14
+ height: 38px;
15
+ }
16
+ .mceIframeContainer.mceFirst.mceLast iframe{
17
+ height: 335px !important;
18
+ }
19
+ #lp-notes-area input {
20
+ width: 100%;
21
+ color: #AAAAAA;
22
+ padding-top: 7px;
23
+ }
24
+ #local-storage-notice {
25
+ display: none !important;
26
+ }
27
+ #lp-notes-area input:focus{
28
+ color: #000;
29
+ }
30
+ #date-picking span {
31
+ vertical-align: bottom;
32
+ }
33
+ #template-display-options .hndle {
34
+ background-color: transparent;
35
+ background-image: none !important;
36
+ }
37
+ #titlediv #title:focus, #lp-notes-area input:focus{
38
+ border: solid 1px #dfdfdf;
39
+ }
40
+ .select2-container {
41
+ min-width: 320px;
42
+ }
43
+ .lp-delete-var-stats, .lp-clear-success {
44
+ color: red;
45
+ opacity: .7;
46
+ font-size: 9px;
47
+ float: right;
48
+ font-weight: normal;
49
+ }
50
+
51
+ .lp-clear-success{
52
+ color: green;
53
+ }
54
+
55
+ #post-body-content .a_b_tabs {
56
+ padding: 0px;
57
+ margin-bottom: 9px;
58
+ margin-left: -22px;
59
+ padding-left: 22px;
60
+ margin-top: 5px;
61
+ margin-right: -20px;
62
+ position: relative;
63
+ }
64
+
65
+ #wp-landing-page-myeditor-wrap #landing-page-myeditor_path_row {
66
+ display: none;
67
+ }
68
+
69
+ #wp-landing-page-myeditor-wrap #wp-landing-page-myeditor-editor-container {
70
+ min-height: 200px;
71
+ }
72
+
73
+ #adminmenu .wp-menu-arrow div {
74
+ left: -2px;
75
+ }
76
+
77
+ #add-lp-notes {
78
+ display: none;
79
+ vertical-align: middle;
80
+ font-weight: 600;
81
+ padding-right: 2px;
82
+ }
83
+
84
+ .add-new-h2, #lp-current-view, #switch-lp, #preview-action {
85
+ display: none;
86
+ }
87
+
88
+ #lp-notes-area {
89
+ position: relative;
90
+ }
91
+
92
+ #post-body-content #main-title-area {
93
+ margin-top: 5px;
94
+ margin-bottom: 15px;
95
+ position: relative;
96
+ }
97
+
98
+ #main-title-area .button-primary.new-save-lp {
99
+ position: absolute !important;
100
+ top: 1px !important;
101
+ font-size: 17px !important;
102
+ padding-top: 3px !important;
103
+ right: 0px !important;
104
+ height: 31px !important;
105
+ width: 70px !important;
106
+ }
107
+ #lp-notes-area .button-primary.new-save-lp {
108
+ position: absolute !important;
109
+ top: 0px !important;
110
+ font-size: 14px !important;
111
+ padding-top: 0px !important;
112
+ right: 0px !important;
113
+ height: 24px !important;
114
+ width: 66px !important;
115
+ }
116
+ #main-title-area .lp-success-message, #lp-notes-area .lp-success-message {
117
+ position: absolute !important;
118
+ top: 1px !important;
119
+ font-size: 11px !important;
120
+ padding-top: 3px !important;
121
+ right: 0px !important;
122
+ height: 17px !important;
123
+ vertical-align: middle;
124
+ margin-top: 0px;
125
+ padding-bottom: 0px;
126
+ }
127
+
128
+ #main-title-area .button-primary.new-save-lp {
129
+ padding-top: 6px !important;
130
+ }
131
+
132
+ #main-title-area .lp-success-message {
133
+ margin-top: 4px;
134
+ }
135
+ #post-body .new-save-lp-frontend {
136
+ font-weight: 200;
137
+ top: 2px;
138
+ font-size: 14px;
139
+ margin-left: 21px;
140
+ line-height: 28px;
141
+ height: 30px;
142
+ float:right;
143
+ margin-right:19px;
144
+ }
145
+ @media screen and (max-width: 782px) {
146
+ #launch-visual-editer {
147
+ display: none;
148
+ }
149
  }
css/admin-post-new.css CHANGED
@@ -1,91 +1,91 @@
1
- #wpbody-content .wrap
2
- {
3
- display:none;
4
- }
5
-
6
- #wpbody-content #screen-options-link-wrap, #post-body-content .a_b_tabs, #switch-lp, #lp-current-view
7
- {
8
- display:none;
9
- }
10
-
11
- #lp-thumbnail-sidebar-preview, #main-title-area, #lp-notes-area
12
- {
13
- display:none;
14
- }
15
- #wp-content-wrap, #postdivrich, #postbox-container-2, #misc-publishing-actions, #preview-action, #major-publishing-actions, #edit-slug-box, #submitdiv .handlediv {
16
- display: none;
17
- }
18
- .quicktags-toolbar, .wp_themeSkin tr.mceFirst td.mceToolbar {
19
- height: 38px;
20
- }
21
- .mceIframeContainer.mceFirst.mceLast iframe{
22
- height: 335px !important;
23
- }
24
- #titlediv #title {
25
- -webkit-border-radius: 3px;
26
- border-radius: 3px;
27
- border-color: #dfdfdf !important;
28
- border-width: 1px !important;
29
- border-style: solid !important;}
30
-
31
- #descriptor {
32
- padding-left: 5px;
33
- display: block;
34
- padding-top: 5px;
35
- margin-bottom: 10px;
36
- }
37
- #lp-main-headline-wrap {display: none !important;}
38
- #timage .template-thumbnail {
39
- width: 242px;
40
- border-radius: 0px !important;
41
- }
42
- #templates {
43
- position: relative;
44
-
45
- }
46
- .new-lp-button {
47
- margin-bottom: 10px !important;
48
- margin-top: 3px !important;
49
- }
50
- #templates #lp_template_change {
51
-
52
- position: absolute;
53
- top: 55px;
54
- left: 290px;
55
- }
56
- #template_current {
57
- width: 340px;
58
- padding-right: 10px;
59
- display: inline-block;
60
- vertical-align: top;
61
- }
62
- #template_current h3 {
63
- font-weight: bold;
64
- padding: 7px 0px;
65
- }
66
- #lp_the_image {
67
- display: inline-block;
68
- width: 410px;
69
- margin-top: 10px;
70
- margin-left:10px;
71
- }
72
- #lp_the_image img {
73
- padding: 8px;
74
- margin-bottom: 15px;
75
- box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
76
- -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
77
- -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
78
- -o-box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
79
- border-radius: 5px;
80
- -moz-border-radius: 5px;
81
- -webkit-border-radius: 5px;
82
- -html-border-radius: 5px;
83
- border: 0px;
84
- display: block;
85
- max-width: 240px;
86
- margin-left: 15px;
87
- border-top-left-radius: 3px;
88
- border-top-right-radius: 3px;
89
- border-bottom-right-radius: 3px;
90
- border-bottom-left-radius: 3px;
91
  }
1
+ #wpbody-content .wrap
2
+ {
3
+ display:none;
4
+ }
5
+
6
+ #wpbody-content #screen-options-link-wrap, #post-body-content .a_b_tabs, #switch-lp, #lp-current-view
7
+ {
8
+ display:none;
9
+ }
10
+
11
+ #lp-thumbnail-sidebar-preview, #main-title-area, #lp-notes-area
12
+ {
13
+ display:none;
14
+ }
15
+ #wp-content-wrap, #postdivrich, #postbox-container-2, #misc-publishing-actions, #preview-action, #major-publishing-actions, #edit-slug-box, #submitdiv .handlediv {
16
+ display: none;
17
+ }
18
+ .quicktags-toolbar, .wp_themeSkin tr.mceFirst td.mceToolbar {
19
+ height: 38px;
20
+ }
21
+ .mceIframeContainer.mceFirst.mceLast iframe{
22
+ height: 335px !important;
23
+ }
24
+ #titlediv #title {
25
+ -webkit-border-radius: 3px;
26
+ border-radius: 3px;
27
+ border-color: #dfdfdf !important;
28
+ border-width: 1px !important;
29
+ border-style: solid !important;}
30
+
31
+ #descriptor {
32
+ padding-left: 5px;
33
+ display: block;
34
+ padding-top: 5px;
35
+ margin-bottom: 10px;
36
+ }
37
+ #lp-main-headline-wrap {display: none !important;}
38
+ #timage .template-thumbnail {
39
+ width: 242px;
40
+ border-radius: 0px !important;
41
+ }
42
+ #templates {
43
+ position: relative;
44
+
45
+ }
46
+ .new-lp-button {
47
+ margin-bottom: 10px !important;
48
+ margin-top: 3px !important;
49
+ }
50
+ #templates #lp_template_change {
51
+
52
+ position: absolute;
53
+ top: 55px;
54
+ left: 290px;
55
+ }
56
+ #template_current {
57
+ width: 340px;
58
+ padding-right: 10px;
59
+ display: inline-block;
60
+ vertical-align: top;
61
+ }
62
+ #template_current h3 {
63
+ font-weight: bold;
64
+ padding: 7px 0px;
65
+ }
66
+ #lp_the_image {
67
+ display: inline-block;
68
+ width: 410px;
69
+ margin-top: 10px;
70
+ margin-left:10px;
71
+ }
72
+ #lp_the_image img {
73
+ padding: 8px;
74
+ margin-bottom: 15px;
75
+ box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
76
+ -webkit-box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
77
+ -moz-box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
78
+ -o-box-shadow: 0 1px 5px rgba(0, 0, 0, .3);
79
+ border-radius: 5px;
80
+ -moz-border-radius: 5px;
81
+ -webkit-border-radius: 5px;
82
+ -html-border-radius: 5px;
83
+ border: 0px;
84
+ display: block;
85
+ max-width: 240px;
86
+ margin-left: 15px;
87
+ border-top-left-radius: 3px;
88
+ border-top-right-radius: 3px;
89
+ border-bottom-right-radius: 3px;
90
+ border-bottom-left-radius: 3px;
91
  }
css/admin-style.css CHANGED
@@ -1,474 +1,474 @@
1
-
2
- .cat-block
3
- {
4
- display:inline-table;
5
- padding-right:60px;
6
- }
7
-
8
- #main-title-area
9
- {
10
- margin-top: 5px;
11
- }
12
-
13
-
14
- #setting-error-tgmpa p:nth-child(2) strong em {
15
- margin-top: 5px;
16
- }
17
- #setting-error-tgmpa em {
18
- display: block;
19
- }
20
- #add-landing-page.hide-if-js {
21
- display: block !important;
22
- }
23
- #setting-error-tgmpa {
24
- padding-bottom: 5px;
25
- padding-top: 5px;
26
- padding-left: 10px;
27
-
28
- }
29
- #menu-posts-landing-page .wp-submenu.wp-submenu-wrap {
30
- z-index: 99999999999;
31
- }
32
- @font-face {
33
- font-family: 'FontAwesome';
34
- src: url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.eot?v=3.0.2');
35
- src: url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=3.0.2') format('embedded-opentype'),
36
- url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.woff?v=3.0.2') format('woff'),
37
- url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.ttf?v=3.0.2') format('truetype');
38
- font-weight: normal;
39
- font-style: normal;
40
- }
41
- #adminmenu .menu-icon-landing-page div.wp-menu-image:before {
42
- font-family: "FontAwesome" !important;
43
- content: "\f15c";
44
-
45
- }
46
- .branch-3-7 #adminmenu .menu-icon-landing-page div.wp-menu-image:before {
47
- display: none;
48
- }
49
- #adminmenu .menu-icon-landing-page div.wp-menu-image img{
50
- display: none;
51
- }
52
- .branch-3-7 #adminmenu .menu-icon-landing-page div.wp-menu-image img {
53
- display: block;
54
- }
55
- #setting-error-tgmpa p {
56
- text-decoration: bold;
57
- }
58
- #setting-error-tgmpa p:nth-last-child(2), #setting-error-tgmpa a, #setting-error-tgmpa strong {
59
- text-decoration: normal;
60
- }
61
- #setting-error-tgmpa p:nth-last-child(2) a:first-child{
62
- padding-left: 0px;
63
- }
64
- #setting-error-tgmpa p:nth-last-child(2) a {
65
- padding-right: 10px;
66
- padding-left: 10px;
67
- font-size: 13px;
68
- margin-top: 10px;
69
- display: inline-block;
70
- }
71
- #setting-error-tgmpa a.thickbox {
72
- font-size: 16px;
73
- padding-top: 5px;
74
- display: inline-block;
75
- padding-bottom: 5px;
76
- }
77
- #setting-error-tgmpa.updated p {
78
- width: 99%;
79
- margin: 0px;
80
- }
81
- #setting-error-tgmpa a span {
82
- color: #000 !important;
83
- text-decoration: none;
84
- font-size: 14px !important;
85
- font-style: normal !important;
86
- font-weight: normal !important;
87
- }
88
- #template-box, .thumbnail-lander img {
89
- background: #FCFDFE;
90
- padding: 3%;
91
- margin-right: 10px;
92
- border: 1px solid #E0E0E0;
93
- -moz-border-radius: 7px;
94
- border-radius: 7px;
95
- position: relative;
96
- overflow: hidden;
97
- display: block;
98
- }
99
- #postexcerpt p {
100
- display: none;
101
- }
102
- .metabox-holder .postbox-container .empty-container
103
- {
104
- border: none;
105
- }
106
-
107
-
108
-
109
- #lp_templates_wrapper_inside { padding-left: 15px; width: 945px; margin: 0; }
110
-
111
- .lp_template_wrapper ul li { float: left; position: relative; list-style: none; }
112
-
113
- /*hudson*/
114
- .lp_template_wrapper ul li label{
115
- font-size: 14px;
116
- font-weight: 300;
117
- color: greytext; text-decoration: none;
118
-
119
- }
120
-
121
- /*hudson*/
122
- .lp_template_wrapper ul li .template {
123
- font-size: 14px;
124
- //font-weight: bold;
125
- color: #222222; text-decoration: none;
126
- //text-shadow: 0 1px 2px black;
127
- }
128
-
129
- #lp-main-headline-wrap {margin-top: 5px;}
130
-
131
- .lp_template_wrapper ul li:hover {
132
- //height: 43px;
133
- -webkit-box-shadow: 0 0px 2px black inset;
134
-
135
- }
136
-
137
- .lp_template_wrapper ul li ul li:hover { background: none; -webkit-box-shadow: none; -moz-box-shadow: none; height: auto; border: none; }
138
-
139
- .lp_template_wrapper ul li .horizontal li { padding: 14px 10px 0px 0px; }
140
-
141
- .lp_template_wrapper ul li .horizontal li:first-child { margin-left: -10px; }
142
-
143
- .lp_template_wrapper ul li .horizontal li a { font-size: 12px; font-weight: normal; color: #c7c7c7; }
144
-
145
- .arrow-up { width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 15px solid #6a6a63; position: absolute; left: 20px; top: -15px; }
146
-
147
- .lp_template_wrapper ul li ul li .extended { position: absolute; top: 45px; left: 0; width: 330px; background: url(images/dropdownback.png); z-index: 1000; -moz-box-shadow: 0 0px 8px rgba(0,0,0,0.8); -webkit-box-shadow: 0 0px 8px rgba(0,0,0,0.8); box-shadow: 0 0 8px black; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; border: 1px solid white; display: none; color: white; }
148
-
149
- .lp_template_wrapper ul li ul li .extended .screenshot { display: block; margin: 5px auto -26px auto; -webkit-box-reflect:below 0px -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0.8, transparent), to(rgba(255,255,255,0.5))); }
150
-
151
- .lp_template_wrapper ul li ul li .extended p { padding: 10px; font-size: 11px; line-height: 17px; text-shadow: 0 1px 1px black; }
152
-
153
- .lp_template_wrapper ul li ul li .extended h2, .lp_template_wrapper ul li .ultraNav h2 { padding-top: 10px; padding-left: 10px; font-size: 16px; text-shadow: 0 1px 2px black; color: white; background: url(images/headerback.png) repeat-x; height: 20px; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; }
154
-
155
- .lp_template_wrapper ul li ul li .extended span { padding-left: 10px; font-size: 11px; }
156
-
157
- .lp_template_wrapper ul li ul li .extended ul.smallNav { border-top: 1px solid rgba(141,141,141,0.50); padding: 10px; height: 100px; }
158
-
159
- .lp_template_wrapper ul li ul li .extended ul.smallNav li { padding: 0; line-height: 22px; font-weight: bold; background: url(images/linkback.png) no-repeat; }
160
-
161
- .lp_template_wrapper ul li ul li .extended ul.smallNav li a {
162
- color: #fff;
163
- text-shadow: none;
164
- font-size:12px;
165
- }
166
-
167
- .lp_template_wrapper ul li ul li .extended ul.smallNav li label{
168
- color: #c7c7c7;
169
- text-shadow: none;
170
- font-size:12px;
171
- text-decoration:none;
172
- }
173
-
174
- .lp-feature-link
175
- {
176
- float:none;
177
- margin:0px;
178
- display:block;
179
- padding:2px;
180
- }
181
-
182
- .lp-feature-link .lp-feature-link-img
183
- {
184
- padding:2px;
185
- display:inline-block;
186
- }
187
-
188
- /*david*/
189
- th.landing-page-table-header {width:230px; line-height: 22px;}
190
-
191
- .default_template_highlight
192
- {
193
- -webkit-box-shadow: inset 0px 0px 12px 1px rgba(82, 168, 238, 1);
194
- box-shadow: inset 0px 0px 12px 1px rgba(82, 168, 238, 1);
195
- }
196
-
197
- .lp-selection-heading{width: 89%; margin-top: 20px;}
198
- .lp-selection-heading h1 {display: inline;}
199
-
200
- #lp-cancel-selection
201
- {
202
- display: inline;
203
- float: right;
204
- }
205
-
206
-
207
-
208
- .lp_template_wrapper ul li ul li .extended ul.smallNav li:first-child { margin: 0; }
209
-
210
- .lp_template_wrapper ul li ul li .extended ul.smallNav li:last-child { margin-bottom: 10px; }
211
-
212
- .lp_template_wrapper ul li ul li:hover .extended { display: block; }
213
-
214
-
215
- .lp_template_wrapper ul li .ultraNav
216
- {
217
- position: absolute;
218
- top: 55px;
219
- left: -100px;
220
- width: 294px;
221
- background: url(images/dropdownback.png);
222
- border: 1px solid white;
223
- -webkit-border-radius: 5px;
224
- -moz-border-radius: 5px;
225
- border-radius: 5px;
226
- z-index: 500;
227
- -moz-box-shadow: 0 3px 8px rgba(0,0,0,0.6);
228
- -webkit-box-shadow: 0 3px 8px rgba(0,0,0,0.6) box-shadow: 0 3px 8px black;
229
- display: none;
230
- }
231
-
232
- .ultraNav h2 { text-align: center; padding-left:10px;padding-top:10px;}
233
-
234
- .lp_template_wrapper ul li .ultra { width: 130px; float: left; margin: 10px 0 10px 10px; -moz-box-shadow: 0 -1px 3px rgba(0,0,0,0.6); -webkit-box-shadow: 0 -1px 3px rgba(0,0,0,0.6); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-bottom: none; }
235
-
236
- .lp_template_wrapper ul li .ultra:first-child { margin: 0; }
237
-
238
- .lp_template_wrapper ul li .ultraNav .arrow-up { left: 130px; }
239
-
240
- .lp_template_wrapper ul li .ultra a { font-weight: normal; font-size: 12px; color: #c7c7c7; text-shadow: 0 1px 2px black; }
241
-
242
- .lp_template_wrapper ul li .ultra li { width: 120px; line-height: 20px; padding: 3px 5px; background: url(images/linkback.png) no-repeat; }
243
-
244
- .lp_template_wrapper ul li:hover .ultraNav { display: block; }
245
-
246
- #lp_template_change h2 {display: inline-block;}
247
-
248
- #lp_template_change {
249
- margin-left: 17px;
250
- margin-top: -20px;
251
- float: right;
252
- position: absolute;
253
- top: 0px;
254
- right: 10px;
255
- }
256
-
257
- /* Split Testing Splash */
258
- .lp_tooltip, .lp_tooltip_templates {background: url('/wp-content/plugins/landing-pages/css/images/question-light.png');
259
- width: 15px;
260
- height: 15px;
261
- display: inline-block;
262
- margin-left: 5px;
263
- vertical-align: middle;
264
- cursor: help;
265
- background-repeat: no-repeat;
266
- }
267
- .qtip-content {
268
- position: relative;
269
- padding: 5px 9px;
270
- overflow: hidden;
271
- text-align: left;
272
- word-wrap: break-word;
273
- line-height: 19px;
274
- }
275
- .tool_date{margin-left: 25px;
276
- vertical-align: top;}
277
- .tool_textarea {vertical-align: top;}
278
- .tool_color {margin-top:1px;}
279
- .tool_checkbox {vertical-align: top; margin-top: 4px;}
280
- .lp_check_box_table td {padding: 0px;}
281
- .lp_check_box_table {display: inline; float: left;}
282
-
283
- /* Split Testing */
284
- .lp_toggle_pause {color:red;}
285
- .lp_toggle_play {color:green;}
286
- /*store*/
287
-
288
- /* iframe's parent node */
289
- div#lp-store-iframe-container {
290
- // position: fixed;
291
- width: 100%;
292
- height: 100%;
293
- overflow:hidden;
294
- }
295
-
296
- /* iframe itself */
297
- div#lp-store-iframe-container > iframe {
298
- display: block;
299
- width: 100%;
300
- height: 100%;
301
- border: none;
302
- margin-left:0px;
303
- }
304
-
305
- .column-thumbnail
306
- {
307
- height:110px;
308
- }
309
-
310
- .wp-list-table .column-date
311
- {
312
- width:128px;
313
- }
314
- .wp-list-table .details
315
- {
316
- text-align:left;
317
- padding-left:20px;
318
- }
319
-
320
- #leads-table-container-inside
321
- {
322
- margin-top:-36px;
323
- color:#388DBC;
324
- }
325
-
326
- .wp-list-table td
327
- {
328
- color:#388DBC;
329
- }
330
-
331
- #wp-leads-splash-header
332
- {
333
- background: #f2f2f2;
334
- border-bottom: 1px solid #EBEBEA;
335
- -webkit-box-shadow: inset 1px 1px 1px rgba(255,255,255,0.3);
336
- -moz-box-shadow: inset 1px 1px 1px rgba(255,255,255,0.3);
337
- box-shadow: inset 1px 1px 1px rgba(255,255,255,0.3);
338
- padding: 20px;
339
- text-shadow: 1px 1px 1px #fff;
340
- }
341
-
342
- #lead-details-container
343
- {
344
- border: 1px solid #EBEBEA;
345
- }
346
-
347
- #wp-leads-splash-email, #wp-leads-splash-ip, #wp-leads-splash-city, #wp-leads-splash-state, #wp-leads-splash-name
348
- {
349
- border-bottom: 1px solid #EBEBEA;
350
- padding: 10px 20px;
351
- }
352
-
353
-
354
- #wp-leads-extra-data
355
- {
356
- margin-left: 20px;
357
- margin-top: 5px;
358
- }
359
-
360
- #wp-leads-extra-data td
361
- {
362
- padding-right: 15px;
363
- }
364
-
365
- .wplp-green-button
366
- {
367
- background: #94BA65;
368
- border: 1px solid rgba(0,0,0,0.15);
369
- -webkit-border-radius: 2px;
370
- -moz-border-radius: 2px;
371
- border-radius: 2px;
372
- -webkit-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
373
- -moz-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
374
- box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
375
- color: #fff;
376
- cursor: pointer;
377
- display: inline-block;
378
- font-family: inherit;
379
- font-size: 14px;
380
- font-weight: bold;
381
- padding: 4px 5px;
382
- text-shadow: -1px -1px 1px rgba(0,0,0,0.15);
383
- text-decoration: none;
384
- }
385
- .wplp-right
386
- {
387
- float: right;
388
- }
389
-
390
- .lp-lead-splash-h3, .wp-lead-label
391
- {
392
- display: inline;
393
- }
394
-
395
- .wp-lead-label
396
- {
397
- font-weight: bold;
398
- }
399
-
400
- #leads-table-container-inside .wp-list-table .details
401
- {
402
- padding-left: 0px;
403
- }
404
-
405
- #leads-table-container-inside .wp-list-table .column-date
406
- {
407
- width: 150px;
408
- }
409
- .date-picker .new-save-lp
410
- {
411
- display: none;
412
- }
413
- #lp-tour {
414
- position: absolute;
415
- font-size: 13px;
416
- top: -3px;
417
- right: 170px;
418
- }
419
- .lp-success-message
420
- {
421
- background: #e2ffc9;
422
- border: 1px solid #c5eda3;
423
- padding: 4px 10px 4px 10px;
424
- margin-left: 10px;
425
- -webkit-border-radius: 3px;
426
- -moz-border-radius: 3px;
427
- border-radius: 3px;
428
- position: relative;
429
- margin-top: 10px;
430
- text-shadow: 1px 1px 1px rgba(255,255,255,0.5);
431
- }
432
-
433
- tr.media-id p.description {
434
- display: inline-block;
435
- }
436
- div.capty-caption {
437
- background-color: #000000;
438
- color: #FFFFFF;
439
- font: bold 11px verdana;
440
- padding-left: 10px;
441
- padding-top: 7px;
442
- text-shadow: 1px 1px 0 #222222;
443
- }
444
- div.capty-caption a {
445
- color: #318DAD;
446
- font: bold 11px verdana;
447
- text-decoration: none;
448
- text-shadow: none;
449
- }
450
- #setting-error-tgmpa a {
451
- font-style: normal;
452
- }
453
- #setting-error-tgmpa .inbound-install-notice {
454
-
455
- }
456
- #TB_ajaxWindowTitle .inbound-install-notice {
457
- display: none;
458
- }
459
- #setting-error-tgmpa .inbound-install-notice-links {
460
- display: block;
461
- margin-bottom: 5px;
462
- }
463
- #setting-error-tgmpa a.dismiss-notice{
464
- color: grey;
465
- }
466
- #setting-error-tgmpa .thickbox {
467
- display: inline-block;
468
- margin-top: 5px;
469
- font-weight: bold;
470
- }
471
-
472
- #setting-error-tgmpa em {
473
- font-weight: normal;
474
  }
1
+
2
+ .cat-block
3
+ {
4
+ display:inline-table;
5
+ padding-right:60px;
6
+ }
7
+
8
+ #main-title-area
9
+ {
10
+ margin-top: 5px;
11
+ }
12
+
13
+
14
+ #setting-error-tgmpa p:nth-child(2) strong em {
15
+ margin-top: 5px;
16
+ }
17
+ #setting-error-tgmpa em {
18
+ display: block;
19
+ }
20
+ #add-landing-page.hide-if-js {
21
+ display: block !important;
22
+ }
23
+ #setting-error-tgmpa {
24
+ padding-bottom: 5px;
25
+ padding-top: 5px;
26
+ padding-left: 10px;
27
+
28
+ }
29
+ #menu-posts-landing-page .wp-submenu.wp-submenu-wrap {
30
+ z-index: 99999999999;
31
+ }
32
+ @font-face {
33
+ font-family: 'FontAwesome';
34
+ src: url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.eot?v=3.0.2');
35
+ src: url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.eot?#iefix&v=3.0.2') format('embedded-opentype'),
36
+ url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.woff?v=3.0.2') format('woff'),
37
+ url('../shared/assets/global/fonts/fontawesome/fontawesome-webfont.ttf?v=3.0.2') format('truetype');
38
+ font-weight: normal;
39
+ font-style: normal;
40
+ }
41
+ #adminmenu .menu-icon-landing-page div.wp-menu-image:before {
42
+ font-family: "FontAwesome" !important;
43
+ content: "\f15c";
44
+
45
+ }
46
+ .branch-3-7 #adminmenu .menu-icon-landing-page div.wp-menu-image:before {
47
+ display: none;
48
+ }
49
+ #adminmenu .menu-icon-landing-page div.wp-menu-image img{
50
+ display: none;
51
+ }
52
+ .branch-3-7 #adminmenu .menu-icon-landing-page div.wp-menu-image img {
53
+ display: block;
54
+ }
55
+ #setting-error-tgmpa p {
56
+ text-decoration: bold;
57
+ }
58
+ #setting-error-tgmpa p:nth-last-child(2), #setting-error-tgmpa a, #setting-error-tgmpa strong {
59
+ text-decoration: normal;
60
+ }
61
+ #setting-error-tgmpa p:nth-last-child(2) a:first-child{
62
+ padding-left: 0px;
63
+ }
64
+ #setting-error-tgmpa p:nth-last-child(2) a {
65
+ padding-right: 10px;
66
+ padding-left: 10px;
67
+ font-size: 13px;
68
+ margin-top: 10px;
69
+ display: inline-block;
70
+ }
71
+ #setting-error-tgmpa a.thickbox {
72
+ font-size: 16px;
73
+ padding-top: 5px;
74
+ display: inline-block;
75
+ padding-bottom: 5px;
76
+ }
77
+ #setting-error-tgmpa.updated p {
78
+ width: 99%;
79
+ margin: 0px;
80
+ }
81
+ #setting-error-tgmpa a span {
82
+ color: #000 !important;
83
+ text-decoration: none;
84
+ font-size: 14px !important;
85
+ font-style: normal !important;
86
+ font-weight: normal !important;
87
+ }
88
+ #template-box, .thumbnail-lander img {
89
+ background: #FCFDFE;
90
+ padding: 3%;
91
+ margin-right: 10px;
92
+ border: 1px solid #E0E0E0;
93
+ -moz-border-radius: 7px;
94
+ border-radius: 7px;
95
+ position: relative;
96
+ overflow: hidden;
97
+ display: block;
98
+ }
99
+ #postexcerpt p {
100
+ display: none;
101
+ }
102
+ .metabox-holder .postbox-container .empty-container
103
+ {
104
+ border: none;
105
+ }
106
+
107
+
108
+
109
+ #lp_templates_wrapper_inside { padding-left: 15px; width: 945px; margin: 0; }
110
+
111
+ .lp_template_wrapper ul li { float: left; position: relative; list-style: none; }
112
+
113
+ /*hudson*/
114
+ .lp_template_wrapper ul li label{
115
+ font-size: 14px;
116
+ font-weight: 300;
117
+ color: greytext; text-decoration: none;
118
+
119
+ }
120
+
121
+ /*hudson*/
122
+ .lp_template_wrapper ul li .template {
123
+ font-size: 14px;
124
+ //font-weight: bold;
125
+ color: #222222; text-decoration: none;
126
+ //text-shadow: 0 1px 2px black;
127
+ }
128
+
129
+ #lp-main-headline-wrap {margin-top: 5px;}
130
+
131
+ .lp_template_wrapper ul li:hover {
132
+ //height: 43px;
133
+ -webkit-box-shadow: 0 0px 2px black inset;
134
+
135
+ }
136
+
137
+ .lp_template_wrapper ul li ul li:hover { background: none; -webkit-box-shadow: none; -moz-box-shadow: none; height: auto; border: none; }
138
+
139
+ .lp_template_wrapper ul li .horizontal li { padding: 14px 10px 0px 0px; }
140
+
141
+ .lp_template_wrapper ul li .horizontal li:first-child { margin-left: -10px; }
142
+
143
+ .lp_template_wrapper ul li .horizontal li a { font-size: 12px; font-weight: normal; color: #c7c7c7; }
144
+
145
+ .arrow-up { width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 15px solid #6a6a63; position: absolute; left: 20px; top: -15px; }
146
+
147
+ .lp_template_wrapper ul li ul li .extended { position: absolute; top: 45px; left: 0; width: 330px; background: url(images/dropdownback.png); z-index: 1000; -moz-box-shadow: 0 0px 8px rgba(0,0,0,0.8); -webkit-box-shadow: 0 0px 8px rgba(0,0,0,0.8); box-shadow: 0 0 8px black; -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; border: 1px solid white; display: none; color: white; }
148
+
149
+ .lp_template_wrapper ul li ul li .extended .screenshot { display: block; margin: 5px auto -26px auto; -webkit-box-reflect:below 0px -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(0.8, transparent), to(rgba(255,255,255,0.5))); }
150
+
151
+ .lp_template_wrapper ul li ul li .extended p { padding: 10px; font-size: 11px; line-height: 17px; text-shadow: 0 1px 1px black; }
152
+
153
+ .lp_template_wrapper ul li ul li .extended h2, .lp_template_wrapper ul li .ultraNav h2 { padding-top: 10px; padding-left: 10px; font-size: 16px; text-shadow: 0 1px 2px black; color: white; background: url(images/headerback.png) repeat-x; height: 20px; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; }
154
+
155
+ .lp_template_wrapper ul li ul li .extended span { padding-left: 10px; font-size: 11px; }
156
+
157
+ .lp_template_wrapper ul li ul li .extended ul.smallNav { border-top: 1px solid rgba(141,141,141,0.50); padding: 10px; height: 100px; }
158
+
159
+ .lp_template_wrapper ul li ul li .extended ul.smallNav li { padding: 0; line-height: 22px; font-weight: bold; background: url(images/linkback.png) no-repeat; }
160
+
161
+ .lp_template_wrapper ul li ul li .extended ul.smallNav li a {
162
+ color: #fff;
163
+ text-shadow: none;
164
+ font-size:12px;
165
+ }
166
+
167
+ .lp_template_wrapper ul li ul li .extended ul.smallNav li label{
168
+ color: #c7c7c7;
169
+ text-shadow: none;
170
+ font-size:12px;
171
+ text-decoration:none;
172
+ }
173
+
174
+ .lp-feature-link
175
+ {
176
+ float:none;
177
+ margin:0px;
178
+ display:block;
179
+ padding:2px;
180
+ }
181
+
182
+ .lp-feature-link .lp-feature-link-img
183
+ {
184
+ padding:2px;
185
+ display:inline-block;
186
+ }
187
+
188
+ /*david*/
189
+ th.landing-page-table-header {width:230px; line-height: 22px;}
190
+
191
+ .default_template_highlight
192
+ {
193
+ -webkit-box-shadow: inset 0px 0px 12px 1px rgba(82, 168, 238, 1);
194
+ box-shadow: inset 0px 0px 12px 1px rgba(82, 168, 238, 1);
195
+ }
196
+
197
+ .lp-selection-heading{width: 89%; margin-top: 20px;}
198
+ .lp-selection-heading h1 {display: inline;}
199
+
200
+ #lp-cancel-selection
201
+ {
202
+ display: inline;
203
+ float: right;
204
+ }
205
+
206
+
207
+
208
+ .lp_template_wrapper ul li ul li .extended ul.smallNav li:first-child { margin: 0; }
209
+
210
+ .lp_template_wrapper ul li ul li .extended ul.smallNav li:last-child { margin-bottom: 10px; }
211
+
212
+ .lp_template_wrapper ul li ul li:hover .extended { display: block; }
213
+
214
+
215
+ .lp_template_wrapper ul li .ultraNav
216
+ {
217
+ position: absolute;
218
+ top: 55px;
219
+ left: -100px;
220
+ width: 294px;
221
+ background: url(images/dropdownback.png);
222
+ border: 1px solid white;
223
+ -webkit-border-radius: 5px;
224
+ -moz-border-radius: 5px;
225
+ border-radius: 5px;
226
+ z-index: 500;
227
+ -moz-box-shadow: 0 3px 8px rgba(0,0,0,0.6);
228
+ -webkit-box-shadow: 0 3px 8px rgba(0,0,0,0.6) box-shadow: 0 3px 8px black;
229
+ display: none;
230
+ }
231
+
232
+ .ultraNav h2 { text-align: center; padding-left:10px;padding-top:10px;}
233
+
234
+ .lp_template_wrapper ul li .ultra { width: 130px; float: left; margin: 10px 0 10px 10px; -moz-box-shadow: 0 -1px 3px rgba(0,0,0,0.6); -webkit-box-shadow: 0 -1px 3px rgba(0,0,0,0.6); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-bottom: none; }
235
+
236
+ .lp_template_wrapper ul li .ultra:first-child { margin: 0; }
237
+
238
+ .lp_template_wrapper ul li .ultraNav .arrow-up { left: 130px; }
239
+
240
+ .lp_template_wrapper ul li .ultra a { font-weight: normal; font-size: 12px; color: #c7c7c7; text-shadow: 0 1px 2px black; }
241
+
242
+ .lp_template_wrapper ul li .ultra li { width: 120px; line-height: 20px; padding: 3px 5px; background: url(images/linkback.png) no-repeat; }
243
+
244
+ .lp_template_wrapper ul li:hover .ultraNav { display: block; }
245
+
246
+ #lp_template_change h2 {display: inline-block;}
247
+
248
+ #lp_template_change {
249
+ margin-left: 17px;
250
+ margin-top: -20px;
251
+ float: right;
252
+ position: absolute;
253
+ top: 0px;
254
+ right: 10px;
255
+ }
256
+
257
+ /* Split Testing Splash */
258
+ .lp_tooltip, .lp_tooltip_templates {background: url('/wp-content/plugins/landing-pages/css/images/question-light.png');
259
+ width: 15px;
260
+ height: 15px;
261
+ display: inline-block;
262
+ margin-left: 5px;
263
+ vertical-align: middle;
264
+ cursor: help;
265
+ background-repeat: no-repeat;
266
+ }
267
+ .qtip-content {
268
+ position: relative;
269
+ padding: 5px 9px;
270
+ overflow: hidden;
271
+ text-align: left;
272
+ word-wrap: break-word;
273
+ line-height: 19px;
274
+ }
275
+ .tool_date{margin-left: 25px;
276
+ vertical-align: top;}
277
+ .tool_textarea {vertical-align: top;}
278
+ .tool_color {margin-top:1px;}
279
+ .tool_checkbox {vertical-align: top; margin-top: 4px;}
280
+ .lp_check_box_table td {padding: 0px;}
281
+ .lp_check_box_table {display: inline; float: left;}
282
+
283
+ /* Split Testing */
284
+ .lp_toggle_pause {color:red;}
285
+ .lp_toggle_play {color:green;}
286
+ /*store*/
287
+
288
+ /* iframe's parent node */
289
+ div#lp-store-iframe-container {
290
+ // position: fixed;
291
+ width: 100%;
292
+ height: 100%;
293
+ overflow:hidden;
294
+ }
295
+
296
+ /* iframe itself */
297
+ div#lp-store-iframe-container > iframe {
298
+ display: block;
299
+ width: 100%;
300
+ height: 100%;
301
+ border: none;
302
+ margin-left:0px;
303
+ }
304
+
305
+ .column-thumbnail
306
+ {
307
+ height:110px;
308
+ }
309
+
310
+ .wp-list-table .column-date
311
+ {
312
+ width:128px;
313
+ }
314
+ .wp-list-table .details
315
+ {
316
+ text-align:left;
317
+ padding-left:20px;
318
+ }
319
+
320
+ #leads-table-container-inside
321
+ {
322
+ margin-top:-36px;
323
+ color:#388DBC;
324
+ }
325
+
326
+ .wp-list-table td
327
+ {
328
+ color:#388DBC;
329
+ }
330
+
331
+ #wp-leads-splash-header
332
+ {
333
+ background: #f2f2f2;
334
+ border-bottom: 1px solid #EBEBEA;
335
+ -webkit-box-shadow: inset 1px 1px 1px rgba(255,255,255,0.3);
336
+ -moz-box-shadow: inset 1px 1px 1px rgba(255,255,255,0.3);
337
+ box-shadow: inset 1px 1px 1px rgba(255,255,255,0.3);
338
+ padding: 20px;
339
+ text-shadow: 1px 1px 1px #fff;
340
+ }
341
+
342
+ #lead-details-container
343
+ {
344
+ border: 1px solid #EBEBEA;
345
+ }
346
+
347
+ #wp-leads-splash-email, #wp-leads-splash-ip, #wp-leads-splash-city, #wp-leads-splash-state, #wp-leads-splash-name
348
+ {
349
+ border-bottom: 1px solid #EBEBEA;
350
+ padding: 10px 20px;
351
+ }
352
+
353
+
354
+ #wp-leads-extra-data
355
+ {
356
+ margin-left: 20px;
357
+ margin-top: 5px;
358
+ }
359
+
360
+ #wp-leads-extra-data td
361
+ {
362
+ padding-right: 15px;
363
+ }
364
+
365
+ .wplp-green-button
366
+ {
367
+ background: #94BA65;
368
+ border: 1px solid rgba(0,0,0,0.15);
369
+ -webkit-border-radius: 2px;
370
+ -moz-border-radius: 2px;
371
+ border-radius: 2px;
372
+ -webkit-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
373
+ -moz-box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
374
+ box-shadow: 0px 2px 3px rgba(0,0,0,0.15), inset 1px 1px 1px rgba(255,255,255,0.2);
375
+ color: #fff;
376
+ cursor: pointer;
377
+ display: inline-block;
378
+ font-family: inherit;
379
+ font-size: 14px;
380
+ font-weight: bold;
381
+ padding: 4px 5px;
382
+ text-shadow: -1px -1px 1px rgba(0,0,0,0.15);
383
+ text-decoration: none;
384
+ }
385
+ .wplp-right
386
+ {
387
+ float: right;
388
+ }
389
+
390
+ .lp-lead-splash-h3, .wp-lead-label
391
+ {
392
+ display: inline;
393
+ }
394
+
395
+ .wp-lead-label
396
+ {
397
+ font-weight: bold;
398
+ }
399
+
400
+ #leads-table-container-inside .wp-list-table .details
401
+ {
402
+ padding-left: 0px;
403
+ }
404
+
405
+ #leads-table-container-inside .wp-list-table .column-date
406
+ {
407
+ width: 150px;
408
+ }
409
+ .date-picker .new-save-lp
410
+ {
411
+ display: none;
412
+ }
413
+ #lp-tour {
414
+ position: absolute;
415
+ font-size: 13px;
416
+ top: -3px;
417
+ right: 170px;
418
+ }
419
+ .lp-success-message
420
+ {
421
+ background: #e2ffc9;
422
+ border: 1px solid #c5eda3;
423
+ padding: 4px 10px 4px 10px;
424
+ margin-left: 10px;
425
+ -webkit-border-radius: 3px;
426
+ -moz-border-radius: 3px;
427
+ border-radius: 3px;
428
+ position: relative;
429
+ margin-top: 10px;
430
+ text-shadow: 1px 1px 1px rgba(255,255,255,0.5);
431
+ }
432
+
433
+ tr.media-id p.description {
434
+ display: inline-block;
435
+ }
436
+ div.capty-caption {
437
+ background-color: #000000;
438
+ color: #FFFFFF;
439
+ font: bold 11px verdana;
440
+ padding-left: 10px;
441
+ padding-top: 7px;
442
+ text-shadow: 1px 1px 0 #222222;
443
+ }
444
+ div.capty-caption a {
445
+ color: #318DAD;
446
+ font: bold 11px verdana;
447
+ text-decoration: none;
448
+ text-shadow: none;
449
+ }
450
+ #setting-error-tgmpa a {
451
+ font-style: normal;
452
+ }
453
+ #setting-error-tgmpa .inbound-install-notice {
454
+
455
+ }
456
+ #TB_ajaxWindowTitle .inbound-install-notice {
457
+ display: none;
458
+ }
459
+ #setting-error-tgmpa .inbound-install-notice-links {
460
+ display: block;
461
+ margin-bottom: 5px;
462
+ }
463
+ #setting-error-tgmpa a.dismiss-notice{
464
+ color: grey;
465
+ }
466
+ #setting-error-tgmpa .thickbox {
467
+ display: inline-block;
468
+ margin-top: 5px;
469
+ font-weight: bold;
470
+ }
471
+
472
+ #setting-error-tgmpa em {
473
+ font-weight: normal;
474
  }
css/admin-templates.css CHANGED
@@ -1,48 +1,48 @@
1
- .update-message {
2
- background-color: #FFFBE4;
3
- border-color: #DFDFDF;
4
- border-bottom-color: #DFDFDF;
5
- border-top-color: #FFFFFF;
6
- padding:3px;
7
- }
8
-
9
- .update-available
10
- {
11
- font-weight:600;
12
- color:cadetblue;
13
- }
14
-
15
- .template-thumbnail {
16
- background-color: #A9A9A9;
17
- border-radius: 2px;
18
- height: 120px;
19
- width: 150px;
20
- padding:6px;
21
- }
22
-
23
- .wp-list-table .column-thumbnail
24
- {
25
- height:0px;
26
- }
27
-
28
- .capty-wrapper
29
- {
30
- margin-left:20px;
31
- height:140px;
32
- }
33
-
34
- .column-template
35
- {
36
- width:200px;
37
- }
38
-
39
- .column-description
40
- {
41
- width:377px;
42
- font-style:italic;
43
- }
44
-
45
- .column-category
46
- {
47
- width:160px;
48
  }
1
+ .update-message {
2
+ background-color: #FFFBE4;
3
+ border-color: #DFDFDF;
4
+ border-bottom-color: #DFDFDF;
5
+ border-top-color: #FFFFFF;
6
+ padding:3px;
7
+ }
8
+
9
+ .update-available
10
+ {
11
+ font-weight:600;
12
+ color:cadetblue;
13
+ }
14
+
15
+ .template-thumbnail {
16
+ background-color: #A9A9A9;
17
+ border-radius: 2px;
18
+ height: 120px;
19
+ width: 150px;
20
+ padding:6px;
21
+ }
22
+
23
+ .wp-list-table .column-thumbnail
24
+ {
25
+ height:0px;
26
+ }
27
+
28
+ .capty-wrapper
29
+ {
30
+ margin-left:20px;
31
+ height:140px;
32
+ }
33
+
34
+ .column-template
35
+ {
36
+ width:200px;
37
+ }
38
+
39
+ .column-description
40
+ {
41
+ width:377px;
42
+ font-style:italic;
43
+ }
44
+
45
+ .column-category
46
+ {
47
+ width:160px;
48
  }
css/admin-tour.css CHANGED
@@ -1,216 +1,216 @@
1
- .introjs-overlay {
2
- position: absolute;
3
- z-index: 999999;
4
- background-color: #000;
5
- opacity: 0;
6
- background: -moz-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
7
- background: -webkit-gradient(radial,center center,0px,center center,100%,color-stop(0%,rgba(0,0,0,0.4)),color-stop(100%,rgba(0,0,0,0.9)));
8
- background: -webkit-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
9
- background: -o-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
10
- background: -ms-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
11
- background: radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
12
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1);
13
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
14
- filter: alpha(opacity=50);
15
- -webkit-transition: all 0.3s ease-out;
16
- -moz-transition: all 0.3s ease-out;
17
- -ms-transition: all 0.3s ease-out;
18
- -o-transition: all 0.3s ease-out;
19
- transition: all 0.3s ease-out;
20
- }
21
-
22
- .introjs-fixParent {
23
- z-index: auto !important;
24
- }
25
-
26
- .introjs-showElement {
27
- z-index: 9999999 !important;
28
- }
29
-
30
- .introjs-relativePosition {
31
- position: relative;
32
- }
33
-
34
- .introjs-helperLayer {
35
- position: absolute;
36
- z-index: 9999998;
37
- background-color: #FFF;
38
- background-color: rgba(255,255,255,.9);
39
- border: 1px solid #777;
40
- border: 1px solid rgba(0,0,0,.5);
41
- border-radius: 4px;
42
- box-shadow: 0 2px 15px rgba(0,0,0,.4);
43
- -webkit-transition: all 0.3s ease-out;
44
- -moz-transition: all 0.3s ease-out;
45
- -ms-transition: all 0.3s ease-out;
46
- -o-transition: all 0.3s ease-out;
47
- transition: all 0.3s ease-out;
48
- }
49
-
50
- .introjs-helperNumberLayer {
51
- position: absolute;
52
- top: -18px;
53
- left: -25px;
54
- z-index: 9999999999 !important;
55
- padding: 2px;
56
- font-family: Arial, verdana, tahoma;
57
- font-size: 13px;
58
- font-weight: bold;
59
- color: white;
60
- text-align: center;
61
- text-shadow: 1px 1px 1px rgba(0,0,0,.3);
62
- background: #ff3019; /* Old browsers */
63
- background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Chrome10+,Safari5.1+ */
64
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404)); /* Chrome,Safari4+ */
65
- background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* FF3.6+ */
66
- background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* IE10+ */
67
- background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Opera 11.10+ */
68
- background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%); /* W3C */
69
- width: 20px;
70
- height:20px;
71
- line-height: 20px;
72
- border: 3px solid white;
73
- border-radius: 50%;
74
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0); /* IE6-9 */
75
- filter: progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000); /* IE10 text shadows */
76
- box-shadow: 0 2px 5px rgba(0,0,0,.4);
77
- }
78
-
79
- .introjs-arrow {
80
- border: 5px solid white;
81
- content:'';
82
- position: absolute;
83
- }
84
- .introjs-arrow.top {
85
- top: -10px;
86
- border-top-color:transparent;
87
- border-right-color:transparent;
88
- border-bottom-color:white;
89
- border-left-color:transparent;
90
- }
91
- .introjs-arrow.right {
92
- right: -10px;
93
- top: 10px;
94
- border-top-color:transparent;
95
- border-right-color:transparent;
96
- border-bottom-color:transparent;
97
- border-left-color:white;
98
- }
99
- .introjs-arrow.bottom {
100
- bottom: -10px;
101
- border-top-color:white;
102
- border-right-color:transparent;
103
- border-bottom-color:transparent;
104
- border-left-color:transparent;
105
- }
106
- .introjs-arrow.left {
107
- left: -10px;
108
- top: 10px;
109
- border-top-color:transparent;
110
- border-right-color:white;
111
- border-bottom-color:transparent;
112
- border-left-color:transparent;
113
- }
114
-
115
- .introjs-tooltip {
116
- position: absolute;
117
- padding: 10px;
118
- background-color: white;
119
- min-width: 200px;
120
- max-width: 300px;
121
- border-radius: 3px;
122
- box-shadow: 0 1px 10px rgba(0,0,0,.4);
123
- -webkit-transition: opacity 0.1s ease-out;
124
- -moz-transition: opacity 0.1s ease-out;
125
- -ms-transition: opacity 0.1s ease-out;
126
- -o-transition: opacity 0.1s ease-out;
127
- transition: opacity 0.1s ease-out;
128
- }
129
-
130
- .introjs-tooltipbuttons {
131
- text-align: right;
132
- }
133
-
134
- /*
135
- Buttons style by http://nicolasgallagher.com/lab/css3-github-buttons/
136
- Changed by Afshin Mehrabani
137
- */
138
- .introjs-button {
139
- position: relative;
140
- overflow: visible;
141
- display: inline-block;
142
- padding: 0.3em 0.8em;
143
- border: 1px solid #d4d4d4;
144
- margin: 0;
145
- text-decoration: none;
146
- text-shadow: 1px 1px 0 #fff;
147
- font: 11px/normal sans-serif;
148
- color: #333;
149
- white-space: nowrap;
150
- cursor: pointer;
151
- outline: none;
152
- background-color: #ececec;
153
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#ececec));
154
- background-image: -moz-linear-gradient(#f4f4f4, #ececec);
155
- background-image: -o-linear-gradient(#f4f4f4, #ececec);
156
- background-image: linear-gradient(#f4f4f4, #ececec);
157
- -webkit-background-clip: padding;
158
- -moz-background-clip: padding;
159
- -o-background-clip: padding-box;
160
- /*background-clip: padding-box;*/ /* commented out due to Opera 11.10 bug */
161
- -webkit-border-radius: 0.2em;
162
- -moz-border-radius: 0.2em;
163
- border-radius: 0.2em;
164
- /* IE hacks */
165
- zoom: 1;
166
- *display: inline;
167
- margin-top: 10px;
168
- }
169
-
170
- .introjs-button:hover {
171
- border-color: #bcbcbc;
172
- text-decoration: none;
173
- box-shadow: 0px 1px 1px #e3e3e3;
174
- }
175
-
176
- .introjs-button:focus,
177
- .introjs-button:active {
178
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ececec), to(#f4f4f4));
179
- background-image: -moz-linear-gradient(#ececec, #f4f4f4);
180
- background-image: -o-linear-gradient(#ececec, #f4f4f4);
181
- background-image: linear-gradient(#ececec, #f4f4f4);
182
- }
183
-
184
- /* overrides extra padding on button elements in Firefox */
185
- .introjs-button::-moz-focus-inner {
186
- padding: 0;
187
- border: 0;
188
- }
189
-
190
- .introjs-skipbutton {
191
- margin-right: 5px;
192
- color: #7a7a7a;
193
- }
194
-
195
- .introjs-prevbutton {
196
- -webkit-border-radius: 0.2em 0 0 0.2em;
197
- -moz-border-radius: 0.2em 0 0 0.2em;
198
- border-radius: 0.2em 0 0 0.2em;
199
- border-right: none;
200
- }
201
-
202
- .introjs-nextbutton {
203
- -webkit-border-radius: 0 0.2em 0.2em 0;
204
- -moz-border-radius: 0 0.2em 0.2em 0;
205
- border-radius: 0 0.2em 0.2em 0;
206
- }
207
-
208
- .introjs-disabled, .introjs-disabled:hover, .introjs-disabled:focus {
209
- color: #9a9a9a;
210
- border-color: #d4d4d4;
211
- box-shadow: none;
212
- cursor: default;
213
- background-color: #f4f4f4;
214
- background-image: none;
215
- text-decoration: none;
216
- }
1
+ .introjs-overlay {
2
+ position: absolute;
3
+ z-index: 999999;
4
+ background-color: #000;
5
+ opacity: 0;
6
+ background: -moz-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
7
+ background: -webkit-gradient(radial,center center,0px,center center,100%,color-stop(0%,rgba(0,0,0,0.4)),color-stop(100%,rgba(0,0,0,0.9)));
8
+ background: -webkit-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
9
+ background: -o-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
10
+ background: -ms-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
11
+ background: radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
12
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1);
13
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
14
+ filter: alpha(opacity=50);
15
+ -webkit-transition: all 0.3s ease-out;
16
+ -moz-transition: all 0.3s ease-out;
17
+ -ms-transition: all 0.3s ease-out;
18
+ -o-transition: all 0.3s ease-out;
19
+ transition: all 0.3s ease-out;
20
+ }
21
+
22
+ .introjs-fixParent {
23
+ z-index: auto !important;
24
+ }
25
+
26
+ .introjs-showElement {
27
+ z-index: 9999999 !important;
28
+ }
29
+
30
+ .introjs-relativePosition {
31
+ position: relative;
32
+ }
33
+
34
+ .introjs-helperLayer {
35
+ position: absolute;
36
+ z-index: 9999998;
37
+ background-color: #FFF;
38
+ background-color: rgba(255,255,255,.9);
39
+ border: 1px solid #777;
40
+ border: 1px solid rgba(0,0,0,.5);
41
+ border-radius: 4px;
42
+ box-shadow: 0 2px 15px rgba(0,0,0,.4);
43
+ -webkit-transition: all 0.3s ease-out;
44
+ -moz-transition: all 0.3s ease-out;
45
+ -ms-transition: all 0.3s ease-out;
46
+ -o-transition: all 0.3s ease-out;
47
+ transition: all 0.3s ease-out;
48
+ }
49
+
50
+ .introjs-helperNumberLayer {
51
+ position: absolute;
52
+ top: -18px;
53
+ left: -25px;
54
+ z-index: 9999999999 !important;
55
+ padding: 2px;
56
+ font-family: Arial, verdana, tahoma;
57
+ font-size: 13px;
58
+ font-weight: bold;
59
+ color: white;
60
+ text-align: center;
61
+ text-shadow: 1px 1px 1px rgba(0,0,0,.3);
62
+ background: #ff3019; /* Old browsers */
63
+ background: -webkit-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Chrome10+,Safari5.1+ */
64
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ff3019), color-stop(100%, #cf0404)); /* Chrome,Safari4+ */
65
+ background: -moz-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* FF3.6+ */
66
+ background: -ms-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* IE10+ */
67
+ background: -o-linear-gradient(top, #ff3019 0%, #cf0404 100%); /* Opera 11.10+ */
68
+ background: linear-gradient(to bottom, #ff3019 0%, #cf0404 100%); /* W3C */
69
+ width: 20px;
70
+ height:20px;
71
+ line-height: 20px;
72
+ border: 3px solid white;
73
+ border-radius: 50%;
74
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0); /* IE6-9 */
75
+ filter: progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000); /* IE10 text shadows */
76
+ box-shadow: 0 2px 5px rgba(0,0,0,.4);
77
+ }
78
+
79
+ .introjs-arrow {
80
+ border: 5px solid white;
81
+ content:'';
82
+ position: absolute;
83
+ }
84
+ .introjs-arrow.top {
85
+ top: -10px;
86
+ border-top-color:transparent;
87
+ border-right-color:transparent;
88
+ border-bottom-color:white;
89
+ border-left-color:transparent;
90
+ }
91
+ .introjs-arrow.right {
92
+ right: -10px;
93
+ top: 10px;
94
+ border-top-color:transparent;
95
+ border-right-color:transparent;
96
+ border-bottom-color:transparent;
97
+ border-left-color:white;
98
+ }
99
+ .introjs-arrow.bottom {
100
+ bottom: -10px;
101
+ border-top-color:white;
102
+ border-right-color:transparent;
103
+ border-bottom-color:transparent;
104
+ border-left-color:transparent;
105
+ }
106
+ .introjs-arrow.left {
107
+ left: -10px;
108
+ top: 10px;
109
+ border-top-color:transparent;
110
+ border-right-color:white;
111
+ border-bottom-color:transparent;
112
+ border-left-color:transparent;
113
+ }
114
+
115
+ .introjs-tooltip {
116
+ position: absolute;
117
+ padding: 10px;
118
+ background-color: white;
119
+ min-width: 200px;
120
+ max-width: 300px;
121
+ border-radius: 3px;
122
+ box-shadow: 0 1px 10px rgba(0,0,0,.4);
123
+ -webkit-transition: opacity 0.1s ease-out;
124
+ -moz-transition: opacity 0.1s ease-out;
125
+ -ms-transition: opacity 0.1s ease-out;
126
+ -o-transition: opacity 0.1s ease-out;
127
+ transition: opacity 0.1s ease-out;
128
+ }
129
+
130
+ .introjs-tooltipbuttons {
131
+ text-align: right;
132
+ }
133
+
134
+ /*
135
+ Buttons style by http://nicolasgallagher.com/lab/css3-github-buttons/
136
+ Changed by Afshin Mehrabani
137
+ */
138
+ .introjs-button {
139
+ position: relative;
140
+ overflow: visible;
141
+ display: inline-block;
142
+ padding: 0.3em 0.8em;
143
+ border: 1px solid #d4d4d4;
144
+ margin: 0;
145
+ text-decoration: none;
146
+ text-shadow: 1px 1px 0 #fff;
147
+ font: 11px/normal sans-serif;
148
+ color: #333;
149
+ white-space: nowrap;
150
+ cursor: pointer;
151
+ outline: none;
152
+ background-color: #ececec;
153
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f4f4f4), to(#ececec));
154
+ background-image: -moz-linear-gradient(#f4f4f4, #ececec);
155
+ background-image: -o-linear-gradient(#f4f4f4, #ececec);
156
+ background-image: linear-gradient(#f4f4f4, #ececec);
157
+ -webkit-background-clip: padding;
158
+ -moz-background-clip: padding;
159
+ -o-background-clip: padding-box;
160
+ /*background-clip: padding-box;*/ /* commented out due to Opera 11.10 bug */
161
+ -webkit-border-radius: 0.2em;
162
+ -moz-border-radius: 0.2em;
163
+ border-radius: 0.2em;
164
+ /* IE hacks */
165
+ zoom: 1;
166
+ *display: inline;
167
+ margin-top: 10px;
168
+ }
169
+
170
+ .introjs-button:hover {
171
+ border-color: #bcbcbc;
172
+ text-decoration: none;
173
+ box-shadow: 0px 1px 1px #e3e3e3;
174
+ }
175
+
176
+ .introjs-button:focus,
177
+ .introjs-button:active {
178
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ececec), to(#f4f4f4));
179
+ background-image: -moz-linear-gradient(#ececec, #f4f4f4);
180
+ background-image: -o-linear-gradient(#ececec, #f4f4f4);
181
+ background-image: linear-gradient(#ececec, #f4f4f4);
182
+ }
183
+
184
+ /* overrides extra padding on button elements in Firefox */
185
+ .introjs-button::-moz-focus-inner {
186
+ padding: 0;
187
+ border: 0;
188
+ }
189
+
190
+ .introjs-skipbutton {
191
+ margin-right: 5px;
192
+ color: #7a7a7a;
193
+ }
194
+
195
+ .introjs-prevbutton {
196
+ -webkit-border-radius: 0.2em 0 0 0.2em;
197
+ -moz-border-radius: 0.2em 0 0 0.2em;
198
+ border-radius: 0.2em 0 0 0.2em;
199
+ border-right: none;
200
+ }
201
+
202
+ .introjs-nextbutton {
203
+ -webkit-border-radius: 0 0.2em 0.2em 0;
204
+ -moz-border-radius: 0 0.2em 0.2em 0;
205
+ border-radius: 0 0.2em 0.2em 0;
206
+ }
207
+
208
+ .introjs-disabled, .introjs-disabled:hover, .introjs-disabled:focus {
209
+ color: #9a9a9a;
210
+ border-color: #d4d4d4;
211
+ box-shadow: none;
212
+ cursor: default;
213
+ background-color: #f4f4f4;
214
+ background-image: none;
215
+ text-decoration: none;
216
+ }
css/customizer-load.css CHANGED
@@ -1,76 +1,69 @@
1
- .lp-customizer-overlay
2
- {
3
- position: absolute;
4
- z-index: 999999;
5
- background-color: #000;
6
- opacity: 0;
7
- background: -moz-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
8
- background: -webkit-gradient(radial,center center,0px,center center,100%,color-stop(0%,rgba(0,0,0,0.4)),color-stop(100%,rgba(0,0,0,0.9)));
9
- background: -webkit-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
10
- background: -o-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
11
- background: -ms-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
12
- background: radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
13
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1);
14
- -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
15
- filter: alpha(opacity=50);
16
- -webkit-transition: all 0.3s ease-out;
17
- -moz-transition: all 0.3s ease-out;
18
- -ms-transition: all 0.3s ease-out;
19
- -o-transition: all 0.3s ease-out;
20
- transition: all 0.3s ease-out;
21
- }
22
-
23
-
24
- #template-display-options .inbound-meta-box-label {
25
- width:100%;
26
- }
27
-
28
-
29
- html {
30
- margin-top: 0px !important;
31
- }
32
- .live-preview-active
33
- {
34
- background-color: gray;
35
- background-image: repeating-linear-gradient(45deg, transparent, transparent 35px, rgba(255,255,255,.5) 35px, rgba(255,255,255,.5) 70px);
36
- }
37
- .live-preview-area-box {
38
- display:inline-block;
39
- }
40
- .lp-see-this {
41
- color:#000000 !important;
42
- }
43
- .live-preview-active {
44
- background: rgba(253, 253, 252, 1);
45
- border-radius: 0px;
46
- padding: 0px;
47
- outline: 2px dashed rgb(255, 0, 0);
48
- -webkit-box-shadow: 0px 0px 35px rgba(50, 50, 50, 1);
49
- -moz-box-shadow: 0px 0px 35px rgba(50, 50, 50, 1);
50
- box-shadow: 0px 0px 35px rgba(50, 50, 50, 1);
51
- z-index: 99999999;
52
- }
53
-
54
- .small-html {
55
- height: 200%;
56
- border: 0;
57
- position: absolute;
58
- top: 0;
59
- left: 0;
60
- background-color: #eee;
61
-
62
- -webkit-transform: scale(.8);
63
- -moz-transform: scale(0.8);
64
- -ms-transform: scale(0.8);
65
- -o-transform: scale(0.8);
66
- transform: scale(0.8);
67
- -webkit-transform-origin: top left;
68
- -moz-transform-origin: top left;
69
- -ms-transform-origin: top left;
70
- -o-transform-origin: top left;
71
- transform-origin: top left;
72
- -webkit-transition: opacity 0.4s ease;
73
- -moz-transition: opacity 0.4s ease;
74
- -o-transition: opacity 0.4s ease;
75
- transition: opacity 0.4s ease;
76
  }
1
+ .lp-customizer-overlay
2
+ {
3
+ position: absolute;
4
+ z-index: 999999;
5
+ background-color: #000;
6
+ opacity: 0;
7
+ background: -moz-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
8
+ background: -webkit-gradient(radial,center center,0px,center center,100%,color-stop(0%,rgba(0,0,0,0.4)),color-stop(100%,rgba(0,0,0,0.9)));
9
+ background: -webkit-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
10
+ background: -o-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
11
+ background: -ms-radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
12
+ background: radial-gradient(center,ellipse cover,rgba(0,0,0,0.4) 0,rgba(0,0,0,0.9) 100%);
13
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#66000000',endColorstr='#e6000000',GradientType=1);
14
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
15
+ filter: alpha(opacity=50);
16
+ -webkit-transition: all 0.3s ease-out;
17
+ -moz-transition: all 0.3s ease-out;
18
+ -ms-transition: all 0.3s ease-out;
19
+ -o-transition: all 0.3s ease-out;
20
+ transition: all 0.3s ease-out;
21
+ }
22
+ html {
23
+ margin-top: 0px !important;
24
+ }
25
+ .live-preview-active
26
+ {
27
+ background-color: gray;
28
+ background-image: repeating-linear-gradient(45deg, transparent, transparent 35px, rgba(255,255,255,.5) 35px, rgba(255,255,255,.5) 70px);
29
+ }
30
+ .live-preview-area-box {
31
+ display:inline-block;
32
+ }
33
+ .lp-see-this {
34
+ color:#000000 !important;
35
+ }
36
+ .live-preview-active {
37
+ background: rgba(253, 253, 252, 1);
38
+ border-radius: 0px;
39
+ padding: 0px;
40
+ outline: 2px dashed rgb(255, 0, 0);
41
+ -webkit-box-shadow: 0px 0px 35px rgba(50, 50, 50, 1);
42
+ -moz-box-shadow: 0px 0px 35px rgba(50, 50, 50, 1);
43
+ box-shadow: 0px 0px 35px rgba(50, 50, 50, 1);
44
+ z-index: 99999999;
45
+ }
46
+
47
+ .small-html {
48
+ height: 200%;
49
+ border: 0;
50
+ position: absolute;
51
+ top: 0;
52
+ left: 0;
53
+ background-color: #eee;
54
+
55
+ -webkit-transform: scale(.8);
56
+ -moz-transform: scale(0.8);
57
+ -ms-transform: scale(0.8);
58
+ -o-transform: scale(0.8);
59
+ transform: scale(0.8);
60
+ -webkit-transform-origin: top left;
61
+ -moz-transform-origin: top left;
62
+ -ms-transform-origin: top left;
63
+ -o-transform-origin: top left;
64
+ transform-origin: top left;
65
+ -webkit-transition: opacity 0.4s ease;
66
+ -moz-transition: opacity 0.4s ease;
67
+ -o-transition: opacity 0.4s ease;
68
+ transition: opacity 0.4s ease;
 
 
 
 
 
 
 
69
  }
css/customizer.frontend.css CHANGED
@@ -1,157 +1,156 @@
1
- html.wp-toolbar {
2
- padding-top: 0px;
3
- }
4
- body {
5
- min-width: 400px !important;
6
- }
7
- #wpadminbar, #adminmenuback, #current_variation_id, #post_ID {
8
- display: none !important;
9
- }
10
-
11
- #adminmenuwrap {display: none !important;}
12
- .auto-fold #wpcontent {
13
- margin-left: 0px;
14
- }
15
- .jPicker .Icon {
16
- height: 23px;}
17
-
18
- #lp-options-controls {
19
- position: absolute;
20
- top: 13px;
21
- right: 10px;
22
- }
23
- #lp-frontend-options-container {
24
- padding-left: 8px;
25
- padding-right: 8px;
26
- z-index: 99999999998 !important;
27
- }
28
- #lp-top-box {
29
- background: #eaeaea;
30
- width: 100%;
31
- height: 42px;
32
- border-bottom: rgba(206, 206, 206, 0.5);
33
- border-width: 1px;
34
- border-style: solid;
35
-
36
- }
37
- .mceToolbar.mceToolbarRow1.Enabled td {
38
- display: inline-block !important;
39
- }
40
- .media-modal {
41
- position: fixed;
42
- top: 45px !important;}
43
-
44
- .mceStatusbar.mceFirst.mceLast div {
45
- display: none !important;
46
- }
47
- .media-modal {
48
- width: 473px !important;
49
- left:10px !important;
50
- position: absolute;
51
- }
52
- input[type="radio"] {
53
- margin-left: 5px;
54
- vertical-align: middle;
55
- }
56
- /* #wpcontent, body {
57
- min-width: 470px !important;
58
- } */
59
- .click-this {
60
- display: none;
61
- }
62
- .jPicker .Grid {
63
- display: none;
64
- }
65
- .jPicker .Button {
66
- text-align: center;
67
- padding: 0 4px;
68
- width: 264px;
69
- position: absolute;
70
- border-bottom: none;
71
- left: 0px;
72
- bottom: 3px;
73
- }
74
- .jPicker .Button input {
75
- font-size: 18px !important;
76
- }
77
- .jPicker .Icon span.Color, .jPicker .Icon span.Alpha {
78
- width: 97% !important;
79
- }
80
- .jPicker .Title {
81
- width: 254px;
82
- }
83
- .landing-page-option-td {
84
- position: relative;
85
- }
86
- .media-modal-backdrop, .media-modal {
87
- position: fixed !important;
88
- }
89
- .upload_image_button {
90
- background: #f3f3f3;
91
- background-image: -webkit-gradient(linear,left top,left bottom,from(#fefefe),to(#f4f4f4));
92
- background-image: -webkit-linear-gradient(top,#fefefe,#f4f4f4);
93
- background-image: -moz-linear-gradient(top,#fefefe,#f4f4f4);
94
- background-image: -o-linear-gradient(top,#fefefe,#f4f4f4);
95
- background-image: linear-gradient(to bottom,#fefefe,#f4f4f4);
96
- border-color: #bbb;
97
- color: #333;
98
- text-shadow: 0 1px 0 #fff;
99
- display: inline-block;
100
- text-decoration: none;
101
- font-size: 12px;
102
- line-height: 23px;
103
- height: 24px;
104
- margin: 0;
105
- padding: 0 10px 1px;
106
- cursor: pointer;
107
- border-width: 1px;
108
- border-style: solid;
109
- -webkit-border-radius: 3px;
110
- -webkit-appearance: none;
111
- border-radius: 3px;
112
- white-space: nowrap;
113
- -webkit-box-sizing: border-box;
114
- -moz-box-sizing: border-box;
115
- box-sizing: border-box;
116
- }
117
- #media-items {
118
- width: 311px !important;
119
- }
120
- .variation-letter-top {
121
- border-radius: 3px;
122
- border-style: solid;
123
- border-width: 1px;
124
- padding: 1px;
125
- padding-left: 4px;
126
- padding-right: 5px;
127
- background: #fff;
128
- display: inline-block;
129
- margin-right: 10px;
130
- }
131
- .the-title input {
132
- width: 78%;
133
- }
134
- table.jPicker {
135
- width: 445px;}
136
-
137
- html {
138
- background: #f5f5f5;
139
- border-right: 1px solid rgba(0,0,0,0.2);
140
- }
141
- .landing-page-option-row {
142
- padding-top: 10px;
143
- padding-left: 3px;
144
- padding-bottom:0px;
145
- padding-right: 0px;
146
- clear: both;
147
- }
148
- .landing-page-table-header {
149
- font-size: 17px;
150
- padding-bottom: 5px;
151
- padding-left: 2px;
152
- }
153
- h1 {
154
- line-height: 28px;
155
- margin-bottom: 0px;
156
- margin-top: 10px;
157
  }
1
+ html.wp-toolbar {
2
+ padding-top: 0px;
3
+ }
4
+ body {
5
+ min-width: 400px !important;
6
+ }
7
+ #wpadminbar, #adminmenuback, #current_variation_id, #post_ID {
8
+ display: none !important;
9
+ }
10
+ #adminmenuwrap {display: none !important;}
11
+ .auto-fold #wpcontent {
12
+ margin-left: 0px;
13
+ }
14
+ .jPicker .Icon {
15
+ height: 23px;}
16
+
17
+ #lp-options-controls {
18
+ position: absolute;
19
+ top: 13px;
20
+ right: 10px;
21
+ }
22
+ #lp-frontend-options-container {
23
+ padding-left: 8px;
24
+ padding-right: 8px;
25
+ z-index: 99999999998 !important;
26
+ }
27
+ #lp-top-box {
28
+ background: #eaeaea;
29
+ width: 100%;
30
+ height: 42px;
31
+ border-bottom: rgba(206, 206, 206, 0.5);
32
+ border-width: 1px;
33
+ border-style: solid;
34
+
35
+ }
36
+ .mceToolbar.mceToolbarRow1.Enabled td {
37
+ display: inline-block !important;
38
+ }
39
+ .media-modal {
40
+ position: fixed;
41
+ top: 45px !important;}
42
+
43
+ .mceStatusbar.mceFirst.mceLast div {
44
+ display: none !important;
45
+ }
46
+ .media-modal {
47
+ width: 473px !important;
48
+ left:10px !important;
49
+ position: absolute;
50
+ }
51
+ input[type="radio"] {
52
+ margin-left: 5px;
53
+ vertical-align: middle;
54
+ }
55
+ /* #wpcontent, body {
56
+ min-width: 470px !important;
57
+ } */
58
+ .click-this {
59
+ display: none;
60
+ }
61
+ .jPicker .Grid {
62
+ display: none;
63
+ }
64
+ .jPicker .Button {
65
+ text-align: center;
66
+ padding: 0 4px;
67
+ width: 264px;
68
+ position: absolute;
69
+ border-bottom: none;
70
+ left: 0px;
71
+ bottom: 3px;
72
+ }
73
+ .jPicker .Button input {
74
+ font-size: 18px !important;
75
+ }
76
+ .jPicker .Icon span.Color, .jPicker .Icon span.Alpha {
77
+ width: 97% !important;
78
+ }
79
+ .jPicker .Title {
80
+ width: 254px;
81
+ }
82
+ .landing-page-option-td {
83
+ position: relative;
84
+ }
85
+ .media-modal-backdrop, .media-modal {
86
+ position: fixed !important;
87
+ }
88
+ .upload_image_button {
89
+ background: #f3f3f3;
90
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#fefefe),to(#f4f4f4));
91
+ background-image: -webkit-linear-gradient(top,#fefefe,#f4f4f4);
92
+ background-image: -moz-linear-gradient(top,#fefefe,#f4f4f4);
93
+ background-image: -o-linear-gradient(top,#fefefe,#f4f4f4);
94
+ background-image: linear-gradient(to bottom,#fefefe,#f4f4f4);
95
+ border-color: #bbb;
96
+ color: #333;
97
+ text-shadow: 0 1px 0 #fff;
98
+ display: inline-block;
99
+ text-decoration: none;
100
+ font-size: 12px;
101
+ line-height: 23px;
102
+ height: 24px;
103
+ margin: 0;
104
+ padding: 0 10px 1px;
105
+ cursor: pointer;
106
+ border-width: 1px;
107
+ border-style: solid;
108
+ -webkit-border-radius: 3px;
109
+ -webkit-appearance: none;
110
+ border-radius: 3px;
111
+ white-space: nowrap;
112
+ -webkit-box-sizing: border-box;
113
+ -moz-box-sizing: border-box;
114
+ box-sizing: border-box;
115
+ }
116
+ #media-items {
117
+ width: 311px !important;
118
+ }
119
+ .variation-letter-top {
120
+ border-radius: 3px;
121
+ border-style: solid;
122
+ border-width: 1px;
123
+ padding: 1px;
124
+ padding-left: 4px;
125
+ padding-right: 5px;
126
+ background: #fff;
127
+ display: inline-block;
128
+ margin-right: 10px;
129
+ }
130
+ .the-title input {
131
+ width: 78%;
132
+ }
133
+ table.jPicker {
134
+ width: 445px;}
135
+
136
+ html {
137
+ background: #f5f5f5;
138
+ border-right: 1px solid rgba(0,0,0,0.2);
139
+ }
140
+ .landing-page-option-row {
141
+ padding-top: 10px;
142
+ padding-left: 3px;
143
+ padding-bottom:0px;
144
+ padding-right: 0px;
145
+ clear: both;
146
+ }
147
+ .landing-page-table-header {
148
+ font-size: 17px;
149
+ padding-bottom: 5px;
150
+ padding-left: 2px;
151
+ }
152
+ h1 {
153
+ line-height: 28px;
154
+ margin-bottom: 0px;
155
+ margin-top: 10px;
 
156
  }
css/customizer.media-uploader.css CHANGED
@@ -1,34 +1,34 @@
1
- .media-upload-form {
2
- margin-top: 20px;
3
- width: 376px;
4
- }
5
- #media-upload #filter {
6
- width: 376px;
7
- }
8
- .post_title, .image_alt, .post_excerpt, .post_content, .url, .align, .upload-flash-bypass, .max-upload-size {
9
- display: none;
10
- }
11
- .media-upload-form {
12
- width: 60% !important;
13
- }
14
- .savesend input.button {
15
- background-color: #21759b;
16
- background-image: -webkit-gradient(linear,left top,left bottom,from(#2a95c5),to(#21759b));
17
- background-image: -webkit-linear-gradient(top,#2a95c5,#21759b);
18
- background-image: -moz-linear-gradient(top,#2a95c5,#21759b);
19
- background-image: -ms-linear-gradient(top,#2a95c5,#21759b);
20
- background-image: -o-linear-gradient(top,#2a95c5,#21759b);
21
- background-image: linear-gradient(to bottom,#2a95c5,#21759b);
22
- border-color: #21759b;
23
- border-bottom-color: #1e6a8d;
24
- -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
25
- box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
26
- color: #fff;
27
- text-decoration: none;
28
- text-shadow: 0 1px 0 rgba(0,0,0,0.1);
29
- height: 35px;
30
- font-size: 20px;
31
- }
32
- .media-upload-form.type-form.validate, #image-form {
33
- width: 60% !important;
34
  }
1
+ .media-upload-form {
2
+ margin-top: 20px;
3
+ width: 376px;
4
+ }
5
+ #media-upload #filter {
6
+ width: 376px;
7
+ }
8
+ .post_title, .image_alt, .post_excerpt, .post_content, .url, .align, .upload-flash-bypass, .max-upload-size {
9
+ display: none;
10
+ }
11
+ .media-upload-form {
12
+ width: 60% !important;
13
+ }
14
+ .savesend input.button {
15
+ background-color: #21759b;
16
+ background-image: -webkit-gradient(linear,left top,left bottom,from(#2a95c5),to(#21759b));
17
+ background-image: -webkit-linear-gradient(top,#2a95c5,#21759b);
18
+ background-image: -moz-linear-gradient(top,#2a95c5,#21759b);
19
+ background-image: -ms-linear-gradient(top,#2a95c5,#21759b);
20
+ background-image: -o-linear-gradient(top,#2a95c5,#21759b);
21
+ background-image: linear-gradient(to bottom,#2a95c5,#21759b);
22
+ border-color: #21759b;
23
+ border-bottom-color: #1e6a8d;
24
+ -webkit-box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
25
+ box-shadow: inset 0 1px 0 rgba(120,200,230,0.5);
26
+ color: #fff;
27
+ text-decoration: none;
28
+ text-shadow: 0 1px 0 rgba(0,0,0,0.1);
29
+ height: 35px;
30
+ font-size: 20px;
31
+ }
32
+ .media-upload-form.type-form.validate, #image-form {
33
+ width: 60% !important;
34
  }
css/frontend/global-landing-page-style.css CHANGED
@@ -1,40 +1,40 @@
1
- /**
2
- * WordPress required styles
3
- * Needed for editor media floats
4
- */
5
- /* ---------------------------------------------- */
6
- .wp-caption{
7
- background:#FBFBFB;
8
- border:1px solid #EEE;
9
- padding:10px;
10
- max-width: 100%;
11
- }
12
- .wp-caption img{
13
- display:block;
14
- margin-bottom:5px;
15
- }
16
- .wp-caption-text,
17
- .gallery-caption{
18
- margin:0;
19
- font-size:12px;
20
- font-style:italic
21
- }
22
- .alignright{
23
- float:right;
24
- margin: 10px 0px 10px 20px;
25
- }
26
- .alignleft{
27
- float:left;
28
- margin: 10px 20px 10px 0px;
29
- }
30
- .aligncenter{
31
- display:block;
32
- margin-left:auto;
33
- margin-right:auto;
34
- }
35
- .alignnone{
36
- display:block;
37
- margin: 10px 0px;
38
- }
39
- .bypostauthor{}
40
  /* ---------------------------------------------- */
1
+ /**
2
+ * WordPress required styles
3
+ * Needed for editor media floats
4
+ */
5
+ /* ---------------------------------------------- */
6
+ .wp-caption{
7
+ background:#FBFBFB;
8
+ border:1px solid #EEE;
9
+ padding:10px;
10
+ max-width: 100%;
11
+ }
12
+ .wp-caption img{
13
+ display:block;
14
+ margin-bottom:5px;
15
+ }
16
+ .wp-caption-text,
17
+ .gallery-caption{
18
+ margin:0;
19
+ font-size:12px;
20
+ font-style:italic
21
+ }
22
+ .alignright{
23
+ float:right;
24
+ margin: 10px 0px 10px 20px;
25
+ }
26
+ .alignleft{
27
+ float:left;
28
+ margin: 10px 20px 10px 0px;
29
+ }
30
+ .aligncenter{
31
+ display:block;
32
+ margin-left:auto;
33
+ margin-right:auto;
34
+ }
35
+ .alignnone{
36
+ display:block;
37
+ margin: 10px 0px;
38
+ }
39
+ .bypostauthor{}
40
  /* ---------------------------------------------- */
css/frontend/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
css/images/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
css/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
css/jquery.qtip.min.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! qtip2 v2.0.0 | http://craigsworks.com/projects/qtip2/ | Licensed MIT, GPL */.qtip,.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:700px;min-width:50px;font-size:14.5px;line-height:12px;direction:ltr}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:15px 35px 7px 8px;overflow:hidden;border-width:0 0 1px;font-weight:normal}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr;vertical-align:middle}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#D95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}/*! Green tooltip style */.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border-width:0;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));background-image:-webkit-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,black 100%)}.qtip-youtube .qtip-titlebar{background-color:#4A4A4A;background-color:rgba(0,0,0,0)}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px black}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:-10000em;top:-10000em}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}.qtip-jtools{padding-bottom: 5px;}.qtip-title{font-size:20px;}
2
- .qtip-content {
3
- font-weight: 300;
4
  }
1
+ /*! qtip2 v2.0.0 | http://craigsworks.com/projects/qtip2/ | Licensed MIT, GPL */.qtip,.qtip{position:absolute;left:-28000px;top:-28000px;display:none;max-width:700px;min-width:50px;font-size:14.5px;line-height:12px;direction:ltr}.qtip-content{position:relative;padding:5px 9px;overflow:hidden;text-align:left;word-wrap:break-word}.qtip-titlebar{position:relative;padding:15px 35px 7px 8px;overflow:hidden;border-width:0 0 1px;font-weight:normal}.qtip-titlebar+.qtip-content{border-top-width:0!important}.qtip-close{position:absolute;right:-9px;top:-9px;cursor:pointer;outline:medium none;border-width:1px;border-style:solid;border-color:transparent}.qtip-titlebar .qtip-close{right:4px;top:50%;margin-top:-9px}* html .qtip-titlebar .qtip-close{top:16px}.qtip-titlebar .ui-icon,.qtip-icon .ui-icon{display:block;text-indent:-1000em;direction:ltr;vertical-align:middle}.qtip-icon,.qtip-icon .ui-icon{-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none}.qtip-icon .ui-icon{width:18px;height:14px;text-align:center;text-indent:0;font:normal bold 10px/13px Tahoma,sans-serif;color:inherit;background:transparent none no-repeat -100em -100em}.qtip-focus{}.qtip-hover{}.qtip-default{border-width:1px;border-style:solid;border-color:#F1D031;background-color:#FFFFA3;color:#555}.qtip-default .qtip-titlebar{background-color:#FFEF93}.qtip-default .qtip-icon{border-color:#CCC;background:#F1F1F1;color:#777}.qtip-default .qtip-titlebar .qtip-close{border-color:#AAA;color:#111}/*! Light tooltip style */.qtip-light{background-color:#fff;border-color:#E2E2E2;color:#454545}.qtip-light .qtip-titlebar{background-color:#f1f1f1}/*! Dark tooltip style */.qtip-dark{background-color:#505050;border-color:#303030;color:#f3f3f3}.qtip-dark .qtip-titlebar{background-color:#404040}.qtip-dark .qtip-icon{border-color:#444}.qtip-dark .qtip-titlebar .ui-state-hover{border-color:#303030}/*! Cream tooltip style */.qtip-cream{background-color:#FBF7AA;border-color:#F9E98E;color:#A27D35}.qtip-cream .qtip-titlebar{background-color:#F0DE7D}.qtip-cream .qtip-close .qtip-icon{background-position:-82px 0}/*! Red tooltip style */.qtip-red{background-color:#F78B83;border-color:#D95252;color:#912323}.qtip-red .qtip-titlebar{background-color:#F06D65}.qtip-red .qtip-close .qtip-icon{background-position:-102px 0}.qtip-red .qtip-icon{border-color:#D95252}.qtip-red .qtip-titlebar .ui-state-hover{border-color:#D95252}/*! Green tooltip style */.qtip-green{background-color:#CAED9E;border-color:#90D93F;color:#3F6219}.qtip-green .qtip-titlebar{background-color:#B0DE78}.qtip-green .qtip-close .qtip-icon{background-position:-42px 0}/*! Blue tooltip style */.qtip-blue{background-color:#E5F6FE;border-color:#ADD9ED;color:#5E99BD}.qtip-blue .qtip-titlebar{background-color:#D0E9F5}.qtip-blue .qtip-close .qtip-icon{background-position:-2px 0}.qtip-shadow{-webkit-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);-moz-box-shadow:1px 1px 3px 1px rgba(0,0,0,.15);box-shadow:1px 1px 3px 1px rgba(0,0,0,.15)}.qtip-rounded,.qtip-tipsy,.qtip-bootstrap{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.qtip-youtube{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;box-shadow:0 0 3px #333;color:#fff;border-width:0;background:#4A4A4A;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));background-image:-webkit-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-moz-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-ms-linear-gradient(top,#4A4A4A 0,black 100%);background-image:-o-linear-gradient(top,#4A4A4A 0,black 100%)}.qtip-youtube .qtip-titlebar{background-color:#4A4A4A;background-color:rgba(0,0,0,0)}.qtip-youtube .qtip-content{padding:.75em;font:12px arial,sans-serif;filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);-ms-filter:"progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#4a4a4a, EndColorStr=#000000);"}.qtip-youtube .qtip-icon{border-color:#222}.qtip-youtube .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-jtools{background:#232323;background:rgba(0,0,0,.7);background-image:-webkit-gradient(linear,left top,left bottom,from(#717171),to(#232323));background-image:-moz-linear-gradient(top,#717171,#232323);background-image:-webkit-linear-gradient(top,#717171,#232323);background-image:-ms-linear-gradient(top,#717171,#232323);background-image:-o-linear-gradient(top,#717171,#232323);border:2px solid #ddd;border:2px solid rgba(241,241,241,1);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 0 12px #333;-moz-box-shadow:0 0 12px #333;box-shadow:0 0 12px #333}.qtip-jtools .qtip-titlebar{background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171, endColorstr=#4A4A4A)"}.qtip-jtools .qtip-content{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A, endColorstr=#232323)"}.qtip-jtools .qtip-titlebar,.qtip-jtools .qtip-content{background:transparent;color:#fff;border:0 dashed transparent}.qtip-jtools .qtip-icon{border-color:#555}.qtip-jtools .qtip-titlebar .ui-state-hover{border-color:#333}.qtip-cluetip{-webkit-box-shadow:4px 4px 5px rgba(0,0,0,.4);-moz-box-shadow:4px 4px 5px rgba(0,0,0,.4);box-shadow:4px 4px 5px rgba(0,0,0,.4);background-color:#D9D9C2;color:#111;border:0 dashed transparent}.qtip-cluetip .qtip-titlebar{background-color:#87876A;color:#fff;border:0 dashed transparent}.qtip-cluetip .qtip-icon{border-color:#808064}.qtip-cluetip .qtip-titlebar .ui-state-hover{border-color:#696952;color:#696952}.qtip-tipsy{background:#000;background:rgba(0,0,0,.87);color:#fff;border:0 solid transparent;font-size:11px;font-family:'Lucida Grande',sans-serif;font-weight:700;line-height:16px;text-shadow:0 1px black}.qtip-tipsy .qtip-titlebar{padding:6px 35px 0 10;background-color:transparent}.qtip-tipsy .qtip-content{padding:6px 10}.qtip-tipsy .qtip-icon{border-color:#222;text-shadow:none}.qtip-tipsy .qtip-titlebar .ui-state-hover{border-color:#303030}.qtip-tipped{border:3px solid #959FA9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-color:#F9F9F9;color:#454545;font-weight:400;font-family:serif}.qtip-tipped .qtip-titlebar{border-bottom-width:0;color:#fff;background:#3A79B8;background-image:-webkit-gradient(linear,left top,left bottom,from(#3A79B8),to(#2E629D));background-image:-webkit-linear-gradient(top,#3A79B8,#2E629D);background-image:-moz-linear-gradient(top,#3A79B8,#2E629D);background-image:-ms-linear-gradient(top,#3A79B8,#2E629D);background-image:-o-linear-gradient(top,#3A79B8,#2E629D);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D);-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8, endColorstr=#2E629D)"}.qtip-tipped .qtip-icon{border:2px solid #285589;background:#285589}.qtip-tipped .qtip-icon .ui-icon{background-color:#FBFBFB;color:#555}.qtip-bootstrap{font-size:14px;line-height:20px;color:#333;padding:1px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.qtip-bootstrap .qtip-titlebar{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.qtip-bootstrap .qtip-titlebar .qtip-close{right:11px;top:45%;border-style:none}.qtip-bootstrap .qtip-content{padding:9px 14px}.qtip-bootstrap .qtip-icon{background:transparent}.qtip-bootstrap .qtip-icon .ui-icon{width:auto;height:auto;float:right;font-size:20px;font-weight:700;line-height:18px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.qtip-bootstrap .qtip-icon .ui-icon:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}.qtip:not(.ie9haxors) div.qtip-content,.qtip:not(.ie9haxors) div.qtip-titlebar{filter:none;-ms-filter:none}.qtip .qtip-tip{margin:0 auto;overflow:hidden;z-index:10}.qtip .qtip-tip,.qtip .qtip-tip .qtip-vml{position:absolute;color:#123456;background:transparent;border:0 dashed transparent}.qtip .qtip-tip canvas{top:0;left:0}.qtip .qtip-tip .qtip-vml{behavior:url(#default#VML);display:inline-block;visibility:visible}#qtip-overlay{position:fixed;left:-10000em;top:-10000em}#qtip-overlay.blurs{cursor:pointer}#qtip-overlay div{position:absolute;left:0;top:0;width:100%;height:100%;background-color:#000;opacity:.7;filter:alpha(opacity=70);-ms-filter:"alpha(Opacity=70)"}.qtipmodal-ie6fix{position:absolute!important}.qtip-jtools{padding-bottom: 5px;}.qtip-title{font-size:20px;}
2
+ .qtip-content {
3
+ font-weight: 300;
4
  }
css/new-customizer-admin.css CHANGED
@@ -1,241 +1,241 @@
1
- #wpadminbar, #edit-slug-box, #post-status-info, #screen-options-link-wrap, #leads-table-container, .misc-pub-section, #minor-publishing, .misc-pub-section, .misc-pub-section.curtime, #delete-action, #convert-header, #lp-tour, #view-post-btn, #launch-visual-editer, #adminmenuwrap, #lp_ab_display_stats_metabox, #lp-thumbnail-sidebar-preview, #landing_page_categorydiv, #postimagediv, #leads-table-container-inside, .updated.below-h2 a, .mceButton.mceButtonEnabled.mce_fullscreen, .mce_strikethrough, .mce_wp_more, #setting-error-tgmpa {
2
- display: none !important;
3
- }
4
- html.wp-toolbar {
5
- padding-top: 0px !important;
6
- }
7
- .auto-fold #adminmenuback, .auto-fold #adminmenuwrap, .auto-fold #adminmenu, .auto-fold #adminmenu li.menu-top {
8
- width: 0px !important;
9
- }
10
- .auto-fold #wpcontent, .auto-fold #wpfooter {
11
- margin-left: 10px !important;
12
- }
13
- #wpbody-content {
14
- padding-bottom: 90px !important;
15
- width: 100% !important;
16
- }
17
-
18
- .wp_themeSkin .mceButton {
19
- display: block;
20
- width: 20px !important;
21
- height: 20px !important;
22
- }
23
- .quicktags-toolbar input {
24
- min-width: 10px !important;
25
- padding: 2px 2px !important;
26
- }
27
- #post-body-content {
28
- width: 103% !important;
29
- margin-left: -10px !important; }
30
- #lp_2_form_content {
31
- margin-left: -10px !important;
32
- }
33
- .inbound-textarea-row .inbound-meta-box-option.inbound-textarea-option textarea {
34
- width: 90% !important;
35
- }
36
- .wp_themeSkin .mceButton .mceIcon {
37
- margin-top: 0px !important;
38
- margin-left: 0px !important;
39
- }
40
- #inbound-meta .inbound-meta-box-row.inbound-wysiwyg-row {
41
- width: 105%;
42
- margin-left: -6px;
43
- }
44
-
45
- @media screen and (max-width: 600px) {
46
- .version-3-8 #wpbody {
47
- padding-top: 5px !important;
48
- }
49
- }
50
- #submitdiv .handlediv , #submitdiv .hndle {
51
- display: none !important;
52
- }
53
- .wrap div.updated, .wrap div.error, .media-upload-form div.error {
54
- margin: 5px 0 0px !important;
55
- }
56
- .inbound-meta-box-option.inbound-dropdown-option {
57
- width: 95% !important;
58
- }
59
- #publishing-action {
60
- text-align: center !important;
61
- float: none !important;
62
- margin-bottom: 15px;
63
- line-height: 32px; }
64
- #minor-publishing-actions input, #major-publishing-actions input, #minor-publishing-actions .preview {
65
- text-align: center !important;
66
- width: 280px !important;
67
- margin: auto !important;
68
- height: 44px !important;
69
- font-size: 17px !important;
70
- }
71
- #major-publishing-actions {
72
- padding: 10px 10px 10px !important;}
73
- .select2-container {
74
- min-width: 100% !important;
75
- }
76
- .inbound-meta-box-option.inbound-media-option input[type=text] {
77
- width: 100%;
78
- }
79
- #submitdiv {
80
- position: fixed !important;
81
- bottom: 0px !important;
82
- z-index: 999999 !important;
83
- width: 100% !important;
84
- margin-left: -10px !important;
85
- padding-bottom: 10px !important;
86
- margin-bottom: 0px !important;
87
-
88
- }
89
- .version-3-8 #submitdiv {
90
- margin-left: -20px !important;
91
- }
92
- .jPicker .Grid {
93
- display: none;
94
- }
95
- .jPicker .Button {
96
- text-align: center;
97
- padding: 0 4px;
98
- width: 264px;
99
- position: absolute;
100
- border-bottom: none;
101
- left: 0px;
102
- bottom: 3px;
103
- }
104
- .jPicker .Button input {
105
- font-size: 18px !important;
106
- }
107
- .jPicker .Icon span.Color, .jPicker .Icon span.Alpha {
108
- width: 97% !important;
109
- }
110
- .jPicker .Title {
111
- width: 254px;
112
- }
113
- .jPicker hr {
114
- display: none !important;
115
- }
116
- .inbound-meta-box-option.inbound-datepicker-option span{
117
- display: block;
118
- }
119
- .inbound-meta-box-option.inbound-datepicker-option input {
120
- width: 70%;
121
- }
122
- #lp-notes-area input {
123
-
124
- padding-bottom: 0px;
125
- }
126
- table.jPicker {
127
- width: 430px !important;}
128
- @media only screen and (max-width: 600px) {
129
- .media-modal {
130
- width: 432px !important;
131
- position: fixed !important;
132
- height: 484px !important;
133
- }
134
- .media-modal-backdrop {
135
- width: 600px;
136
- position: fixed !important;
137
- }
138
- }
139
- @media screen and (max-width: 782px) {
140
- #wp-content-editor-tools {
141
- overflow: hidden;
142
- padding: 0px 15px 1px 0; }
143
- }
144
- ul#template-filter {
145
- clear: both !important;
146
- margin: 0px 0;
147
- padding: 0;
148
- padding-left: 0px;
149
- line-height: 28px;
150
- }
151
- #lp-cancel-selection {
152
- display: block;
153
- float: none;
154
- width: 70%;
155
- text-align: center;
156
- margin: auto;
157
- margin-bottom: 10px;
158
- margin-top: 10px;
159
- }
160
- #template-item {
161
- width: 200px;}
162
- ul#template-filter li {
163
- display: inline-block;
164
-
165
- padding-bottom: 0px;
166
- padding-top: 0px;
167
- margin: 0px;
168
- line-height: 20px;
169
- }
170
- .lp-selection-heading h1 {
171
- font-size: 18px;
172
- display: block;
173
- text-align: center;
174
- }
175
- .form-table .inbound-meta-box-label label{
176
- width: 100% !important;
177
- display: block !important;
178
- margin-bottom: 5px;
179
- font-size: 20px !important;
180
-
181
- }
182
- .form-table .inbound-wysiwyg-row .inbound-meta-box-label label{
183
- margin-left: -10px !important;
184
- }
185
- .inbound-textarea-option {
186
- width: 106% !important; }
187
- .inbound-wysiwyg-option {
188
- width: 103% !important;
189
- }
190
- .inbound-wysiwyg-option {
191
- margin-left: -10px !important;
192
- }
193
- .mceIframeContainer.mceFirst.mceLast iframe {
194
- width: 100% !important;
195
- }
196
- .mceIframeContainer.mceFirst.mceLast {
197
- margin-top: 30px;
198
- }
199
- .mceToolbar.mceLeft.mceFirst.mceLast div {
200
- background: #F5F5F5;
201
- }
202
- #lp_metabox_select_template {
203
- margin-left: -20px !important;
204
- width: 108%;
205
- }
206
- .wp-editor-container {
207
- border-right-color: transparent !important;
208
- }
209
-
210
- #inbound-shortcodes-preview-wrap {
211
- display: none !important;
212
- }
213
- .wp-editor-wrap {
214
-
215
- border-right: 1px solid #E6E6E6 !important;
216
- }
217
- #inbound-shortcodes-form-wrap {
218
- width: 96% !important;}
219
- #inbound-shortcodes-form-wrap tbody tr.form-row td.label {
220
- line-height: 29px !important;
221
- display: block !important;
222
- }
223
- #popup-controls {
224
- position: fixed;
225
- border-top: 1px solid transparent !important;
226
- bottom: 90px !important;
227
- width: 300px !important;
228
- left: 0% !important;
229
- background: transparent !important;}
230
- #inbound-shortcodes-form-table tbody tr.form-row {
231
- display: block;
232
- padding: 0px !important;
233
- border-bottom: none !important;}
234
- #inbound-shortcodes-form-wrap #inbound-shortcodes-form {
235
- padding-bottom: 300px !important;
236
- }
237
- #inbound-shortcodes-form-table input[type="text"], #inbound-shortcodes-form-table input[type="email"], #inbound-shortcodes-form-table input[type="url"], #inbound-shortcodes-form-table input[type="number"], #inbound-shortcodes-form-table input[type="password"], #inbound-shortcodes-form-table textarea {
238
- width: 100% !important;
239
- }
240
- #inbound_insert_shortcode_two, #shortcode_cancel, #inbound_save_form {
241
  margin-bottom: 10px !important; }
1
+ #wpadminbar, #edit-slug-box, #post-status-info, #screen-options-link-wrap, #leads-table-container, .misc-pub-section, #minor-publishing, .misc-pub-section, .misc-pub-section.curtime, #delete-action, #convert-header, #lp-tour, #view-post-btn, #launch-visual-editer, #adminmenuwrap, #lp_ab_display_stats_metabox, #lp-thumbnail-sidebar-preview, #landing_page_categorydiv, #postimagediv, #leads-table-container-inside, .updated.below-h2 a, .mceButton.mceButtonEnabled.mce_fullscreen, .mce_strikethrough, .mce_wp_more, #setting-error-tgmpa {
2
+ display: none !important;
3
+ }
4
+ html.wp-toolbar {
5
+ padding-top: 0px !important;
6
+ }
7
+ .auto-fold #adminmenuback, .auto-fold #adminmenuwrap, .auto-fold #adminmenu, .auto-fold #adminmenu li.menu-top {
8
+ width: 0px !important;
9
+ }
10
+ .auto-fold #wpcontent, .auto-fold #wpfooter {
11
+ margin-left: 10px !important;
12
+ }
13
+ #wpbody-content {
14
+ padding-bottom: 90px !important;
15
+ width: 100% !important;
16
+ }
17
+
18
+ .wp_themeSkin .mceButton {
19
+ display: block;
20
+ width: 20px !important;
21
+ height: 20px !important;
22
+ }
23
+ .quicktags-toolbar input {
24
+ min-width: 10px !important;
25
+ padding: 2px 2px !important;
26
+ }
27
+ #post-body-content {
28
+ width: 103% !important;
29
+ margin-left: -10px !important; }
30
+ #lp_2_form_content {
31
+ margin-left: -10px !important;
32
+ }
33
+ .inbound-textarea-row .inbound-meta-box-option.inbound-textarea-option textarea {
34
+ width: 90% !important;
35
+ }
36
+ .wp_themeSkin .mceButton .mceIcon {
37
+ margin-top: 0px !important;
38
+ margin-left: 0px !important;
39
+ }
40
+ #inbound-meta .inbound-meta-box-row.inbound-wysiwyg-row {
41
+ width: 105%;
42
+ margin-left: -6px;
43
+ }
44
+
45
+ @media screen and (max-width: 600px) {
46
+ .version-3-8 #wpbody {
47
+ padding-top: 5px !important;
48
+ }
49
+ }
50
+ #submitdiv .handlediv , #submitdiv .hndle {
51
+ display: none !important;
52
+ }
53
+ .wrap div.updated, .wrap div.error, .media-upload-form div.error {
54
+ margin: 5px 0 0px !important;
55
+ }
56
+ .inbound-meta-box-option.inbound-dropdown-option {
57
+ width: 95% !important;
58
+ }
59
+ #publishing-action {
60
+ text-align: center !important;
61
+ float: none !important;
62
+ margin-bottom: 15px;
63
+ line-height: 32px; }
64
+ #minor-publishing-actions input, #major-publishing-actions input, #minor-publishing-actions .preview {
65
+ text-align: center !important;
66
+ width: 280px !important;
67
+ margin: auto !important;
68
+ height: 44px !important;
69
+ font-size: 17px !important;
70
+ }
71
+ #major-publishing-actions {
72
+ padding: 10px 10px 10px !important;}
73
+ .select2-container {
74
+ min-width: 100% !important;
75
+ }
76
+ .inbound-meta-box-option.inbound-media-option input[type=text] {
77
+ width: 100%;
78
+ }
79
+ #submitdiv {
80
+ position: fixed !important;
81
+ bottom: 0px !important;
82
+ z-index: 999999 !important;
83
+ width: 100% !important;
84
+ margin-left: -10px !important;
85
+ padding-bottom: 10px !important;
86
+ margin-bottom: 0px !important;
87
+
88
+ }
89
+ .version-3-8 #submitdiv {
90
+ margin-left: -20px !important;
91
+ }
92
+ .jPicker .Grid {
93
+ display: none;
94
+ }
95
+ .jPicker .Button {
96
+ text-align: center;
97
+ padding: 0 4px;
98
+ width: 264px;
99
+ position: absolute;
100
+ border-bottom: none;
101
+ left: 0px;
102
+ bottom: 3px;
103
+ }
104
+ .jPicker .Button input {
105
+ font-size: 18px !important;
106
+ }
107
+ .jPicker .Icon span.Color, .jPicker .Icon span.Alpha {
108
+ width: 97% !important;
109
+ }
110
+ .jPicker .Title {
111
+ width: 254px;
112
+ }
113
+ .jPicker hr {
114
+ display: none !important;
115
+ }
116
+ .inbound-meta-box-option.inbound-datepicker-option span{
117
+ display: block;
118
+ }
119
+ .inbound-meta-box-option.inbound-datepicker-option input {
120
+ width: 70%;
121
+ }
122
+ #lp-notes-area input {
123
+
124
+ padding-bottom: 0px;
125
+ }
126
+ table.jPicker {
127
+ width: 430px !important;}
128
+ @media only screen and (max-width: 600px) {
129
+ .media-modal {
130
+ width: 432px !important;
131
+ position: fixed !important;
132
+ height: 484px !important;
133
+ }
134
+ .media-modal-backdrop {
135
+ width: 600px;
136
+ position: fixed !important;
137
+ }
138
+ }
139
+ @media screen and (max-width: 782px) {
140
+ #wp-content-editor-tools {
141
+ overflow: hidden;
142
+ padding: 0px 15px 1px 0; }
143
+ }
144
+ ul#template-filter {
145
+ clear: both !important;
146
+ margin: 0px 0;
147
+ padding: 0;
148
+ padding-left: 0px;
149
+ line-height: 28px;
150
+ }
151
+ #lp-cancel-selection {
152
+ display: block;
153
+ float: none;
154
+ width: 70%;
155
+ text-align: center;
156
+ margin: auto;
157
+ margin-bottom: 10px;
158
+ margin-top: 10px;
159
+ }
160
+ #template-item {
161
+ width: 200px;}
162
+ ul#template-filter li {
163
+ display: inline-block;
164
+
165
+ padding-bottom: 0px;
166
+ padding-top: 0px;
167
+ margin: 0px;
168
+ line-height: 20px;
169
+ }
170
+ .lp-selection-heading h1 {
171
+ font-size: 18px;
172
+ display: block;
173
+ text-align: center;
174
+ }
175
+ .form-table .inbound-meta-box-label label{
176
+ width: 100% !important;
177
+ display: block !important;
178
+ margin-bottom: 5px;
179
+ font-size: 20px !important;
180
+
181
+ }
182
+ .form-table .inbound-wysiwyg-row .inbound-meta-box-label label{
183
+ margin-left: -10px !important;
184
+ }
185
+ .inbound-textarea-option {
186
+ width: 106% !important; }
187
+ .inbound-wysiwyg-option {
188
+ width: 103% !important;
189
+ }
190
+ .inbound-wysiwyg-option {
191
+ margin-left: -10px !important;
192
+ }
193
+ .mceIframeContainer.mceFirst.mceLast iframe {
194
+ width: 100% !important;
195
+ }
196
+ .mceIframeContainer.mceFirst.mceLast {
197
+ margin-top: 30px;
198
+ }
199
+ .mceToolbar.mceLeft.mceFirst.mceLast div {
200
+ background: #F5F5F5;
201
+ }
202
+ #lp_metabox_select_template {
203
+ margin-left: -20px !important;
204
+ width: 108%;
205
+ }
206
+ .wp-editor-container {
207
+ border-right-color: transparent !important;
208
+ }
209
+
210
+ #inbound-shortcodes-preview-wrap {
211
+ display: none !important;
212
+ }
213
+ .wp-editor-wrap {
214
+
215
+ border-right: 1px solid #E6E6E6 !important;
216
+ }
217
+ #inbound-shortcodes-form-wrap {
218
+ width: 96% !important;}
219
+ #inbound-shortcodes-form-wrap tbody tr.form-row td.label {
220
+ line-height: 29px !important;
221
+ display: block !important;
222
+ }
223
+ #popup-controls {
224
+ position: fixed;
225
+ border-top: 1px solid transparent !important;
226
+ bottom: 90px !important;
227
+ width: 300px !important;
228
+ left: 0% !important;
229
+ background: transparent !important;}
230
+ #inbound-shortcodes-form-table tbody tr.form-row {
231
+ display: block;
232
+ padding: 0px !important;
233
+ border-bottom: none !important;}
234
+ #inbound-shortcodes-form-wrap #inbound-shortcodes-form {
235
+ padding-bottom: 300px !important;
236
+ }
237
+ #inbound-shortcodes-form-table input[type="text"], #inbound-shortcodes-form-table input[type="email"], #inbound-shortcodes-form-table input[type="url"], #inbound-shortcodes-form-table input[type="number"], #inbound-shortcodes-form-table input[type="password"], #inbound-shortcodes-form-table textarea {
238
+ width: 100% !important;
239
+ }
240
+ #inbound_insert_shortcode_two, #shortcode_cancel, #inbound_save_form {
241
  margin-bottom: 10px !important; }
images/cta-install.png CHANGED
File without changes
images/github-help.jpg CHANGED
File without changes
images/image.php CHANGED
@@ -1,59 +1,57 @@
1
- <?php
2
-
3
- // file: image.php
4
- // Dynamically Create a clear png for css background opacities
5
- header("Content-type: image/png");
6
-
7
- $hex_value = $_GET['hex'];
8
-
9
- if (isset($_GET['trans'])) {
10
- $trans_value = $_GET['trans'];
11
- }
12
- else {
13
- $trans_value = 50;
14
- }
15
-
16
- // Convert Hex to RGB Value
17
- function HexToRGB($hex) {
18
- $hex = preg_replace("/#/", "", $hex);
19
- $color = array();
20
-
21
- if(strlen($hex) == 3) {
22
- $color['r'] = hexdec(substr($hex, 0, 1) . $r);
23
- $color['g'] = hexdec(substr($hex, 1, 1) . $g);
24
- $color['b'] = hexdec(substr($hex, 2, 1) . $b);
25
- }
26
- else if(strlen($hex) == 6) {
27
- $color['r'] = hexdec(substr($hex, 0, 2));
28
- $color['g'] = hexdec(substr($hex, 2, 2));
29
- $color['b'] = hexdec(substr($hex, 4, 2));
30
- }
31
-
32
- return $color;
33
-
34
- }
35
-
36
- $RBG_array = HexToRGB($hex_value);
37
-
38
- $red = $RBG_array [r];
39
- $green = $RBG_array [g];
40
- $blue = $RBG_array [b];
41
-
42
- // Set the image
43
- $img = imagecreatetruecolor(10,10); // 10 x 10 px
44
- imagesavealpha($img, true);
45
-
46
- // Fill the image with transparent color
47
- $color = imagecolorallocatealpha($img,$red,$green,$blue,$trans_value);
48
- imagefill($img, 0, 0, $color);
49
-
50
- // Return the image
51
- imagepng($img);
52
-
53
- // Destroy image
54
- imagedestroy($img);
55
-
56
- // usage in html: <image src="path-to-file/image.php?hex=HEXCOLOR">
57
- // Make sure to add in the HEX GET Parameters with ?hex= and ?trans= for transparency
58
- // example: <image src="path-to-file/image.php?hex=ffffff"> will call white transparent png
59
  ?>
1
+ <?php
2
+ // file: image.php
3
+ // Dynamically Create a clear png for css background opacities
4
+ header("Content-type: image/png");
5
+
6
+ $hex_value = $_GET['hex'];
7
+
8
+ if (isset($_GET['trans'])) {
9
+ $trans_value = $_GET['trans'];
10
+ }
11
+ else {
12
+ $trans_value = 50;
13
+ }
14
+
15
+ // Convert Hex to RGB Value
16
+ function HexToRGB($hex) {
17
+ $hex = preg_replace("/#/", "", $hex);
18
+ $color = array();
19
+
20
+ if(strlen($hex) == 3) {
21
+ $color['r'] = hexdec(substr($hex, 0, 1) . $r);
22
+ $color['g'] = hexdec(substr($hex, 1, 1) . $g);
23
+ $color['b'] = hexdec(substr($hex, 2, 1) . $b);
24
+ }
25
+ else if(strlen($hex) == 6) {
26
+ $color['r'] = hexdec(substr($hex, 0, 2));
27
+ $color['g'] = hexdec(substr($hex, 2, 2));
28
+ $color['b'] = hexdec(substr($hex, 4, 2));
29
+ }
30
+
31
+ return $color;
32
+
33
+ }
34
+
35
+ $RBG_array = HexToRGB($hex_value);
36
+ $red = $RBG_array [r];
37
+ $green = $RBG_array [g];
38
+ $blue = $RBG_array [b];
39
+
40
+ // Set the image
41
+ $img = imagecreatetruecolor(10,10); // 10 x 10 px
42
+ imagesavealpha($img, true);
43
+
44
+ // Fill the image with transparent color
45
+ $color = imagecolorallocatealpha($img,$red,$green,$blue,$trans_value);
46
+ imagefill($img, 0, 0, $color);
47
+
48
+ // Return the image
49
+ imagepng($img);
50
+
51
+ // Destroy image
52
+ imagedestroy($img);
53
+
54
+ // usage in html: <image src="path-to-file/image.php?hex=HEXCOLOR">
55
+ // Make sure to add in the HEX GET Parameters with ?hex= and ?trans= for transparency
56
+ // example: <image src="path-to-file/image.php?hex=ffffff"> will call white transparent png
 
 
57
  ?>
images/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
images/leads-install.png CHANGED
File without changes
index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
js/admin/admin.global-settings.js CHANGED
@@ -1,44 +1,44 @@
1
-
2
- function getUrlVars() {
3
- var vars = [], hash;
4
- var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
5
- for(var i = 0; i < hashes.length; i++)
6
- {
7
- hash = hashes[i].split('=');
8
- vars.push(hash[0]);
9
- vars[hash[0]] = hash[1];
10
- }
11
- return vars;
12
- };
13
-
14
- function getUrlVar(name){
15
- return getUrlVars()[name];
16
- };
17
-
18
- jQuery(document).ready(function($) {
19
-
20
- // Getting URL var by its nam
21
- var byName = getUrlVar('tab');
22
-
23
- // Set setting Tab
24
- setTimeout(function() {
25
- jQuery("#" + byName).click();
26
- }, 300);
27
- /* Update Setting URL */
28
- jQuery("body").on('click', '.nav-tab', function () {
29
- var this_id = jQuery(this).attr('id');
30
- if (history.pushState) {
31
- var newurl = window.location.href.replace(/tab=([^"]*)/g, 'tab=' + this_id);
32
- var current_tab = newurl.match(/tab=([^"]*)/g);
33
- if (typeof (current_tab) != "undefined" && current_tab != null && current_tab != "") {
34
- var current_tab = current_tab[0].replace("tab=","");
35
- window.history.pushState({path:newurl},'',newurl);
36
- } else {
37
- var newurl = window.location.href + '&tab=' + this_id;
38
- window.history.pushState({path:newurl},'',newurl);
39
- }
40
-
41
- }
42
- });
43
-
44
  });
1
+
2
+ function getUrlVars() {
3
+ var vars = [], hash;
4
+ var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
5
+ for(var i = 0; i < hashes.length; i++)
6
+ {
7
+ hash = hashes[i].split('=');
8
+ vars.push(hash[0]);
9
+ vars[hash[0]] = hash[1];
10
+ }
11
+ return vars;
12
+ };
13
+
14
+ function getUrlVar(name){
15
+ return getUrlVars()[name];
16
+ };
17
+
18
+ jQuery(document).ready(function($) {
19
+
20
+ // Getting URL var by its nam
21
+ var byName = getUrlVar('tab');
22
+
23
+ // Set setting Tab
24
+ setTimeout(function() {
25
+ jQuery("#" + byName).click();
26
+ }, 300);
27
+ /* Update Setting URL */
28
+ jQuery("body").on('click', '.nav-tab', function () {
29
+ var this_id = jQuery(this).attr('id');
30
+ if (history.pushState) {
31
+ var newurl = window.location.href.replace(/tab=([^"]*)/g, 'tab=' + this_id);
32
+ var current_tab = newurl.match(/tab=([^"]*)/g);
33
+ if (typeof (current_tab) != "undefined" && current_tab != null && current_tab != "") {
34
+ var current_tab = current_tab[0].replace("tab=","");
35
+ window.history.pushState({path:newurl},'',newurl);
36
+ } else {
37
+ var newurl = window.location.href + '&tab=' + this_id;
38
+ window.history.pushState({path:newurl},'',newurl);
39
+ }
40
+
41
+ }
42
+ });
43
+
44
  });
js/admin/admin.install-plugins.js CHANGED
@@ -1,30 +1,30 @@
1
- jQuery(document).ready(function($) {
2
- /* Loads on /themes.php?page=install-inbound-plugins */
3
- var install_status = jQuery("#the-list td.status.column-status").text();
4
- var click_apply = "<h2 class='click-to-activate'><span>←</span>Click Apply to Install</h2>";
5
- var activate_apply = "<h2 class='click-to-activate-bulk'><span>←</span>Click Apply to Bulk Activate Plugins</h2>";
6
- jQuery(".alignleft.actions.bulkactions").after(click_apply);
7
- jQuery(".alignleft.actions.bulkactions").after(activate_apply);
8
- console.log(install_status);
9
- jQuery('#the-list td.status.column-status').each(function(){
10
- var installed_on = $(this).text();
11
- if (installed_on === "Not Installed") {
12
- $(this).parent().find("input[type=checkbox]").attr("checked", "on");
13
- if ( $(".click-to-activate-bulk").is(":hidden") ) {
14
- jQuery('.click-to-activate').show();
15
- jQuery(".alignleft.actions.bulkactions select").val('tgmpa-bulk-install');
16
- }
17
-
18
- }
19
- if (installed_on === "Installed But Not Activated") {
20
- $(this).parent().find("input[type=checkbox]").attr("checked", "on");
21
- if ( $(".click-to-activate").is(":hidden") ) {
22
- jQuery('.click-to-activate-bulk').show();
23
- jQuery(".alignleft.actions.bulkactions select").val('tgmpa-bulk-activate');
24
- }
25
-
26
- }
27
- });
28
- jQuery("#cb-select-all-1, #cb-select-all-2").attr("checked", "on");
29
-
30
- });
1
+ jQuery(document).ready(function($) {
2
+ /* Loads on /themes.php?page=install-inbound-plugins */
3
+ var install_status = jQuery("#the-list td.status.column-status").text();
4
+ var click_apply = "<h2 class='click-to-activate'><span>←</span>Click Apply to Install</h2>";
5
+ var activate_apply = "<h2 class='click-to-activate-bulk'><span>←</span>Click Apply to Bulk Activate Plugins</h2>";
6
+ jQuery(".alignleft.actions.bulkactions").after(click_apply);
7
+ jQuery(".alignleft.actions.bulkactions").after(activate_apply);
8
+ console.log(install_status);
9
+ jQuery('#the-list td.status.column-status').each(function(){
10
+ var installed_on = $(this).text();
11
+ if (installed_on === "Not Installed") {
12
+ $(this).parent().find("input[type=checkbox]").attr("checked", "on");
13
+ if ( $(".click-to-activate-bulk").is(":hidden") ) {
14
+ jQuery('.click-to-activate').show();
15
+ jQuery(".alignleft.actions.bulkactions select").val('tgmpa-bulk-install');
16
+ }
17
+
18
+ }
19
+ if (installed_on === "Installed But Not Activated") {
20
+ $(this).parent().find("input[type=checkbox]").attr("checked", "on");
21
+ if ( $(".click-to-activate").is(":hidden") ) {
22
+ jQuery('.click-to-activate-bulk').show();
23
+ jQuery(".alignleft.actions.bulkactions select").val('tgmpa-bulk-activate');
24
+ }
25
+
26
+ }
27
+ });
28
+ jQuery("#cb-select-all-1, #cb-select-all-2").attr("checked", "on");
29
+
30
+ });
js/admin/admin.landing-page-list.js CHANGED
@@ -1,160 +1,160 @@
1
- jQuery(document).ready(function($) {
2
- // Code for landing page list view
3
- var cats = jQuery("#landing_page_category option").length;
4
- if ( cats === 0 ){
5
- jQuery("#landing_page_category").hide();
6
- }
7
-
8
- jQuery('.lp-letter').each(function(){
9
- var draft = jQuery(this).text();
10
- if ( draft === "" ){
11
- jQuery(this).parent().parent().hide();
12
- }
13
- });
14
-
15
- jQuery(".lp-impress-num").each(function(){
16
- var empty = jQuery(this).text();
17
- if ( empty === "" || empty === "0" ){
18
- jQuery(this).parent().parent().find(".lp-letter").css("color", "#ccc");
19
- jQuery(this).parent().html("<span class='lp-no-stats'>no stats yet</span>");
20
- }
21
- });
22
- /* List tour */
23
- var tourbutton = '<a class="" id="lp-tour" style="font-size:13px;">Need help? Take the tour</a>';
24
- jQuery(tourbutton).appendTo("h2:eq(0)");
25
- jQuery("body").on('click', '#lp-tour', function () {
26
- var tour = jQuery("#lp-tour-style").length;
27
- if ( tour === 0 ) {
28
- jQuery('head').append("<link rel='stylesheet' id='lp-tour-style' href='/wp-content/plugins/landing-pages/css/admin-tour.css' type='text/css' /><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/tour/tour.post-list.js'></script><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/intro.js'></script>");
29
- }
30
- setTimeout(function() {
31
- introJs().start(); // start tour
32
- }, 300);
33
-
34
- });
35
- /*jQuery(".lp-varation-stat-ul").each(function(){
36
- var length = jQuery(this).find("li").length;
37
- if ( length < 3 ){
38
- jQuery(this).find("li").first().css("padding-top", "18px");
39
- }
40
- });
41
- */
42
- jQuery("body").on('mouseenter', 'tr.type-landing-page', function () {
43
- jQuery(this).find(".no-stats-yet").show();
44
- });
45
- jQuery("body").on('mouseleave', 'tr.type-landing-page', function () {
46
- jQuery(this).find(".no-stats-yet").hide();
47
- });
48
- jQuery(".variation-winner-is").each(function(){
49
- var target = jQuery(this).text();
50
- jQuery("." + target).addClass("winner-lp").attr("data-lp", "Current Winner");
51
- });
52
-
53
- var hidestats = "<span id='hide-stats'>(Hide Stats)</span><span class='show-stats show-stats-top'>Show Stats</span>";
54
- jQuery("#stats").append(hidestats);
55
-
56
- jQuery("body").on('click', '#hide-stats', function () {
57
- jQuery(".lp-varation-stat-ul").each(function(){
58
- jQuery(this).hide();
59
- });
60
- jQuery(".show-stats").show();
61
- jQuery("#hide-stats").hide();
62
- });
63
-
64
- jQuery("body").on('click', '.show-stats-top', function () {
65
- jQuery(".lp-varation-stat-ul").each(function(){
66
- jQuery(this).show();
67
- });
68
- jQuery(".show-stats").hide();
69
- jQuery("#hide-stats").show();
70
- });
71
-
72
- jQuery("body").on('click', '.show-stats', function () {
73
- jQuery(this).hide();
74
- jQuery(this).parent().find(".lp-varation-stat-ul").show();
75
- });
76
-
77
- jQuery('.lp-letter, .cr-number, .qtip').on('mouseenter', function(event) {
78
- // Bind the qTip within the event handler
79
- var text_in_tip = jQuery(this).attr("data-notes");
80
- var letter = jQuery(this).attr("data-letter");
81
- var status = "<span class='lp-paused'>" + jQuery(this).parent().attr("rel") + "</span>";
82
- var winner = "<span class='lp-win'>" + jQuery(this).parent().attr("data-lp") + "</span>";
83
- jQuery(this).qtip({
84
- overwrite: false, // Make sure the tooltip won't be overridden once created
85
- content: {
86
- text: text_in_tip,
87
- title: {
88
- text: 'Variation ' + letter + "<span class='lp-extra'>" + status + winner + "</span>" + "<span class='lp-pop-close'>close</span>"
89
- }
90
- },
91
- position: {
92
- my: 'bottom center', // Use the corner...
93
- at: 'top center', // ...and opposite corner
94
- viewport: jQuery(window)
95
- },
96
- style: {
97
- classes: 'qtip-shadow qtip-jtools',
98
- },
99
- show: {
100
- event: event.type, // Use the same show event as the one that triggered the event handler
101
- ready: true, // Show the tooltip as soon as it's bound, vital so it shows up the first time you hover!
102
- solo: true
103
- },
104
- hide: 'unfocus'
105
- //hide: { when: { event: 'inactive' }, delay: 1200 }
106
- }, event); // Pass through our original event to qTip
107
- })
108
-
109
- jQuery('.lp-letter').on('mouseleave', function(event) {
110
-
111
-
112
- });
113
-
114
- jQuery("body").on("click", ".lp-pop-close", function(event) {
115
- jQuery(this).parent().parent().parent().hide();
116
- });
117
-
118
- jQuery("body").on("click", ".lp-pop-preview a", function(event) {
119
- jQuery(this).parent().parent().parent().parent().hide();
120
- });
121
-
122
- // Fix Thickbox width/hieght
123
- jQuery(function($) {
124
- tb_position = function() {
125
- var tbWindow = $('#TB_window');
126
- var width = $(window).width();
127
- var H = $(window).height();
128
- var W = ( 1720 < width ) ? 1720 : width;
129
-
130
- if ( tbWindow.size() ) {
131
- tbWindow.width( W - 50 ).height( H - 45 );
132
- $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
133
- tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
134
- if ( typeof document.body.style.maxWidth != 'undefined' )
135
- tbWindow.css({'top':'40px','margin-top':'0'});
136
- //$('#TB_title').css({'background-color':'#fff','color':'#cfcfcf'});
137
- };
138
-
139
- return $('a.thickbox').each( function() {
140
- var href = $(this).attr('href');
141
- if ( ! href ) return;
142
- href = href.replace(/&width=[0-9]+/g, '');
143
- href = href.replace(/&height=[0-9]+/g, '');
144
- $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
145
- });
146
-
147
- };
148
-
149
- jQuery('a.thickbox').click(function(){
150
- if ( typeof tinyMCE != 'undefined' && tinyMCE.activeEditor ) {
151
- tinyMCE.get('content').focus();
152
- tinyMCE.activeEditor.windowManager.bookmark = tinyMCE.activeEditor.selection.getBookmark('simple');
153
- }
154
-
155
- });
156
-
157
- $(window).resize( function() { tb_position() } );
158
- });
159
-
160
  });
1
+ jQuery(document).ready(function($) {
2
+ // Code for landing page list view
3
+ var cats = jQuery("#landing_page_category option").length;
4
+ if ( cats === 0 ){
5
+ jQuery("#landing_page_category").hide();
6
+ }
7
+
8
+ jQuery('.lp-letter').each(function(){
9
+ var draft = jQuery(this).text();
10
+ if ( draft === "" ){
11
+ jQuery(this).parent().parent().hide();
12
+ }
13
+ });
14
+
15
+ jQuery(".lp-impress-num").each(function(){
16
+ var empty = jQuery(this).text();
17
+ if ( empty === "" || empty === "0" ){
18
+ jQuery(this).parent().parent().find(".lp-letter").css("color", "#ccc");
19
+ jQuery(this).parent().html("<span class='lp-no-stats'>no stats yet</span>");
20
+ }
21
+ });
22
+ /* List tour */
23
+ var tourbutton = '<a class="" id="lp-tour" style="font-size:13px;">Need help? Take the tour</a>';
24
+ jQuery(tourbutton).appendTo("h2:eq(0)");
25
+ jQuery("body").on('click', '#lp-tour', function () {
26
+ var tour = jQuery("#lp-tour-style").length;
27
+ if ( tour === 0 ) {
28
+ jQuery('head').append("<link rel='stylesheet' id='lp-tour-style' href='/wp-content/plugins/landing-pages/css/admin-tour.css' type='text/css' /><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/tour/tour.post-list.js'></script><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/intro.js'></script>");
29
+ }
30
+ setTimeout(function() {
31
+ introJs().start(); // start tour
32
+ }, 300);
33
+
34
+ });
35
+ /*jQuery(".lp-varation-stat-ul").each(function(){
36
+ var length = jQuery(this).find("li").length;
37
+ if ( length < 3 ){
38
+ jQuery(this).find("li").first().css("padding-top", "18px");
39
+ }
40
+ });
41
+ */
42
+ jQuery("body").on('mouseenter', 'tr.type-landing-page', function () {
43
+ jQuery(this).find(".no-stats-yet").show();
44
+ });
45
+ jQuery("body").on('mouseleave', 'tr.type-landing-page', function () {
46
+ jQuery(this).find(".no-stats-yet").hide();
47
+ });
48
+ jQuery(".variation-winner-is").each(function(){
49
+ var target = jQuery(this).text();
50
+ jQuery("." + target).addClass("winner-lp").attr("data-lp", "Current Winner");
51
+ });
52
+
53
+ var hidestats = "<span id='hide-stats'>(Hide Stats)</span><span class='show-stats show-stats-top'>Show Stats</span>";
54
+ jQuery("#stats").append(hidestats);
55
+
56
+ jQuery("body").on('click', '#hide-stats', function () {
57
+ jQuery(".lp-varation-stat-ul").each(function(){
58
+ jQuery(this).hide();
59
+ });
60
+ jQuery(".show-stats").show();
61
+ jQuery("#hide-stats").hide();
62
+ });
63
+
64
+ jQuery("body").on('click', '.show-stats-top', function () {
65
+ jQuery(".lp-varation-stat-ul").each(function(){
66
+ jQuery(this).show();
67
+ });
68
+ jQuery(".show-stats").hide();
69
+ jQuery("#hide-stats").show();
70
+ });
71
+
72
+ jQuery("body").on('click', '.show-stats', function () {
73
+ jQuery(this).hide();
74
+ jQuery(this).parent().find(".lp-varation-stat-ul").show();
75
+ });
76
+
77
+ jQuery('.lp-letter, .cr-number, .qtip').on('mouseenter', function(event) {
78
+ // Bind the qTip within the event handler
79
+ var text_in_tip = jQuery(this).attr("data-notes");
80
+ var letter = jQuery(this).attr("data-letter");
81
+ var status = "<span class='lp-paused'>" + jQuery(this).parent().attr("rel") + "</span>";
82
+ var winner = "<span class='lp-win'>" + jQuery(this).parent().attr("data-lp") + "</span>";
83
+ jQuery(this).qtip({
84
+ overwrite: false, // Make sure the tooltip won't be overridden once created
85
+ content: {
86
+ text: text_in_tip,
87
+ title: {
88
+ text: 'Variation ' + letter + "<span class='lp-extra'>" + status + winner + "</span>" + "<span class='lp-pop-close'>close</span>"
89
+ }
90
+ },
91
+ position: {
92
+ my: 'bottom center', // Use the corner...
93
+ at: 'top center', // ...and opposite corner
94
+ viewport: jQuery(window)
95
+ },
96
+ style: {
97
+ classes: 'qtip-shadow qtip-jtools',
98
+ },
99
+ show: {
100
+ event: event.type, // Use the same show event as the one that triggered the event handler
101
+ ready: true, // Show the tooltip as soon as it's bound, vital so it shows up the first time you hover!
102
+ solo: true
103
+ },
104
+ hide: 'unfocus'
105
+ //hide: { when: { event: 'inactive' }, delay: 1200 }
106
+ }, event); // Pass through our original event to qTip
107
+ })
108
+
109
+ jQuery('.lp-letter').on('mouseleave', function(event) {
110
+
111
+
112
+ });
113
+
114
+ jQuery("body").on("click", ".lp-pop-close", function(event) {
115
+ jQuery(this).parent().parent().parent().hide();
116
+ });
117
+
118
+ jQuery("body").on("click", ".lp-pop-preview a", function(event) {
119
+ jQuery(this).parent().parent().parent().parent().hide();
120
+ });
121
+
122
+ // Fix Thickbox width/hieght
123
+ jQuery(function($) {
124
+ tb_position = function() {
125
+ var tbWindow = $('#TB_window');
126
+ var width = $(window).width();
127
+ var H = $(window).height();
128
+ var W = ( 1720 < width ) ? 1720 : width;
129
+
130
+ if ( tbWindow.size() ) {
131
+ tbWindow.width( W - 50 ).height( H - 45 );
132
+ $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
133
+ tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
134
+ if ( typeof document.body.style.maxWidth != 'undefined' )
135
+ tbWindow.css({'top':'40px','margin-top':'0'});
136
+ //$('#TB_title').css({'background-color':'#fff','color':'#cfcfcf'});
137
+ };
138
+
139
+ return $('a.thickbox').each( function() {
140
+ var href = $(this).attr('href');
141
+ if ( ! href ) return;
142
+ href = href.replace(/&width=[0-9]+/g, '');
143
+ href = href.replace(/&height=[0-9]+/g, '');
144
+ $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
145
+ });
146
+
147
+ };
148
+
149
+ jQuery('a.thickbox').click(function(){
150
+ if ( typeof tinyMCE != 'undefined' && tinyMCE.activeEditor ) {
151
+ tinyMCE.get('content').focus();
152
+ tinyMCE.activeEditor.windowManager.bookmark = tinyMCE.activeEditor.selection.getBookmark('simple');
153
+ }
154
+
155
+ });
156
+
157
+ $(window).resize( function() { tb_position() } );
158
+ });
159
+
160
  });
js/admin/admin.post-edit-ab-testing.js CHANGED
@@ -1,72 +1,72 @@
1
- jQuery(document).ready(function ($) {
2
- var variations = new Array();
3
- var has_variations = 0;
4
- if (variation.variations)
5
- {
6
- variations = variation.variations.split(",");
7
- }
8
-
9
-
10
- var hidden_html = '<input type="hidden" id="better-ab-testing-variation" name="lp-variation-id" value="'+ variation.vid +'">';
11
- jQuery('.wrap form').prepend(hidden_html);
12
-
13
- var replace_slash = '\\';
14
-
15
- //variation.content_area = variation.content_area.replace(/\n/g, replace_slash);
16
- //variation.content_area = variation.content_area.replace(/\r\n/g, "<br/>").replace(/\r/g, "<br/>").replace(/\n/g, "<br/>");
17
-
18
- jQuery("#wp-content-editor-container textarea").val(variation.content_area);
19
- jQuery("#content_ifr").contents().find("body").html(variation.content_area);
20
-
21
-
22
- var html;
23
- if (variation.vid>0&&variation.new_variation!=1)
24
- {
25
- html = '<a class="add-new-h2" href="?post='+variation.pid+'&action=edit&lp-variation-id='+variation.vid+'&ab-action=delete-variation">Delete This Variation</a>';
26
- jQuery('.wrap h2:first').append(html);
27
- }
28
-
29
- if (variation.vid>0)
30
- {
31
- jQuery('#delete-action').remove();
32
- }
33
-
34
- //alter preview and customizer buttons based on open variation
35
- var preview_href = jQuery('#post-preview').attr('href');
36
- jQuery('#post-preview').attr('href',preview_href+'?lp-variation-id='+variation.vid);
37
- //jQuery('#view-post-btn a:first').attr('href',preview_href+'?lp-variation-id='+variation.vid);
38
- //jQuery('.new-save-lp-frontend').attr('href',preview_href+'?template-customize=on&lp-variation-id='+variation.vid);
39
-
40
- //setup timer and and navigation change events
41
- var input_change = jQuery("#switch-lp").text();
42
- jQuery('.wrap').on('keyup change', jQuery('form').find('input[type=text],textarea,select'), function() {
43
- jQuery("#switch-lp").text("1");
44
- console.log("change");
45
- });
46
-
47
- /*setTimeout(function () {
48
- input_change = 1;
49
- }, 15000);
50
- */
51
- jQuery('.wrap').on('click', '.nav-tab-wrapper a', function(e) {
52
- var this_id = this.id.replace('tabs-','');
53
- if (input_change==1)
54
- {
55
- var answer = confirm('Do you want to change variations without saving the changes made here?');
56
- if (answer){
57
- // do the default action
58
- } else {
59
- e.preventDefault();
60
- }
61
- }
62
-
63
- jQuery('.lp-tab-display').css('display','none');
64
- jQuery('#'+this_id).css('display','block');
65
- jQuery('.lp-nav-tab').removeClass('nav-tab-special-active');
66
- jQuery('.lp-nav-tab').addClass('nav-tab-special-inactive');
67
- jQuery('#tabs-'+this_id).addClass('nav-tab-special-active');
68
- jQuery('#id-open-tab').val(this_id);
69
-
70
- });
71
-
72
  });
1
+ jQuery(document).ready(function ($) {
2
+ var variations = new Array();
3
+ var has_variations = 0;
4
+ if (variation.variations)
5
+ {
6
+ variations = variation.variations.split(",");
7
+ }
8
+
9
+
10
+ var hidden_html = '<input type="hidden" id="better-ab-testing-variation" name="lp-variation-id" value="'+ variation.vid +'">';
11
+ jQuery('.wrap form').prepend(hidden_html);
12
+
13
+ var replace_slash = '\\';
14
+
15
+ //variation.content_area = variation.content_area.replace(/\n/g, replace_slash);
16
+ //variation.content_area = variation.content_area.replace(/\r\n/g, "<br/>").replace(/\r/g, "<br/>").replace(/\n/g, "<br/>");
17
+
18
+ jQuery("#wp-content-editor-container textarea").val(variation.content_area);
19
+ jQuery("#content_ifr").contents().find("body").html(variation.content_area);
20
+
21
+
22
+ var html;
23
+ if (variation.vid>0&&variation.new_variation!=1)
24
+ {
25
+ html = '<a class="add-new-h2" href="?post='+variation.pid+'&action=edit&lp-variation-id='+variation.vid+'&ab-action=delete-variation">Delete This Variation</a>';
26
+ jQuery('.wrap h2:first').append(html);
27
+ }
28
+
29
+ if (variation.vid>0)
30
+ {
31
+ jQuery('#delete-action').remove();
32
+ }
33
+
34
+ //alter preview and customizer buttons based on open variation
35
+ var preview_href = jQuery('#post-preview').attr('href');
36
+ jQuery('#post-preview').attr('href',preview_href+'?lp-variation-id='+variation.vid);
37
+ //jQuery('#view-post-btn a:first').attr('href',preview_href+'?lp-variation-id='+variation.vid);
38
+ //jQuery('.new-save-lp-frontend').attr('href',preview_href+'?template-customize=on&lp-variation-id='+variation.vid);
39
+
40
+ //setup timer and and navigation change events
41
+ var input_change = jQuery("#switch-lp").text();
42
+ jQuery('.wrap').on('keyup change', jQuery('form').find('input[type=text],textarea,select'), function() {
43
+ jQuery("#switch-lp").text("1");
44
+ console.log("change");
45
+ });
46
+
47
+ /*setTimeout(function () {
48
+ input_change = 1;
49
+ }, 15000);
50
+ */
51
+ jQuery('.wrap').on('click', '.nav-tab-wrapper a', function(e) {
52
+ var this_id = this.id.replace('tabs-','');
53
+ if (input_change==1)
54
+ {
55
+ var answer = confirm('Do you want to change variations without saving the changes made here?');
56
+ if (answer){
57
+ // do the default action
58
+ } else {
59
+ e.preventDefault();
60
+ }
61
+ }
62
+
63
+ jQuery('.lp-tab-display').css('display','none');
64
+ jQuery('#'+this_id).css('display','block');
65
+ jQuery('.lp-nav-tab').removeClass('nav-tab-special-active');
66
+ jQuery('.lp-nav-tab').addClass('nav-tab-special-inactive');
67
+ jQuery('#tabs-'+this_id).addClass('nav-tab-special-active');
68
+ jQuery('#id-open-tab').val(this_id);
69
+
70
+ });
71
+
72
  });
js/admin/admin.post-edit.js CHANGED
@@ -1,613 +1,613 @@
1
- jQuery(document).ready(function($) {
2
-
3
- var cookies = (typeof (jQuery.cookie) != "undefined" ? true : false); // Check for JQuery Cookie
4
- function cookie_notice() {
5
- alert('Oh no! jQuery Cookie not loaded. Your Server Might be Blocking this. Some functionality may be impaired');
6
- }
7
-
8
-
9
- // Filter Styling
10
- jQuery('#template-filter li').first().addClass('button-primary');
11
- // filter items when filter link is clicked
12
- jQuery('#template-filter a').click(function(){
13
- var selector = jQuery(this).attr('data-filter');
14
- jQuery("ul#template-filter li").removeClass('button-primary');
15
- jQuery(this).parent().addClass('button-primary');
16
- $(".template-item-boxes").fadeOut(500);
17
- setTimeout(function() {
18
- $(selector).fadeIn(500);
19
- }, 500);
20
-
21
- return false;
22
- });
23
-
24
- /* Ajax loading tabs
25
- jQuery.koolSwap({
26
- swapBox : '#poststuff',
27
- outDuration : 550,
28
- inDuration : 600,
29
- });
30
- */
31
-
32
- jQuery("body").on('click', '#content-tmce, .wp-switch-editor.switch-tmce', function () {
33
- if(cookies) {
34
- $.cookie("lp-edit-view-choice", "editor", { path: '/', expires: 7 });
35
- } else {
36
- cookie_notice();
37
- }
38
- });
39
-
40
- jQuery("body").on('click', '#content-html, .wp-switch-editor.switch-html', function () {
41
- if(cookies) {
42
- $.cookie("lp-edit-view-choice", "html", { path: '/', expires: 7 });
43
- } else {
44
- cookie_notice();
45
- }
46
- });
47
-
48
- if(cookies) {
49
- var which_editor = $.cookie("lp-edit-view-choice");
50
- } else {
51
- var which_editor = 'editor';
52
- cookie_notice();
53
- }
54
- if(which_editor === null){
55
- setTimeout(function() {
56
- //jQuery("#content-tmce").click();
57
- //jQuery(".wp-switch-editor.switch-tmce").click();
58
- }, 1000);
59
-
60
- }
61
- /*
62
-
63
- var chtml= jQuery('#content-html');
64
- var ctmce= jQuery('#content-tmce');
65
- var c= jQuery('#content'); // textarea
66
- var vismode= c.css('display')=='none';
67
- switchEditors.switchto(chtml[0]); // switch to html
68
- switchEditors.switchto(ctmce[0]); // switch to tinymce
69
-
70
- */
71
- if(which_editor === 'editor'){
72
- setTimeout(function() {
73
-
74
- var ctmce= jQuery('#content-tmce');
75
- switchEditors.switchto(ctmce[0]); // switch to tinymce
76
-
77
- var conversion_area = jQuery("#landing-page-myeditor-tmce");
78
- switchEditors.switchto(conversion_area[0]); // switch to tinymce
79
- //jQuery("#content-tmce").click();
80
- //jQuery(".wp-switch-editor.switch-tmce").click();
81
- jQuery('.inbound-wysiwyg-option textarea').each(function(){
82
- var chtml= "#" + jQuery(this).attr('id') + '-html';
83
- var ctmce= "#" + jQuery(this).attr('id') + '-tmce';
84
- var html_box = jQuery(chtml);
85
- var tinymce_box = jQuery(ctmce);
86
- switchEditors.switchto(tinymce_box[0]); // switch to tinymce
87
- });
88
- }, 1000);
89
- }
90
-
91
- /* Tour Start JS */
92
- var tourbutton = '<a class="" id="lp-tour" style="font-size:13px;">Need help? Take the tour</a>';
93
- jQuery(tourbutton).appendTo("h2:eq(0)");
94
- jQuery("body").on('click', '#lp-tour', function () {
95
- var tour = jQuery("#lp-tour-style").length;
96
- if ( tour === 0 ) {
97
- jQuery('head').append("<link rel='stylesheet' id='lp-tour-style' href='/wp-content/plugins/landing-pages/css/admin-tour.css' type='text/css' /><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/tour/tour.post-edit.js'></script><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/intro.js'></script>");
98
- }
99
- setTimeout(function() {
100
- introJs().start(); // start tour
101
- }, 300);
102
-
103
- });
104
-
105
- var current_a_tab = jQuery("#tabs-0").hasClass('nav-tab-special-active');
106
- if (current_a_tab === true){
107
- var url_norm = jQuery("#view-post-btn a").attr('href');
108
- var new_url = url_norm + "?lp-variation-id=0";
109
- jQuery("#view-post-btn a").attr('href', new_url);
110
- }
111
-
112
- // Fix inactivate theme display
113
- jQuery("#template-box a").live('click', function () {
114
-
115
- setTimeout(function() {
116
- jQuery('#TB_window iframe').contents().find("#customize-controls").hide();
117
- jQuery('#TB_window iframe').contents().find(".wp-full-overlay.expanded").css("margin-left", "0px");
118
- }, 600);
119
-
120
- });
121
-
122
- // Fix Split testing iframe size
123
- jQuery("#lp-metabox-splittesting a.thickbox, #leads-table-container-inside .column-details a").live('click', function () {
124
- jQuery('#TB_iframeContent, #TB_window').hide();
125
- setTimeout(function() {
126
-
127
- jQuery('#TB_iframeContent, #TB_window').width( 640 ).height( 800 ).css("margin-left", "0px").css("left", "35%");
128
- jQuery('#TB_iframeContent, #TB_window').show();
129
- }, 600);
130
- });
131
-
132
- // Load meta box in correct position on page load
133
- var current_template = jQuery("input#lp_select_template ").val();
134
- var current_template_meta = "#lp_" + current_template + "_custom_meta_box";
135
- jQuery(current_template_meta).removeClass("postbox").appendTo("#template-display-options").addClass("Old-Template");
136
- var current_template_h3 = "#lp_" + current_template + "_custom_meta_box h3";
137
- // jQuery(current_template_h3).css("background","#f8f8f8");
138
- jQuery(current_template_meta +' .handlediv').hide();
139
- jQuery(current_template_meta +' .hndle').css('cursor','default');
140
-
141
-
142
- // Fix Thickbox width/hieght
143
- jQuery(function($) {
144
- tb_position = function() {
145
- var tbWindow = $('#TB_window');
146
- var width = $(window).width();
147
- var H = $(window).height();
148
- var W = ( 1720 < width ) ? 1720 : width;
149
-
150
- if ( tbWindow.size() ) {
151
- tbWindow.width( W - 50 ).height( H - 45 );
152
- $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
153
- tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
154
- if ( typeof document.body.style.maxWidth != 'undefined' )
155
- tbWindow.css({'top':'40px','margin-top':'0'});
156
- //$('#TB_title').css({'background-color':'#fff','color':'#cfcfcf'});
157
- };
158
-
159
- return $('a.thickbox').each( function() {
160
- var href = $(this).attr('href');
161
- if ( ! href ) return;
162
- href = href.replace(/&width=[0-9]+/g, '');
163
- href = href.replace(/&height=[0-9]+/g, '');
164
- $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
165
- /*
166
- var frontend_status = jQuery("#frontend-on").val();
167
- if (typeof (frontend_status) != "undefined" && frontend_status !== null) {
168
- console.log('clixk');
169
- var custom_css = jQuery("#TB_iframeContent").contents().find('#custom-media-css').length;
170
- // Not complete need to troubleshoot
171
- if( custom_css < 1) {
172
- console.log('yes');
173
- setTimeout(function() {
174
- jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" id="custom-media-css" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
175
- }, 500);
176
- setTimeout(function() {
177
- jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" id="custom-media-css" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
178
- }, 2000);
179
- }
180
- } */
181
- });
182
-
183
- };
184
-
185
- jQuery('a.thickbox').click(function(){
186
- if ( typeof tinyMCE != 'undefined' && tinyMCE.activeEditor ) {
187
- tinyMCE.get('content').focus();
188
- tinyMCE.activeEditor.windowManager.bookmark = tinyMCE.activeEditor.selection.getBookmark('simple');
189
- }
190
-
191
- });
192
-
193
- $(window).resize( function() { tb_position() } );
194
- });
195
-
196
-
197
-
198
-
199
- jQuery('.lp_select_template').click(function(){
200
- var template = jQuery(this).attr('id');
201
- var label = jQuery(this).attr('label');
202
- var selected_template_id = "#" + template;
203
- var currentlabel = jQuery(".currently_selected").show();
204
- var current_template = jQuery("input#lp_select_template ").val();
205
- var current_template_meta = "#lp_" + current_template + "_custom_meta_box";
206
- var current_template_h3 = "#lp_" + current_template + "_custom_meta_box h3";
207
- var current_template_div = "#lp_" + current_template + "_custom_meta_box .handlediv";
208
- var open_variation = jQuery("#open_variation").val();
209
-
210
- if (open_variation>0) {
211
- var variation_tag = "-"+open_variation;
212
- } else {
213
- var variation_tag = "";
214
- }
215
-
216
- jQuery("#template-box.default_template_highlight").removeClass("default_template_highlight");
217
-
218
- jQuery(selected_template_id).parent().addClass("default_template_highlight").prepend(currentlabel);
219
- function capitaliseFirstLetter(string) {
220
- return string.charAt(0).toUpperCase() + string.slice(1);
221
- }
222
- jQuery(".lp-template-selector-container").fadeOut(500,function(){
223
- jQuery('#lp_metabox_select_template input').remove();
224
- jQuery('#lp_metabox_select_template .form-table').remove();
225
-
226
- var ajax_data = {
227
- action: 'lp_get_template_meta',
228
- selected_template: template,
229
- post_id: lp_post_edit_ui.post_id,
230
- };
231
-
232
- jQuery.ajax({
233
- type: "POST",
234
- url: lp_post_edit_ui.ajaxurl,
235
- data: ajax_data,
236
- dataType: 'html',
237
- timeout: 7000,
238
- success: function (response) {
239
- //alert(response);
240
- var html = '<input id="lp_select_template" type="hidden" value="'+template+'" name="lp-selected-template'+variation_tag+'">'
241
- + '<input type="hidden" value="'+lp_post_edit_ui.lp_template_nonce+'" name="lp_lp_custom_fields_nonce">'
242
- + response;
243
-
244
- jQuery('#lp_metabox_select_template #template-display-options').html(html);
245
- jQuery('.time-picker').timepicker({ 'timeFormat': 'H:i' });
246
- var template_name = capitaliseFirstLetter(template).replace("-", " ");
247
- var template_name = template_name.replace("_", " ");
248
- jQuery("#lp_metabox_select_template .hndle").first().text(template_name + " Template Options");
249
-
250
- },
251
- error: function(request, status, err) {
252
- alert(status);
253
- }
254
- });
255
- jQuery(".wrap").fadeIn(500, function(){
256
- });
257
- });
258
-
259
- jQuery(current_template_meta).appendTo("#template-display-options");
260
-
261
- jQuery('#lp_select_template').val(template);
262
- jQuery(".Old-Template").hide();
263
-
264
- jQuery(current_template_div).css("display","none");
265
- //jQuery(current_template_h3).css("background","#f8f8f8");
266
- jQuery(current_template_meta).show().appendTo("#template-display-options").removeClass("postbox").addClass("Old-Template");
267
- //alert(template);
268
- //alert(label);
269
- });
270
-
271
- jQuery('#lp-cancel-selection').click(function(){
272
- jQuery(".lp-template-selector-container").fadeOut(500,function(){
273
- jQuery(".wrap").fadeIn(500, function(){
274
- });
275
- });
276
-
277
- });
278
-
279
- // the_content default overwrite
280
- jQuery('body').on('click', '#overwrite-content', function(){
281
- if (confirm('Are you sure you want to overwrite what is currently in the main edit box above?')) {
282
- var ctmce= jQuery('#content-tmce');
283
- switchEditors.switchto(ctmce[0]); // switch to tinymce
284
- setTimeout(function() {
285
- var default_content = jQuery(".inbound-default-content-option textarea").first().text();
286
- jQuery("#content_ifr").contents().find("body").html(default_content);
287
- }, 500);
288
-
289
- }
290
- });
291
-
292
- // Colorpicker fix
293
- jQuery('.jpicker').one('mouseenter', function () {
294
- jQuery(this).jPicker({
295
- window: // used to define the position of the popup window only useful in binded mode
296
- {
297
- title: null, // any title for the jPicker window itself - displays "Drag Markers To Pick A Color" if left null
298
- position: {
299
- x: 'screenCenter', // acceptable values "left", "center", "right", "screenCenter", or relative px value
300
- y: 'center', // acceptable values "top", "bottom", "center", or relative px value
301
- },
302
- expandable: false, // default to large static picker - set to true to make an expandable picker (small icon with popup) - set
303
- // automatically when binded to input element
304
- liveUpdate: true, // set false if you want the user to click "OK" before the binded input box updates values (always "true"
305
- // for expandable picker)
306
- alphaSupport: false, // set to true to enable alpha picking
307
- alphaPrecision: 0, // set decimal precision for alpha percentage display - hex codes do not map directly to percentage
308
- // integers - range 0-2
309
- updateInputColor: true // set to false to prevent binded input colors from changing
310
- }
311
- },
312
- function(color, context)
313
- {
314
- var all = color.val('all');
315
- // alert('Color chosen - hex: ' + (all && '#' + all.hex || 'none') + ' - alpha: ' + (all && all.a + '%' || 'none'));
316
- //jQuery(this).attr('rel', all.hex);
317
-
318
- jQuery(this).parent().find(".lp-success-message").remove();
319
- jQuery(this).parent().find(".new-save-lp").show();
320
- jQuery(this).parent().find(".new-save-lp-frontend").show();
321
- //jQuery(this).attr('value', all.hex);
322
- });
323
- });
324
-
325
-
326
- if (jQuery(".lp-template-selector-container").css("display") == "none"){
327
- jQuery(".currently_selected").hide(); }
328
- else {
329
- jQuery(".currently_selected").show();
330
- }
331
-
332
- // Add current title of template to selector
333
- var selected_template = jQuery('#lp_select_template').val();
334
- var selected_template_id = "#" + selected_template;
335
- var clean_template_name = selected_template.replace(/-/g, ' ');
336
- function capitaliseFirstLetter(string)
337
- {
338
- return string.charAt(0).toUpperCase() + string.slice(1);
339
- }
340
- var currentlabel = jQuery(".currently_selected");
341
- jQuery(selected_template_id).parent().addClass("default_template_highlight").prepend(currentlabel);
342
- jQuery("#lp_metabox_select_template h3").first().prepend('<strong>' + capitaliseFirstLetter(clean_template_name) + '</strong> - ');
343
-
344
- jQuery('#lp-change-template-button').live('click', function () {
345
- jQuery(".wrap").fadeOut(500,function(){
346
-
347
- jQuery(".lp-template-selector-container").fadeIn(500, function(){
348
- jQuery(".currently_selected").show();
349
- jQuery('#lp-cancel-selection').show();
350
- });
351
-
352
- });
353
- });
354
-
355
- /* Move Slug Box
356
- var slugs = jQuery("#edit-slug-box");
357
- jQuery('#main-title-area').after(slugs.show());
358
- */
359
- // Background Options
360
- jQuery('.background-style').on('change', function () {
361
- var input = jQuery(".background-style option:selected").val();
362
- if (input == 'color') {
363
- jQuery('.background-color').show();
364
- jQuery('.background-image').hide();
365
- jQuery('.background_tip').hide();
366
- }
367
- else if (input == 'default') {
368
- jQuery('.background-color').hide();
369
- jQuery('.background-image').hide();
370
- jQuery('.background_tip').hide();
371
- }
372
- else if (input == 'custom') {
373
- var obj = jQuery(".background-style .lp_tooltip");
374
- obj.removeClass("lp_tooltip").addClass("background_tip").html("Use the custom css block at the bottom of this page to set up custom CSS rules");
375
- jQuery('.background_tip').show();
376
- }
377
- else {
378
- jQuery('.background-color').hide();
379
- jQuery('.background-image').show();
380
- jQuery('.background_tip').hide();
381
- }
382
-
383
- });
384
-
385
- // Check BG options on page load
386
- jQuery(document).ready(function () {
387
- var input = jQuery(".background-style option:selected").val();
388
- if (input == 'color') {
389
- jQuery('.background-color').show();
390
- jQuery('.background-image').hide();
391
- jQuery('.background_tip').hide();
392
- }
393
- else if (input == 'default') {
394
- jQuery('.background-color').hide();
395
- jQuery('.background-image').hide();
396
- jQuery('.background_tip').hide();
397
- }
398
- else if (input == 'custom') {
399
- var obj = jQuery(".background-style .lp_tooltip");
400
- obj.removeClass("lp_tooltip").addClass("background_tip").html("Use the custom css block at the bottom of this page to set up custom CSS rules");
401
- jQuery('.background_tip').show();
402
- }
403
- else {
404
- jQuery('.background-color').hide();
405
- jQuery('.background-image').show();
406
- jQuery('.background_tip').hide();
407
- }
408
- });
409
-
410
- //Stylize lead's wp-list-table
411
- var cnt = $("#leads-table-container").contents();
412
- $("#lp_conversion_log_metabox").replaceWith(cnt);
413
-
414
- //remove inputs from wp-list-table
415
- jQuery('#leads-table-container-inside input').each(function(){
416
- jQuery(this).remove();
417
- });
418
-
419
- var post_status = jQuery("#original_post_status").val();
420
-
421
- if (post_status === "draft") {
422
- // jQuery( ".nav-tab-wrapper.a_b_tabs .lp-ab-tab, #tabs-add-variation").hide();
423
- jQuery(".new-save-lp-frontend").on("click", function(event) {
424
- event.preventDefault();
425
- alert("Must publish this page before you can use the visual editor!");
426
- });
427
- var subbox = jQuery("#submitdiv");
428
- jQuery("#lp_ab_display_stats_metabox").before(subbox)
429
- } else {
430
- jQuery("#publish").val("Update All");
431
- }
432
-
433
- // Ajax Saving for metadata
434
- jQuery('#lp_metabox_select_template input, #lp_metabox_select_template select, #lp_metabox_select_template textarea').on("change keyup", function (e) {
435
- // iframe content change needs its own change function $("#iFrame").contents().find("#someDiv")
436
- // media uploader needs its own change function
437
- var this_id = jQuery(this).attr("id");
438
- var parent_el = jQuery(this).parent();
439
- jQuery(parent_el).find(".lp-success-message").remove();
440
- jQuery(parent_el).find(".new-save-lp").remove();
441
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px">Update</span>');
442
- //console.log(parent_el);
443
- jQuery(ajax_save_button).appendTo(parent_el);
444
- });
445
-
446
- jQuery('#lp-notes-area input').on("change keyup", function (e) {
447
- var this_id = jQuery(this).attr("id");
448
- var parent_el = jQuery(this).parent();
449
- jQuery(parent_el).find(".lp-success-message").remove();
450
- jQuery(parent_el).find(".new-save-lp").remove();
451
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px">Update</span>');
452
- //console.log(parent_el);
453
- jQuery(ajax_save_button).appendTo(parent_el);
454
- });
455
-
456
- jQuery('#main-title-area input').on("change keyup", function (e) {
457
- // iframe content change needs its own change function $("#iFrame").contents().find("#someDiv")
458
- // media uploader needs its own change function
459
- var this_id = jQuery(this).attr("id");
460
- var current_view = jQuery("#lp-current-view").text();
461
- if (current_view !== "0") {
462
- this_id = this_id + '-' + current_view;
463
- }
464
- var parent_el = jQuery(this).parent();
465
- jQuery(parent_el).find(".lp-success-message").remove();
466
- jQuery(parent_el).find(".new-save-lp").remove();
467
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px">Update</span>');
468
- //console.log(parent_el);
469
- jQuery(ajax_save_button).appendTo(parent_el);
470
- });
471
-
472
- // wysiwyg on keyup save action
473
- /*
474
- setTimeout(function() {
475
- jQuery('.mceIframeContainer iframe, .landing-page-option-row iframe').contents().find('body').on("keyup", function (e) {
476
- var thisclass = jQuery(this).attr("class");
477
- var this_class_dirty = thisclass.replace("mceContentBody ", "");
478
- var this_class_cleaner = this_class_dirty.replace("wp-editor", "");
479
- var clean_1 = this_class_cleaner.replace("post-type-landing-page", "");
480
- var clean_2 = clean_1.replace("post-status-publish", "");
481
- var clean_3 = clean_2.replace(/[.\s]+$/g, ""); // remove trailing whitespace
482
- var clean_spaces = clean_3.replace(/\s{2,}/g, ' '); // remove more than one space
483
- var this_id = clean_spaces.replace(/[.\s]+$/g, ""); // remove trailing whitespace
484
- console.log(this_id);
485
- var parent_el = jQuery( "." + this_id + " .landing-page-table-header");
486
- jQuery(parent_el).find(".lp-success-message").remove();
487
- jQuery(parent_el).find(".new-save-lp").remove();
488
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px;">Update</span>');
489
- //console.log(parent_el);
490
- jQuery(ajax_save_button).appendTo(parent_el);
491
- });
492
- }, 4000);
493
- */
494
-
495
-
496
- // SAVE META
497
- var nonce_val = lp_post_edit_ui.wp_landing_page_meta_nonce; // NEED CORRECT NONCE
498
- jQuery(document).on('mousedown', '.new-save-lp', function () {
499
- var type_input = jQuery(this).parent().find("input").attr("type");
500
- var type_select = jQuery(this).parent().find("select");
501
- // var the_conversion_area_editor = jQuery(this).parent().parent().find('#lp-conversion-area_ifr').length;
502
- jQuery(this).parent().find(".lp-success-message").hide();
503
- // var the_content_editor = jQuery(this).parent().parent().find('#wp_content_ifr').length;
504
- var type_wysiwyg = jQuery(this).parent().parent().find('iframe').length;
505
-
506
- var type_textarea = jQuery(this).parent().find("textarea");
507
- if (typeof (type_input) != "undefined" && type_input !== null) {
508
- var type_of_field = type_input;
509
- } else if (typeof (type_wysiwyg) != "undefined" && type_wysiwyg !== null && type_wysiwyg === 1) {
510
- var type_of_field = 'wysiwyg';
511
- } else if (typeof (type_textarea) != "undefined" && type_textarea !== null) {
512
- var type_of_field = 'textarea';
513
- } else {
514
- (typeof (type_select) != "undefined" && type_select)
515
- var type_of_field = 'select';
516
- }
517
- // console.log(type_of_field); // type of input
518
- var new_value_meta_input = jQuery(this).parent().find("input").val();
519
- //console.log(new_value_meta_input);
520
- var new_value_meta_select = jQuery(this).parent().find("select").val();
521
- var new_value_meta_textarea = jQuery(this).parent().find("textarea").val();
522
- // console.log(new_value_meta_select);
523
- var new_value_meta_radio = jQuery(this).parent().find("input:checked").val();
524
- var new_value_meta_checkbox = jQuery(this).parent().find('input[type="checkbox"]:checked').val();
525
- var new_wysiwyg_meta = jQuery(this).parent().parent().find("iframe").contents().find("body").html();
526
- // prep data
527
- if (typeof (new_value_meta_input) != "undefined" && new_value_meta_input !== null && type_of_field == "text") {
528
- var meta_to_save = new_value_meta_input;
529
- } else if (typeof (new_value_meta_textarea) != "undefined" && new_value_meta_textarea !== null && type_of_field == "textarea") {
530
- var meta_to_save = new_value_meta_textarea;
531
- } else if (typeof (new_value_meta_select) != "undefined" && new_value_meta_select !== null) {
532
- var meta_to_save = new_value_meta_select;
533
- } else if (typeof (new_value_meta_radio) != "undefined" && new_value_meta_radio !== null && type_of_field == "radio") {
534
- var meta_to_save = new_value_meta_radio;
535
- } else if (typeof (new_value_meta_checkbox) != "undefined" && new_value_meta_checkbox !== null && type_of_field == "checkbox") {
536
- var meta_to_save = new_value_meta_checkbox;
537
- } else if (typeof (new_wysiwyg_meta) != "undefined" && new_wysiwyg_meta !== null && type_of_field == "wysiwyg") {
538
- var meta_to_save = new_wysiwyg_meta;
539
- //alert('here');
540
- } else {
541
- var meta_to_save = "";
542
- }
543
-
544
- // if data exists save it
545
- // console.log(meta_to_save);
546
-
547
- var this_meta_id = jQuery(this).attr("id"); // From save button
548
- console.log(this_meta_id);
549
- var post_id = jQuery("#post_ID").val();
550
- console.log(post_id);
551
- console.log(meta_to_save);
552
- var frontend_status = jQuery("#frontend-on").val();
553
-
554
- function do_reload_preview() {
555
- var cache_bust = generate_random_cache_bust(35);
556
- var reload_url = parent.window.location.href;
557
- reload_url = reload_url.replace('template-customize=on','');
558
- //alert(reload_url);
559
- var current_variation_id = jQuery("#lp-current-view").text();
560
-
561
- // var reload = jQuery(parent.document).find("#lp-live-preview").attr("src");
562
- var new_reload = reload_url + "&live-preview-area=" + cache_bust + "&lp-variation-id=" + current_variation_id;
563
- //alert(new_reload);
564
- jQuery(parent.document).find("#lp-live-preview").attr("src", new_reload);
565
- // console.log(new_reload);
566
- }
567
- // Run Ajax
568
- jQuery.ajax({
569
- type: 'POST',
570
- url: lp_post_edit_ui.ajaxurl,
571
- context: this,
572
- data: {
573
- action: 'wp_landing_page_meta_save',
574
- meta_id: this_meta_id,
575
- new_meta_val: meta_to_save,
576
- page_id: post_id,
577
- nonce: nonce_val
578
- },
579
-
580
- success: function (data) {
581
- var self = this;
582
-
583
- //alert(data);
584
- // jQuery('.lp-form').unbind('submit').submit();
585
- //var worked = '<span class="success-message-map">Success! ' + this_meta_id + ' set to ' + meta_to_save + '</span>';
586
- var worked = '<span class="lp-success-message">Updated!</span>';
587
- var s_message = jQuery(self).parent();
588
- jQuery(worked).appendTo(s_message);
589
- jQuery(self).parent().find("lp-success-message").remove();
590
- jQuery(self).hide();
591
- // RUN RELOAD
592
- if (typeof (frontend_status) != "undefined" && frontend_status !== null) {
593
-
594
- console.log('reload frame');
595
- do_reload_preview();
596
- } else {
597
- console.log('No reload frame');
598
- }
599
- //alert("Changes Saved!");
600
- },
601
-
602
- error: function (MLHttpRequest, textStatus, errorThrown) {
603
- alert("Ajax not enabled");
604
- }
605
- });
606
-
607
- //reload_preview();
608
- return false;
609
-
610
- });
611
-
612
-
613
- });
1
+ jQuery(document).ready(function($) {
2
+
3
+ var cookies = (typeof (jQuery.cookie) != "undefined" ? true : false); // Check for JQuery Cookie
4
+ function cookie_notice() {
5
+ alert('Oh no! jQuery Cookie not loaded. Your Server Might be Blocking this. Some functionality may be impaired');
6
+ }
7
+
8
+
9
+ // Filter Styling
10
+ jQuery('#template-filter li').first().addClass('button-primary');
11
+ // filter items when filter link is clicked
12
+ jQuery('#template-filter a').click(function(){
13
+ var selector = jQuery(this).attr('data-filter');
14
+ jQuery("ul#template-filter li").removeClass('button-primary');
15
+ jQuery(this).parent().addClass('button-primary');
16
+ $(".template-item-boxes").fadeOut(500);
17
+ setTimeout(function() {
18
+ $(selector).fadeIn(500);
19
+ }, 500);
20
+
21
+ return false;
22
+ });
23
+
24
+ /* Ajax loading tabs
25
+ jQuery.koolSwap({
26
+ swapBox : '#poststuff',
27
+ outDuration : 550,
28
+ inDuration : 600,
29
+ });
30
+ */
31
+
32
+ jQuery("body").on('click', '#content-tmce, .wp-switch-editor.switch-tmce', function () {
33
+ if(cookies) {
34
+ $.cookie("lp-edit-view-choice", "editor", { path: '/', expires: 7 });
35
+ } else {
36
+ cookie_notice();
37
+ }
38
+ });
39
+
40
+ jQuery("body").on('click', '#content-html, .wp-switch-editor.switch-html', function () {
41
+ if(cookies) {
42
+ $.cookie("lp-edit-view-choice", "html", { path: '/', expires: 7 });
43
+ } else {
44
+ cookie_notice();
45
+ }
46
+ });
47
+
48
+ if(cookies) {
49
+ var which_editor = $.cookie("lp-edit-view-choice");
50
+ } else {
51
+ var which_editor = 'editor';
52
+ cookie_notice();
53
+ }
54
+ if(which_editor === null){
55
+ setTimeout(function() {
56
+ //jQuery("#content-tmce").click();
57
+ //jQuery(".wp-switch-editor.switch-tmce").click();
58
+ }, 1000);
59
+
60
+ }
61
+ /*
62
+
63
+ var chtml= jQuery('#content-html');
64
+ var ctmce= jQuery('#content-tmce');
65
+ var c= jQuery('#content'); // textarea
66
+ var vismode= c.css('display')=='none';
67
+ switchEditors.switchto(chtml[0]); // switch to html
68
+ switchEditors.switchto(ctmce[0]); // switch to tinymce
69
+
70
+ */
71
+ if(which_editor === 'editor'){
72
+ setTimeout(function() {
73
+
74
+ var ctmce= jQuery('#content-tmce');
75
+ switchEditors.switchto(ctmce[0]); // switch to tinymce
76
+
77
+ var conversion_area = jQuery("#landing-page-myeditor-tmce");
78
+ switchEditors.switchto(conversion_area[0]); // switch to tinymce
79
+ //jQuery("#content-tmce").click();
80
+ //jQuery(".wp-switch-editor.switch-tmce").click();
81
+ jQuery('.inbound-wysiwyg-option textarea').each(function(){
82
+ var chtml= "#" + jQuery(this).attr('id') + '-html';
83
+ var ctmce= "#" + jQuery(this).attr('id') + '-tmce';
84
+ var html_box = jQuery(chtml);
85
+ var tinymce_box = jQuery(ctmce);
86
+ switchEditors.switchto(tinymce_box[0]); // switch to tinymce
87
+ });
88
+ }, 1000);
89
+ }
90
+
91
+ /* Tour Start JS */
92
+ var tourbutton = '<a class="" id="lp-tour" style="font-size:13px;">Need help? Take the tour</a>';
93
+ jQuery(tourbutton).appendTo("h2:eq(0)");
94
+ jQuery("body").on('click', '#lp-tour', function () {
95
+ var tour = jQuery("#lp-tour-style").length;
96
+ if ( tour === 0 ) {
97
+ jQuery('head').append("<link rel='stylesheet' id='lp-tour-style' href='/wp-content/plugins/landing-pages/css/admin-tour.css' type='text/css' /><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/tour/tour.post-edit.js'></script><script type='text/javascript' src='/wp-content/plugins/landing-pages/js/admin/intro.js'></script>");
98
+ }
99
+ setTimeout(function() {
100
+ introJs().start(); // start tour
101
+ }, 300);
102
+
103
+ });
104
+
105
+ var current_a_tab = jQuery("#tabs-0").hasClass('nav-tab-special-active');
106
+ if (current_a_tab === true){
107
+ var url_norm = jQuery("#view-post-btn a").attr('href');
108
+ var new_url = url_norm + "?lp-variation-id=0";
109
+ jQuery("#view-post-btn a").attr('href', new_url);
110
+ }
111
+
112
+ // Fix inactivate theme display
113
+ jQuery("#template-box a").live('click', function () {
114
+
115
+ setTimeout(function() {
116
+ jQuery('#TB_window iframe').contents().find("#customize-controls").hide();
117
+ jQuery('#TB_window iframe').contents().find(".wp-full-overlay.expanded").css("margin-left", "0px");
118
+ }, 600);
119
+
120
+ });
121
+
122
+ // Fix Split testing iframe size
123
+ jQuery("#lp-metabox-splittesting a.thickbox, #leads-table-container-inside .column-details a").live('click', function () {
124
+ jQuery('#TB_iframeContent, #TB_window').hide();
125
+ setTimeout(function() {
126
+
127
+ jQuery('#TB_iframeContent, #TB_window').width( 640 ).height( 800 ).css("margin-left", "0px").css("left", "35%");
128
+ jQuery('#TB_iframeContent, #TB_window').show();
129
+ }, 600);
130
+ });
131
+
132
+ // Load meta box in correct position on page load
133
+ var current_template = jQuery("input#lp_select_template ").val();
134
+ var current_template_meta = "#lp_" + current_template + "_custom_meta_box";
135
+ jQuery(current_template_meta).removeClass("postbox").appendTo("#template-display-options").addClass("Old-Template");
136
+ var current_template_h3 = "#lp_" + current_template + "_custom_meta_box h3";
137
+ // jQuery(current_template_h3).css("background","#f8f8f8");
138
+ jQuery(current_template_meta +' .handlediv').hide();
139
+ jQuery(current_template_meta +' .hndle').css('cursor','default');
140
+
141
+
142
+ // Fix Thickbox width/hieght
143
+ jQuery(function($) {
144
+ tb_position = function() {
145
+ var tbWindow = $('#TB_window');
146
+ var width = $(window).width();
147
+ var H = $(window).height();
148
+ var W = ( 1720 < width ) ? 1720 : width;
149
+
150
+ if ( tbWindow.size() ) {
151
+ tbWindow.width( W - 50 ).height( H - 45 );
152
+ $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
153
+ tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
154
+ if ( typeof document.body.style.maxWidth != 'undefined' )
155
+ tbWindow.css({'top':'40px','margin-top':'0'});
156
+ //$('#TB_title').css({'background-color':'#fff','color':'#cfcfcf'});
157
+ };
158
+
159
+ return $('a.thickbox').each( function() {
160
+ var href = $(this).attr('href');
161
+ if ( ! href ) return;
162
+ href = href.replace(/&width=[0-9]+/g, '');
163
+ href = href.replace(/&height=[0-9]+/g, '');
164
+ $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
165
+ /*
166
+ var frontend_status = jQuery("#frontend-on").val();
167
+ if (typeof (frontend_status) != "undefined" && frontend_status !== null) {
168
+ console.log('clixk');
169
+ var custom_css = jQuery("#TB_iframeContent").contents().find('#custom-media-css').length;
170
+ // Not complete need to troubleshoot
171
+ if( custom_css < 1) {
172
+ console.log('yes');
173
+ setTimeout(function() {
174
+ jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" id="custom-media-css" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
175
+ }, 500);
176
+ setTimeout(function() {
177
+ jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" id="custom-media-css" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
178
+ }, 2000);
179
+ }
180
+ } */
181
+ });
182
+
183
+ };
184
+
185
+ jQuery('a.thickbox').click(function(){
186
+ if ( typeof tinyMCE != 'undefined' && tinyMCE.activeEditor ) {
187
+ tinyMCE.get('content').focus();
188
+ tinyMCE.activeEditor.windowManager.bookmark = tinyMCE.activeEditor.selection.getBookmark('simple');
189
+ }
190
+
191
+ });
192
+
193
+ $(window).resize( function() { tb_position() } );
194
+ });
195
+
196
+
197
+
198
+
199
+ jQuery('.lp_select_template').click(function(){
200
+ var template = jQuery(this).attr('id');
201
+ var label = jQuery(this).attr('label');
202
+ var selected_template_id = "#" + template;
203
+ var currentlabel = jQuery(".currently_selected").show();
204
+ var current_template = jQuery("input#lp_select_template ").val();
205
+ var current_template_meta = "#lp_" + current_template + "_custom_meta_box";
206
+ var current_template_h3 = "#lp_" + current_template + "_custom_meta_box h3";
207
+ var current_template_div = "#lp_" + current_template + "_custom_meta_box .handlediv";
208
+ var open_variation = jQuery("#open_variation").val();
209
+
210
+ if (open_variation>0) {
211
+ var variation_tag = "-"+open_variation;
212
+ } else {
213
+ var variation_tag = "";
214
+ }
215
+
216
+ jQuery("#template-box.default_template_highlight").removeClass("default_template_highlight");
217
+
218
+ jQuery(selected_template_id).parent().addClass("default_template_highlight").prepend(currentlabel);
219
+ function capitaliseFirstLetter(string) {
220
+ return string.charAt(0).toUpperCase() + string.slice(1);
221
+ }
222
+ jQuery(".lp-template-selector-container").fadeOut(500,function(){
223
+ jQuery('#lp_metabox_select_template input').remove();
224
+ jQuery('#lp_metabox_select_template .form-table').remove();
225
+
226
+ var ajax_data = {
227
+ action: 'lp_get_template_meta',
228
+ selected_template: template,
229
+ post_id: lp_post_edit_ui.post_id,
230
+ };
231
+
232
+ jQuery.ajax({
233
+ type: "POST",
234
+ url: lp_post_edit_ui.ajaxurl,
235
+ data: ajax_data,
236
+ dataType: 'html',
237
+ timeout: 7000,
238
+ success: function (response) {
239
+ //alert(response);
240
+ var html = '<input id="lp_select_template" type="hidden" value="'+template+'" name="lp-selected-template'+variation_tag+'">'
241
+ + '<input type="hidden" value="'+lp_post_edit_ui.lp_template_nonce+'" name="lp_lp_custom_fields_nonce">'
242
+ + response;
243
+
244
+ jQuery('#lp_metabox_select_template #template-display-options').html(html);
245
+ jQuery('.time-picker').timepicker({ 'timeFormat': 'H:i' });
246
+ var template_name = capitaliseFirstLetter(template).replace("-", " ");
247
+ var template_name = template_name.replace("_", " ");
248
+ jQuery("#lp_metabox_select_template .hndle").first().text(template_name + " Template Options");
249
+
250
+ },
251
+ error: function(request, status, err) {
252
+ alert(status);
253
+ }
254
+ });
255
+ jQuery(".wrap").fadeIn(500, function(){
256
+ });
257
+ });
258
+
259
+ jQuery(current_template_meta).appendTo("#template-display-options");
260
+
261
+ jQuery('#lp_select_template').val(template);
262
+ jQuery(".Old-Template").hide();
263
+
264
+ jQuery(current_template_div).css("display","none");
265
+ //jQuery(current_template_h3).css("background","#f8f8f8");
266
+ jQuery(current_template_meta).show().appendTo("#template-display-options").removeClass("postbox").addClass("Old-Template");
267
+ //alert(template);
268
+ //alert(label);
269
+ });
270
+
271
+ jQuery('#lp-cancel-selection').click(function(){
272
+ jQuery(".lp-template-selector-container").fadeOut(500,function(){
273
+ jQuery(".wrap").fadeIn(500, function(){
274
+ });
275
+ });
276
+
277
+ });
278
+
279
+ // the_content default overwrite
280
+ jQuery('body').on('click', '#overwrite-content', function(){
281
+ if (confirm('Are you sure you want to overwrite what is currently in the main edit box above?')) {
282
+ var ctmce= jQuery('#content-tmce');
283
+ switchEditors.switchto(ctmce[0]); // switch to tinymce
284
+ setTimeout(function() {
285
+ var default_content = jQuery(".inbound-default-content-option textarea").first().text();
286
+ jQuery("#content_ifr").contents().find("body").html(default_content);
287
+ }, 500);
288
+
289
+ }
290
+ });
291
+
292
+ // Colorpicker fix
293
+ jQuery('.jpicker').one('mouseenter', function () {
294
+ jQuery(this).jPicker({
295
+ window: // used to define the position of the popup window only useful in binded mode
296
+ {
297
+ title: null, // any title for the jPicker window itself - displays "Drag Markers To Pick A Color" if left null
298
+ position: {
299
+ x: 'screenCenter', // acceptable values "left", "center", "right", "screenCenter", or relative px value
300
+ y: 'center', // acceptable values "top", "bottom", "center", or relative px value
301
+ },
302
+ expandable: false, // default to large static picker - set to true to make an expandable picker (small icon with popup) - set
303
+ // automatically when binded to input element
304
+ liveUpdate: true, // set false if you want the user to click "OK" before the binded input box updates values (always "true"
305
+ // for expandable picker)
306
+ alphaSupport: false, // set to true to enable alpha picking
307
+ alphaPrecision: 0, // set decimal precision for alpha percentage display - hex codes do not map directly to percentage
308
+ // integers - range 0-2
309
+ updateInputColor: true // set to false to prevent binded input colors from changing
310
+ }
311
+ },
312
+ function(color, context)
313
+ {
314
+ var all = color.val('all');
315
+ // alert('Color chosen - hex: ' + (all && '#' + all.hex || 'none') + ' - alpha: ' + (all && all.a + '%' || 'none'));
316
+ //jQuery(this).attr('rel', all.hex);
317
+
318
+ jQuery(this).parent().find(".lp-success-message").remove();
319
+ jQuery(this).parent().find(".new-save-lp").show();
320
+ jQuery(this).parent().find(".new-save-lp-frontend").show();
321
+ //jQuery(this).attr('value', all.hex);
322
+ });
323
+ });
324
+
325
+
326
+ if (jQuery(".lp-template-selector-container").css("display") == "none"){
327
+ jQuery(".currently_selected").hide(); }
328
+ else {
329
+ jQuery(".currently_selected").show();
330
+ }
331
+
332
+ // Add current title of template to selector
333
+ var selected_template = jQuery('#lp_select_template').val();
334
+ var selected_template_id = "#" + selected_template;
335
+ var clean_template_name = selected_template.replace(/-/g, ' ');
336
+ function capitaliseFirstLetter(string)
337
+ {
338
+ return string.charAt(0).toUpperCase() + string.slice(1);
339
+ }
340
+ var currentlabel = jQuery(".currently_selected");
341
+ jQuery(selected_template_id).parent().addClass("default_template_highlight").prepend(currentlabel);
342
+ jQuery("#lp_metabox_select_template h3").first().prepend('<strong>' + capitaliseFirstLetter(clean_template_name) + '</strong> - ');
343
+
344
+ jQuery('#lp-change-template-button').live('click', function () {
345
+ jQuery(".wrap").fadeOut(500,function(){
346
+
347
+ jQuery(".lp-template-selector-container").fadeIn(500, function(){
348
+ jQuery(".currently_selected").show();
349
+ jQuery('#lp-cancel-selection').show();
350
+ });
351
+
352
+ });
353
+ });
354
+
355
+ /* Move Slug Box
356
+ var slugs = jQuery("#edit-slug-box");
357
+ jQuery('#main-title-area').after(slugs.show());
358
+ */
359
+ // Background Options
360
+ jQuery('.background-style').on('change', function () {
361
+ var input = jQuery(".background-style option:selected").val();
362
+ if (input == 'color') {
363
+ jQuery('.background-color').show();
364
+ jQuery('.background-image').hide();
365
+ jQuery('.background_tip').hide();
366
+ }
367
+ else if (input == 'default') {
368
+ jQuery('.background-color').hide();
369
+ jQuery('.background-image').hide();
370
+ jQuery('.background_tip').hide();
371
+ }
372
+ else if (input == 'custom') {
373
+ var obj = jQuery(".background-style .lp_tooltip");
374
+ obj.removeClass("lp_tooltip").addClass("background_tip").html("Use the custom css block at the bottom of this page to set up custom CSS rules");
375
+ jQuery('.background_tip').show();
376
+ }
377
+ else {
378
+ jQuery('.background-color').hide();
379
+ jQuery('.background-image').show();
380
+ jQuery('.background_tip').hide();
381
+ }
382
+
383
+ });
384
+
385
+ // Check BG options on page load
386
+ jQuery(document).ready(function () {
387
+ var input = jQuery(".background-style option:selected").val();
388
+ if (input == 'color') {
389
+ jQuery('.background-color').show();
390
+ jQuery('.background-image').hide();
391
+ jQuery('.background_tip').hide();
392
+ }
393
+ else if (input == 'default') {
394
+ jQuery('.background-color').hide();
395
+ jQuery('.background-image').hide();
396
+ jQuery('.background_tip').hide();
397
+ }
398
+ else if (input == 'custom') {
399
+ var obj = jQuery(".background-style .lp_tooltip");
400
+ obj.removeClass("lp_tooltip").addClass("background_tip").html("Use the custom css block at the bottom of this page to set up custom CSS rules");
401
+ jQuery('.background_tip').show();
402
+ }
403
+ else {
404
+ jQuery('.background-color').hide();
405
+ jQuery('.background-image').show();
406
+ jQuery('.background_tip').hide();
407
+ }
408
+ });
409
+
410
+ //Stylize lead's wp-list-table
411
+ var cnt = $("#leads-table-container").contents();
412
+ $("#lp_conversion_log_metabox").replaceWith(cnt);
413
+
414
+ //remove inputs from wp-list-table
415
+ jQuery('#leads-table-container-inside input').each(function(){
416
+ jQuery(this).remove();
417
+ });
418
+
419
+ var post_status = jQuery("#original_post_status").val();
420
+
421
+ if (post_status === "draft") {
422
+ // jQuery( ".nav-tab-wrapper.a_b_tabs .lp-ab-tab, #tabs-add-variation").hide();
423
+ jQuery(".new-save-lp-frontend").on("click", function(event) {
424
+ event.preventDefault();
425
+ alert("Must publish this page before you can use the visual editor!");
426
+ });
427
+ var subbox = jQuery("#submitdiv");
428
+ jQuery("#lp_ab_display_stats_metabox").before(subbox)
429
+ } else {
430
+ jQuery("#publish").val("Update All");
431
+ }
432
+
433
+ // Ajax Saving for metadata
434
+ jQuery('#lp_metabox_select_template input, #lp_metabox_select_template select, #lp_metabox_select_template textarea').on("change keyup", function (e) {
435
+ // iframe content change needs its own change function $("#iFrame").contents().find("#someDiv")
436
+ // media uploader needs its own change function
437
+ var this_id = jQuery(this).attr("id");
438
+ var parent_el = jQuery(this).parent();
439
+ jQuery(parent_el).find(".lp-success-message").remove();
440
+ jQuery(parent_el).find(".new-save-lp").remove();
441
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px">Update</span>');
442
+ //console.log(parent_el);
443
+ jQuery(ajax_save_button).appendTo(parent_el);
444
+ });
445
+
446
+ jQuery('#lp-notes-area input').on("change keyup", function (e) {
447
+ var this_id = jQuery(this).attr("id");
448
+ var parent_el = jQuery(this).parent();
449
+ jQuery(parent_el).find(".lp-success-message").remove();
450
+ jQuery(parent_el).find(".new-save-lp").remove();
451
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px">Update</span>');
452
+ //console.log(parent_el);
453
+ jQuery(ajax_save_button).appendTo(parent_el);
454
+ });
455
+
456
+ jQuery('#main-title-area input').on("change keyup", function (e) {
457
+ // iframe content change needs its own change function $("#iFrame").contents().find("#someDiv")
458
+ // media uploader needs its own change function
459
+ var this_id = jQuery(this).attr("id");
460
+ var current_view = jQuery("#lp-current-view").text();
461
+ if (current_view !== "0") {
462
+ this_id = this_id + '-' + current_view;
463
+ }
464
+ var parent_el = jQuery(this).parent();
465
+ jQuery(parent_el).find(".lp-success-message").remove();
466
+ jQuery(parent_el).find(".new-save-lp").remove();
467
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px">Update</span>');
468
+ //console.log(parent_el);
469
+ jQuery(ajax_save_button).appendTo(parent_el);
470
+ });
471
+
472
+ // wysiwyg on keyup save action
473
+ /*
474
+ setTimeout(function() {
475
+ jQuery('.mceIframeContainer iframe, .landing-page-option-row iframe').contents().find('body').on("keyup", function (e) {
476
+ var thisclass = jQuery(this).attr("class");
477
+ var this_class_dirty = thisclass.replace("mceContentBody ", "");
478
+ var this_class_cleaner = this_class_dirty.replace("wp-editor", "");
479
+ var clean_1 = this_class_cleaner.replace("post-type-landing-page", "");
480
+ var clean_2 = clean_1.replace("post-status-publish", "");
481
+ var clean_3 = clean_2.replace(/[.\s]+$/g, ""); // remove trailing whitespace
482
+ var clean_spaces = clean_3.replace(/\s{2,}/g, ' '); // remove more than one space
483
+ var this_id = clean_spaces.replace(/[.\s]+$/g, ""); // remove trailing whitespace
484
+ console.log(this_id);
485
+ var parent_el = jQuery( "." + this_id + " .landing-page-table-header");
486
+ jQuery(parent_el).find(".lp-success-message").remove();
487
+ jQuery(parent_el).find(".new-save-lp").remove();
488
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp" id="' + this_id + '" style="margin-left:10px;">Update</span>');
489
+ //console.log(parent_el);
490
+ jQuery(ajax_save_button).appendTo(parent_el);
491
+ });
492
+ }, 4000);
493
+ */
494
+
495
+
496
+ // SAVE META
497
+ var nonce_val = lp_post_edit_ui.wp_landing_page_meta_nonce; // NEED CORRECT NONCE
498
+ jQuery(document).on('mousedown', '.new-save-lp', function () {
499
+ var type_input = jQuery(this).parent().find("input").attr("type");
500
+ var type_select = jQuery(this).parent().find("select");
501
+ // var the_conversion_area_editor = jQuery(this).parent().parent().find('#lp-conversion-area_ifr').length;
502
+ jQuery(this).parent().find(".lp-success-message").hide();
503
+ // var the_content_editor = jQuery(this).parent().parent().find('#wp_content_ifr').length;
504
+ var type_wysiwyg = jQuery(this).parent().parent().find('iframe').length;
505
+
506
+ var type_textarea = jQuery(this).parent().find("textarea");
507
+ if (typeof (type_input) != "undefined" && type_input !== null) {
508
+ var type_of_field = type_input;
509
+ } else if (typeof (type_wysiwyg) != "undefined" && type_wysiwyg !== null && type_wysiwyg === 1) {
510
+ var type_of_field = 'wysiwyg';
511
+ } else if (typeof (type_textarea) != "undefined" && type_textarea !== null) {
512
+ var type_of_field = 'textarea';
513
+ } else {
514
+ (typeof (type_select) != "undefined" && type_select)
515
+ var type_of_field = 'select';
516
+ }
517
+ // console.log(type_of_field); // type of input
518
+ var new_value_meta_input = jQuery(this).parent().find("input").val();
519
+ //console.log(new_value_meta_input);
520
+ var new_value_meta_select = jQuery(this).parent().find("select").val();
521
+ var new_value_meta_textarea = jQuery(this).parent().find("textarea").val();
522
+ // console.log(new_value_meta_select);
523
+ var new_value_meta_radio = jQuery(this).parent().find("input:checked").val();
524
+ var new_value_meta_checkbox = jQuery(this).parent().find('input[type="checkbox"]:checked').val();
525
+ var new_wysiwyg_meta = jQuery(this).parent().parent().find("iframe").contents().find("body").html();
526
+ // prep data
527
+ if (typeof (new_value_meta_input) != "undefined" && new_value_meta_input !== null && type_of_field == "text") {
528
+ var meta_to_save = new_value_meta_input;
529
+ } else if (typeof (new_value_meta_textarea) != "undefined" && new_value_meta_textarea !== null && type_of_field == "textarea") {
530
+ var meta_to_save = new_value_meta_textarea;
531
+ } else if (typeof (new_value_meta_select) != "undefined" && new_value_meta_select !== null) {
532
+ var meta_to_save = new_value_meta_select;
533
+ } else if (typeof (new_value_meta_radio) != "undefined" && new_value_meta_radio !== null && type_of_field == "radio") {
534
+ var meta_to_save = new_value_meta_radio;
535
+ } else if (typeof (new_value_meta_checkbox) != "undefined" && new_value_meta_checkbox !== null && type_of_field == "checkbox") {
536
+ var meta_to_save = new_value_meta_checkbox;
537
+ } else if (typeof (new_wysiwyg_meta) != "undefined" && new_wysiwyg_meta !== null && type_of_field == "wysiwyg") {
538
+ var meta_to_save = new_wysiwyg_meta;
539
+ //alert('here');
540
+ } else {
541
+ var meta_to_save = "";
542
+ }
543
+
544
+ // if data exists save it
545
+ // console.log(meta_to_save);
546
+
547
+ var this_meta_id = jQuery(this).attr("id"); // From save button
548
+ console.log(this_meta_id);
549
+ var post_id = jQuery("#post_ID").val();
550
+ console.log(post_id);
551
+ console.log(meta_to_save);
552
+ var frontend_status = jQuery("#frontend-on").val();
553
+
554
+ function do_reload_preview() {
555
+ var cache_bust = generate_random_cache_bust(35);
556
+ var reload_url = parent.window.location.href;
557
+ reload_url = reload_url.replace('template-customize=on','');
558
+ //alert(reload_url);
559
+ var current_variation_id = jQuery("#lp-current-view").text();
560
+
561
+ // var reload = jQuery(parent.document).find("#lp-live-preview").attr("src");
562
+ var new_reload = reload_url + "&live-preview-area=" + cache_bust + "&lp-variation-id=" + current_variation_id;
563
+ //alert(new_reload);
564
+ jQuery(parent.document).find("#lp-live-preview").attr("src", new_reload);
565
+ // console.log(new_reload);
566
+ }
567
+ // Run Ajax
568
+ jQuery.ajax({
569
+ type: 'POST',
570
+ url: lp_post_edit_ui.ajaxurl,
571
+ context: this,
572
+ data: {
573
+ action: 'wp_landing_page_meta_save',
574
+ meta_id: this_meta_id,
575
+ new_meta_val: meta_to_save,
576
+ page_id: post_id,
577
+ nonce: nonce_val
578
+ },
579
+
580
+ success: function (data) {
581
+ var self = this;
582
+
583
+ //alert(data);
584
+ // jQuery('.lp-form').unbind('submit').submit();
585
+ //var worked = '<span class="success-message-map">Success! ' + this_meta_id + ' set to ' + meta_to_save + '</span>';
586
+ var worked = '<span class="lp-success-message">Updated!</span>';
587
+ var s_message = jQuery(self).parent();
588
+ jQuery(worked).appendTo(s_message);
589
+ jQuery(self).parent().find("lp-success-message").remove();
590
+ jQuery(self).hide();
591
+ // RUN RELOAD
592
+ if (typeof (frontend_status) != "undefined" && frontend_status !== null) {
593
+
594
+ console.log('reload frame');
595
+ do_reload_preview();
596
+ } else {
597
+ console.log('No reload frame');
598
+ }
599
+ //alert("Changes Saved!");
600
+ },
601
+
602
+ error: function (MLHttpRequest, textStatus, errorThrown) {
603
+ alert("Ajax not enabled");
604
+ }
605
+ });
606
+
607
+ //reload_preview();
608
+ return false;
609
+
610
+ });
611
+
612
+
613
+ });
js/admin/admin.post-new.js CHANGED
@@ -1,143 +1,143 @@
1
- jQuery(document).ready(function ($) {
2
-
3
- jQuery('#lp-template-selector-container').css('display','block');
4
-
5
- //remove inputs from wp-list-table
6
- jQuery('#leads-table-container-inside input').each(function(){
7
- jQuery(this).remove();
8
- });
9
-
10
- jQuery("#submitdiv").siblings().hide();
11
-
12
- jQuery("#title-prompt-text").text("Name Your New Landing Page");
13
-
14
- var titledescription = jQuery("<span id='descriptor'>This will be the administrative title your landing page, the main headline is created in the next step</span>");
15
- jQuery(titledescription).appendTo("#titlewrap");
16
-
17
- jQuery("#save-action input").addClass("button-primary button-large").css("margin-bottom", "10px").attr("value", "Create Landing Page");
18
-
19
- var sidebar = jQuery("#side-sortables");
20
- jQuery(sidebar).appendTo("#titlediv");
21
-
22
- var tempdiv = jQuery("<div id='templates' class='postbox'><h3 class='hndle'>Current Template: <span id='ctemp'></span></h3><div id='lp_the_image'><span id='timage'><img src='' id='c_temp'></span></div><div id='template_current'></div></div>");
23
-
24
- jQuery(tempdiv).appendTo("#titlewrap");
25
- var changebutton = jQuery("#lp_template_change");
26
-
27
- jQuery(changebutton).appendTo("#templates");
28
- jQuery("#lp_template_change a").removeClass("button-primary").addClass("button");
29
-
30
- // New Sidebar
31
- jQuery("#postbox-container-1").html("<div class='postbox'><center><h3>Download Additional Templates</h3><a target='_blank' href='/wp-admin/edit.php?post_type=landing-page&page=lp_store'><img src='"+lp_post_new_ui.LANDINGPAGES_URLPATH+"images/get-wordpress-templates.png'></a><a target='_blank' href='/wp-admin/edit.php?post_type=landing-page&page=lp_store' class='button new-lp-button button-primary button-large'>Download Landing Page Templates</a></center></div><div class='postbox'><center><h3>Need Custom Template Design?</h3><a target='_blank' href='/wp-admin/edit.php?post_type=landing-page&page=lp_store'><img src='"+lp_post_new_ui.LANDINGPAGES_URLPATH+"/images/get-custom-setup.png'></a><a target='_blank' href='http://www.inboundnow.com/landing-pages/custom-wordpress-landing-page-setup/' class='button new-lp-button button-primary button-large'>Get Custom Template Setup</a></center></div>");
32
-
33
- jQuery('.lp_select_template').click(function(){
34
- jQuery(".mceIframeContainer iframe#content_ifr").css("height", "100%");
35
- jQuery("#wp-content-editor-container .mceStatusbar").css("display", "none");
36
- });
37
-
38
- jQuery('.lp_select_template').click(function(){
39
-
40
- var template = jQuery(this).attr('id');
41
- var selected_template_id = "#" + template;
42
- var label = jQuery(this).attr('label');
43
- var template_image = "#" + template + " .template-thumbnail";
44
- var template_img_obj = jQuery(template_image).attr("src");
45
-
46
- jQuery("#ctemp").text(label);
47
- jQuery("#template_current").html('<input type="hidden" name="lp-selected-template" value="'+template+'"><input type="hidden" value="1" name="lp_post_new">');
48
- jQuery("#timage #c_temp").attr("src", template_img_obj);
49
- jQuery("#submitdiv .hndle span").text("Create Landing Page");
50
-
51
- });
52
-
53
- jQuery('#lp-change-template-button').live('click', function () {
54
- jQuery(".wrap").fadeOut(500,function(){
55
-
56
- jQuery(".lp-template-selector-container").fadeIn(500, function(){
57
- jQuery('#lp-cancel-selection').show();
58
- });
59
- jQuery("#template-filter li a").first().click();
60
- });
61
- });
62
-
63
- // filter items when filter link is clicked
64
- jQuery('#template-filter a').click(function(){
65
- var selector = jQuery(this).attr('data-filter');
66
- jQuery("ul#template-filter li").removeClass('button-primary');
67
- jQuery(this).parent().addClass('button-primary');
68
- $(".template-item-boxes").fadeOut(500);
69
- setTimeout(function() {
70
- $(selector).fadeIn(500);
71
- }, 500);
72
-
73
- return false;
74
- });
75
-
76
- jQuery('.lp_select_template').click(function(){
77
- var template = jQuery(this).attr('id');
78
- var label = jQuery(this).attr('label');
79
- jQuery(".lp-template-selector-container").fadeOut(500,function(){
80
- jQuery(".wrap").fadeIn(500, function(){
81
- });
82
- });
83
-
84
- jQuery('#lp_metabox_select_template h3').html('Current Active Template: '+label);
85
- jQuery('#lp_select_template').val(template);
86
- //alert(template);
87
- //alert(label);
88
- });
89
-
90
-
91
- jQuery("#template-box a").live('click', function () {
92
-
93
- setTimeout(function() {
94
- jQuery('#TB_window iframe').contents().find("#customize-controls").hide();
95
- jQuery('#TB_window iframe').contents().find(".wp-full-overlay.expanded").css("margin-left", "0px");
96
- }, 1200);
97
-
98
- });
99
-
100
- // Fix Thickbox width
101
- jQuery(function($) {
102
- tb_position = function() {
103
- var tbWindow = $('#TB_window');
104
- var width = $(window).width();
105
- var H = $(window).height();
106
- var W = ( 1720 < width ) ? 1720 : width;
107
-
108
- if ( tbWindow.size() ) {
109
- tbWindow.width( W - 50 ).height( H - 45 );
110
- $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
111
- tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
112
- if ( typeof document.body.style.maxWidth != 'undefined' )
113
- tbWindow.css({'top':'40px','margin-top':'0'});
114
- //$('#TB_title').css({'background-color':'#fff','color':'#cfcfcf'});
115
- };
116
-
117
- return $('a.thickbox').each( function() {
118
- var href = $(this).attr('href');
119
- if ( ! href ) return;
120
- href = href.replace(/&width=[0-9]+/g, '');
121
- href = href.replace(/&height=[0-9]+/g, '');
122
- $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
123
- });
124
- };
125
-
126
- jQuery('a.thickbox').click(function(){
127
- if ( typeof tinyMCE != 'undefined' && tinyMCE.activeEditor ) {
128
- tinyMCE.get('content').focus();
129
- tinyMCE.activeEditor.windowManager.bookmark = tinyMCE.activeEditor.selection.getBookmark('simple');
130
- }
131
-
132
- });
133
-
134
- $(window).resize( function() { tb_position() } );
135
- });
136
-
137
- var nonce_val = lp_post_new_ui.wp_landing_page_meta_nonce; // NEED CORRECT NONCE
138
-
139
- var nonce_html = '<input type="hidden" value="74910e3045" name="wp-landing-page-meta-nonce">';
140
-
141
- jQuery('form').prepend(nonce_html);
142
-
143
  });
1
+ jQuery(document).ready(function ($) {
2
+
3
+ jQuery('#lp-template-selector-container').css('display','block');
4
+
5
+ //remove inputs from wp-list-table
6
+ jQuery('#leads-table-container-inside input').each(function(){
7
+ jQuery(this).remove();
8
+ });
9
+
10
+ jQuery("#submitdiv").siblings().hide();
11
+
12
+ jQuery("#title-prompt-text").text("Name Your New Landing Page");
13
+
14
+ var titledescription = jQuery("<span id='descriptor'>This will be the administrative title your landing page, the main headline is created in the next step</span>");
15
+ jQuery(titledescription).appendTo("#titlewrap");
16
+
17
+ jQuery("#save-action input").addClass("button-primary button-large").css("margin-bottom", "10px").attr("value", "Create Landing Page");
18
+
19
+ var sidebar = jQuery("#side-sortables");
20
+ jQuery(sidebar).appendTo("#titlediv");
21
+
22
+ var tempdiv = jQuery("<div id='templates' class='postbox'><h3 class='hndle'>Current Template: <span id='ctemp'></span></h3><div id='lp_the_image'><span id='timage'><img src='' id='c_temp'></span></div><div id='template_current'></div></div>");
23
+
24
+ jQuery(tempdiv).appendTo("#titlewrap");
25
+ var changebutton = jQuery("#lp_template_change");
26
+
27
+ jQuery(changebutton).appendTo("#templates");
28
+ jQuery("#lp_template_change a").removeClass("button-primary").addClass("button");
29
+
30
+ // New Sidebar
31
+ jQuery("#postbox-container-1").html("<div class='postbox'><center><h3>Download Additional Templates</h3><a target='_blank' href='/wp-admin/edit.php?post_type=landing-page&page=lp_store'><img src='"+lp_post_new_ui.LANDINGPAGES_URLPATH+"images/get-wordpress-templates.png'></a><a target='_blank' href='/wp-admin/edit.php?post_type=landing-page&page=lp_store' class='button new-lp-button button-primary button-large'>Download Landing Page Templates</a></center></div><div class='postbox'><center><h3>Need Custom Template Design?</h3><a target='_blank' href='/wp-admin/edit.php?post_type=landing-page&page=lp_store'><img src='"+lp_post_new_ui.LANDINGPAGES_URLPATH+"/images/get-custom-setup.png'></a><a target='_blank' href='http://www.inboundnow.com/landing-pages/custom-wordpress-landing-page-setup/' class='button new-lp-button button-primary button-large'>Get Custom Template Setup</a></center></div>");
32
+
33
+ jQuery('.lp_select_template').click(function(){
34
+ jQuery(".mceIframeContainer iframe#content_ifr").css("height", "100%");
35
+ jQuery("#wp-content-editor-container .mceStatusbar").css("display", "none");
36
+ });
37
+
38
+ jQuery('.lp_select_template').click(function(){
39
+
40
+ var template = jQuery(this).attr('id');
41
+ var selected_template_id = "#" + template;
42
+ var label = jQuery(this).attr('label');
43
+ var template_image = "#" + template + " .template-thumbnail";
44
+ var template_img_obj = jQuery(template_image).attr("src");
45
+
46
+ jQuery("#ctemp").text(label);
47
+ jQuery("#template_current").html('<input type="hidden" name="lp-selected-template" value="'+template+'"><input type="hidden" value="1" name="lp_post_new">');
48
+ jQuery("#timage #c_temp").attr("src", template_img_obj);
49
+ jQuery("#submitdiv .hndle span").text("Create Landing Page");
50
+
51
+ });
52
+
53
+ jQuery('#lp-change-template-button').live('click', function () {
54
+ jQuery(".wrap").fadeOut(500,function(){
55
+
56
+ jQuery(".lp-template-selector-container").fadeIn(500, function(){
57
+ jQuery('#lp-cancel-selection').show();
58
+ });
59
+ jQuery("#template-filter li a").first().click();
60
+ });
61
+ });
62
+
63
+ // filter items when filter link is clicked
64
+ jQuery('#template-filter a').click(function(){
65
+ var selector = jQuery(this).attr('data-filter');
66
+ jQuery("ul#template-filter li").removeClass('button-primary');
67
+ jQuery(this).parent().addClass('button-primary');
68
+ $(".template-item-boxes").fadeOut(500);
69
+ setTimeout(function() {
70
+ $(selector).fadeIn(500);
71
+ }, 500);
72
+
73
+ return false;
74
+ });
75
+
76
+ jQuery('.lp_select_template').click(function(){
77
+ var template = jQuery(this).attr('id');
78
+ var label = jQuery(this).attr('label');
79
+ jQuery(".lp-template-selector-container").fadeOut(500,function(){
80
+ jQuery(".wrap").fadeIn(500, function(){
81
+ });
82
+ });
83
+
84
+ jQuery('#lp_metabox_select_template h3').html('Current Active Template: '+label);
85
+ jQuery('#lp_select_template').val(template);
86
+ //alert(template);
87
+ //alert(label);
88
+ });
89
+
90
+
91
+ jQuery("#template-box a").live('click', function () {
92
+
93
+ setTimeout(function() {
94
+ jQuery('#TB_window iframe').contents().find("#customize-controls").hide();
95
+ jQuery('#TB_window iframe').contents().find(".wp-full-overlay.expanded").css("margin-left", "0px");
96
+ }, 1200);
97
+
98
+ });
99
+
100
+ // Fix Thickbox width
101
+ jQuery(function($) {
102
+ tb_position = function() {
103
+ var tbWindow = $('#TB_window');
104
+ var width = $(window).width();
105
+ var H = $(window).height();
106
+ var W = ( 1720 < width ) ? 1720 : width;
107
+
108
+ if ( tbWindow.size() ) {
109
+ tbWindow.width( W - 50 ).height( H - 45 );
110
+ $('#TB_iframeContent').width( W - 50 ).height( H - 75 );
111
+ tbWindow.css({'margin-left': '-' + parseInt((( W - 50 ) / 2),10) + 'px'});
112
+ if ( typeof document.body.style.maxWidth != 'undefined' )
113
+ tbWindow.css({'top':'40px','margin-top':'0'});
114
+ //$('#TB_title').css({'background-color':'#fff','color':'#cfcfcf'});
115
+ };
116
+
117
+ return $('a.thickbox').each( function() {
118
+ var href = $(this).attr('href');
119
+ if ( ! href ) return;
120
+ href = href.replace(/&width=[0-9]+/g, '');
121
+ href = href.replace(/&height=[0-9]+/g, '');
122
+ $(this).attr( 'href', href + '&width=' + ( W - 80 ) + '&height=' + ( H - 85 ) );
123
+ });
124
+ };
125
+
126
+ jQuery('a.thickbox').click(function(){
127
+ if ( typeof tinyMCE != 'undefined' && tinyMCE.activeEditor ) {
128
+ tinyMCE.get('content').focus();
129
+ tinyMCE.activeEditor.windowManager.bookmark = tinyMCE.activeEditor.selection.getBookmark('simple');
130
+ }
131
+
132
+ });
133
+
134
+ $(window).resize( function() { tb_position() } );
135
+ });
136
+
137
+ var nonce_val = lp_post_new_ui.wp_landing_page_meta_nonce; // NEED CORRECT NONCE
138
+
139
+ var nonce_html = '<input type="hidden" value="74910e3045" name="wp-landing-page-meta-nonce">';
140
+
141
+ jQuery('form').prepend(nonce_html);
142
+
143
  });
js/admin/admin.store.js CHANGED
@@ -1,5 +1,5 @@
1
- jQuery(document).ready(function()
2
- {
3
- // Store page jquery not in use
4
- });
5
 
1
+ jQuery(document).ready(function()
2
+ {
3
+ // Store page jquery not in use
4
+ });
5
 
js/admin/admin.templates-upload.js CHANGED
@@ -1,25 +1,25 @@
1
- jQuery(document).ready(function($) {
2
-
3
- jQuery('.subsubsub li a').live('click', function () {
4
-
5
- var id = jQuery(this).attr('id');
6
- //alert (id);
7
- if (id == 'menu_upload') {
8
- jQuery('.templates_search').hide();
9
- jQuery('.templates_search').removeClass('current');
10
-
11
- jQuery('.templates_upload').show();
12
- jQuery('.templates_upload').addClass('current');
13
- }
14
- else if (id == 'menu_search')
15
- {
16
- jQuery('.templates_upload').hide();
17
- jQuery('.templates_upload').removeClass('current');
18
-
19
- jQuery('.templates_search').show();
20
- jQuery('.templates_search').addClass('current');
21
- }
22
-
23
- });
24
-
25
  });
1
+ jQuery(document).ready(function($) {
2
+
3
+ jQuery('.subsubsub li a').live('click', function () {
4
+
5
+ var id = jQuery(this).attr('id');
6
+ //alert (id);
7
+ if (id == 'menu_upload') {
8
+ jQuery('.templates_search').hide();
9
+ jQuery('.templates_search').removeClass('current');
10
+
11
+ jQuery('.templates_upload').show();
12
+ jQuery('.templates_upload').addClass('current');
13
+ }
14
+ else if (id == 'menu_search')
15
+ {
16
+ jQuery('.templates_upload').hide();
17
+ jQuery('.templates_upload').removeClass('current');
18
+
19
+ jQuery('.templates_search').show();
20
+ jQuery('.templates_search').addClass('current');
21
+ }
22
+
23
+ });
24
+
25
  });
js/admin/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
js/admin/intro.js CHANGED
@@ -1,758 +1,758 @@
1
- /**
2
- * Intro.js v0.4.0
3
- * https://github.com/usablica/intro.js
4
- * MIT licensed
5
- *
6
- * Copyright (C) 2013 usabli.ca - A weekend project by Afshin Mehrabani (@afshinmeh)
7
- */
8
-
9
- (function (root, factory) {
10
- if (typeof exports === 'object') {
11
- // CommonJS
12
- factory(exports);
13
- } else if (typeof define === 'function' && define.amd) {
14
- // AMD. Register as an anonymous module.
15
- define(['exports'], factory);
16
- } else {
17
- // Browser globals
18
- factory(root);
19
- }
20
- } (this, function (exports) {
21
- //Default config/variables
22
- var VERSION = '0.4.0';
23
-
24
- /**
25
- * IntroJs main class
26
- *
27
- * @class IntroJs
28
- */
29
- function IntroJs(obj) {
30
- this._targetElement = obj;
31
-
32
- this._options = {
33
- nextLabel: 'Next &rarr;',
34
- prevLabel: '&larr; Back',
35
- skipLabel: 'Skip',
36
- doneLabel: 'Done',
37
- tooltipPosition: 'bottom',
38
- exitOnEsc: true,
39
- exitOnOverlayClick: true,
40
- showStepNumbers: true
41
- };
42
- }
43
-
44
- /**
45
- * Initiate a new introduction/guide from an element in the page
46
- *
47
- * @api private
48
- * @method _introForElement
49
- * @param {Object} targetElm
50
- * @returns {Boolean} Success or not?
51
- */
52
- function _introForElement(targetElm) {
53
- var introItems = [],
54
- self = this;
55
-
56
- if (this._options.steps) {
57
- //use steps passed programmatically
58
- var allIntroSteps = [];
59
-
60
- for (var i = 0, stepsLength = this._options.steps.length; i < stepsLength; i++) {
61
- var currentItem = this._options.steps[i];
62
- //set the step
63
- currentItem.step = i + 1;
64
- //grab the element with given selector from the page
65
- currentItem.element = document.querySelector(currentItem.element);
66
- introItems.push(currentItem);
67
- }
68
-
69
- } else {
70
- //use steps from data-* annotations
71
-
72
- var allIntroSteps = targetElm.querySelectorAll('*[data-intro]');
73
- //if there's no element to intro
74
- if (allIntroSteps.length < 1) {
75
- return false;
76
- }
77
-
78
- for (var i = 0, elmsLength = allIntroSteps.length; i < elmsLength; i++) {
79
- var currentElement = allIntroSteps[i];
80
- introItems.push({
81
- element: currentElement,
82
- intro: currentElement.getAttribute('data-intro'),
83
- step: parseInt(currentElement.getAttribute('data-step'), 10),
84
- position: currentElement.getAttribute('data-position') || this._options.tooltipPosition
85
- });
86
- }
87
- }
88
-
89
- //Ok, sort all items with given steps
90
- introItems.sort(function (a, b) {
91
- return a.step - b.step;
92
- });
93
-
94
- //set it to the introJs object
95
- self._introItems = introItems;
96
-
97
- //add overlay layer to the page
98
- if(_addOverlayLayer.call(self, targetElm)) {
99
- //then, start the show
100
- _nextStep.call(self);
101
-
102
- var skipButton = targetElm.querySelector('.introjs-skipbutton'),
103
- nextStepButton = targetElm.querySelector('.introjs-nextbutton');
104
-
105
- self._onKeyDown = function(e) {
106
- if (e.keyCode === 27 && self._options.exitOnEsc == true) {
107
- //escape key pressed, exit the intro
108
- _exitIntro.call(self, targetElm);
109
- //check if any callback is defined
110
- if (self._introExitCallback != undefined) {
111
- self._introExitCallback.call(self);
112
- }
113
- } else if(e.keyCode === 37) {
114
- //left arrow
115
- _previousStep.call(self);
116
- } else if (e.keyCode === 39 || e.keyCode === 13) {
117
- //right arrow or enter
118
- _nextStep.call(self);
119
- //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers
120
- if(e.preventDefault) {
121
- e.preventDefault();
122
- } else {
123
- e.returnValue = false;
124
- }
125
- }
126
- };
127
-
128
- self._onResize = function(e) {
129
- _setHelperLayerPosition.call(self, document.querySelector('.introjs-helperLayer'));
130
- };
131
-
132
- if (window.addEventListener) {
133
- window.addEventListener('keydown', self._onKeyDown, true);
134
- //for window resize
135
- window.addEventListener("resize", self._onResize, true);
136
- } else if (document.attachEvent) { //IE
137
- document.attachEvent('onkeydown', self._onKeyDown);
138
- //for window resize
139
- document.attachEvent("onresize", self._onResize);
140
- }
141
- }
142
- return false;
143
- }
144
-
145
- /**
146
- * Go to specific step of introduction
147
- *
148
- * @api private
149
- * @method _goToStep
150
- */
151
- function _goToStep(step) {
152
- //because steps starts with zero
153
- this._currentStep = step - 2;
154
- if(typeof (this._introItems) !== 'undefined') {
155
- _nextStep.call(this);
156
- }
157
- }
158
-
159
- /**
160
- * Go to next step on intro
161
- *
162
- * @api private
163
- * @method _nextStep
164
- */
165
- function _nextStep() {
166
- if (typeof (this._introBeforeChangeCallback) !== 'undefined') {
167
- this._introBeforeChangeCallback.call(this, this._targetElement);
168
- }
169
-
170
- if (typeof (this._currentStep) === 'undefined') {
171
- this._currentStep = 0;
172
- } else {
173
- ++this._currentStep;
174
- }
175
-
176
- if((this._introItems.length) <= this._currentStep) {
177
- //end of the intro
178
- //check if any callback is defined
179
- if (typeof (this._introCompleteCallback) === 'function') {
180
- this._introCompleteCallback.call(this);
181
- }
182
- _exitIntro.call(this, this._targetElement);
183
- return;
184
- }
185
-
186
- _showElement.call(this, this._introItems[this._currentStep]);
187
- }
188
-
189
- /**
190
- * Go to previous step on intro
191
- *
192
- * @api private
193
- * @method _nextStep
194
- */
195
- function _previousStep() {
196
- if (this._currentStep === 0) {
197
- return false;
198
- }
199
-
200
- if (typeof (this._introBeforeChangeCallback) !== 'undefined') {
201
- this._introBeforeChangeCallback.call(this, this._targetElement);
202
- }
203
-
204
- _showElement.call(this, this._introItems[--this._currentStep]);
205
- }
206
-
207
- /**
208
- * Exit from intro
209
- *
210
- * @api private
211
- * @method _exitIntro
212
- * @param {Object} targetElement
213
- */
214
- function _exitIntro(targetElement) {
215
- //remove overlay layer from the page
216
- var overlayLayer = targetElement.querySelector('.introjs-overlay');
217
- //for fade-out animation
218
- overlayLayer.style.opacity = 0;
219
- setTimeout(function () {
220
- if (overlayLayer.parentNode) {
221
- overlayLayer.parentNode.removeChild(overlayLayer);
222
- }
223
- }, 500);
224
- //remove all helper layers
225
- var helperLayer = targetElement.querySelector('.introjs-helperLayer');
226
- if (helperLayer) {
227
- helperLayer.parentNode.removeChild(helperLayer);
228
- }
229
- //remove `introjs-showElement` class from the element
230
- var showElement = document.querySelector('.introjs-showElement');
231
- if (showElement) {
232
- showElement.className = showElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, ''); // This is a manual trim.
233
- }
234
-
235
- //remove `introjs-fixParent` class from the elements
236
- var fixParents = document.querySelectorAll('.introjs-fixParent');
237
- if (fixParents && fixParents.length > 0) {
238
- for (var i = fixParents.length - 1; i >= 0; i--) {
239
- fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, '');
240
- };
241
- }
242
- //clean listeners
243
- if (window.removeEventListener) {
244
- window.removeEventListener('keydown', this._onKeyDown, true);
245
- } else if (document.detachEvent) { //IE
246
- document.detachEvent('onkeydown', this._onKeyDown);
247
- }
248
- //set the step to zero
249
- this._currentStep = undefined;
250
- }
251
-
252
- /**
253
- * Render tooltip box in the page
254
- *
255
- * @api private
256
- * @method _placeTooltip
257
- * @param {Object} targetElement
258
- * @param {Object} tooltipLayer
259
- * @param {Object} arrowLayer
260
- */
261
- function _placeTooltip(targetElement, tooltipLayer, arrowLayer) {
262
- //reset the old style
263
- tooltipLayer.style.top = null;
264
- tooltipLayer.style.right = null;
265
- tooltipLayer.style.bottom = null;
266
- tooltipLayer.style.left = null;
267
-
268
- //prevent error when `this._currentStep` is undefined
269
- if(!this._introItems[this._currentStep]) return;
270
-
271
- var currentTooltipPosition = this._introItems[this._currentStep].position;
272
- switch (currentTooltipPosition) {
273
- case 'top':
274
- tooltipLayer.style.left = '15px';
275
- tooltipLayer.style.top = '-' + (_getOffset(tooltipLayer).height + 10) + 'px';
276
- arrowLayer.className = 'introjs-arrow bottom';
277
- break;
278
- case 'right':
279
- tooltipLayer.style.left = (_getOffset(targetElement).width + 20) + 'px';
280
- arrowLayer.className = 'introjs-arrow left';
281
- break;
282
- case 'left':
283
- tooltipLayer.style.top = '15px';
284
- tooltipLayer.style.right = (_getOffset(targetElement).width + 20) + 'px';
285
- arrowLayer.className = 'introjs-arrow right';
286
- break;
287
- case 'bottom':
288
- // Bottom going to follow the default behavior
289
- default:
290
- tooltipLayer.style.bottom = '-' + (_getOffset(tooltipLayer).height + 10) + 'px';
291
- arrowLayer.className = 'introjs-arrow top';
292
- break;
293
- }
294
- }
295
-
296
- /**
297
- * Update the position of the helper layer on the screen
298
- *
299
- * @api private
300
- * @method _setHelperLayerPosition
301
- * @param {Object} helperLayer
302
- */
303
- function _setHelperLayerPosition(helperLayer) {
304
- if(helperLayer) {
305
- //prevent error when `this._currentStep` in undefined
306
- if(!this._introItems[this._currentStep]) return;
307
-
308
- var elementPosition = _getOffset(this._introItems[this._currentStep].element);
309
- //set new position to helper layer
310
- helperLayer.setAttribute('style', 'width: ' + (elementPosition.width + 10) + 'px; ' +
311
- 'height:' + (elementPosition.height + 10) + 'px; ' +
312
- 'top:' + (elementPosition.top - 5) + 'px;' +
313
- 'left: ' + (elementPosition.left - 5) + 'px;');
314
- }
315
- }
316
-
317
- /**
318
- * Show an element on the page
319
- *
320
- * @api private
321
- * @method _showElement
322
- * @param {Object} targetElement
323
- */
324
- function _showElement(targetElement) {
325
-
326
- if (typeof (this._introChangeCallback) !== 'undefined') {
327
- this._introChangeCallback.call(this, targetElement.element);
328
- }
329
-
330
- var self = this,
331
- oldHelperLayer = document.querySelector('.introjs-helperLayer'),
332
- elementPosition = _getOffset(targetElement.element);
333
-
334
- if(oldHelperLayer != null) {
335
- var oldHelperNumberLayer = oldHelperLayer.querySelector('.introjs-helperNumberLayer'),
336
- oldtooltipLayer = oldHelperLayer.querySelector('.introjs-tooltiptext'),
337
- oldArrowLayer = oldHelperLayer.querySelector('.introjs-arrow'),
338
- oldtooltipContainer = oldHelperLayer.querySelector('.introjs-tooltip'),
339
- skipTooltipButton = oldHelperLayer.querySelector('.introjs-skipbutton'),
340
- prevTooltipButton = oldHelperLayer.querySelector('.introjs-prevbutton'),
341
- nextTooltipButton = oldHelperLayer.querySelector('.introjs-nextbutton');
342
-
343
- //hide the tooltip
344
- oldtooltipContainer.style.opacity = 0;
345
-
346
- //set new position to helper layer
347
- _setHelperLayerPosition.call(self, oldHelperLayer);
348
-
349
- //remove `introjs-fixParent` class from the elements
350
- var fixParents = document.querySelectorAll('.introjs-fixParent');
351
- if (fixParents && fixParents.length > 0) {
352
- for (var i = fixParents.length - 1; i >= 0; i--) {
353
- fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, '');
354
- };
355
- }
356
-
357
- //remove old classes
358
- var oldShowElement = document.querySelector('.introjs-showElement');
359
- oldShowElement.className = oldShowElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, '');
360
- //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation
361
- if (self._lastShowElementTimer) {
362
- clearTimeout(self._lastShowElementTimer);
363
- }
364
- self._lastShowElementTimer = setTimeout(function() {
365
- //set current step to the label
366
- if(oldHelperNumberLayer != null) {
367
- oldHelperNumberLayer.innerHTML = targetElement.step;
368
- }
369
- //set current tooltip text
370
- oldtooltipLayer.innerHTML = targetElement.intro;
371
- //set the tooltip position
372
- _placeTooltip.call(self, targetElement.element, oldtooltipContainer, oldArrowLayer);
373
- //show the tooltip
374
- oldtooltipContainer.style.opacity = 1;
375
- }, 350);
376
-
377
- } else {
378
- var helperLayer = document.createElement('div'),
379
- arrowLayer = document.createElement('div'),
380
- tooltipLayer = document.createElement('div');
381
-
382
- helperLayer.className = 'introjs-helperLayer';
383
-
384
- //set new position to helper layer
385
- _setHelperLayerPosition.call(self, helperLayer);
386
-
387
- //add helper layer to target element
388
- this._targetElement.appendChild(helperLayer);
389
-
390
- arrowLayer.className = 'introjs-arrow';
391
- tooltipLayer.className = 'introjs-tooltip';
392
-
393
-
394
- tooltipLayer.innerHTML = '<div class="introjs-tooltiptext">' +
395
- targetElement.intro +
396
- '</div><div class="introjs-tooltipbuttons"></div>';
397
-
398
- //add helper layer number
399
- if (this._options.showStepNumbers) {
400
- var helperNumberLayer = document.createElement('span');
401
- helperNumberLayer.className = 'introjs-helperNumberLayer';
402
- helperNumberLayer.innerHTML = targetElement.step;
403
- helperLayer.appendChild(helperNumberLayer);
404
- }
405
- tooltipLayer.appendChild(arrowLayer);
406
- helperLayer.appendChild(tooltipLayer);
407
-
408
- //next button
409
- var nextTooltipButton = document.createElement('a');
410
-
411
- nextTooltipButton.onclick = function() {
412
- if(self._introItems.length - 1 != self._currentStep) {
413
- _nextStep.call(self);
414
- }
415
- };
416
-
417
- nextTooltipButton.href = 'javascript:void(0);';
418
- nextTooltipButton.innerHTML = this._options.nextLabel;
419
-
420
- //previous button
421
- var prevTooltipButton = document.createElement('a');
422
-
423
- prevTooltipButton.onclick = function() {
424
- if(self._currentStep != 0) {
425
- _previousStep.call(self);
426
- }
427
- };
428
-
429
- prevTooltipButton.href = 'javascript:void(0);';
430
- prevTooltipButton.innerHTML = this._options.prevLabel;
431
-
432
- //skip button
433
- var skipTooltipButton = document.createElement('a');
434
- skipTooltipButton.className = 'introjs-button introjs-skipbutton';
435
- skipTooltipButton.href = 'javascript:void(0);';
436
- skipTooltipButton.innerHTML = this._options.skipLabel;
437
-
438
- skipTooltipButton.onclick = function() {
439
- if (self._introItems.length - 1 == self._currentStep && typeof (self._introCompleteCallback) === 'function') {
440
- self._introCompleteCallback.call(self);
441
- }
442
-
443
- if (self._introItems.length - 1 != self._currentStep && typeof (self._introExitCallback) === 'function') {
444
- self._introExitCallback.call(self);
445
- }
446
-
447
- _exitIntro.call(self, self._targetElement);
448
- };
449
-
450
- var tooltipButtonsLayer = tooltipLayer.querySelector('.introjs-tooltipbuttons');
451
- tooltipButtonsLayer.appendChild(skipTooltipButton);
452
- tooltipButtonsLayer.appendChild(prevTooltipButton);
453
- tooltipButtonsLayer.appendChild(nextTooltipButton);
454
-
455
- //set proper position
456
- _placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer);
457
- }
458
-
459
- if (this._currentStep == 0) {
460
- prevTooltipButton.className = 'introjs-button introjs-prevbutton introjs-disabled';
461
- nextTooltipButton.className = 'introjs-button introjs-nextbutton';
462
- skipTooltipButton.innerHTML = this._options.skipLabel;
463
- } else if (this._introItems.length - 1 == this._currentStep) {
464
- skipTooltipButton.innerHTML = this._options.doneLabel;
465
- prevTooltipButton.className = 'introjs-button introjs-prevbutton';
466
- nextTooltipButton.className = 'introjs-button introjs-nextbutton introjs-disabled';
467
- } else {
468
- prevTooltipButton.className = 'introjs-button introjs-prevbutton';
469
- nextTooltipButton.className = 'introjs-button introjs-nextbutton';
470
- skipTooltipButton.innerHTML = this._options.skipLabel;
471
- }
472
-
473
- //Set focus on "next" button, so that hitting Enter always moves you onto the next step
474
- nextTooltipButton.focus();
475
-
476
- //add target element position style
477
- targetElement.element.className += ' introjs-showElement';
478
-
479
- var currentElementPosition = _getPropValue(targetElement.element, 'position');
480
- if (currentElementPosition !== 'absolute' &&
481
- currentElementPosition !== 'relative') {
482
- //change to new intro item
483
- targetElement.element.className += ' introjs-relativePosition';
484
- }
485
-
486
- var parentElm = targetElement.element.parentNode;
487
- while(parentElm != null) {
488
- if(parentElm.tagName.toLowerCase() === 'body') break;
489
-
490
- var zIndex = _getPropValue(parentElm, 'z-index');
491
- if(/[0-9]+/.test(zIndex)) {
492
- parentElm.className += ' introjs-fixParent';
493
- }
494
- parentElm = parentElm.parentNode;
495
- }
496
-
497
- if (!_elementInViewport(targetElement.element)) {
498
- var rect = targetElement.element.getBoundingClientRect(),
499
- top = rect.bottom - (rect.bottom - rect.top),
500
- bottom = rect.bottom - _getWinSize().height;
501
-
502
- // Scroll up
503
- if (top < 0) {
504
- window.scrollBy(0, top - 30); // 30px padding from edge to look nice
505
-
506
- // Scroll down
507
- } else {
508
- window.scrollBy(0, bottom + 100); // 70px + 30px padding from edge to look nice
509
- }
510
- }
511
- }
512
-
513
- /**
514
- * Get an element CSS property on the page
515
- * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml
516
- *
517
- * @api private
518
- * @method _getPropValue
519
- * @param {Object} element
520
- * @param {String} propName
521
- * @returns Element's property value
522
- */
523
- function _getPropValue (element, propName) {
524
- var propValue = '';
525
- if (element.currentStyle) { //IE
526
- propValue = element.currentStyle[propName];
527
- } else if (document.defaultView && document.defaultView.getComputedStyle) { //Others
528
- propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName);
529
- }
530
-
531
- //Prevent exception in IE
532
- if(propValue.toLowerCase) {
533
- return propValue.toLowerCase();
534
- } else {
535
- return propValue;
536
- }
537
- }
538
-
539
- /**
540
- * Provides a cross-browser way to get the screen dimensions
541
- * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight
542
- *
543
- * @api private
544
- * @method _getWinSize
545
- * @returns {Object} width and height attributes
546
- */
547
- function _getWinSize() {
548
- if (window.innerWidth != undefined) {
549
- return { width: window.innerWidth, height: window.innerHeight };
550
- } else {
551
- var D = document.documentElement;
552
- return { width: D.clientWidth, height: D.clientHeight };
553
- }
554
- }
555
-
556
- /**
557
- * Add overlay layer to the page
558
- * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
559
- *
560
- * @api private
561
- * @method _elementInViewport
562
- * @param {Object} el
563
- */
564
- function _elementInViewport(el) {
565
- var rect = el.getBoundingClientRect();
566
-
567
- return (
568
- rect.top >= 0 &&
569
- rect.left >= 0 &&
570
- (rect.bottom+80) <= window.innerHeight && // add 80 to get the text right
571
- rect.right <= window.innerWidth
572
- );
573
- }
574
-
575
- /**
576
- * Add overlay layer to the page
577
- *
578
- * @api private
579
- * @method _addOverlayLayer
580
- * @param {Object} targetElm
581
- */
582
- function _addOverlayLayer(targetElm) {
583
- var overlayLayer = document.createElement('div'),
584
- styleText = '',
585
- self = this;
586
-
587
- //set css class name
588
- overlayLayer.className = 'introjs-overlay';
589
-
590
- //check if the target element is body, we should calculate the size of overlay layer in a better way
591
- if (targetElm.tagName.toLowerCase() === 'body') {
592
- styleText += 'top: 0;bottom: 0; left: 0;right: 0;position: fixed;';
593
- overlayLayer.setAttribute('style', styleText);
594
- } else {
595
- //set overlay layer position
596
- var elementPosition = _getOffset(targetElm);
597
- if(elementPosition) {
598
- styleText += 'width: ' + elementPosition.width + 'px; height:' + elementPosition.height + 'px; top:' + elementPosition.top + 'px;left: ' + elementPosition.left + 'px;';
599
- overlayLayer.setAttribute('style', styleText);
600
- }
601
- }
602
-
603
- targetElm.appendChild(overlayLayer);
604
-
605
- overlayLayer.onclick = function() {
606
- if(self._options.exitOnOverlayClick == true) {
607
- _exitIntro.call(self, targetElm);
608
- }
609
- //check if any callback is defined
610
- if (self._introExitCallback != undefined) {
611
- self._introExitCallback.call(self);
612
- }
613
- };
614
-
615
- setTimeout(function() {
616
- styleText += 'opacity: .8;';
617
- overlayLayer.setAttribute('style', styleText);
618
- }, 10);
619
- return true;
620
- }
621
-
622
- /**
623
- * Get an element position on the page
624
- * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966
625
- *
626
- * @api private
627
- * @method _getOffset
628
- * @param {Object} element
629
- * @returns Element's position info
630
- */
631
- function _getOffset(element) {
632
- var elementPosition = {};
633
-
634
- //set width
635
- elementPosition.width = element.offsetWidth;
636
-
637
- //set height
638
- elementPosition.height = element.offsetHeight;
639
-
640
- //calculate element top and left
641
- var _x = 0;
642
- var _y = 0;
643
- while(element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) {
644
- _x += element.offsetLeft;
645
- _y += element.offsetTop;
646
- element = element.offsetParent;
647
- }
648
- //set top
649
- elementPosition.top = _y;
650
- //set left
651
- elementPosition.left = _x;
652
-
653
- return elementPosition;
654
- }
655
-
656
- /**
657
- * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1
658
- * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically
659
- *
660
- * @param obj1
661
- * @param obj2
662
- * @returns obj3 a new object based on obj1 and obj2
663
- */
664
- function _mergeOptions(obj1,obj2) {
665
- var obj3 = {};
666
- for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
667
- for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
668
- return obj3;
669
- }
670
-
671
- var introJs = function (targetElm) {
672
- if (typeof (targetElm) === 'object') {
673
- //Ok, create a new instance
674
- return new IntroJs(targetElm);
675
-
676
- } else if (typeof (targetElm) === 'string') {
677
- //select the target element with query selector
678
- var targetElement = document.querySelector(targetElm);
679
-
680
- if (targetElement) {
681
- return new IntroJs(targetElement);
682
- } else {
683
- throw new Error('There is no element with given selector.');
684
- }
685
- } else {
686
- return new IntroJs(document.body);
687
- }
688
- };
689
-
690
- /**
691
- * Current IntroJs version
692
- *
693
- * @property version
694
- * @type String
695
- */
696
- introJs.version = VERSION;
697
-
698
- //Prototype
699
- introJs.fn = IntroJs.prototype = {
700
- clone: function () {
701
- return new IntroJs(this);
702
- },
703
- setOption: function(option, value) {
704
- this._options[option] = value;
705
- return this;
706
- },
707
- setOptions: function(options) {
708
- this._options = _mergeOptions(this._options, options);
709
- return this;
710
- },
711
- start: function () {
712
- _introForElement.call(this, this._targetElement);
713
- return this;
714
- },
715
- goToStep: function(step) {
716
- _goToStep.call(this, step);
717
- return this;
718
- },
719
- exit: function() {
720
- _exitIntro.call(this, this._targetElement);
721
- },
722
- onbeforechange: function(providedCallback) {
723
- if (typeof (providedCallback) === 'function') {
724
- this._introBeforeChangeCallback = providedCallback;
725
- } else {
726
- throw new Error('Provided callback for onbeforechange was not a function');
727
- }
728
- return this;
729
- },
730
- onchange: function(providedCallback) {
731
- if (typeof (providedCallback) === 'function') {
732
- this._introChangeCallback = providedCallback;
733
- } else {
734
- throw new Error('Provided callback for onchange was not a function.');
735
- }
736
- return this;
737
- },
738
- oncomplete: function(providedCallback) {
739
- if (typeof (providedCallback) === 'function') {
740
- this._introCompleteCallback = providedCallback;
741
- } else {
742
- throw new Error('Provided callback for oncomplete was not a function.');
743
- }
744
- return this;
745
- },
746
- onexit: function(providedCallback) {
747
- if (typeof (providedCallback) === 'function') {
748
- this._introExitCallback = providedCallback;
749
- } else {
750
- throw new Error('Provided callback for onexit was not a function.');
751
- }
752
- return this;
753
- }
754
- };
755
-
756
- exports.introJs = introJs;
757
- return introJs;
758
- }));
1
+ /**
2
+ * Intro.js v0.4.0
3
+ * https://github.com/usablica/intro.js
4
+ * MIT licensed
5
+ *
6
+ * Copyright (C) 2013 usabli.ca - A weekend project by Afshin Mehrabani (@afshinmeh)
7
+ */
8
+
9
+ (function (root, factory) {
10
+ if (typeof exports === 'object') {
11
+ // CommonJS
12
+ factory(exports);
13
+ } else if (typeof define === 'function' && define.amd) {
14
+ // AMD. Register as an anonymous module.
15
+ define(['exports'], factory);
16
+ } else {
17
+ // Browser globals
18
+ factory(root);
19
+ }
20
+ } (this, function (exports) {
21
+ //Default config/variables
22
+ var VERSION = '0.4.0';
23
+
24
+ /**
25
+ * IntroJs main class
26
+ *
27
+ * @class IntroJs
28
+ */
29
+ function IntroJs(obj) {
30
+ this._targetElement = obj;
31
+
32
+ this._options = {
33
+ nextLabel: 'Next &rarr;',
34
+ prevLabel: '&larr; Back',
35
+ skipLabel: 'Skip',
36
+ doneLabel: 'Done',
37
+ tooltipPosition: 'bottom',
38
+ exitOnEsc: true,
39
+ exitOnOverlayClick: true,
40
+ showStepNumbers: true
41
+ };
42
+ }
43
+
44
+ /**
45
+ * Initiate a new introduction/guide from an element in the page
46
+ *
47
+ * @api private
48
+ * @method _introForElement
49
+ * @param {Object} targetElm
50
+ * @returns {Boolean} Success or not?
51
+ */
52
+ function _introForElement(targetElm) {
53
+ var introItems = [],
54
+ self = this;
55
+
56
+ if (this._options.steps) {
57
+ //use steps passed programmatically
58
+ var allIntroSteps = [];
59
+
60
+ for (var i = 0, stepsLength = this._options.steps.length; i < stepsLength; i++) {
61
+ var currentItem = this._options.steps[i];
62
+ //set the step
63
+ currentItem.step = i + 1;
64
+ //grab the element with given selector from the page
65
+ currentItem.element = document.querySelector(currentItem.element);
66
+ introItems.push(currentItem);
67
+ }
68
+
69
+ } else {
70
+ //use steps from data-* annotations
71
+
72
+ var allIntroSteps = targetElm.querySelectorAll('*[data-intro]');
73
+ //if there's no element to intro
74
+ if (allIntroSteps.length < 1) {
75
+ return false;
76
+ }
77
+
78
+ for (var i = 0, elmsLength = allIntroSteps.length; i < elmsLength; i++) {
79
+ var currentElement = allIntroSteps[i];
80
+ introItems.push({
81
+ element: currentElement,
82
+ intro: currentElement.getAttribute('data-intro'),
83
+ step: parseInt(currentElement.getAttribute('data-step'), 10),
84
+ position: currentElement.getAttribute('data-position') || this._options.tooltipPosition
85
+ });
86
+ }
87
+ }
88
+
89
+ //Ok, sort all items with given steps
90
+ introItems.sort(function (a, b) {
91
+ return a.step - b.step;
92
+ });
93
+
94
+ //set it to the introJs object
95
+ self._introItems = introItems;
96
+
97
+ //add overlay layer to the page
98
+ if(_addOverlayLayer.call(self, targetElm)) {
99
+ //then, start the show
100
+ _nextStep.call(self);
101
+
102
+ var skipButton = targetElm.querySelector('.introjs-skipbutton'),
103
+ nextStepButton = targetElm.querySelector('.introjs-nextbutton');
104
+
105
+ self._onKeyDown = function(e) {
106
+ if (e.keyCode === 27 && self._options.exitOnEsc == true) {
107
+ //escape key pressed, exit the intro
108
+ _exitIntro.call(self, targetElm);
109
+ //check if any callback is defined
110
+ if (self._introExitCallback != undefined) {
111
+ self._introExitCallback.call(self);
112
+ }
113
+ } else if(e.keyCode === 37) {
114
+ //left arrow
115
+ _previousStep.call(self);
116
+ } else if (e.keyCode === 39 || e.keyCode === 13) {
117
+ //right arrow or enter
118
+ _nextStep.call(self);
119
+ //prevent default behaviour on hitting Enter, to prevent steps being skipped in some browsers
120
+ if(e.preventDefault) {
121
+ e.preventDefault();
122
+ } else {
123
+ e.returnValue = false;
124
+ }
125
+ }
126
+ };
127
+
128
+ self._onResize = function(e) {
129
+ _setHelperLayerPosition.call(self, document.querySelector('.introjs-helperLayer'));
130
+ };
131
+
132
+ if (window.addEventListener) {
133
+ window.addEventListener('keydown', self._onKeyDown, true);
134
+ //for window resize
135
+ window.addEventListener("resize", self._onResize, true);
136
+ } else if (document.attachEvent) { //IE
137
+ document.attachEvent('onkeydown', self._onKeyDown);
138
+ //for window resize
139
+ document.attachEvent("onresize", self._onResize);
140
+ }
141
+ }
142
+ return false;
143
+ }
144
+
145
+ /**
146
+ * Go to specific step of introduction
147
+ *
148
+ * @api private
149
+ * @method _goToStep
150
+ */
151
+ function _goToStep(step) {
152
+ //because steps starts with zero
153
+ this._currentStep = step - 2;
154
+ if(typeof (this._introItems) !== 'undefined') {
155
+ _nextStep.call(this);
156
+ }
157
+ }
158
+
159
+ /**
160
+ * Go to next step on intro
161
+ *
162
+ * @api private
163
+ * @method _nextStep
164
+ */
165
+ function _nextStep() {
166
+ if (typeof (this._introBeforeChangeCallback) !== 'undefined') {
167
+ this._introBeforeChangeCallback.call(this, this._targetElement);
168
+ }
169
+
170
+ if (typeof (this._currentStep) === 'undefined') {
171
+ this._currentStep = 0;
172
+ } else {
173
+ ++this._currentStep;
174
+ }
175
+
176
+ if((this._introItems.length) <= this._currentStep) {
177
+ //end of the intro
178
+ //check if any callback is defined
179
+ if (typeof (this._introCompleteCallback) === 'function') {
180
+ this._introCompleteCallback.call(this);
181
+ }
182
+ _exitIntro.call(this, this._targetElement);
183
+ return;
184
+ }
185
+
186
+ _showElement.call(this, this._introItems[this._currentStep]);
187
+ }
188
+
189
+ /**
190
+ * Go to previous step on intro
191
+ *
192
+ * @api private
193
+ * @method _nextStep
194
+ */
195
+ function _previousStep() {
196
+ if (this._currentStep === 0) {
197
+ return false;
198
+ }
199
+
200
+ if (typeof (this._introBeforeChangeCallback) !== 'undefined') {
201
+ this._introBeforeChangeCallback.call(this, this._targetElement);
202
+ }
203
+
204
+ _showElement.call(this, this._introItems[--this._currentStep]);
205
+ }
206
+
207
+ /**
208
+ * Exit from intro
209
+ *
210
+ * @api private
211
+ * @method _exitIntro
212
+ * @param {Object} targetElement
213
+ */
214
+ function _exitIntro(targetElement) {
215
+ //remove overlay layer from the page
216
+ var overlayLayer = targetElement.querySelector('.introjs-overlay');
217
+ //for fade-out animation
218
+ overlayLayer.style.opacity = 0;
219
+ setTimeout(function () {
220
+ if (overlayLayer.parentNode) {
221
+ overlayLayer.parentNode.removeChild(overlayLayer);
222
+ }
223
+ }, 500);
224
+ //remove all helper layers
225
+ var helperLayer = targetElement.querySelector('.introjs-helperLayer');
226
+ if (helperLayer) {
227
+ helperLayer.parentNode.removeChild(helperLayer);
228
+ }
229
+ //remove `introjs-showElement` class from the element
230
+ var showElement = document.querySelector('.introjs-showElement');
231
+ if (showElement) {
232
+ showElement.className = showElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, ''); // This is a manual trim.
233
+ }
234
+
235
+ //remove `introjs-fixParent` class from the elements
236
+ var fixParents = document.querySelectorAll('.introjs-fixParent');
237
+ if (fixParents && fixParents.length > 0) {
238
+ for (var i = fixParents.length - 1; i >= 0; i--) {
239
+ fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, '');
240
+ };
241
+ }
242
+ //clean listeners
243
+ if (window.removeEventListener) {
244
+ window.removeEventListener('keydown', this._onKeyDown, true);
245
+ } else if (document.detachEvent) { //IE
246
+ document.detachEvent('onkeydown', this._onKeyDown);
247
+ }
248
+ //set the step to zero
249
+ this._currentStep = undefined;
250
+ }
251
+
252
+ /**
253
+ * Render tooltip box in the page
254
+ *
255
+ * @api private
256
+ * @method _placeTooltip
257
+ * @param {Object} targetElement
258
+ * @param {Object} tooltipLayer
259
+ * @param {Object} arrowLayer
260
+ */
261
+ function _placeTooltip(targetElement, tooltipLayer, arrowLayer) {
262
+ //reset the old style
263
+ tooltipLayer.style.top = null;
264
+ tooltipLayer.style.right = null;
265
+ tooltipLayer.style.bottom = null;
266
+ tooltipLayer.style.left = null;
267
+
268
+ //prevent error when `this._currentStep` is undefined
269
+ if(!this._introItems[this._currentStep]) return;
270
+
271
+ var currentTooltipPosition = this._introItems[this._currentStep].position;
272
+ switch (currentTooltipPosition) {
273
+ case 'top':
274
+ tooltipLayer.style.left = '15px';
275
+ tooltipLayer.style.top = '-' + (_getOffset(tooltipLayer).height + 10) + 'px';
276
+ arrowLayer.className = 'introjs-arrow bottom';
277
+ break;
278
+ case 'right':
279
+ tooltipLayer.style.left = (_getOffset(targetElement).width + 20) + 'px';
280
+ arrowLayer.className = 'introjs-arrow left';
281
+ break;
282
+ case 'left':
283
+ tooltipLayer.style.top = '15px';
284
+ tooltipLayer.style.right = (_getOffset(targetElement).width + 20) + 'px';
285
+ arrowLayer.className = 'introjs-arrow right';
286
+ break;
287
+ case 'bottom':
288
+ // Bottom going to follow the default behavior
289
+ default:
290
+ tooltipLayer.style.bottom = '-' + (_getOffset(tooltipLayer).height + 10) + 'px';
291
+ arrowLayer.className = 'introjs-arrow top';
292
+ break;
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Update the position of the helper layer on the screen
298
+ *
299
+ * @api private
300
+ * @method _setHelperLayerPosition
301
+ * @param {Object} helperLayer
302
+ */
303
+ function _setHelperLayerPosition(helperLayer) {
304
+ if(helperLayer) {
305
+ //prevent error when `this._currentStep` in undefined
306
+ if(!this._introItems[this._currentStep]) return;
307
+
308
+ var elementPosition = _getOffset(this._introItems[this._currentStep].element);
309
+ //set new position to helper layer
310
+ helperLayer.setAttribute('style', 'width: ' + (elementPosition.width + 10) + 'px; ' +
311
+ 'height:' + (elementPosition.height + 10) + 'px; ' +
312
+ 'top:' + (elementPosition.top - 5) + 'px;' +
313
+ 'left: ' + (elementPosition.left - 5) + 'px;');
314
+ }
315
+ }
316
+
317
+ /**
318
+ * Show an element on the page
319
+ *
320
+ * @api private
321
+ * @method _showElement
322
+ * @param {Object} targetElement
323
+ */
324
+ function _showElement(targetElement) {
325
+
326
+ if (typeof (this._introChangeCallback) !== 'undefined') {
327
+ this._introChangeCallback.call(this, targetElement.element);
328
+ }
329
+
330
+ var self = this,
331
+ oldHelperLayer = document.querySelector('.introjs-helperLayer'),
332
+ elementPosition = _getOffset(targetElement.element);
333
+
334
+ if(oldHelperLayer != null) {
335
+ var oldHelperNumberLayer = oldHelperLayer.querySelector('.introjs-helperNumberLayer'),
336
+ oldtooltipLayer = oldHelperLayer.querySelector('.introjs-tooltiptext'),
337
+ oldArrowLayer = oldHelperLayer.querySelector('.introjs-arrow'),
338
+ oldtooltipContainer = oldHelperLayer.querySelector('.introjs-tooltip'),
339
+ skipTooltipButton = oldHelperLayer.querySelector('.introjs-skipbutton'),
340
+ prevTooltipButton = oldHelperLayer.querySelector('.introjs-prevbutton'),
341
+ nextTooltipButton = oldHelperLayer.querySelector('.introjs-nextbutton');
342
+
343
+ //hide the tooltip
344
+ oldtooltipContainer.style.opacity = 0;
345
+
346
+ //set new position to helper layer
347
+ _setHelperLayerPosition.call(self, oldHelperLayer);
348
+
349
+ //remove `introjs-fixParent` class from the elements
350
+ var fixParents = document.querySelectorAll('.introjs-fixParent');
351
+ if (fixParents && fixParents.length > 0) {
352
+ for (var i = fixParents.length - 1; i >= 0; i--) {
353
+ fixParents[i].className = fixParents[i].className.replace(/introjs-fixParent/g, '').replace(/^\s+|\s+$/g, '');
354
+ };
355
+ }
356
+
357
+ //remove old classes
358
+ var oldShowElement = document.querySelector('.introjs-showElement');
359
+ oldShowElement.className = oldShowElement.className.replace(/introjs-[a-zA-Z]+/g, '').replace(/^\s+|\s+$/g, '');
360
+ //we should wait until the CSS3 transition is competed (it's 0.3 sec) to prevent incorrect `height` and `width` calculation
361
+ if (self._lastShowElementTimer) {
362
+ clearTimeout(self._lastShowElementTimer);
363
+ }
364
+ self._lastShowElementTimer = setTimeout(function() {
365
+ //set current step to the label
366
+ if(oldHelperNumberLayer != null) {
367
+ oldHelperNumberLayer.innerHTML = targetElement.step;
368
+ }
369
+ //set current tooltip text
370
+ oldtooltipLayer.innerHTML = targetElement.intro;
371
+ //set the tooltip position
372
+ _placeTooltip.call(self, targetElement.element, oldtooltipContainer, oldArrowLayer);
373
+ //show the tooltip
374
+ oldtooltipContainer.style.opacity = 1;
375
+ }, 350);
376
+
377
+ } else {
378
+ var helperLayer = document.createElement('div'),
379
+ arrowLayer = document.createElement('div'),
380
+ tooltipLayer = document.createElement('div');
381
+
382
+ helperLayer.className = 'introjs-helperLayer';
383
+
384
+ //set new position to helper layer
385
+ _setHelperLayerPosition.call(self, helperLayer);
386
+
387
+ //add helper layer to target element
388
+ this._targetElement.appendChild(helperLayer);
389
+
390
+ arrowLayer.className = 'introjs-arrow';
391
+ tooltipLayer.className = 'introjs-tooltip';
392
+
393
+
394
+ tooltipLayer.innerHTML = '<div class="introjs-tooltiptext">' +
395
+ targetElement.intro +
396
+ '</div><div class="introjs-tooltipbuttons"></div>';
397
+
398
+ //add helper layer number
399
+ if (this._options.showStepNumbers) {
400
+ var helperNumberLayer = document.createElement('span');
401
+ helperNumberLayer.className = 'introjs-helperNumberLayer';
402
+ helperNumberLayer.innerHTML = targetElement.step;
403
+ helperLayer.appendChild(helperNumberLayer);
404
+ }
405
+ tooltipLayer.appendChild(arrowLayer);
406
+ helperLayer.appendChild(tooltipLayer);
407
+
408
+ //next button
409
+ var nextTooltipButton = document.createElement('a');
410
+
411
+ nextTooltipButton.onclick = function() {
412
+ if(self._introItems.length - 1 != self._currentStep) {
413
+ _nextStep.call(self);
414
+ }
415
+ };
416
+
417
+ nextTooltipButton.href = 'javascript:void(0);';
418
+ nextTooltipButton.innerHTML = this._options.nextLabel;
419
+
420
+ //previous button
421
+ var prevTooltipButton = document.createElement('a');
422
+
423
+ prevTooltipButton.onclick = function() {
424
+ if(self._currentStep != 0) {
425
+ _previousStep.call(self);
426
+ }
427
+ };
428
+
429
+ prevTooltipButton.href = 'javascript:void(0);';
430
+ prevTooltipButton.innerHTML = this._options.prevLabel;
431
+
432
+ //skip button
433
+ var skipTooltipButton = document.createElement('a');
434
+ skipTooltipButton.className = 'introjs-button introjs-skipbutton';
435
+ skipTooltipButton.href = 'javascript:void(0);';
436
+ skipTooltipButton.innerHTML = this._options.skipLabel;
437
+
438
+ skipTooltipButton.onclick = function() {
439
+ if (self._introItems.length - 1 == self._currentStep && typeof (self._introCompleteCallback) === 'function') {
440
+ self._introCompleteCallback.call(self);
441
+ }
442
+
443
+ if (self._introItems.length - 1 != self._currentStep && typeof (self._introExitCallback) === 'function') {
444
+ self._introExitCallback.call(self);
445
+ }
446
+
447
+ _exitIntro.call(self, self._targetElement);
448
+ };
449
+
450
+ var tooltipButtonsLayer = tooltipLayer.querySelector('.introjs-tooltipbuttons');
451
+ tooltipButtonsLayer.appendChild(skipTooltipButton);
452
+ tooltipButtonsLayer.appendChild(prevTooltipButton);
453
+ tooltipButtonsLayer.appendChild(nextTooltipButton);
454
+
455
+ //set proper position
456
+ _placeTooltip.call(self, targetElement.element, tooltipLayer, arrowLayer);
457
+ }
458
+
459
+ if (this._currentStep == 0) {
460
+ prevTooltipButton.className = 'introjs-button introjs-prevbutton introjs-disabled';
461
+ nextTooltipButton.className = 'introjs-button introjs-nextbutton';
462
+ skipTooltipButton.innerHTML = this._options.skipLabel;
463
+ } else if (this._introItems.length - 1 == this._currentStep) {
464
+ skipTooltipButton.innerHTML = this._options.doneLabel;
465
+ prevTooltipButton.className = 'introjs-button introjs-prevbutton';
466
+ nextTooltipButton.className = 'introjs-button introjs-nextbutton introjs-disabled';
467
+ } else {
468
+ prevTooltipButton.className = 'introjs-button introjs-prevbutton';
469
+ nextTooltipButton.className = 'introjs-button introjs-nextbutton';
470
+ skipTooltipButton.innerHTML = this._options.skipLabel;
471
+ }
472
+
473
+ //Set focus on "next" button, so that hitting Enter always moves you onto the next step
474
+ nextTooltipButton.focus();
475
+
476
+ //add target element position style
477
+ targetElement.element.className += ' introjs-showElement';
478
+
479
+ var currentElementPosition = _getPropValue(targetElement.element, 'position');
480
+ if (currentElementPosition !== 'absolute' &&
481
+ currentElementPosition !== 'relative') {
482
+ //change to new intro item
483
+ targetElement.element.className += ' introjs-relativePosition';
484
+ }
485
+
486
+ var parentElm = targetElement.element.parentNode;
487
+ while(parentElm != null) {
488
+ if(parentElm.tagName.toLowerCase() === 'body') break;
489
+
490
+ var zIndex = _getPropValue(parentElm, 'z-index');
491
+ if(/[0-9]+/.test(zIndex)) {
492
+ parentElm.className += ' introjs-fixParent';
493
+ }
494
+ parentElm = parentElm.parentNode;
495
+ }
496
+
497
+ if (!_elementInViewport(targetElement.element)) {
498
+ var rect = targetElement.element.getBoundingClientRect(),
499
+ top = rect.bottom - (rect.bottom - rect.top),
500
+ bottom = rect.bottom - _getWinSize().height;
501
+
502
+ // Scroll up
503
+ if (top < 0) {
504
+ window.scrollBy(0, top - 30); // 30px padding from edge to look nice
505
+
506
+ // Scroll down
507
+ } else {
508
+ window.scrollBy(0, bottom + 100); // 70px + 30px padding from edge to look nice
509
+ }
510
+ }
511
+ }
512
+
513
+ /**
514
+ * Get an element CSS property on the page
515
+ * Thanks to JavaScript Kit: http://www.javascriptkit.com/dhtmltutors/dhtmlcascade4.shtml
516
+ *
517
+ * @api private
518
+ * @method _getPropValue
519
+ * @param {Object} element
520
+ * @param {String} propName
521
+ * @returns Element's property value
522
+ */
523
+ function _getPropValue (element, propName) {
524
+ var propValue = '';
525
+ if (element.currentStyle) { //IE
526
+ propValue = element.currentStyle[propName];
527
+ } else if (document.defaultView && document.defaultView.getComputedStyle) { //Others
528
+ propValue = document.defaultView.getComputedStyle(element, null).getPropertyValue(propName);
529
+ }
530
+
531
+ //Prevent exception in IE
532
+ if(propValue.toLowerCase) {
533
+ return propValue.toLowerCase();
534
+ } else {
535
+ return propValue;
536
+ }
537
+ }
538
+
539
+ /**
540
+ * Provides a cross-browser way to get the screen dimensions
541
+ * via: http://stackoverflow.com/questions/5864467/internet-explorer-innerheight
542
+ *
543
+ * @api private
544
+ * @method _getWinSize
545
+ * @returns {Object} width and height attributes
546
+ */
547
+ function _getWinSize() {
548
+ if (window.innerWidth != undefined) {
549
+ return { width: window.innerWidth, height: window.innerHeight };
550
+ } else {
551
+ var D = document.documentElement;
552
+ return { width: D.clientWidth, height: D.clientHeight };
553
+ }
554
+ }
555
+
556
+ /**
557
+ * Add overlay layer to the page
558
+ * http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport
559
+ *
560
+ * @api private
561
+ * @method _elementInViewport
562
+ * @param {Object} el
563
+ */
564
+ function _elementInViewport(el) {
565
+ var rect = el.getBoundingClientRect();
566
+
567
+ return (
568
+ rect.top >= 0 &&
569
+ rect.left >= 0 &&
570
+ (rect.bottom+80) <= window.innerHeight && // add 80 to get the text right
571
+ rect.right <= window.innerWidth
572
+ );
573
+ }
574
+
575
+ /**
576
+ * Add overlay layer to the page
577
+ *
578
+ * @api private
579
+ * @method _addOverlayLayer
580
+ * @param {Object} targetElm
581
+ */
582
+ function _addOverlayLayer(targetElm) {
583
+ var overlayLayer = document.createElement('div'),
584
+ styleText = '',
585
+ self = this;
586
+
587
+ //set css class name
588
+ overlayLayer.className = 'introjs-overlay';
589
+
590
+ //check if the target element is body, we should calculate the size of overlay layer in a better way
591
+ if (targetElm.tagName.toLowerCase() === 'body') {
592
+ styleText += 'top: 0;bottom: 0; left: 0;right: 0;position: fixed;';
593
+ overlayLayer.setAttribute('style', styleText);
594
+ } else {
595
+ //set overlay layer position
596
+ var elementPosition = _getOffset(targetElm);
597
+ if(elementPosition) {
598
+ styleText += 'width: ' + elementPosition.width + 'px; height:' + elementPosition.height + 'px; top:' + elementPosition.top + 'px;left: ' + elementPosition.left + 'px;';
599
+ overlayLayer.setAttribute('style', styleText);
600
+ }
601
+ }
602
+
603
+ targetElm.appendChild(overlayLayer);
604
+
605
+ overlayLayer.onclick = function() {
606
+ if(self._options.exitOnOverlayClick == true) {
607
+ _exitIntro.call(self, targetElm);
608
+ }
609
+ //check if any callback is defined
610
+ if (self._introExitCallback != undefined) {
611
+ self._introExitCallback.call(self);
612
+ }
613
+ };
614
+
615
+ setTimeout(function() {
616
+ styleText += 'opacity: .8;';
617
+ overlayLayer.setAttribute('style', styleText);
618
+ }, 10);
619
+ return true;
620
+ }
621
+
622
+ /**
623
+ * Get an element position on the page
624
+ * Thanks to `meouw`: http://stackoverflow.com/a/442474/375966
625
+ *
626
+ * @api private
627
+ * @method _getOffset
628
+ * @param {Object} element
629
+ * @returns Element's position info
630
+ */
631
+ function _getOffset(element) {
632
+ var elementPosition = {};
633
+
634
+ //set width
635
+ elementPosition.width = element.offsetWidth;
636
+
637
+ //set height
638
+ elementPosition.height = element.offsetHeight;
639
+
640
+ //calculate element top and left
641
+ var _x = 0;
642
+ var _y = 0;
643
+ while(element && !isNaN(element.offsetLeft) && !isNaN(element.offsetTop)) {
644
+ _x += element.offsetLeft;
645
+ _y += element.offsetTop;
646
+ element = element.offsetParent;
647
+ }
648
+ //set top
649
+ elementPosition.top = _y;
650
+ //set left
651
+ elementPosition.left = _x;
652
+
653
+ return elementPosition;
654
+ }
655
+
656
+ /**
657
+ * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1
658
+ * via: http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically
659
+ *
660
+ * @param obj1
661
+ * @param obj2
662
+ * @returns obj3 a new object based on obj1 and obj2
663
+ */
664
+ function _mergeOptions(obj1,obj2) {
665
+ var obj3 = {};
666
+ for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
667
+ for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
668
+ return obj3;
669
+ }
670
+
671
+ var introJs = function (targetElm) {
672
+ if (typeof (targetElm) === 'object') {
673
+ //Ok, create a new instance
674
+ return new IntroJs(targetElm);
675
+
676
+ } else if (typeof (targetElm) === 'string') {
677
+ //select the target element with query selector
678
+ var targetElement = document.querySelector(targetElm);
679
+
680
+ if (targetElement) {
681
+ return new IntroJs(targetElement);
682
+ } else {
683
+ throw new Error('There is no element with given selector.');
684
+ }
685
+ } else {
686
+ return new IntroJs(document.body);
687
+ }
688
+ };
689
+
690
+ /**
691
+ * Current IntroJs version
692
+ *
693
+ * @property version
694
+ * @type String
695
+ */
696
+ introJs.version = VERSION;
697
+
698
+ //Prototype
699
+ introJs.fn = IntroJs.prototype = {
700
+ clone: function () {
701
+ return new IntroJs(this);
702
+ },
703
+ setOption: function(option, value) {
704
+ this._options[option] = value;
705
+ return this;
706
+ },
707
+ setOptions: function(options) {
708
+ this._options = _mergeOptions(this._options, options);
709
+ return this;
710
+ },
711
+ start: function () {
712
+ _introForElement.call(this, this._targetElement);
713
+ return this;
714
+ },
715
+ goToStep: function(step) {
716
+ _goToStep.call(this, step);
717
+ return this;
718
+ },
719
+ exit: function() {
720
+ _exitIntro.call(this, this._targetElement);
721
+ },
722
+ onbeforechange: function(providedCallback) {
723
+ if (typeof (providedCallback) === 'function') {
724
+ this._introBeforeChangeCallback = providedCallback;
725
+ } else {
726
+ throw new Error('Provided callback for onbeforechange was not a function');
727
+ }
728
+ return this;
729
+ },
730
+ onchange: function(providedCallback) {
731
+ if (typeof (providedCallback) === 'function') {
732
+ this._introChangeCallback = providedCallback;
733
+ } else {
734
+ throw new Error('Provided callback for onchange was not a function.');
735
+ }
736
+ return this;
737
+ },
738
+ oncomplete: function(providedCallback) {
739
+ if (typeof (providedCallback) === 'function') {
740
+ this._introCompleteCallback = providedCallback;
741
+ } else {
742
+ throw new Error('Provided callback for oncomplete was not a function.');
743
+ }
744
+ return this;
745
+ },
746
+ onexit: function(providedCallback) {
747
+ if (typeof (providedCallback) === 'function') {
748
+ this._introExitCallback = providedCallback;
749
+ } else {
750
+ throw new Error('Provided callback for onexit was not a function.');
751
+ }
752
+ return this;
753
+ }
754
+ };
755
+
756
+ exports.introJs = introJs;
757
+ return introJs;
758
+ }));
js/admin/new-customizer-admin.js CHANGED
@@ -1,57 +1,57 @@
1
- function generate_random_cache_bust(length) {
2
- var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
3
-
4
- if (! length) {
5
- length = Math.floor(Math.random() * chars.length);
6
- }
7
-
8
- var str = '';
9
- for (var i = 0; i < length; i++) {
10
- str += chars[Math.floor(Math.random() * chars.length)];
11
- }
12
- return str;
13
- }
14
-
15
- jQuery(document).ready(function($) {
16
- jQuery('.nav-tab-wrapper.a_b_tabs a').each(function(){
17
- var this_link = jQuery(this).attr('href');
18
- jQuery(this).attr('href', this_link + "&frontend=true");
19
-
20
- });
21
-
22
- jQuery(".nav-tab-wrapper.a_b_tabs a").on('click', function (event) {
23
-
24
- jQuery(parent.document).find(".lp-load-overlay").fadeIn('slow');
25
-
26
- });
27
-
28
-
29
- var open_variation = jQuery("#open_variation").val();
30
- var link_variation = jQuery("#view-post-btn a").attr('href');
31
-
32
- var preview_window = jQuery(parent.document).find("#lp-live-preview").attr('src');
33
- console.log(preview_window);
34
-
35
- console.log(link_variation);
36
-
37
- // reload the iframe preview page (for option toggles)
38
- //jQuery('.reload').on('click', function (event) {
39
- reload_preview(); // need to trigger reload from parent frame
40
- //});
41
-
42
- //alert(jQuery("#current_variation_id").text());
43
- function reload_preview() {
44
- var cache_bust = generate_random_cache_bust(35);
45
- var reload_url = parent.window.location.href;
46
- reload_url = reload_url.replace('template-customize=on','');
47
- //alert(reload_url);
48
- var current_variation_id = jQuery("#open_variation").val();
49
-
50
- // var reload = jQuery(parent.document).find("#lp-live-preview").attr("src");
51
- var new_reload = reload_url + "&live-preview-area=" + cache_bust + "&lp-variation-id=" + current_variation_id;
52
- jQuery(parent.document).find("#lp-live-preview").attr("src", new_reload);
53
- // console.log(new_reload);
54
- jQuery(parent.document).find(".lp-load-overlay").fadeOut('slow');
55
- }
56
-
57
- });
1
+ function generate_random_cache_bust(length) {
2
+ var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
3
+
4
+ if (! length) {
5
+ length = Math.floor(Math.random() * chars.length);
6
+ }
7
+
8
+ var str = '';
9
+ for (var i = 0; i < length; i++) {
10
+ str += chars[Math.floor(Math.random() * chars.length)];
11
+ }
12
+ return str;
13
+ }
14
+
15
+ jQuery(document).ready(function($) {
16
+ jQuery('.nav-tab-wrapper.a_b_tabs a').each(function(){
17
+ var this_link = jQuery(this).attr('href');
18
+ jQuery(this).attr('href', this_link + "&frontend=true");
19
+
20
+ });
21
+
22
+ jQuery(".nav-tab-wrapper.a_b_tabs a").on('click', function (event) {
23
+
24
+ jQuery(parent.document).find(".lp-load-overlay").fadeIn('slow');
25
+
26
+ });
27
+
28
+
29
+ var open_variation = jQuery("#open_variation").val();
30
+ var link_variation = jQuery("#view-post-btn a").attr('href');
31
+
32
+ var preview_window = jQuery(parent.document).find("#lp-live-preview").attr('src');
33
+ console.log(preview_window);
34
+
35
+ console.log(link_variation);
36
+
37
+ // reload the iframe preview page (for option toggles)
38
+ //jQuery('.reload').on('click', function (event) {
39
+ reload_preview(); // need to trigger reload from parent frame
40
+ //});
41
+
42
+ //alert(jQuery("#current_variation_id").text());
43
+ function reload_preview() {
44
+ var cache_bust = generate_random_cache_bust(35);
45
+ var reload_url = parent.window.location.href;
46
+ reload_url = reload_url.replace('template-customize=on','');
47
+ //alert(reload_url);
48
+ var current_variation_id = jQuery("#open_variation").val();
49
+
50
+ // var reload = jQuery(parent.document).find("#lp-live-preview").attr("src");
51
+ var new_reload = reload_url + "&live-preview-area=" + cache_bust + "&lp-variation-id=" + current_variation_id;
52
+ jQuery(parent.document).find("#lp-live-preview").attr("src", new_reload);
53
+ // console.log(new_reload);
54
+ jQuery(parent.document).find(".lp-load-overlay").fadeOut('slow');
55
+ }
56
+
57
+ });
js/admin/tour/tour.post-edit.js CHANGED
@@ -1,11 +1,11 @@
1
- // Post Edit Screen Tour
2
- jQuery("#titlewrap").attr({"data-step": "1", "data-intro": 'This is the adminstrative title of your landing. <br>Visitors will not be able to see this. To edit this, simply click on the text.'});
3
- jQuery(".nav-tab-wrapper").attr({"data-step": "2", "data-intro": 'This controls the A/B testing functionality of the page.<br>You can toggle back and forth between variations or click the add new variation to start an A/B test.'});
4
- jQuery(".new-save-lp-frontend").attr({"data-step": "3", "data-intro": 'This lauches the frontend editor that will allow you to see live previews of your landing page variations and edit the settings on the same screen!'});
5
- jQuery(".lp-notes").attr({"data-step": "4", "data-intro": 'Add notes to each of your A/B test variations to keep track of what you are testing.'});
6
- jQuery("#main-title-area").attr({"data-step": "5", "data-intro": 'This is the main headline area of your landing page. Make sure your headlines are catchy and have a clear value proposition'});
7
- jQuery("#content_InboundShortcodesButton_action").attr({"data-step": "6", "data-intro": '<p>This is the inbound shortcode tool. You can use it to <strong>build forms</strong> and do a number of other cool things!</p>'});
8
- jQuery("#lp_ab_display_stats_metabox").attr({"data-step": "7", "data-intro": '<p>This is the main stats box for your landing page variations. Here you will find all of your page views, conversions, and conversion rate numbers.</p><p>A/B Variation controls are also available here.</p><p><strong>Pause:</strong> Paused the current variation from a/b testing</p><p><strong>Edit:</strong> Jump to edit screen of selected variation</p><p><strong>Preview:</strong> Pop open preview window</p><p><strong>Clone:</strong> Clones exact copy of landing page in a new variation</p><p><strong>Delete:</strong> Deletes the variation from landing page</p>'});
9
- jQuery("#wp-content-wrap").attr({"data-step": "8", "data-intro": 'This is the main content area of your landing page. Not every landing page template uses this field but most do.'});
10
- jQuery("#lp_2_form_content").attr({"data-step": "9", "data-intro": 'The Landing Page Form or Conversion Button area is where you insert your form or link for conversion tracking. This box will accept any shortcodes or html forms inserted.'});
11
  jQuery("#lp_metabox_select_template").attr({"data-step": "9", "data-intro": 'These are the main options that control the currently selected template.'});
1
+ // Post Edit Screen Tour
2
+ jQuery("#titlewrap").attr({"data-step": "1", "data-intro": 'This is the adminstrative title of your landing. <br>Visitors will not be able to see this. To edit this, simply click on the text.'});
3
+ jQuery(".nav-tab-wrapper").attr({"data-step": "2", "data-intro": 'This controls the A/B testing functionality of the page.<br>You can toggle back and forth between variations or click the add new variation to start an A/B test.'});
4
+ jQuery(".new-save-lp-frontend").attr({"data-step": "3", "data-intro": 'This lauches the frontend editor that will allow you to see live previews of your landing page variations and edit the settings on the same screen!'});
5
+ jQuery(".lp-notes").attr({"data-step": "4", "data-intro": 'Add notes to each of your A/B test variations to keep track of what you are testing.'});
6
+ jQuery("#main-title-area").attr({"data-step": "5", "data-intro": 'This is the main headline area of your landing page. Make sure your headlines are catchy and have a clear value proposition'});
7
+ jQuery("#content_InboundShortcodesButton_action").attr({"data-step": "6", "data-intro": '<p>This is the inbound shortcode tool. You can use it to <strong>build forms</strong> and do a number of other cool things!</p>'});
8
+ jQuery("#lp_ab_display_stats_metabox").attr({"data-step": "7", "data-intro": '<p>This is the main stats box for your landing page variations. Here you will find all of your page views, conversions, and conversion rate numbers.</p><p>A/B Variation controls are also available here.</p><p><strong>Pause:</strong> Paused the current variation from a/b testing</p><p><strong>Edit:</strong> Jump to edit screen of selected variation</p><p><strong>Preview:</strong> Pop open preview window</p><p><strong>Clone:</strong> Clones exact copy of landing page in a new variation</p><p><strong>Delete:</strong> Deletes the variation from landing page</p>'});
9
+ jQuery("#wp-content-wrap").attr({"data-step": "8", "data-intro": 'This is the main content area of your landing page. Not every landing page template uses this field but most do.'});
10
+ jQuery("#lp_2_form_content").attr({"data-step": "9", "data-intro": 'The Landing Page Form or Conversion Button area is where you insert your form or link for conversion tracking. This box will accept any shortcodes or html forms inserted.'});
11
  jQuery("#lp_metabox_select_template").attr({"data-step": "9", "data-intro": 'These are the main options that control the currently selected template.'});
js/admin/tour/tour.post-list.js CHANGED
@@ -1,8 +1,8 @@
1
- // Post Edit Screen Tour
2
- jQuery(".thumbnail-lander.column-thumbnail-lander:eq(0)").attr({"data-step": "1", "data-intro": 'This is a quick screenshot of your landing page.<br><br> Click on it to see the live version in a popup window here.<br><br> You can preview your a/b variations directly from this view.'});
3
- jQuery(".post-title.page-title.column-title:eq(0)").attr({"data-step": "2", "data-intro": '<p>This is the admin title of the landing page. This isn\'t visible to visitors</p><p>You can delete, clone, or clears all of the page stats from here.</p><p><strong>Trash:</strong> Deletes this landing page and places it in the trash</p><p><strong>Edit:</strong> Jump to edit screen of this landing page</p><p><strong>Preview:</strong> Pop open preview window</p><p><strong>Clone:</strong> Clones exact copy of landing page. This includes all current variations.</p><p><strong>Clear Stats:</strong> This will clear all stats for each variation. This cannot be undone.</p>'});
4
- jQuery(".stats.column-stats:eq(0)").attr({"data-step": "3", "data-intro": '<p>These are the current stats of your landing page variations.</p><p>If you <strong>hover over the letter</strong> you will be able to preview or jump directly to the edit screen of that particular variation.</p><p>You can also clear indiviudal variation stats from there.</p>'});
5
- jQuery("#impressions").attr({"data-step": "4", "data-intro": '<p>This column shows the total number of page views the landing page has. This include all current A/B testing variations.</p>'});
6
- jQuery("#actions").attr({"data-step": "5", "data-intro": '<p>This column shows the total number of conversions the landing page has. This include all current A/B testing variations.</p>'});
7
- jQuery("#cr").attr({"data-step": "6", "data-intro": '<p>This column shows the total aggregate conversion rate of the landing page. This include all current A/B testing variations.</p>'});
8
  jQuery(".add-new-h2").attr({"data-step": "7", "data-intro": '<p>Thats all folks! Go ahead and create a new landing page and get started!</p>'});
1
+ // Post Edit Screen Tour
2
+ jQuery(".thumbnail-lander.column-thumbnail-lander:eq(0)").attr({"data-step": "1", "data-intro": 'This is a quick screenshot of your landing page.<br><br> Click on it to see the live version in a popup window here.<br><br> You can preview your a/b variations directly from this view.'});
3
+ jQuery(".post-title.page-title.column-title:eq(0)").attr({"data-step": "2", "data-intro": '<p>This is the admin title of the landing page. This isn\'t visible to visitors</p><p>You can delete, clone, or clears all of the page stats from here.</p><p><strong>Trash:</strong> Deletes this landing page and places it in the trash</p><p><strong>Edit:</strong> Jump to edit screen of this landing page</p><p><strong>Preview:</strong> Pop open preview window</p><p><strong>Clone:</strong> Clones exact copy of landing page. This includes all current variations.</p><p><strong>Clear Stats:</strong> This will clear all stats for each variation. This cannot be undone.</p>'});
4
+ jQuery(".stats.column-stats:eq(0)").attr({"data-step": "3", "data-intro": '<p>These are the current stats of your landing page variations.</p><p>If you <strong>hover over the letter</strong> you will be able to preview or jump directly to the edit screen of that particular variation.</p><p>You can also clear indiviudal variation stats from there.</p>'});
5
+ jQuery("#impressions").attr({"data-step": "4", "data-intro": '<p>This column shows the total number of page views the landing page has. This include all current A/B testing variations.</p>'});
6
+ jQuery("#actions").attr({"data-step": "5", "data-intro": '<p>This column shows the total number of conversions the landing page has. This include all current A/B testing variations.</p>'});
7
+ jQuery("#cr").attr({"data-step": "6", "data-intro": '<p>This column shows the total aggregate conversion rate of the landing page. This include all current A/B testing variations.</p>'});
8
  jQuery(".add-new-h2").attr({"data-step": "7", "data-intro": '<p>Thats all folks! Go ahead and create a new landing page and get started!</p>'});
js/customizer.load.js CHANGED
@@ -1,126 +1,126 @@
1
- jQuery(document).ready(function ($) {
2
- var viewchoice = $.cookie("lp-view-choice");
3
-
4
- var current_page = jQuery("#current_variation_id").text();
5
-
6
- // reload the iframe preview page (for option toggles)
7
- jQuery('.variation-lp').on('click', function (event) {
8
- variation_is = jQuery(this).attr("id");
9
- var original_url = jQuery(parent.document).find("#TB_iframeContent").attr("src");
10
- var current_id = jQuery("#current-post-id").text();
11
- someURL = original_url;
12
-
13
- splitURL = someURL.split('?');
14
- someURL = splitURL[0];
15
- new_url = someURL + "?lp-variation-id=" + variation_is + "&iframe_window=on&post_id=" + current_id;
16
- jQuery(parent.document).find("#TB_iframeContent").attr("src", new_url);
17
-
18
- });
19
-
20
-
21
- jQuery('html').addClass('small-html').css('overflow', 'auto').css('padding-bottom', '40px');
22
- jQuery('html').width('125%');
23
- jQuery('body').height('100%');
24
- jQuery('head').append('<link rel="stylesheet" href="/wp-content/plugins/landing-pages/css/customizer-load.css" type="text/css" />');
25
- if (viewchoice === "full-size") {
26
- jQuery('html').removeClass('small-html');
27
- jQuery('html').width('100%');
28
- jQuery('body').height('100%');
29
- setTimeout(function() {
30
- jQuery(parent.document).find('#lp_customizer_options').contents().find(".full-size-view").hide();
31
- jQuery(parent.document).find('#lp_customizer_options').contents().find(".shrink-view").show();
32
- }, 1000);
33
- }
34
-
35
- setTimeout(function () {
36
-
37
- var sidebarwidth = jQuery('#lp_customizer_options').width();
38
- var widthfix = jQuery(parent.document).width() - sidebarwidth;
39
-
40
- //console.log('ran');
41
- }, 2000);
42
- /* Almost working
43
- jQuery('.live-preview-area-box, #lp_container_form').on('mouseover', function (event)
44
- {
45
- var $tgt = jQuery(event.target);
46
- var domElement = jQuery(event.target);
47
- var current_el_id = jQuery(this).attr('id');
48
- var match_color = jQuery(this).css("color");
49
-
50
- jQuery(this).addClass("live-preview-active");
51
-
52
- if ( match_color === "rgb(255, 255, 255)") {
53
- jQuery(this).addClass('lp-see-this');
54
- }
55
-
56
- var current_el_parent_id = jQuery(this).parent().attr('id');
57
-
58
- if (typeof (current_el_id) != "undefined" && current_el_id !== null)
59
- {
60
- actual_el = "#" + current_el_id;
61
- }
62
- else if (typeof (current_el_parent_id) != "undefined" && current_el_parent_id !== null && current_el_parent_id !== "")
63
- {
64
- var actual_el = "#" + current_el_parent_id;
65
- }
66
- else
67
- {
68
- console.log("empty");
69
- }
70
- //console.log(actual_el);
71
- var finding_the_match = jQuery(parent.document).find('#lp_customizer_options').contents().find(actual_el);
72
- jQuery(finding_the_match).parent().parent().css("background", "#EBEBEB");
73
-
74
-
75
- });
76
-
77
- jQuery('.live-preview-area-box, #lp_container_form').on('mouseout', function (event) {
78
- var $tgt = jQuery(event.target);
79
- var domElement = jQuery(event.target);
80
- var match_color = jQuery(this).css("color");
81
-
82
- jQuery(this).removeClass("live-preview-active");
83
-
84
- if ( match_color === "rgb(0, 0, 0)") {
85
- jQuery(this).removeClass('lp-see-this');
86
- }
87
-
88
- var current_el_id = jQuery(this).attr('id');
89
- var current_el_parent_id = jQuery(this).parent().attr('id');
90
-
91
- if (typeof (current_el_id) != "undefined" && current_el_id !== null)
92
- {
93
- actual_el = "#" + current_el_id;
94
- }
95
- else if (typeof (current_el_parent_id) != "undefined" && current_el_parent_id !== null && current_el_parent_id !== "")
96
- {
97
- var actual_el = "#" + current_el_parent_id;
98
- }
99
- else
100
- {
101
- console.log("empty");
102
- }
103
- // console.log(actual_el);
104
- var finding_the_match = jQuery(parent.document).find('#lp_customizer_options').contents().find(actual_el);
105
- jQuery(finding_the_match).parent().parent().css("background", "white");
106
-
107
- });
108
-
109
-
110
-
111
- jQuery('.live-preview-area-box').on('click', function (event)
112
- {
113
- var $tgt = jQuery(event.target);
114
- var domElement = jQuery(event.target);
115
- var current_el_id = jQuery(this).attr('id');
116
- var click_id = "click-" + current_el_id;
117
- var frame_body = jQuery(parent.document).find('#lp_customizer_options').contents().find(click_id);
118
-
119
- console.log(frame_body);
120
- //jQuery(parent.document).find('#lp_customizer_options').contents().find(click_id).click();
121
- //parent.document.getElementById('lp_customizer_options').contentWindow.MyFunction(click_id, event)
122
-
123
-
124
- });
125
- */
126
  });
1
+ jQuery(document).ready(function ($) {
2
+ var viewchoice = $.cookie("lp-view-choice");
3
+
4
+ var current_page = jQuery("#current_variation_id").text();
5
+
6
+ // reload the iframe preview page (for option toggles)
7
+ jQuery('.variation-lp').on('click', function (event) {
8
+ variation_is = jQuery(this).attr("id");
9
+ var original_url = jQuery(parent.document).find("#TB_iframeContent").attr("src");
10
+ var current_id = jQuery("#current-post-id").text();
11
+ someURL = original_url;
12
+
13
+ splitURL = someURL.split('?');
14
+ someURL = splitURL[0];
15
+ new_url = someURL + "?lp-variation-id=" + variation_is + "&iframe_window=on&post_id=" + current_id;
16
+ jQuery(parent.document).find("#TB_iframeContent").attr("src", new_url);
17
+
18
+ });
19
+
20
+
21
+ jQuery('html').addClass('small-html').css('overflow', 'auto').css('padding-bottom', '40px');
22
+ jQuery('html').width('125%');
23
+ jQuery('body').height('100%');
24
+ jQuery('head').append('<link rel="stylesheet" href="/wp-content/plugins/landing-pages/css/customizer-load.css" type="text/css" />');
25
+ if (viewchoice === "full-size") {
26
+ jQuery('html').removeClass('small-html');
27
+ jQuery('html').width('100%');
28
+ jQuery('body').height('100%');
29
+ setTimeout(function() {
30
+ jQuery(parent.document).find('#lp_customizer_options').contents().find(".full-size-view").hide();
31
+ jQuery(parent.document).find('#lp_customizer_options').contents().find(".shrink-view").show();
32
+ }, 1000);
33
+ }
34
+
35
+ setTimeout(function () {
36
+
37
+ var sidebarwidth = jQuery('#lp_customizer_options').width();
38
+ var widthfix = jQuery(parent.document).width() - sidebarwidth;
39
+
40
+ //console.log('ran');
41
+ }, 2000);
42
+ /* Almost working
43
+ jQuery('.live-preview-area-box, #lp_container_form').on('mouseover', function (event)
44
+ {
45
+ var $tgt = jQuery(event.target);
46
+ var domElement = jQuery(event.target);
47
+ var current_el_id = jQuery(this).attr('id');
48
+ var match_color = jQuery(this).css("color");
49
+
50
+ jQuery(this).addClass("live-preview-active");
51
+
52
+ if ( match_color === "rgb(255, 255, 255)") {
53
+ jQuery(this).addClass('lp-see-this');
54
+ }
55
+
56
+ var current_el_parent_id = jQuery(this).parent().attr('id');
57
+
58
+ if (typeof (current_el_id) != "undefined" && current_el_id !== null)
59
+ {
60
+ actual_el = "#" + current_el_id;
61
+ }
62
+ else if (typeof (current_el_parent_id) != "undefined" && current_el_parent_id !== null && current_el_parent_id !== "")
63
+ {
64
+ var actual_el = "#" + current_el_parent_id;
65
+ }
66
+ else
67
+ {
68
+ console.log("empty");
69
+ }
70
+ //console.log(actual_el);
71
+ var finding_the_match = jQuery(parent.document).find('#lp_customizer_options').contents().find(actual_el);
72
+ jQuery(finding_the_match).parent().parent().css("background", "#EBEBEB");
73
+
74
+
75
+ });
76
+
77
+ jQuery('.live-preview-area-box, #lp_container_form').on('mouseout', function (event) {
78
+ var $tgt = jQuery(event.target);
79
+ var domElement = jQuery(event.target);
80
+ var match_color = jQuery(this).css("color");
81
+
82
+ jQuery(this).removeClass("live-preview-active");
83
+
84
+ if ( match_color === "rgb(0, 0, 0)") {
85
+ jQuery(this).removeClass('lp-see-this');
86
+ }
87
+
88
+ var current_el_id = jQuery(this).attr('id');
89
+ var current_el_parent_id = jQuery(this).parent().attr('id');
90
+
91
+ if (typeof (current_el_id) != "undefined" && current_el_id !== null)
92
+ {
93
+ actual_el = "#" + current_el_id;
94
+ }
95
+ else if (typeof (current_el_parent_id) != "undefined" && current_el_parent_id !== null && current_el_parent_id !== "")
96
+ {
97
+ var actual_el = "#" + current_el_parent_id;
98
+ }
99
+ else
100
+ {
101
+ console.log("empty");
102
+ }
103
+ // console.log(actual_el);
104
+ var finding_the_match = jQuery(parent.document).find('#lp_customizer_options').contents().find(actual_el);
105
+ jQuery(finding_the_match).parent().parent().css("background", "white");
106
+
107
+ });
108
+
109
+
110
+
111
+ jQuery('.live-preview-area-box').on('click', function (event)
112
+ {
113
+ var $tgt = jQuery(event.target);
114
+ var domElement = jQuery(event.target);
115
+ var current_el_id = jQuery(this).attr('id');
116
+ var click_id = "click-" + current_el_id;
117
+ var frame_body = jQuery(parent.document).find('#lp_customizer_options').contents().find(click_id);
118
+
119
+ console.log(frame_body);
120
+ //jQuery(parent.document).find('#lp_customizer_options').contents().find(click_id).click();
121
+ //parent.document.getElementById('lp_customizer_options').contentWindow.MyFunction(click_id, event)
122
+
123
+
124
+ });
125
+ */
126
  });
js/customizer.save.js CHANGED
@@ -1,475 +1,472 @@
1
- jQuery(document).ready(function($) {
2
-
3
- var window_width = jQuery(window).width();
4
- var parent_window = parent.document.width;
5
- iframe_size = parent_window * 0.334;
6
- new_size = parent_window * 0.70;
7
- new_new_size = parent_window - new_size;
8
- editor_size = iframe_size * 0.85 + "px";
9
- // Resize Functions
10
- $("#wp_content_resize, #lp-conversion-area_ifr").height(210);
11
- setTimeout(function() {
12
- jQuery("#lp-conversion-area_ifr, #lp-conversion-area_tbl, #wp_content_ifr, .mceLayout, .mceIframeContainer iframe").height(150);
13
- jQuery(".wp-editor-container table").css("max-width", editor_size);
14
- jQuery('iframe').contents().find("body").each(function(){
15
- jQuery(this).css("max-width", editor_size);
16
- });
17
- }, 1000);
18
-
19
- //jQuery("body").width(iframe_size);
20
- //jQuery("#wpcontent").width(iframe_size);
21
-
22
- // On keystroke have save button show
23
- /* Disable single settng save while not working
24
- jQuery('#lp-frontend-options-container input, #lp-frontend-options-container textarea').on("keyup", function (e) {
25
- var this_id = jQuery(this).attr("id");
26
- var parent_el = jQuery(this).parent();
27
- jQuery(parent_el).find(".lp-success-message").remove();
28
- jQuery(parent_el).find(".new-save-lp-frontend").remove();
29
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + this_id + '" style="margin-left:10px">Update</span>');
30
- //console.log(parent_el);
31
- jQuery(ajax_save_button).appendTo(parent_el);
32
- });
33
-
34
- // On change have save button show
35
- jQuery('#lp-frontend-options-container input, #lp-frontend-options-container select, #lp-frontend-options-container textarea').on("change", function (e) {
36
- var this_id = jQuery(this).attr("id");
37
- var parent_el = jQuery(this).parent();
38
- jQuery(parent_el).find(".lp-success-message").remove();
39
- jQuery(parent_el).find(".new-save-lp-frontend").remove();
40
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + this_id + '" style="margin-left:10px">Update</span>');
41
- //console.log(parent_el);
42
- jQuery(ajax_save_button).appendTo(parent_el);
43
- });
44
-
45
- // wysiwyg on keyup save action
46
- setTimeout(function() {
47
- jQuery('.landing-page-option-row iframe').contents().find('body').on("keyup", function (e) {
48
- var thisclass = jQuery(this).attr("class");
49
- var this_class_dirty = thisclass.replace("mceContentBody ", "");
50
- var this_class_cleaner = this_class_dirty.replace("wp-editor", "");
51
- var clean_1 = this_class_cleaner.replace("post-type-landing-page", "");
52
- var clean_2 = clean_1.replace(/[.\s]+$/g, ""); // remove trailing whitespace
53
- var clean_spaces = clean_2.replace(/\s{2,}/g, ' '); // remove more than one space
54
- var this_id = clean_spaces.replace(/[.\s]+$/g, ""); // remove trailing whitespace
55
- console.log(this_id);
56
- var parent_el = jQuery( "." + this_id + " .landing-page-table-header");
57
- jQuery(parent_el).find(".lp-success-message").remove();
58
- jQuery(parent_el).find(".new-save-lp-frontend").remove();
59
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + this_id + '" style="margin-left:10px;">Update</span>');
60
- //console.log(parent_el);
61
- jQuery(ajax_save_button).appendTo(parent_el);
62
- });
63
- }, 4000);
64
-
65
- // Prep Data and Save
66
- var nonce_val = lp_post_edit_ui.wp_landing_page_meta_nonce; // NEED CORRECT NONCE
67
- jQuery(document).on('mousedown', '.new-save-lp-frontend', function () {
68
- var type_input = jQuery(this).parent().find("input").attr("type");
69
- var type_select = jQuery(this).parent().find("select");
70
- // var the_conversion_area_editor = jQuery(this).parent().parent().find('#lp-conversion-area_ifr').length;
71
- jQuery(this).parent().find(".lp-success-message").hide();
72
- // var the_content_editor = jQuery(this).parent().parent().find('#wp_content_ifr').length;
73
- var type_wysiwyg = jQuery(this).parent().parent().find('iframe').length;
74
-
75
- var type_textarea = jQuery(this).parent().find("textarea");
76
- if (typeof (type_input) != "undefined" && type_input !== null) {
77
- var type_of_field = type_input;
78
- } else if (typeof (type_wysiwyg) != "undefined" && type_wysiwyg !== null && type_wysiwyg === 1) {
79
- var type_of_field = 'wysiwyg';
80
- } else if (typeof (type_textarea) != "undefined" && type_textarea !== null) {
81
- var type_of_field = 'textarea';
82
- } else {
83
- (typeof (type_select) != "undefined" && type_select)
84
- var type_of_field = 'select';
85
- }
86
- // console.log(type_of_field); // type of input
87
- var new_value_meta_input = jQuery(this).parent().find("input").val();
88
- //console.log(new_value_meta_input);
89
- var new_value_meta_select = jQuery(this).parent().find("select").val();
90
- var new_value_meta_textarea = jQuery(this).parent().find("textarea").val();
91
- // console.log(new_value_meta_select);
92
- var new_value_meta_radio = jQuery(this).parent().find("input:checked").val();
93
- var new_value_meta_checkbox = jQuery(this).parent().find('input[type="checkbox"]:checked').val();
94
- var new_wysiwyg_meta = jQuery(this).parent().parent().find("iframe").contents().find("body").html();
95
- // prep data
96
- if (typeof (new_value_meta_input) != "undefined" && new_value_meta_input !== null && type_of_field == "text") {
97
- var meta_to_save = new_value_meta_input;
98
- } else if (typeof (new_value_meta_textarea) != "undefined" && new_value_meta_textarea !== null && type_of_field == "textarea") {
99
- var meta_to_save = new_value_meta_textarea;
100
- } else if (typeof (new_value_meta_select) != "undefined" && new_value_meta_select !== null) {
101
- var meta_to_save = new_value_meta_select;
102
- } else if (typeof (new_value_meta_radio) != "undefined" && new_value_meta_radio !== null && type_of_field == "radio") {
103
- var meta_to_save = new_value_meta_radio;
104
- } else if (typeof (new_value_meta_checkbox) != "undefined" && new_value_meta_checkbox !== null && type_of_field == "checkbox") {
105
- var meta_to_save = new_value_meta_checkbox;
106
- } else if (typeof (new_wysiwyg_meta) != "undefined" && new_wysiwyg_meta !== null && type_of_field == "wysiwyg") {
107
- var meta_to_save = new_wysiwyg_meta;
108
- //alert('here');
109
- } else {
110
- var meta_to_save = "";
111
- }
112
-
113
- // if data exists save it
114
- // console.log(meta_to_save);
115
-
116
- var this_meta_id = jQuery(this).attr("id"); // From save button
117
- console.log(this_meta_id);
118
- var post_id = jQuery("#post_ID").text();
119
- console.log(post_id);
120
- console.log(meta_to_save);
121
-
122
- // Run Ajax
123
- jQuery.ajax({
124
- type: 'POST',
125
- url: lp_post_edit_ui.ajaxurl,
126
- context: this,
127
- data: {
128
- action: 'wp_landing_page_meta_save',
129
- meta_id: this_meta_id,
130
- new_meta_val: meta_to_save,
131
- page_id: post_id,
132
- nonce: nonce_val
133
- },
134
-
135
- success: function (data) {
136
- var self = this;
137
-
138
- //alert(data);
139
- // jQuery('.lp-form').unbind('submit').submit();
140
- //var worked = '<span class="success-message-map">Success! ' + this_meta_id + ' set to ' + meta_to_save + '</span>';
141
- var worked = '<span class="lp-success-message">Updated!</span>';
142
- var s_message = jQuery(self).parent();
143
- jQuery(worked).appendTo(s_message);
144
- jQuery(self).parent().find("lp-success-message").remove();
145
- jQuery(self).hide();
146
- jQuery('.reload').click();
147
- //alert("Changes Saved!");
148
- },
149
-
150
- error: function (MLHttpRequest, textStatus, errorThrown) {
151
- alert("Ajax not enabled");
152
- }
153
- });
154
-
155
- //reload_preview();
156
- return false;
157
-
158
- });
159
-
160
- */
161
-
162
- function MyFunction(id, this_event)
163
- {
164
- var anchor = id;
165
- element = document.getElementsByTagName("a");
166
- console.log(anchor);
167
- var anchorid = "#" + anchor;
168
- testing = jQuery(anchorid);
169
-
170
- var wrapit = jQuery(anchorid).attr('href');
171
- jQuery('html, body').stop().animate({
172
- scrollTop: jQuery(anchorid).offset().top - 100
173
- }, 500,'easeInOutExpo');
174
- /*
175
- if you don't want to use the easing effects:
176
- $('html, body').stop().animate({
177
- scrollTop: $($anchor.attr('href')).offset().top
178
- }, 1000);
179
- */
180
- this_event.preventDefault();
181
- }
182
-
183
-
184
- jQuery('.full-size-view').on('click', function (event) {
185
- jQuery(parent.document).find("#lp-live-preview").contents().find('html').removeClass("small-html");
186
- jQuery(parent.document).find("#lp-live-preview").contents().find('html').css("width", "100%");
187
- jQuery(this).hide();
188
- jQuery('.shrink-view').show();
189
- $.cookie("lp-view-choice", "full-size", { path: '/', expires: 7 });
190
- });
191
-
192
- jQuery('.shrink-view').on('click', function (event) {
193
- jQuery(parent.document).find("#lp-live-preview").contents().find('html').css("width", "125%");
194
- jQuery(parent.document).find("#lp-live-preview").contents().find('html').addClass("small-html");
195
- jQuery(this).hide();
196
-
197
- jQuery('.full-size-view').show();
198
- $.cookie("lp-view-choice", "shrink", { path: '/', expires: 7 });
199
- });
200
-
201
- function generate_random_cache_bust(length) {
202
- var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
203
-
204
- if (! length) {
205
- length = Math.floor(Math.random() * chars.length);
206
- }
207
-
208
- var str = '';
209
- for (var i = 0; i < length; i++) {
210
- str += chars[Math.floor(Math.random() * chars.length)];
211
- }
212
- return str;
213
- }
214
-
215
- // reload the iframe preview page (for option toggles)
216
- jQuery('.reload').on('click', function (event) {
217
- reload_preview();
218
- });
219
-
220
- var reload_url = parent.window.location.href;
221
-
222
- //alert(jQuery("#current_variation_id").text());
223
- function reload_preview() {
224
- var cache_bust = generate_random_cache_bust(35);
225
- var reload_url = parent.window.location.href;
226
- reload_url = reload_url.replace('template-customize=on','');
227
- //alert(reload_url);
228
- var current_variation_id = jQuery("#current_variation_id").text();
229
-
230
- // var reload = jQuery(parent.document).find("#lp-live-preview").attr("src");
231
- var new_reload = reload_url + "&live-preview-area=" + cache_bust + "&lp-variation-id=" + current_variation_id;
232
- jQuery(parent.document).find("#lp-live-preview").attr("src", new_reload);
233
- // console.log(new_reload);
234
- }
235
-
236
- // need rewrite to include the content and the form area
237
- jQuery('.landing-page-option-row').on('mouseover', function (event) {
238
- var $tgt = jQuery(event.target);
239
- var domElement = jQuery(event.target);
240
- var current_el_id = jQuery(this).find('input[type="text"], textarea, select').attr("id");
241
- var finding_the_match = jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_el_id);
242
- var match_color = jQuery(finding_the_match).css("color");
243
- jQuery(finding_the_match).addClass("live-preview-active");
244
- if ( match_color === "rgb(255, 255, 255)") {
245
- jQuery(finding_the_match).addClass('lp-see-this');
246
- }
247
- //jQuery(parent.document).find(".introjs-overlay").show();
248
-
249
- });
250
-
251
-
252
- jQuery('.landing-page-option-row').on('mouseout', function (event) {
253
- var $tgt = jQuery(event.target);
254
- var domElement = jQuery(event.target);
255
- var current_el_id = jQuery(this).find('input[type="text"], textarea, select').attr("id");
256
- var finding_the_match = jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_el_id);
257
- var match_color = jQuery(finding_the_match).css("color");
258
- jQuery(finding_the_match).removeClass("live-preview-active");
259
- if ( match_color === "rgb(0, 0, 0)") {
260
- jQuery(finding_the_match).removeClass('lp-see-this');
261
- }
262
- //jQuery(parent.document).find("#new").contents().find(".introjs-overlay").hide();
263
-
264
- });
265
-
266
- jQuery('input[type="text"], textarea, select').each(function(){
267
-
268
- //console.log(current_id);
269
- jQuery(this).on("keyup", function (e) {
270
- var current_id = jQuery(this).attr("id");
271
- var actual_id = "#" + current_id;
272
- //var current_id = jQuery(this).attr("id");
273
- var current_value_from_page = $(this, parent.document.body).text();
274
- //console.log(current_value_from_page);
275
- var new_value_show = jQuery(this).val();
276
- //console.log(new_value_show);
277
- //$(this, parent.document.body).html(new_value_show);
278
- jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
279
- });
280
-
281
- });
282
-
283
- /* On change add revert button
284
- jQuery('input[type="text"], textarea, select').each(function(){
285
-
286
- //console.log(current_id);
287
- jQuery(this).on("change", function (e) {
288
-
289
- });
290
-
291
- });
292
- */
293
-
294
-
295
- // Listen to the_content editor
296
- setTimeout(function() {
297
-     jQuery('#wp_content_ifr').contents().find("body").on({
298
- keyup: function() {
299
- //console.log('new vale');
300
- var new_value = jQuery(this).html();
301
- jQuery(parent.document).find("#lp-live-preview").contents().find("#the-content").html(new_value);
302
- parent_el = jQuery(".the-content-label");
303
- jQuery(parent_el).find(".lp-success-message").remove();
304
- jQuery(parent_el).find(".new-save-lp-frontend").remove();
305
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="the_content" style="margin-left:10px;">Update</span>');
306
- jQuery(ajax_save_button).appendTo(parent_el);
307
- },
308
- // change not working probably need timeout on clicks
309
- change: function() {
310
- //console.log('change logged');
311
- var new_value = jQuery(this).html();
312
- jQuery(parent.document).find("#lp-live-preview").contents().find("#the-content").html(new_value);
313
- }
314
- //jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
315
- });
316
-
317
- }, 4000);
318
-
319
- /* might still need
320
- // Listen to form area editor. Note shortcodes won't render correctly
321
- setTimeout(function() {
322
-       jQuery('#lp-conversion-area_ifr').contents().find("body").on({
323
- keyup: function() {
324
- //console.log('new vale');
325
- var new_value = jQuery(this).html();
326
- jQuery(parent.document).find("#lp-live-preview").contents().find("#lp-conversion-area").html(new_value);
327
- jQuery(parent.document).find("#lp-live-preview").contents().find("#lp_container_form").html(new_value);
328
- parent_el = jQuery(".lp-conversion-area-label");
329
- jQuery(parent_el).find(".lp-success-message").remove();
330
- jQuery(parent_el).find(".new-save-lp-frontend").remove();
331
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="lp-conversion-area" style="margin-left:10px;">Update</span>');
332
- //console.log(parent_el);
333
-
334
- jQuery(ajax_save_button).appendTo(parent_el);
335
- },
336
- // change not working probably need timeout on clicks
337
- change: function() {
338
- //console.log('change logged');
339
- var new_value = jQuery(this).html();
340
- jQuery(parent.document).find("#lp-live-preview").contents().find("#lp-conversion-area").html(new_value);
341
-
342
- }
343
- //jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
344
- });
345
-
346
- }, 3000);
347
- */
348
- jQuery('#wp_content').on("keyup", function (e) {
349
- //console.log('new vale');
350
- var new_value = jQuery(this).text();
351
- jQuery(parent.document).find("#lp-live-preview").contents().find("#the-content").html(new_value);
352
- //jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
353
- });
354
-
355
- //jQuery(parent.document).find('#lp_customizer_options').contents().find('#wp_content_ifr').contents().find("body").html();
356
-
357
- // Need to resize or insert custom css into media-uploader iframe
358
- /*
359
- tb_position_two = function() {
360
- var tbWindow = $('#TB_window');
361
- console.log(tbWindow);
362
-
363
- }
364
- */
365
-
366
- jQuery('#lp-frontend-options-container .upload_image_button').on('click', function (event) {
367
-
368
- //console.log(parent_input);
369
- var media_name = jQuery(this).attr('id');
370
- media_name = media_name.replace('uploader_','');
371
- var parent_el = jQuery(this).parent().parent();
372
- jQuery(parent_el).find(".lp-success-message").remove();
373
- jQuery(parent_el).find(".new-save-lp-frontend").remove();
374
- var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + media_name + '" style="position: absolute; top: 0px; right: 34px;">Update</span>');
375
- setTimeout(function() {
376
- jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
377
- }, 500);
378
- setTimeout(function() {
379
- jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
380
- }, 2000);
381
-
382
- //console.log(parent_el);
383
- jQuery(ajax_save_button).appendTo(parent_el);
384
- //alert(media_name);
385
- jQuery.cookie('media_name', media_name);
386
- jQuery.cookie('media_init', 1);
387
- tb_show('', 'media-upload.php?type=image&type=image&amp;TB_iframe=true');
388
- return false;
389
- }
390
- );
391
-
392
- window.tb_remove = function()
393
- {
394
- console.log('new-image-chosen');
395
- $("#TB_imageOff").unbind("click");
396
- $("#TB_closeWindowButton").unbind("click");
397
- $("#TB_window").fadeOut("fast",function(){
398
- $('#TB_window,#TB_overlay,#TB_HideSelect').remove();
399
- });
400
- $("#TB_load").remove();
401
- if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
402
- $("body","html").css({height: "auto", width: "auto"});
403
- $("html").css("overflow","");
404
- }
405
- document.onkeydown = "";
406
- document.onkeyup = "";
407
-
408
- jQuery.cookie('media_init', 0);
409
- return false;
410
- }
411
-
412
- window.send_to_editor = function(h) {
413
- if (jQuery.cookie('media_init')==1)
414
- {
415
- var imgurl = jQuery('img',h).attr('src');
416
- if (!imgurl)
417
- {
418
- var array = html.match("src=\"(.*?)\"");
419
- imgurl = array[1];
420
- }
421
- //alert(jQuery.cookie('media_name'));
422
- jQuery('#' + jQuery.cookie('media_name')).val(imgurl);
423
- jQuery.cookie('media_init', 0);
424
- tb_remove();
425
- }
426
- else
427
- {
428
- var ed, mce = typeof(tinymce) != 'undefined', qt = typeof(QTags) != 'undefined';
429
-
430
- if ( !wpActiveEditor ) {
431
- if ( mce && tinymce.activeEditor ) {
432
- ed = tinymce.activeEditor;
433
- wpActiveEditor = ed.id;
434
- } else if ( !qt ) {
435
- return false;
436
- }
437
- } else if ( mce ) {
438
- if ( tinymce.activeEditor && (tinymce.activeEditor.id == 'mce_fullscreen' || tinymce.activeEditor.id == 'wp_mce_fullscreen') )
439
- ed = tinymce.activeEditor;
440
- else
441
- ed = tinymce.get(wpActiveEditor);
442
- }
443
-
444
- if ( ed && !ed.isHidden() ) {
445
- // restore caret position on IE
446
- if ( tinymce.isIE && ed.windowManager.insertimagebookmark )
447
- ed.selection.moveToBookmark(ed.windowManager.insertimagebookmark);
448
-
449
- if ( h.indexOf('[caption') === 0 ) {
450
- if ( ed.wpSetImgCaption )
451
- h = ed.wpSetImgCaption(h);
452
- } else if ( h.indexOf('[gallery') === 0 ) {
453
- if ( ed.plugins.wpgallery )
454
- h = ed.plugins.wpgallery._do_gallery(h);
455
- } else if ( h.indexOf('[embed') === 0 ) {
456
- if ( ed.plugins.wordpress )
457
- h = ed.plugins.wordpress._setEmbed(h);
458
- }
459
-
460
- ed.execCommand('mceInsertContent', false, h);
461
- } else if ( qt ) {
462
- QTags.insertContent(h);
463
- } else {
464
- document.getElementById(wpActiveEditor).value += h;
465
- }
466
-
467
- jQuery.cookie('media_init', 0);
468
-
469
- try{tb_remove();}catch(e){};
470
- }
471
- }
472
-
473
-
474
-
475
- });
1
+ jQuery(document).ready(function($) {
2
+
3
+ var window_width = jQuery(window).width();
4
+ var parent_window = parent.document.width;
5
+ iframe_size = parent_window * 0.334;
6
+ new_size = parent_window * 0.70;
7
+ new_new_size = parent_window - new_size;
8
+ editor_size = iframe_size * 0.85 + "px";
9
+ // Resize Functions
10
+ $("#wp_content_resize, #lp-conversion-area_ifr").height(210);
11
+ setTimeout(function() {
12
+ jQuery("#lp-conversion-area_ifr, #lp-conversion-area_tbl, #wp_content_ifr, .mceLayout, .mceIframeContainer iframe").height(150);
13
+ jQuery(".wp-editor-container table").css("max-width", editor_size);
14
+ jQuery('iframe').contents().find("body").each(function(){
15
+ jQuery(this).css("max-width", editor_size);
16
+ });
17
+ }, 1000);
18
+
19
+ //jQuery("body").width(iframe_size);
20
+ //jQuery("#wpcontent").width(iframe_size);
21
+
22
+ // On keystroke have save button show
23
+ jQuery('#lp-frontend-options-container input, #lp-frontend-options-container textarea').on("keyup", function (e) {
24
+ var this_id = jQuery(this).attr("id");
25
+ var parent_el = jQuery(this).parent();
26
+ jQuery(parent_el).find(".lp-success-message").remove();
27
+ jQuery(parent_el).find(".new-save-lp-frontend").remove();
28
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + this_id + '" style="margin-left:10px">Update</span>');
29
+ //console.log(parent_el);
30
+ jQuery(ajax_save_button).appendTo(parent_el);
31
+ });
32
+
33
+ // On change have save button show
34
+ jQuery('#lp-frontend-options-container input, #lp-frontend-options-container select, #lp-frontend-options-container textarea').on("change", function (e) {
35
+ var this_id = jQuery(this).attr("id");
36
+ var parent_el = jQuery(this).parent();
37
+ jQuery(parent_el).find(".lp-success-message").remove();
38
+ jQuery(parent_el).find(".new-save-lp-frontend").remove();
39
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + this_id + '" style="margin-left:10px">Update</span>');
40
+ //console.log(parent_el);
41
+ jQuery(ajax_save_button).appendTo(parent_el);
42
+ });
43
+
44
+ // wysiwyg on keyup save action
45
+ setTimeout(function() {
46
+ jQuery('.landing-page-option-row iframe').contents().find('body').on("keyup", function (e) {
47
+ var thisclass = jQuery(this).attr("class");
48
+ var this_class_dirty = thisclass.replace("mceContentBody ", "");
49
+ var this_class_cleaner = this_class_dirty.replace("wp-editor", "");
50
+ var clean_1 = this_class_cleaner.replace("post-type-landing-page", "");
51
+ var clean_2 = clean_1.replace(/[.\s]+$/g, ""); // remove trailing whitespace
52
+ var clean_spaces = clean_2.replace(/\s{2,}/g, ' '); // remove more than one space
53
+ var this_id = clean_spaces.replace(/[.\s]+$/g, ""); // remove trailing whitespace
54
+ console.log(this_id);
55
+ var parent_el = jQuery( "." + this_id + " .landing-page-table-header");
56
+ jQuery(parent_el).find(".lp-success-message").remove();
57
+ jQuery(parent_el).find(".new-save-lp-frontend").remove();
58
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + this_id + '" style="margin-left:10px;">Update</span>');
59
+ //console.log(parent_el);
60
+ jQuery(ajax_save_button).appendTo(parent_el);
61
+ });
62
+ }, 4000);
63
+
64
+ // Prep Data and Save
65
+ var nonce_val = lp_post_edit_ui.wp_landing_page_meta_nonce; // NEED CORRECT NONCE
66
+ jQuery(document).on('mousedown', '.new-save-lp-frontend', function () {
67
+ var type_input = jQuery(this).parent().find("input").attr("type");
68
+ var type_select = jQuery(this).parent().find("select");
69
+ // var the_conversion_area_editor = jQuery(this).parent().parent().find('#lp-conversion-area_ifr').length;
70
+ jQuery(this).parent().find(".lp-success-message").hide();
71
+ // var the_content_editor = jQuery(this).parent().parent().find('#wp_content_ifr').length;
72
+ var type_wysiwyg = jQuery(this).parent().parent().find('iframe').length;
73
+
74
+ var type_textarea = jQuery(this).parent().find("textarea");
75
+ if (typeof (type_input) != "undefined" && type_input !== null) {
76
+ var type_of_field = type_input;
77
+ } else if (typeof (type_wysiwyg) != "undefined" && type_wysiwyg !== null && type_wysiwyg === 1) {
78
+ var type_of_field = 'wysiwyg';
79
+ } else if (typeof (type_textarea) != "undefined" && type_textarea !== null) {
80
+ var type_of_field = 'textarea';
81
+ } else {
82
+ (typeof (type_select) != "undefined" && type_select)
83
+ var type_of_field = 'select';
84
+ }
85
+ // console.log(type_of_field); // type of input
86
+ var new_value_meta_input = jQuery(this).parent().find("input").val();
87
+ //console.log(new_value_meta_input);
88
+ var new_value_meta_select = jQuery(this).parent().find("select").val();
89
+ var new_value_meta_textarea = jQuery(this).parent().find("textarea").val();
90
+ // console.log(new_value_meta_select);
91
+ var new_value_meta_radio = jQuery(this).parent().find("input:checked").val();
92
+ var new_value_meta_checkbox = jQuery(this).parent().find('input[type="checkbox"]:checked').val();
93
+ var new_wysiwyg_meta = jQuery(this).parent().parent().find("iframe").contents().find("body").html();
94
+ // prep data
95
+ if (typeof (new_value_meta_input) != "undefined" && new_value_meta_input !== null && type_of_field == "text") {
96
+ var meta_to_save = new_value_meta_input;
97
+ } else if (typeof (new_value_meta_textarea) != "undefined" && new_value_meta_textarea !== null && type_of_field == "textarea") {
98
+ var meta_to_save = new_value_meta_textarea;
99
+ } else if (typeof (new_value_meta_select) != "undefined" && new_value_meta_select !== null) {
100
+ var meta_to_save = new_value_meta_select;
101
+ } else if (typeof (new_value_meta_radio) != "undefined" && new_value_meta_radio !== null && type_of_field == "radio") {
102
+ var meta_to_save = new_value_meta_radio;
103
+ } else if (typeof (new_value_meta_checkbox) != "undefined" && new_value_meta_checkbox !== null && type_of_field == "checkbox") {
104
+ var meta_to_save = new_value_meta_checkbox;
105
+ } else if (typeof (new_wysiwyg_meta) != "undefined" && new_wysiwyg_meta !== null && type_of_field == "wysiwyg") {
106
+ var meta_to_save = new_wysiwyg_meta;
107
+ //alert('here');
108
+ } else {
109
+ var meta_to_save = "";
110
+ }
111
+
112
+ // if data exists save it
113
+ // console.log(meta_to_save);
114
+
115
+ var this_meta_id = jQuery(this).attr("id"); // From save button
116
+ console.log(this_meta_id);
117
+ var post_id = jQuery("#post_ID").text();
118
+ console.log(post_id);
119
+ console.log(meta_to_save);
120
+
121
+ // Run Ajax
122
+ jQuery.ajax({
123
+ type: 'POST',
124
+ url: lp_post_edit_ui.ajaxurl,
125
+ context: this,
126
+ data: {
127
+ action: 'wp_landing_page_meta_save',
128
+ meta_id: this_meta_id,
129
+ new_meta_val: meta_to_save,
130
+ page_id: post_id,
131
+ nonce: nonce_val
132
+ },
133
+
134
+ success: function (data) {
135
+ var self = this;
136
+
137
+ //alert(data);
138
+ // jQuery('.lp-form').unbind('submit').submit();
139
+ //var worked = '<span class="success-message-map">Success! ' + this_meta_id + ' set to ' + meta_to_save + '</span>';
140
+ var worked = '<span class="lp-success-message">Updated!</span>';
141
+ var s_message = jQuery(self).parent();
142
+ jQuery(worked).appendTo(s_message);
143
+ jQuery(self).parent().find("lp-success-message").remove();
144
+ jQuery(self).hide();
145
+ jQuery('.reload').click();
146
+ //alert("Changes Saved!");
147
+ },
148
+
149
+ error: function (MLHttpRequest, textStatus, errorThrown) {
150
+ alert("Ajax not enabled");
151
+ }
152
+ });
153
+
154
+ //reload_preview();
155
+ return false;
156
+
157
+ });
158
+
159
+ function MyFunction(id, this_event)
160
+ {
161
+ var anchor = id;
162
+ element = document.getElementsByTagName("a");
163
+ console.log(anchor);
164
+ var anchorid = "#" + anchor;
165
+ testing = jQuery(anchorid);
166
+
167
+ var wrapit = jQuery(anchorid).attr('href');
168
+ jQuery('html, body').stop().animate({
169
+ scrollTop: jQuery(anchorid).offset().top - 100
170
+ }, 500,'easeInOutExpo');
171
+ /*
172
+ if you don't want to use the easing effects:
173
+ $('html, body').stop().animate({
174
+ scrollTop: $($anchor.attr('href')).offset().top
175
+ }, 1000);
176
+ */
177
+ this_event.preventDefault();
178
+ }
179
+
180
+
181
+ jQuery('.full-size-view').on('click', function (event) {
182
+ jQuery(parent.document).find("#lp-live-preview").contents().find('html').removeClass("small-html");
183
+ jQuery(parent.document).find("#lp-live-preview").contents().find('html').css("width", "100%");
184
+ jQuery(this).hide();
185
+ jQuery('.shrink-view').show();
186
+ $.cookie("lp-view-choice", "full-size", { path: '/', expires: 7 });
187
+ });
188
+
189
+ jQuery('.shrink-view').on('click', function (event) {
190
+ jQuery(parent.document).find("#lp-live-preview").contents().find('html').css("width", "125%");
191
+ jQuery(parent.document).find("#lp-live-preview").contents().find('html').addClass("small-html");
192
+ jQuery(this).hide();
193
+
194
+ jQuery('.full-size-view').show();
195
+ $.cookie("lp-view-choice", "shrink", { path: '/', expires: 7 });
196
+ });
197
+
198
+ function generate_random_cache_bust(length) {
199
+ var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
200
+
201
+ if (! length) {
202
+ length = Math.floor(Math.random() * chars.length);
203
+ }
204
+
205
+ var str = '';
206
+ for (var i = 0; i < length; i++) {
207
+ str += chars[Math.floor(Math.random() * chars.length)];
208
+ }
209
+ return str;
210
+ }
211
+
212
+ // reload the iframe preview page (for option toggles)
213
+ jQuery('.reload').on('click', function (event) {
214
+ reload_preview();
215
+ });
216
+
217
+ var reload_url = parent.window.location.href;
218
+
219
+ //alert(jQuery("#current_variation_id").text());
220
+ function reload_preview() {
221
+ var cache_bust = generate_random_cache_bust(35);
222
+ var reload_url = parent.window.location.href;
223
+ reload_url = reload_url.replace('template-customize=on','');
224
+ //alert(reload_url);
225
+ var current_variation_id = jQuery("#current_variation_id").text();
226
+
227
+ // var reload = jQuery(parent.document).find("#lp-live-preview").attr("src");
228
+ var new_reload = reload_url + "&live-preview-area=" + cache_bust + "&lp-variation-id=" + current_variation_id;
229
+ jQuery(parent.document).find("#lp-live-preview").attr("src", new_reload);
230
+ // console.log(new_reload);
231
+ }
232
+
233
+ // need rewrite to include the content and the form area
234
+ jQuery('.landing-page-option-row').on('mouseover', function (event) {
235
+ var $tgt = jQuery(event.target);
236
+ var domElement = jQuery(event.target);
237
+ var current_el_id = jQuery(this).find('input[type="text"], textarea, select').attr("id");
238
+ var finding_the_match = jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_el_id);
239
+ var match_color = jQuery(finding_the_match).css("color");
240
+ jQuery(finding_the_match).addClass("live-preview-active");
241
+ if ( match_color === "rgb(255, 255, 255)") {
242
+ jQuery(finding_the_match).addClass('lp-see-this');
243
+ }
244
+ //jQuery(parent.document).find(".introjs-overlay").show();
245
+
246
+ });
247
+
248
+
249
+ jQuery('.landing-page-option-row').on('mouseout', function (event) {
250
+ var $tgt = jQuery(event.target);
251
+ var domElement = jQuery(event.target);
252
+ var current_el_id = jQuery(this).find('input[type="text"], textarea, select').attr("id");
253
+ var finding_the_match = jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_el_id);
254
+ var match_color = jQuery(finding_the_match).css("color");
255
+ jQuery(finding_the_match).removeClass("live-preview-active");
256
+ if ( match_color === "rgb(0, 0, 0)") {
257
+ jQuery(finding_the_match).removeClass('lp-see-this');
258
+ }
259
+ //jQuery(parent.document).find("#new").contents().find(".introjs-overlay").hide();
260
+
261
+ });
262
+
263
+ jQuery('input[type="text"], textarea, select').each(function(){
264
+
265
+ //console.log(current_id);
266
+ jQuery(this).on("keyup", function (e) {
267
+ var current_id = jQuery(this).attr("id");
268
+ var actual_id = "#" + current_id;
269
+ //var current_id = jQuery(this).attr("id");
270
+ var current_value_from_page = $(this, parent.document.body).text();
271
+ //console.log(current_value_from_page);
272
+ var new_value_show = jQuery(this).val();
273
+ //console.log(new_value_show);
274
+ //$(this, parent.document.body).html(new_value_show);
275
+ jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
276
+ });
277
+
278
+ });
279
+
280
+ /* On change add revert button
281
+ jQuery('input[type="text"], textarea, select').each(function(){
282
+
283
+ //console.log(current_id);
284
+ jQuery(this).on("change", function (e) {
285
+
286
+ });
287
+
288
+ });
289
+ */
290
+
291
+
292
+ // Listen to the_content editor
293
+ setTimeout(function() {
294
+     jQuery('#wp_content_ifr').contents().find("body").on({
295
+ keyup: function() {
296
+ //console.log('new vale');
297
+ var new_value = jQuery(this).html();
298
+ jQuery(parent.document).find("#lp-live-preview").contents().find("#the-content").html(new_value);
299
+ parent_el = jQuery(".the-content-label");
300
+ jQuery(parent_el).find(".lp-success-message").remove();
301
+ jQuery(parent_el).find(".new-save-lp-frontend").remove();
302
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="the_content" style="margin-left:10px;">Update</span>');
303
+ jQuery(ajax_save_button).appendTo(parent_el);
304
+ },
305
+ // change not working probably need timeout on clicks
306
+ change: function() {
307
+ //console.log('change logged');
308
+ var new_value = jQuery(this).html();
309
+ jQuery(parent.document).find("#lp-live-preview").contents().find("#the-content").html(new_value);
310
+ }
311
+ //jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
312
+ });
313
+
314
+ }, 4000);
315
+
316
+ /* might still need
317
+ // Listen to form area editor. Note shortcodes won't render correctly
318
+ setTimeout(function() {
319
+       jQuery('#lp-conversion-area_ifr').contents().find("body").on({
320
+ keyup: function() {
321
+ //console.log('new vale');
322
+ var new_value = jQuery(this).html();
323
+ jQuery(parent.document).find("#lp-live-preview").contents().find("#lp-conversion-area").html(new_value);
324
+ jQuery(parent.document).find("#lp-live-preview").contents().find("#lp_container_form").html(new_value);
325
+ parent_el = jQuery(".lp-conversion-area-label");
326
+ jQuery(parent_el).find(".lp-success-message").remove();
327
+ jQuery(parent_el).find(".new-save-lp-frontend").remove();
328
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="lp-conversion-area" style="margin-left:10px;">Update</span>');
329
+ //console.log(parent_el);
330
+
331
+ jQuery(ajax_save_button).appendTo(parent_el);
332
+ },
333
+ // change not working probably need timeout on clicks
334
+ change: function() {
335
+ //console.log('change logged');
336
+ var new_value = jQuery(this).html();
337
+ jQuery(parent.document).find("#lp-live-preview").contents().find("#lp-conversion-area").html(new_value);
338
+
339
+ }
340
+ //jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
341
+ });
342
+
343
+ }, 3000);
344
+ */
345
+ jQuery('#wp_content').on("keyup", function (e) {
346
+ //console.log('new vale');
347
+ var new_value = jQuery(this).text();
348
+ jQuery(parent.document).find("#lp-live-preview").contents().find("#the-content").html(new_value);
349
+ //jQuery(parent.document).find("#lp-live-preview").contents().find("#" + current_id).html(new_value_show);
350
+ });
351
+
352
+ //jQuery(parent.document).find('#lp_customizer_options').contents().find('#wp_content_ifr').contents().find("body").html();
353
+
354
+ // Need to resize or insert custom css into media-uploader iframe
355
+ /*
356
+ tb_position_two = function() {
357
+ var tbWindow = $('#TB_window');
358
+ console.log(tbWindow);
359
+
360
+ }
361
+ */
362
+
363
+ jQuery('#lp-frontend-options-container .upload_image_button').on('click', function (event) {
364
+
365
+ //console.log(parent_input);
366
+ var media_name = jQuery(this).attr('id');
367
+ media_name = media_name.replace('uploader_','');
368
+ var parent_el = jQuery(this).parent().parent();
369
+ jQuery(parent_el).find(".lp-success-message").remove();
370
+ jQuery(parent_el).find(".new-save-lp-frontend").remove();
371
+ var ajax_save_button = jQuery('<span class="button-primary new-save-lp-frontend" id="' + media_name + '" style="position: absolute; top: 0px; right: 34px;">Update</span>');
372
+ setTimeout(function() {
373
+ jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
374
+ }, 500);
375
+ setTimeout(function() {
376
+ jQuery("#TB_iframeContent").contents().find('head').append('<link rel="stylesheet" href="/wp-content/plugins/landing-pages/css/customizer.media-uploader.css" type="text/css" />');
377
+ }, 2000);
378
+
379
+ //console.log(parent_el);
380
+ jQuery(ajax_save_button).appendTo(parent_el);
381
+ //alert(media_name);
382
+ jQuery.cookie('media_name', media_name);
383
+ jQuery.cookie('media_init', 1);
384
+ tb_show('', 'media-upload.php?type=image&type=image&amp;TB_iframe=true');
385
+ return false;
386
+ }
387
+ );
388
+
389
+ window.tb_remove = function()
390
+ {
391
+ console.log('new-image-chosen');
392
+ $("#TB_imageOff").unbind("click");
393
+ $("#TB_closeWindowButton").unbind("click");
394
+ $("#TB_window").fadeOut("fast",function(){
395
+ $('#TB_window,#TB_overlay,#TB_HideSelect').remove();
396
+ });
397
+ $("#TB_load").remove();
398
+ if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
399
+ $("body","html").css({height: "auto", width: "auto"});
400
+ $("html").css("overflow","");
401
+ }
402
+ document.onkeydown = "";
403
+ document.onkeyup = "";
404
+
405
+ jQuery.cookie('media_init', 0);
406
+ return false;
407
+ }
408
+
409
+ window.send_to_editor = function(h) {
410
+ if (jQuery.cookie('media_init')==1)
411
+ {
412
+ var imgurl = jQuery('img',h).attr('src');
413
+ if (!imgurl)
414
+ {
415
+ var array = html.match("src=\"(.*?)\"");
416
+ imgurl = array[1];
417
+ }
418
+ //alert(jQuery.cookie('media_name'));
419
+ jQuery('#' + jQuery.cookie('media_name')).val(imgurl);
420
+ jQuery.cookie('media_init', 0);
421
+ tb_remove();
422
+ }
423
+ else
424
+ {
425
+ var ed, mce = typeof(tinymce) != 'undefined', qt = typeof(QTags) != 'undefined';
426
+
427
+ if ( !wpActiveEditor ) {
428
+ if ( mce && tinymce.activeEditor ) {
429
+ ed = tinymce.activeEditor;
430
+ wpActiveEditor = ed.id;
431
+ } else if ( !qt ) {
432
+ return false;
433
+ }
434
+ } else if ( mce ) {
435
+ if ( tinymce.activeEditor && (tinymce.activeEditor.id == 'mce_fullscreen' || tinymce.activeEditor.id == 'wp_mce_fullscreen') )
436
+ ed = tinymce.activeEditor;
437
+ else
438
+ ed = tinymce.get(wpActiveEditor);
439
+ }
440
+
441
+ if ( ed && !ed.isHidden() ) {
442
+ // restore caret position on IE
443
+ if ( tinymce.isIE && ed.windowManager.insertimagebookmark )
444
+ ed.selection.moveToBookmark(ed.windowManager.insertimagebookmark);
445
+
446
+ if ( h.indexOf('[caption') === 0 ) {
447
+ if ( ed.wpSetImgCaption )
448
+ h = ed.wpSetImgCaption(h);
449
+ } else if ( h.indexOf('[gallery') === 0 ) {
450
+ if ( ed.plugins.wpgallery )
451
+ h = ed.plugins.wpgallery._do_gallery(h);
452
+ } else if ( h.indexOf('[embed') === 0 ) {
453
+ if ( ed.plugins.wordpress )
454
+ h = ed.plugins.wordpress._setEmbed(h);
455
+ }
456
+
457
+ ed.execCommand('mceInsertContent', false, h);
458
+ } else if ( qt ) {
459
+ QTags.insertContent(h);
460
+ } else {
461
+ document.getElementById(wpActiveEditor).value += h;
462
+ }
463
+
464
+ jQuery.cookie('media_init', 0);
465
+
466
+ try{tb_remove();}catch(e){};
467
+ }
468
+ }
469
+
470
+
471
+
472
+ });
 
 
 
js/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
js/jquery.bindfirst.js CHANGED
@@ -1,15 +1,15 @@
1
- jQuery.fn.bindFirst = function(name, fn) {
2
- // bind as you normally would
3
- // don't want to miss out on any jQuery magic
4
- this.on(name, fn);
5
-
6
- // Thanks to a comment by @Martin, adding support for
7
- // namespaced events too.
8
- this.each(function() {
9
- var handlers = jQuery._data(this, 'events')[name.split('.')[0]];
10
- // take out the handler we just inserted from the end
11
- var handler = handlers.pop();
12
- // move it at the beginning
13
- handlers.splice(0, 0, handler);
14
- });
15
  };
1
+ jQuery.fn.bindFirst = function(name, fn) {
2
+ // bind as you normally would
3
+ // don't want to miss out on any jQuery magic
4
+ this.on(name, fn);
5
+
6
+ // Thanks to a comment by @Martin, adding support for
7
+ // namespaced events too.
8
+ this.each(function() {
9
+ var handlers = jQuery._data(this, 'events')[name.split('.')[0]];
10
+ // take out the handler we just inserted from the end
11
+ var handler = handlers.pop();
12
+ // move it at the beginning
13
+ handlers.splice(0, 0, handler);
14
+ });
15
  };
js/jquery.easing.min.js CHANGED
@@ -1,44 +1,44 @@
1
- /*
2
- * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
3
- *
4
- * Uses the built in easing capabilities added In jQuery 1.1
5
- * to offer multiple easing options
6
- *
7
- * TERMS OF USE - EASING EQUATIONS
8
- *
9
- * Open source under the BSD License.
10
- *
11
- * Copyright © 2001 Robert Penner
12
- * All rights reserved.
13
- *
14
- * TERMS OF USE - jQuery Easing
15
- *
16
- * Open source under the BSD License.
17
- *
18
- * Copyright © 2008 George McGinley Smith
19
- * All rights reserved.
20
- *
21
- * Redistribution and use in source and binary forms, with or without modification,
22
- * are permitted provided that the following conditions are met:
23
- *
24
- * Redistributions of source code must retain the above copyright notice, this list of
25
- * conditions and the following disclaimer.
26
- * Redistributions in binary form must reproduce the above copyright notice, this list
27
- * of conditions and the following disclaimer in the documentation and/or other materials
28
- * provided with the distribution.
29
- *
30
- * Neither the name of the author nor the names of contributors may be used to endorse
31
- * or promote products derived from this software without specific prior written permission.
32
- *
33
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
34
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
35
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
36
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
37
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
38
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
39
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
40
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
41
- * OF THE POSSIBILITY OF SUCH DAMAGE.
42
- *
43
- */
44
- jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
1
+ /*
2
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
3
+ *
4
+ * Uses the built in easing capabilities added In jQuery 1.1
5
+ * to offer multiple easing options
6
+ *
7
+ * TERMS OF USE - EASING EQUATIONS
8
+ *
9
+ * Open source under the BSD License.
10
+ *
11
+ * Copyright © 2001 Robert Penner
12
+ * All rights reserved.
13
+ *
14
+ * TERMS OF USE - jQuery Easing
15
+ *
16
+ * Open source under the BSD License.
17
+ *
18
+ * Copyright © 2008 George McGinley Smith
19
+ * All rights reserved.
20
+ *
21
+ * Redistribution and use in source and binary forms, with or without modification,
22
+ * are permitted provided that the following conditions are met:
23
+ *
24
+ * Redistributions of source code must retain the above copyright notice, this list of
25
+ * conditions and the following disclaimer.
26
+ * Redistributions in binary form must reproduce the above copyright notice, this list
27
+ * of conditions and the following disclaimer in the documentation and/or other materials
28
+ * provided with the distribution.
29
+ *
30
+ * Neither the name of the author nor the names of contributors may be used to endorse
31
+ * or promote products derived from this software without specific prior written permission.
32
+ *
33
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
34
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
35
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
36
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
37
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
38
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
39
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
40
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
41
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
42
+ *
43
+ */
44
+ jQuery.easing.jswing=jQuery.easing.swing;jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(e,f,a,h,g){return jQuery.easing[jQuery.easing.def](e,f,a,h,g)},easeInQuad:function(e,f,a,h,g){return h*(f/=g)*f+a},easeOutQuad:function(e,f,a,h,g){return -h*(f/=g)*(f-2)+a},easeInOutQuad:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f+a}return -h/2*((--f)*(f-2)-1)+a},easeInCubic:function(e,f,a,h,g){return h*(f/=g)*f*f+a},easeOutCubic:function(e,f,a,h,g){return h*((f=f/g-1)*f*f+1)+a},easeInOutCubic:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f+a}return h/2*((f-=2)*f*f+2)+a},easeInQuart:function(e,f,a,h,g){return h*(f/=g)*f*f*f+a},easeOutQuart:function(e,f,a,h,g){return -h*((f=f/g-1)*f*f*f-1)+a},easeInOutQuart:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f+a}return -h/2*((f-=2)*f*f*f-2)+a},easeInQuint:function(e,f,a,h,g){return h*(f/=g)*f*f*f*f+a},easeOutQuint:function(e,f,a,h,g){return h*((f=f/g-1)*f*f*f*f+1)+a},easeInOutQuint:function(e,f,a,h,g){if((f/=g/2)<1){return h/2*f*f*f*f*f+a}return h/2*((f-=2)*f*f*f*f+2)+a},easeInSine:function(e,f,a,h,g){return -h*Math.cos(f/g*(Math.PI/2))+h+a},easeOutSine:function(e,f,a,h,g){return h*Math.sin(f/g*(Math.PI/2))+a},easeInOutSine:function(e,f,a,h,g){return -h/2*(Math.cos(Math.PI*f/g)-1)+a},easeInExpo:function(e,f,a,h,g){return(f==0)?a:h*Math.pow(2,10*(f/g-1))+a},easeOutExpo:function(e,f,a,h,g){return(f==g)?a+h:h*(-Math.pow(2,-10*f/g)+1)+a},easeInOutExpo:function(e,f,a,h,g){if(f==0){return a}if(f==g){return a+h}if((f/=g/2)<1){return h/2*Math.pow(2,10*(f-1))+a}return h/2*(-Math.pow(2,-10*--f)+2)+a},easeInCirc:function(e,f,a,h,g){return -h*(Math.sqrt(1-(f/=g)*f)-1)+a},easeOutCirc:function(e,f,a,h,g){return h*Math.sqrt(1-(f=f/g-1)*f)+a},easeInOutCirc:function(e,f,a,h,g){if((f/=g/2)<1){return -h/2*(Math.sqrt(1-f*f)-1)+a}return h/2*(Math.sqrt(1-(f-=2)*f)+1)+a},easeInElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return -(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e},easeOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k)==1){return e+l}if(!j){j=k*0.3}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}return g*Math.pow(2,-10*h)*Math.sin((h*k-i)*(2*Math.PI)/j)+l+e},easeInOutElastic:function(f,h,e,l,k){var i=1.70158;var j=0;var g=l;if(h==0){return e}if((h/=k/2)==2){return e+l}if(!j){j=k*(0.3*1.5)}if(g<Math.abs(l)){g=l;var i=j/4}else{var i=j/(2*Math.PI)*Math.asin(l/g)}if(h<1){return -0.5*(g*Math.pow(2,10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j))+e}return g*Math.pow(2,-10*(h-=1))*Math.sin((h*k-i)*(2*Math.PI)/j)*0.5+l+e},easeInBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*(f/=h)*f*((g+1)*f-g)+a},easeOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}return i*((f=f/h-1)*f*((g+1)*f+g)+1)+a},easeInOutBack:function(e,f,a,i,h,g){if(g==undefined){g=1.70158}if((f/=h/2)<1){return i/2*(f*f*(((g*=(1.525))+1)*f-g))+a}return i/2*((f-=2)*f*(((g*=(1.525))+1)*f+g)+2)+a},easeInBounce:function(e,f,a,h,g){return h-jQuery.easing.easeOutBounce(e,g-f,0,h,g)+a},easeOutBounce:function(e,f,a,h,g){if((f/=g)<(1/2.75)){return h*(7.5625*f*f)+a}else{if(f<(2/2.75)){return h*(7.5625*(f-=(1.5/2.75))*f+0.75)+a}else{if(f<(2.5/2.75)){return h*(7.5625*(f-=(2.25/2.75))*f+0.9375)+a}else{return h*(7.5625*(f-=(2.625/2.75))*f+0.984375)+a}}}},easeInOutBounce:function(e,f,a,h,g){if(f<g/2){return jQuery.easing.easeInBounce(e,f*2,0,h,g)*0.5+a}return jQuery.easing.easeOutBounce(e,f*2-g,0,h,g)*0.5+h*0.5+a}});
js/jquery.tablesorter.js CHANGED
@@ -1,1031 +1,1031 @@
1
- /*
2
- *
3
- * TableSorter 2.0 - Client-side table sorting with ease!
4
- * Version 2.0.5b
5
- * @requires jQuery v1.2.3
6
- *
7
- * Copyright (c) 2007 Christian Bach
8
- * Examples and docs at: http://tablesorter.com
9
- * Dual licensed under the MIT and GPL licenses:
10
- * http://www.opensource.org/licenses/mit-license.php
11
- * http://www.gnu.org/licenses/gpl.html
12
- *
13
- */
14
- /**
15
- *
16
- * @description Create a sortable table with multi-column sorting capabilitys
17
- *
18
- * @example $('table').tablesorter();
19
- * @desc Create a simple tablesorter interface.
20
- *
21
- * @example $('table').tablesorter({ sortList:[[0,0],[1,0]] });
22
- * @desc Create a tablesorter interface and sort on the first and secound column column headers.
23
- *
24
- * @example $('table').tablesorter({ headers: { 0: { sorter: false}, 1: {sorter: false} } });
25
- *
26
- * @desc Create a tablesorter interface and disableing the first and second column headers.
27
- *
28
- *
29
- * @example $('table').tablesorter({ headers: { 0: {sorter:"integer"}, 1: {sorter:"currency"} } });
30
- *
31
- * @desc Create a tablesorter interface and set a column parser for the first
32
- * and second column.
33
- *
34
- *
35
- * @param Object
36
- * settings An object literal containing key/value pairs to provide
37
- * optional settings.
38
- *
39
- *
40
- * @option String cssHeader (optional) A string of the class name to be appended
41
- * to sortable tr elements in the thead of the table. Default value:
42
- * "header"
43
- *
44
- * @option String cssAsc (optional) A string of the class name to be appended to
45
- * sortable tr elements in the thead on a ascending sort. Default value:
46
- * "headerSortUp"
47
- *
48
- * @option String cssDesc (optional) A string of the class name to be appended
49
- * to sortable tr elements in the thead on a descending sort. Default
50
- * value: "headerSortDown"
51
- *
52
- * @option String sortInitialOrder (optional) A string of the inital sorting
53
- * order can be asc or desc. Default value: "asc"
54
- *
55
- * @option String sortMultisortKey (optional) A string of the multi-column sort
56
- * key. Default value: "shiftKey"
57
- *
58
- * @option String textExtraction (optional) A string of the text-extraction
59
- * method to use. For complex html structures inside td cell set this
60
- * option to "complex", on large tables the complex option can be slow.
61
- * Default value: "simple"
62
- *
63
- * @option Object headers (optional) An array containing the forces sorting
64
- * rules. This option let's you specify a default sorting rule. Default
65
- * value: null
66
- *
67
- * @option Array sortList (optional) An array containing the forces sorting
68
- * rules. This option let's you specify a default sorting rule. Default
69
- * value: null
70
- *
71
- * @option Array sortForce (optional) An array containing forced sorting rules.
72
- * This option let's you specify a default sorting rule, which is
73
- * prepended to user-selected rules. Default value: null
74
- *
75
- * @option Boolean sortLocaleCompare (optional) Boolean flag indicating whatever
76
- * to use String.localeCampare method or not. Default set to true.
77
- *
78
- *
79
- * @option Array sortAppend (optional) An array containing forced sorting rules.
80
- * This option let's you specify a default sorting rule, which is
81
- * appended to user-selected rules. Default value: null
82
- *
83
- * @option Boolean widthFixed (optional) Boolean flag indicating if tablesorter
84
- * should apply fixed widths to the table columns. This is usefull when
85
- * using the pager companion plugin. This options requires the dimension
86
- * jquery plugin. Default value: false
87
- *
88
- * @option Boolean cancelSelection (optional) Boolean flag indicating if
89
- * tablesorter should cancel selection of the table headers text.
90
- * Default value: true
91
- *
92
- * @option Boolean debug (optional) Boolean flag indicating if tablesorter
93
- * should display debuging information usefull for development.
94
- *
95
- * @type jQuery
96
- *
97
- * @name tablesorter
98
- *
99
- * @cat Plugins/Tablesorter
100
- *
101
- * @author Christian Bach/christian.bach@polyester.se
102
- */
103
-
104
- (function ($) {
105
- $.extend({
106
- tablesorter: new
107
- function () {
108
-
109
- var parsers = [],
110
- widgets = [];
111
-
112
- this.defaults = {
113
- cssHeader: "header",
114
- cssAsc: "headerSortUp",
115
- cssDesc: "headerSortDown",
116
- cssChildRow: "expand-child",
117
- sortInitialOrder: "asc",
118
- sortMultiSortKey: "shiftKey",
119
- sortForce: null,
120
- sortAppend: null,
121
- sortLocaleCompare: true,
122
- textExtraction: "simple",
123
- parsers: {}, widgets: [],
124
- widgetZebra: {
125
- css: ["even", "odd"]
126
- }, headers: {}, widthFixed: false,
127
- cancelSelection: true,
128
- sortList: [],
129
- headerList: [],
130
- dateFormat: "us",
131
- decimal: '/\.|\,/g',
132
- onRenderHeader: null,
133
- selectorHeaders: 'thead th',
134
- debug: false
135
- };
136
-
137
- /* debuging utils */
138
-
139
- function benchmark(s, d) {
140
- log(s + "," + (new Date().getTime() - d.getTime()) + "ms");
141
- }
142
-
143
- this.benchmark = benchmark;
144
-
145
- function log(s) {
146
- if (typeof console != "undefined" && typeof console.debug != "undefined") {
147
- console.log(s);
148
- } else {
149
- alert(s);
150
- }
151
- }
152
-
153
- /* parsers utils */
154
-
155
- function buildParserCache(table, $headers) {
156
-
157
- if (table.config.debug) {
158
- var parsersDebug = "";
159
- }
160
-
161
- if (table.tBodies.length == 0) return; // In the case of empty tables
162
- var rows = table.tBodies[0].rows;
163
-
164
- if (rows[0]) {
165
-
166
- var list = [],
167
- cells = rows[0].cells,
168
- l = cells.length;
169
-
170
- for (var i = 0; i < l; i++) {
171
-
172
- var p = false;
173
-
174
- if ($.metadata && ($($headers[i]).metadata() && $($headers[i]).metadata().sorter)) {
175
-
176
- p = getParserById($($headers[i]).metadata().sorter);
177
-
178
- } else if ((table.config.headers[i] && table.config.headers[i].sorter)) {
179
-
180
- p = getParserById(table.config.headers[i].sorter);
181
- }
182
- if (!p) {
183
-
184
- p = detectParserForColumn(table, rows, -1, i);
185
- }
186
-
187
- if (table.config.debug) {
188
- parsersDebug += "column:" + i + " parser:" + p.id + "\n";
189
- }
190
-
191
- list.push(p);
192
- }
193
- }
194
-
195
- if (table.config.debug) {
196
- log(parsersDebug);
197
- }
198
-
199
- return list;
200
- };
201
-
202
- function detectParserForColumn(table, rows, rowIndex, cellIndex) {
203
- var l = parsers.length,
204
- node = false,
205
- nodeValue = false,
206
- keepLooking = true;
207
- while (nodeValue == '' && keepLooking) {
208
- rowIndex++;
209
- if (rows[rowIndex]) {
210
- node = getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex);
211
- nodeValue = trimAndGetNodeText(table.config, node);
212
- if (table.config.debug) {
213
- log('Checking if value was empty on row:' + rowIndex);
214
- }
215
- } else {
216
- keepLooking = false;
217
- }
218
- }
219
- for (var i = 1; i < l; i++) {
220
- if (parsers[i].is(nodeValue, table, node)) {
221
- return parsers[i];
222
- }
223
- }
224
- // 0 is always the generic parser (text)
225
- return parsers[0];
226
- }
227
-
228
- function getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex) {
229
- return rows[rowIndex].cells[cellIndex];
230
- }
231
-
232
- function trimAndGetNodeText(config, node) {
233
- return $.trim(getElementText(config, node));
234
- }
235
-
236
- function getParserById(name) {
237
- var l = parsers.length;
238
- for (var i = 0; i < l; i++) {
239
- if (parsers[i].id.toLowerCase() == name.toLowerCase()) {
240
- return parsers[i];
241
- }
242
- }
243
- return false;
244
- }
245
-
246
- /* utils */
247
-
248
- function buildCache(table) {
249
-
250
- if (table.config.debug) {
251
- var cacheTime = new Date();
252
- }
253
-
254
- var totalRows = (table.tBodies[0] && table.tBodies[0].rows.length) || 0,
255
- totalCells = (table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length) || 0,
256
- parsers = table.config.parsers,
257
- cache = {
258
- row: [],
259
- normalized: []
260
- };
261
-
262
- for (var i = 0; i < totalRows; ++i) {
263
-
264
- /** Add the table data to main data array */
265
- var c = $(table.tBodies[0].rows[i]),
266
- cols = [];
267
-
268
- // if this is a child row, add it to the last row's children and
269
- // continue to the next row
270
- if (c.hasClass(table.config.cssChildRow)) {
271
- cache.row[cache.row.length - 1] = cache.row[cache.row.length - 1].add(c);
272
- // go to the next for loop
273
- continue;
274
- }
275
-
276
- cache.row.push(c);
277
-
278
- for (var j = 0; j < totalCells; ++j) {
279
- cols.push(parsers[j].format(getElementText(table.config, c[0].cells[j]), table, c[0].cells[j]));
280
- }
281
-
282
- cols.push(cache.normalized.length); // add position for rowCache
283
- cache.normalized.push(cols);
284
- cols = null;
285
- };
286
-
287
- if (table.config.debug) {
288
- benchmark("Building cache for " + totalRows + " rows:", cacheTime);
289
- }
290
-
291
- return cache;
292
- };
293
-
294
- function getElementText(config, node) {
295
-
296
- var text = "";
297
-
298
- if (!node) return "";
299
-
300
- if (!config.supportsTextContent) config.supportsTextContent = node.textContent || false;
301
-
302
- if (config.textExtraction == "simple") {
303
- if (config.supportsTextContent) {
304
- text = node.textContent;
305
- } else {
306
- if (node.childNodes[0] && node.childNodes[0].hasChildNodes()) {
307
- text = node.childNodes[0].innerHTML;
308
- } else {
309
- text = node.innerHTML;
310
- }
311
- }
312
- } else {
313
- if (typeof(config.textExtraction) == "function") {
314
- text = config.textExtraction(node);
315
- } else {
316
- text = $(node).text();
317
- }
318
- }
319
- return text;
320
- }
321
-
322
- function appendToTable(table, cache) {
323
-
324
- if (table.config.debug) {
325
- var appendTime = new Date()
326
- }
327
-
328
- var c = cache,
329
- r = c.row,
330
- n = c.normalized,
331
- totalRows = n.length,
332
- checkCell = (n[0].length - 1),
333
- tableBody = $(table.tBodies[0]),
334
- rows = [];
335
-
336
-
337
- for (var i = 0; i < totalRows; i++) {
338
- var pos = n[i][checkCell];
339
-
340
- rows.push(r[pos]);
341
-
342
- if (!table.config.appender) {
343
-
344
- //var o = ;
345
- var l = r[pos].length;
346
- for (var j = 0; j < l; j++) {
347
- tableBody[0].appendChild(r[pos][j]);
348
- }
349
-
350
- //
351
- }
352
- }
353
-
354
-
355
-
356
- if (table.config.appender) {
357
-
358
- table.config.appender(table, rows);
359
- }
360
-
361
- rows = null;
362
-
363
- if (table.config.debug) {
364
- benchmark("Rebuilt table:", appendTime);
365
- }
366
-
367
- // apply table widgets
368
- applyWidget(table);
369
-
370
- // trigger sortend
371
- setTimeout(function () {
372
- $(table).trigger("sortEnd");
373
- }, 0);
374
-
375
- };
376
-
377
- function buildHeaders(table) {
378
-
379
- if (table.config.debug) {
380
- var time = new Date();
381
- }
382
-
383
- var meta = ($.metadata) ? true : false;
384
-
385
- var header_index = computeTableHeaderCellIndexes(table);
386
-
387
- $tableHeaders = $(table.config.selectorHeaders, table).each(function (index) {
388
-
389
- this.column = header_index[this.parentNode.rowIndex + "-" + this.cellIndex];
390
- // this.column = index;
391
- this.order = formatSortingOrder(table.config.sortInitialOrder);
392
-
393
-
394
- this.count = this.order;
395
-
396
- if (checkHeaderMetadata(this) || checkHeaderOptions(table, index)) this.sortDisabled = true;
397
- if (checkHeaderOptionsSortingLocked(table, index)) this.order = this.lockedOrder = checkHeaderOptionsSortingLocked(table, index);
398
-
399
- if (!this.sortDisabled) {
400
- var $th = $(this).addClass(table.config.cssHeader);
401
- if (table.config.onRenderHeader) table.config.onRenderHeader.apply($th);
402
- }
403
-
404
- // add cell to headerList
405
- table.config.headerList[index] = this;
406
- });
407
-
408
- if (table.config.debug) {
409
- benchmark("Built headers:", time);
410
- log($tableHeaders);
411
- }
412
-
413
- return $tableHeaders;
414
-
415
- };
416
-
417
- // from:
418
- // http://www.javascripttoolbox.com/lib/table/examples.php
419
- // http://www.javascripttoolbox.com/temp/table_cellindex.html
420
-
421
-
422
- function computeTableHeaderCellIndexes(t) {
423
- var matrix = [];
424
- var lookup = {};
425
- var thead = t.getElementsByTagName('THEAD')[0];
426
- var trs = thead.getElementsByTagName('TR');
427
-
428
- for (var i = 0; i < trs.length; i++) {
429
- var cells = trs[i].cells;
430
- for (var j = 0; j < cells.length; j++) {
431
- var c = cells[j];
432
-
433
- var rowIndex = c.parentNode.rowIndex;
434
- var cellId = rowIndex + "-" + c.cellIndex;
435
- var rowSpan = c.rowSpan || 1;
436
- var colSpan = c.colSpan || 1
437
- var firstAvailCol;
438
- if (typeof(matrix[rowIndex]) == "undefined") {
439
- matrix[rowIndex] = [];
440
- }
441
- // Find first available column in the first row
442
- for (var k = 0; k < matrix[rowIndex].length + 1; k++) {
443
- if (typeof(matrix[rowIndex][k]) == "undefined") {
444
- firstAvailCol = k;
445
- break;
446
- }
447
- }
448
- lookup[cellId] = firstAvailCol;
449
- for (var k = rowIndex; k < rowIndex + rowSpan; k++) {
450
- if (typeof(matrix[k]) == "undefined") {
451
- matrix[k] = [];
452
- }
453
- var matrixrow = matrix[k];
454
- for (var l = firstAvailCol; l < firstAvailCol + colSpan; l++) {
455
- matrixrow[l] = "x";
456
- }
457
- }
458
- }
459
- }
460
- return lookup;
461
- }
462
-
463
- function checkCellColSpan(table, rows, row) {
464
- var arr = [],
465
- r = table.tHead.rows,
466
- c = r[row].cells;
467
-
468
- for (var i = 0; i < c.length; i++) {
469
- var cell = c[i];
470
-
471
- if (cell.colSpan > 1) {
472
- arr = arr.concat(checkCellColSpan(table, headerArr, row++));
473
- } else {
474
- if (table.tHead.length == 1 || (cell.rowSpan > 1 || !r[row + 1])) {
475
- arr.push(cell);
476
- }
477
- // headerArr[row] = (i+row);
478
- }
479
- }
480
- return arr;
481
- };
482
-
483
- function checkHeaderMetadata(cell) {
484
- if (($.metadata) && ($(cell).metadata().sorter === false)) {
485
- return true;
486
- };
487
- return false;
488
- }
489
-
490
- function checkHeaderOptions(table, i) {
491
- if ((table.config.headers[i]) && (table.config.headers[i].sorter === false)) {
492
- return true;
493
- };
494
- return false;
495
- }
496
-
497
- function checkHeaderOptionsSortingLocked(table, i) {
498
- if ((table.config.headers[i]) && (table.config.headers[i].lockedOrder)) return table.config.headers[i].lockedOrder;
499
- return false;
500
- }
501
-
502
- function applyWidget(table) {
503
- var c = table.config.widgets;
504
- var l = c.length;
505
- for (var i = 0; i < l; i++) {
506
-
507
- getWidgetById(c[i]).format(table);
508
- }
509
-
510
- }
511
-
512
- function getWidgetById(name) {
513
- var l = widgets.length;
514
- for (var i = 0; i < l; i++) {
515
- if (widgets[i].id.toLowerCase() == name.toLowerCase()) {
516
- return widgets[i];
517
- }
518
- }
519
- };
520
-
521
- function formatSortingOrder(v) {
522
- if (typeof(v) != "Number") {
523
- return (v.toLowerCase() == "desc") ? 1 : 0;
524
- } else {
525
- return (v == 1) ? 1 : 0;
526
- }
527
- }
528
-
529
- function isValueInArray(v, a) {
530
- var l = a.length;
531
- for (var i = 0; i < l; i++) {
532
- if (a[i][0] == v) {
533
- return true;
534
- }
535
- }
536
- return false;
537
- }
538
-
539
- function setHeadersCss(table, $headers, list, css) {
540
- // remove all header information
541
- $headers.removeClass(css[0]).removeClass(css[1]);
542
-
543
- var h = [];
544
- $headers.each(function (offset) {
545
- if (!this.sortDisabled) {
546
- h[this.column] = $(this);
547
- }
548
- });
549
-
550
- var l = list.length;
551
- for (var i = 0; i < l; i++) {
552
- h[list[i][0]].addClass(css[list[i][1]]);
553
- }
554
- }
555
-
556
- function fixColumnWidth(table, $headers) {
557
- var c = table.config;
558
- if (c.widthFixed) {
559
- var colgroup = $('<colgroup>');
560
- $("tr:first td", table.tBodies[0]).each(function () {
561
- colgroup.append($('<col>').css('width', $(this).width()));
562
- });
563
- $(table).prepend(colgroup);
564
- };
565
- }
566
-
567
- function updateHeaderSortCount(table, sortList) {
568
- var c = table.config,
569
- l = sortList.length;
570
- for (var i = 0; i < l; i++) {
571
- var s = sortList[i],
572
- o = c.headerList[s[0]];
573
- o.count = s[1];
574
- o.count++;
575
- }
576
- }
577
-
578
- /* sorting methods */
579
-
580
- function multisort(table, sortList, cache) {
581
-
582
- if (table.config.debug) {
583
- var sortTime = new Date();
584
- }
585
-
586
- var dynamicExp = "var sortWrapper = function(a,b) {",
587
- l = sortList.length;
588
-
589
- // TODO: inline functions.
590
- for (var i = 0; i < l; i++) {
591
-
592
- var c = sortList[i][0];
593
- var order = sortList[i][1];
594
- // var s = (getCachedSortType(table.config.parsers,c) == "text") ?
595
- // ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ?
596
- // "sortNumeric" : "sortNumericDesc");
597
- // var s = (table.config.parsers[c].type == "text") ? ((order == 0)
598
- // ? makeSortText(c) : makeSortTextDesc(c)) : ((order == 0) ?
599
- // makeSortNumeric(c) : makeSortNumericDesc(c));
600
- var s = (table.config.parsers[c].type == "text") ? ((order == 0) ? makeSortFunction("text", "asc", c) : makeSortFunction("text", "desc", c)) : ((order == 0) ? makeSortFunction("numeric", "asc", c) : makeSortFunction("numeric", "desc", c));
601
- var e = "e" + i;
602
-
603
- dynamicExp += "var " + e + " = " + s; // + "(a[" + c + "],b[" + c
604
- // + "]); ";
605
- dynamicExp += "if(" + e + ") { return " + e + "; } ";
606
- dynamicExp += "else { ";
607
-
608
- }
609
-
610
- // if value is the same keep orignal order
611
- var orgOrderCol = cache.normalized[0].length - 1;
612
- dynamicExp += "return a[" + orgOrderCol + "]-b[" + orgOrderCol + "];";
613
-
614
- for (var i = 0; i < l; i++) {
615
- dynamicExp += "}; ";
616
- }
617
-
618
- dynamicExp += "return 0; ";
619
- dynamicExp += "}; ";
620
-
621
- if (table.config.debug) {
622
- benchmark("Evaling expression:" + dynamicExp, new Date());
623
- }
624
-
625
- eval(dynamicExp);
626
-
627
- cache.normalized.sort(sortWrapper);
628
-
629
- if (table.config.debug) {
630
- benchmark("Sorting on " + sortList.toString() + " and dir " + order + " time:", sortTime);
631
- }
632
-
633
- return cache;
634
- };
635
-
636
- function makeSortFunction(type, direction, index) {
637
- var a = "a[" + index + "]",
638
- b = "b[" + index + "]";
639
- if (type == 'text' && direction == 'asc') {
640
- return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + a + " < " + b + ") ? -1 : 1 )));";
641
- } else if (type == 'text' && direction == 'desc') {
642
- return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + b + " < " + a + ") ? -1 : 1 )));";
643
- } else if (type == 'numeric' && direction == 'asc') {
644
- return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + a + " - " + b + "));";
645
- } else if (type == 'numeric' && direction == 'desc') {
646
- return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + b + " - " + a + "));";
647
- }
648
- };
649
-
650
- function makeSortText(i) {
651
- return "((a[" + i + "] < b[" + i + "]) ? -1 : ((a[" + i + "] > b[" + i + "]) ? 1 : 0));";
652
- };
653
-
654
- function makeSortTextDesc(i) {
655
- return "((b[" + i + "] < a[" + i + "]) ? -1 : ((b[" + i + "] > a[" + i + "]) ? 1 : 0));";
656
- };
657
-
658
- function makeSortNumeric(i) {
659
- return "a[" + i + "]-b[" + i + "];";
660
- };
661
-
662
- function makeSortNumericDesc(i) {
663
- return "b[" + i + "]-a[" + i + "];";
664
- };
665
-
666
- function sortText(a, b) {
667
- if (table.config.sortLocaleCompare) return a.localeCompare(b);
668
- return ((a < b) ? -1 : ((a > b) ? 1 : 0));
669
- };
670
-
671
- function sortTextDesc(a, b) {
672
- if (table.config.sortLocaleCompare) return b.localeCompare(a);
673
- return ((b < a) ? -1 : ((b > a) ? 1 : 0));
674
- };
675
-
676
- function sortNumeric(a, b) {
677
- return a - b;
678
- };
679
-
680
- function sortNumericDesc(a, b) {
681
- return b - a;
682
- };
683
-
684
- function getCachedSortType(parsers, i) {
685
- return parsers[i].type;
686
- }; /* public methods */
687
- this.construct = function (settings) {
688
- return this.each(function () {
689
- // if no thead or tbody quit.
690
- if (!this.tHead || !this.tBodies) return;
691
- // declare
692
- var $this, $document, $headers, cache, config, shiftDown = 0,
693
- sortOrder;
694
- // new blank config object
695
- this.config = {};
696
- // merge and extend.
697
- config = $.extend(this.config, $.tablesorter.defaults, settings);
698
- // store common expression for speed
699
- $this = $(this);
700
- // save the settings where they read
701
- $.data(this, "tablesorter", config);
702
- // build headers
703
- $headers = buildHeaders(this);
704
- // try to auto detect column type, and store in tables config
705
- this.config.parsers = buildParserCache(this, $headers);
706
- // build the cache for the tbody cells
707
- cache = buildCache(this);
708
- // get the css class names, could be done else where.
709
- var sortCSS = [config.cssDesc, config.cssAsc];
710
- // fixate columns if the users supplies the fixedWidth option
711
- fixColumnWidth(this);
712
- // apply event handling to headers
713
- // this is to big, perhaps break it out?
714
- $headers.click(
715
-
716
- function (e) {
717
- var totalRows = ($this[0].tBodies[0] && $this[0].tBodies[0].rows.length) || 0;
718
- if (!this.sortDisabled && totalRows > 0) {
719
- // Only call sortStart if sorting is
720
- // enabled.
721
- $this.trigger("sortStart");
722
- // store exp, for speed
723
- var $cell = $(this);
724
- // get current column index
725
- var i = this.column;
726
- // get current column sort order
727
- this.order = this.count++ % 2;
728
- // always sort on the locked order.
729
- if(this.lockedOrder) this.order = this.lockedOrder;
730
-
731
- // user only whants to sort on one
732
- // column
733
- if (!e[config.sortMultiSortKey]) {
734
- // flush the sort list
735
- config.sortList = [];
736
- if (config.sortForce != null) {
737
- var a = config.sortForce;
738
- for (var j = 0; j < a.length; j++) {
739
- if (a[j][0] != i) {
740
- config.sortList.push(a[j]);
741
- }
742
- }
743
- }
744
- // add column to sort list
745
- config.sortList.push([i, this.order]);
746
- // multi column sorting
747
- } else {
748
- // the user has clicked on an all
749
- // ready sortet column.
750
- if (isValueInArray(i, config.sortList)) {
751
- // revers the sorting direction
752
- // for all tables.
753
- for (var j = 0; j < config.sortList.length; j++) {
754
- var s = config.sortList[j],
755
- o = config.headerList[s[0]];
756
- if (s[0] == i) {
757
- o.count = s[1];
758
- o.count++;
759
- s[1] = o.count % 2;
760
- }
761
- }
762
- } else {
763
- // add column to sort list array
764
- config.sortList.push([i, this.order]);
765
- }
766
- };
767
- setTimeout(function () {
768
- // set css for headers
769
- setHeadersCss($this[0], $headers, config.sortList, sortCSS);
770
- appendToTable(
771
- $this[0], multisort(
772
- $this[0], config.sortList, cache)
773
- );
774
- }, 1);
775
- // stop normal event by returning false
776
- return false;
777
- }
778
- // cancel selection
779
- }).mousedown(function () {
780
- if (config.cancelSelection) {
781
- this.onselectstart = function () {
782
- return false
783
- };
784
- return false;
785
- }
786
- });
787
- // apply easy methods that trigger binded events
788
- $this.bind("update", function () {
789
- var me = this;
790
- setTimeout(function () {
791
- // rebuild parsers.
792
- me.config.parsers = buildParserCache(
793
- me, $headers);
794
- // rebuild the cache map
795
- cache = buildCache(me);
796
- }, 1);
797
- }).bind("updateCell", function (e, cell) {
798
- var config = this.config;
799
- // get position from the dom.
800
- var pos = [(cell.parentNode.rowIndex - 1), cell.cellIndex];
801
- // update cache
802
- cache.normalized[pos[0]][pos[1]] = config.parsers[pos[1]].format(
803
- getElementText(config, cell), cell);
804
- }).bind("sorton", function (e, list) {
805
- $(this).trigger("sortStart");
806
- config.sortList = list;
807
- // update and store the sortlist
808
- var sortList = config.sortList;
809
- // update header count index
810
- updateHeaderSortCount(this, sortList);
811
- // set css for headers
812
- setHeadersCss(this, $headers, sortList, sortCSS);
813
- // sort the table and append it to the dom
814
- appendToTable(this, multisort(this, sortList, cache));
815
- }).bind("appendCache", function () {
816
- appendToTable(this, cache);
817
- }).bind("applyWidgetId", function (e, id) {
818
- getWidgetById(id).format(this);
819
- }).bind("applyWidgets", function () {
820
- // apply widgets
821
- applyWidget(this);
822
- });
823
- if ($.metadata && ($(this).metadata() && $(this).metadata().sortlist)) {
824
- config.sortList = $(this).metadata().sortlist;
825
- }
826
- // if user has supplied a sort list to constructor.
827
- if (config.sortList.length > 0) {
828
- $this.trigger("sorton", [config.sortList]);
829
- }
830
- // apply widgets
831
- applyWidget(this);
832
- });
833
- };
834
- this.addParser = function (parser) {
835
- var l = parsers.length,
836
- a = true;
837
- for (var i = 0; i < l; i++) {
838
- if (parsers[i].id.toLowerCase() == parser.id.toLowerCase()) {
839
- a = false;
840
- }
841
- }
842
- if (a) {
843
- parsers.push(parser);
844
- };
845
- };
846
- this.addWidget = function (widget) {
847
- widgets.push(widget);
848
- };
849
- this.formatFloat = function (s) {
850
- var i = parseFloat(s);
851
- return (isNaN(i)) ? 0 : i;
852
- };
853
- this.formatInt = function (s) {
854
- var i = parseInt(s);
855
- return (isNaN(i)) ? 0 : i;
856
- };
857
- this.isDigit = function (s, config) {
858
- // replace all an wanted chars and match.
859
- return /^[-+]?\d*$/.test($.trim(s.replace(/[,.']/g, '')));
860
- };
861
- this.clearTableBody = function (table) {
862
- if ($.browser.msie) {
863
- function empty() {
864
- while (this.firstChild)
865
- this.removeChild(this.firstChild);
866
- }
867
- empty.apply(table.tBodies[0]);
868
- } else {
869
- table.tBodies[0].innerHTML = "";
870
- }
871
- };
872
- }
873
- });
874
-
875
- // extend plugin scope
876
- $.fn.extend({
877
- tablesorter: $.tablesorter.construct
878
- });
879
-
880
- // make shortcut
881
- var ts = $.tablesorter;
882
-
883
- // add default parsers
884
- ts.addParser({
885
- id: "text",
886
- is: function (s) {
887
- return true;
888
- }, format: function (s) {
889
- return $.trim(s.toLocaleLowerCase());
890
- }, type: "text"
891
- });
892
-
893
- ts.addParser({
894
- id: "digit",
895
- is: function (s, table) {
896
- var c = table.config;
897
- return $.tablesorter.isDigit(s, c);
898
- }, format: function (s) {
899
- return $.tablesorter.formatFloat(s);
900
- }, type: "numeric"
901
- });
902
-
903
- ts.addParser({
904
- id: "currency",
905
- is: function (s) {
906
- return /^[£$€?.]/.test(s);
907
- }, format: function (s) {
908
- return $.tablesorter.formatFloat(s.replace(new RegExp(/[£$€]/g), ""));
909
- }, type: "numeric"
910
- });
911
-
912
- ts.addParser({
913
- id: "ipAddress",
914
- is: function (s) {
915
- return /^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);
916
- }, format: function (s) {
917
- var a = s.split("."),
918
- r = "",
919
- l = a.length;
920
- for (var i = 0; i < l; i++) {
921
- var item = a[i];
922
- if (item.length == 2) {
923
- r += "0" + item;
924
- } else {
925
- r += item;
926
- }
927
- }
928
- return $.tablesorter.formatFloat(r);
929
- }, type: "numeric"
930
- });
931
-
932
- ts.addParser({
933
- id: "url",
934
- is: function (s) {
935
- return /^(https?|ftp|file):\/\/$/.test(s);
936
- }, format: function (s) {
937
- return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//), ''));
938
- }, type: "text"
939
- });
940
-
941
- ts.addParser({
942
- id: "isoDate",
943
- is: function (s) {
944
- return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);
945
- }, format: function (s) {
946
- return $.tablesorter.formatFloat((s != "") ? new Date(s.replace(
947
- new RegExp(/-/g), "/")).getTime() : "0");
948
- }, type: "numeric"
949
- });
950
-
951
- ts.addParser({
952
- id: "percent",
953
- is: function (s) {
954
- return /\%$/.test($.trim(s));
955
- }, format: function (s) {
956
- return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g), ""));
957
- }, type: "numeric"
958
- });
959
-
960
- ts.addParser({
961
- id: "usLongDate",
962
- is: function (s) {
963
- return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));
964
- }, format: function (s) {
965
- return $.tablesorter.formatFloat(new Date(s).getTime());
966
- }, type: "numeric"
967
- });
968
-
969
- ts.addParser({
970
- id: "shortDate",
971
- is: function (s) {
972
- return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);
973
- }, format: function (s, table) {
974
- var c = table.config;
975
- s = s.replace(/\-/g, "/");
976
- if (c.dateFormat == "us") {
977
- // reformat the string in ISO format
978
- s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2");
979
- } else if (c.dateFormat == "uk") {
980
- // reformat the string in ISO format
981
- s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
982
- } else if (c.dateFormat == "dd/mm/yy" || c.dateFormat == "dd-mm-yy") {
983
- s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");
984
- }
985
- return $.tablesorter.formatFloat(new Date(s).getTime());
986
- }, type: "numeric"
987
- });
988
- ts.addParser({
989
- id: "time",
990
- is: function (s) {
991
- return /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);
992
- }, format: function (s) {
993
- return $.tablesorter.formatFloat(new Date("2000/01/01 " + s).getTime());
994
- }, type: "numeric"
995
- });
996
- ts.addParser({
997
- id: "metadata",
998
- is: function (s) {
999
- return false;
1000
- }, format: function (s, table, cell) {
1001
- var c = table.config,
1002
- p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;
1003
- return $(cell).metadata()[p];
1004
- }, type: "numeric"
1005
- });
1006
- // add default widgets
1007
- ts.addWidget({
1008
- id: "zebra",
1009
- format: function (table) {
1010
- if (table.config.debug) {
1011
- var time = new Date();
1012
- }
1013
- var $tr, row = -1,
1014
- odd;
1015
- // loop through the visible rows
1016
- $("tr:visible", table.tBodies[0]).each(function (i) {
1017
- $tr = $(this);
1018
- // style children rows the same way the parent
1019
- // row was styled
1020
- if (!$tr.hasClass(table.config.cssChildRow)) row++;
1021
- odd = (row % 2 == 0);
1022
- $tr.removeClass(
1023
- table.config.widgetZebra.css[odd ? 0 : 1]).addClass(
1024
- table.config.widgetZebra.css[odd ? 1 : 0])
1025
- });
1026
- if (table.config.debug) {
1027
- $.tablesorter.benchmark("Applying Zebra widget", time);
1028
- }
1029
- }
1030
- });
1031
  })(jQuery);
1
+ /*
2
+ *
3
+ * TableSorter 2.0 - Client-side table sorting with ease!
4
+ * Version 2.0.5b
5
+ * @requires jQuery v1.2.3
6
+ *
7
+ * Copyright (c) 2007 Christian Bach
8
+ * Examples and docs at: http://tablesorter.com
9
+ * Dual licensed under the MIT and GPL licenses:
10
+ * http://www.opensource.org/licenses/mit-license.php
11
+ * http://www.gnu.org/licenses/gpl.html
12
+ *
13
+ */
14
+ /**
15
+ *
16
+ * @description Create a sortable table with multi-column sorting capabilitys
17
+ *
18
+ * @example $('table').tablesorter();
19
+ * @desc Create a simple tablesorter interface.
20
+ *
21
+ * @example $('table').tablesorter({ sortList:[[0,0],[1,0]] });
22
+ * @desc Create a tablesorter interface and sort on the first and secound column column headers.
23
+ *
24
+ * @example $('table').tablesorter({ headers: { 0: { sorter: false}, 1: {sorter: false} } });
25
+ *
26
+ * @desc Create a tablesorter interface and disableing the first and second column headers.
27
+ *
28
+ *
29
+ * @example $('table').tablesorter({ headers: { 0: {sorter:"integer"}, 1: {sorter:"currency"} } });
30
+ *
31
+ * @desc Create a tablesorter interface and set a column parser for the first
32
+ * and second column.
33
+ *
34
+ *
35
+ * @param Object
36
+ * settings An object literal containing key/value pairs to provide
37
+ * optional settings.
38
+ *
39
+ *
40
+ * @option String cssHeader (optional) A string of the class name to be appended
41
+ * to sortable tr elements in the thead of the table. Default value:
42
+ * "header"
43
+ *
44
+ * @option String cssAsc (optional) A string of the class name to be appended to
45
+ * sortable tr elements in the thead on a ascending sort. Default value:
46
+ * "headerSortUp"
47
+ *
48
+ * @option String cssDesc (optional) A string of the class name to be appended
49
+ * to sortable tr elements in the thead on a descending sort. Default
50
+ * value: "headerSortDown"
51
+ *
52
+ * @option String sortInitialOrder (optional) A string of the inital sorting
53
+ * order can be asc or desc. Default value: "asc"
54
+ *
55
+ * @option String sortMultisortKey (optional) A string of the multi-column sort
56
+ * key. Default value: "shiftKey"
57
+ *
58
+ * @option String textExtraction (optional) A string of the text-extraction
59
+ * method to use. For complex html structures inside td cell set this
60
+ * option to "complex", on large tables the complex option can be slow.
61
+ * Default value: "simple"
62
+ *
63
+ * @option Object headers (optional) An array containing the forces sorting
64
+ * rules. This option let's you specify a default sorting rule. Default
65
+ * value: null
66
+ *
67
+ * @option Array sortList (optional) An array containing the forces sorting
68
+ * rules. This option let's you specify a default sorting rule. Default
69
+ * value: null
70
+ *
71
+ * @option Array sortForce (optional) An array containing forced sorting rules.
72
+ * This option let's you specify a default sorting rule, which is
73
+ * prepended to user-selected rules. Default value: null
74
+ *
75
+ * @option Boolean sortLocaleCompare (optional) Boolean flag indicating whatever
76
+ * to use String.localeCampare method or not. Default set to true.
77
+ *
78
+ *
79
+ * @option Array sortAppend (optional) An array containing forced sorting rules.
80
+ * This option let's you specify a default sorting rule, which is
81
+ * appended to user-selected rules. Default value: null
82
+ *
83
+ * @option Boolean widthFixed (optional) Boolean flag indicating if tablesorter
84
+ * should apply fixed widths to the table columns. This is usefull when
85
+ * using the pager companion plugin. This options requires the dimension
86
+ * jquery plugin. Default value: false
87
+ *
88
+ * @option Boolean cancelSelection (optional) Boolean flag indicating if
89
+ * tablesorter should cancel selection of the table headers text.
90
+ * Default value: true
91
+ *
92
+ * @option Boolean debug (optional) Boolean flag indicating if tablesorter
93
+ * should display debuging information usefull for development.
94
+ *
95
+ * @type jQuery
96
+ *
97
+ * @name tablesorter
98
+ *
99
+ * @cat Plugins/Tablesorter
100
+ *
101
+ * @author Christian Bach/christian.bach@polyester.se
102
+ */
103
+
104
+ (function ($) {
105
+ $.extend({
106
+ tablesorter: new
107
+ function () {
108
+
109
+ var parsers = [],
110
+ widgets = [];
111
+
112
+ this.defaults = {
113
+ cssHeader: "header",
114
+ cssAsc: "headerSortUp",
115
+ cssDesc: "headerSortDown",
116
+ cssChildRow: "expand-child",
117
+ sortInitialOrder: "asc",
118
+ sortMultiSortKey: "shiftKey",
119
+ sortForce: null,
120
+ sortAppend: null,
121
+ sortLocaleCompare: true,
122
+ textExtraction: "simple",
123
+ parsers: {}, widgets: [],
124
+ widgetZebra: {
125
+ css: ["even", "odd"]
126
+ }, headers: {}, widthFixed: false,
127
+ cancelSelection: true,
128
+ sortList: [],
129
+ headerList: [],
130
+ dateFormat: "us",
131
+ decimal: '/\.|\,/g',
132
+ onRenderHeader: null,
133
+ selectorHeaders: 'thead th',
134
+ debug: false
135
+ };
136
+
137
+ /* debuging utils */
138
+
139
+ function benchmark(s, d) {
140
+ log(s + "," + (new Date().getTime() - d.getTime()) + "ms");
141
+ }
142
+
143
+ this.benchmark = benchmark;
144
+
145
+ function log(s) {
146
+ if (typeof console != "undefined" && typeof console.debug != "undefined") {
147
+ console.log(s);
148
+ } else {
149
+ alert(s);
150
+ }
151
+ }
152
+
153
+ /* parsers utils */
154
+
155
+ function buildParserCache(table, $headers) {
156
+
157
+ if (table.config.debug) {
158
+ var parsersDebug = "";
159
+ }
160
+
161
+ if (table.tBodies.length == 0) return; // In the case of empty tables
162
+ var rows = table.tBodies[0].rows;
163
+
164
+ if (rows[0]) {
165
+
166
+ var list = [],
167
+ cells = rows[0].cells,
168
+ l = cells.length;
169
+
170
+ for (var i = 0; i < l; i++) {
171
+
172
+ var p = false;
173
+
174
+ if ($.metadata && ($($headers[i]).metadata() && $($headers[i]).metadata().sorter)) {
175
+
176
+ p = getParserById($($headers[i]).metadata().sorter);
177
+
178
+ } else if ((table.config.headers[i] && table.config.headers[i].sorter)) {
179
+
180
+ p = getParserById(table.config.headers[i].sorter);
181
+ }
182
+ if (!p) {
183
+
184
+ p = detectParserForColumn(table, rows, -1, i);
185
+ }
186
+
187
+ if (table.config.debug) {
188
+ parsersDebug += "column:" + i + " parser:" + p.id + "\n";
189
+ }
190
+
191
+ list.push(p);
192
+ }
193
+ }
194
+
195
+ if (table.config.debug) {
196
+ log(parsersDebug);
197
+ }
198
+
199
+ return list;
200
+ };
201
+
202
+ function detectParserForColumn(table, rows, rowIndex, cellIndex) {
203
+ var l = parsers.length,
204
+ node = false,
205
+ nodeValue = false,
206
+ keepLooking = true;
207
+ while (nodeValue == '' && keepLooking) {
208
+ rowIndex++;
209
+ if (rows[rowIndex]) {
210
+ node = getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex);
211
+ nodeValue = trimAndGetNodeText(table.config, node);
212
+ if (table.config.debug) {
213
+ log('Checking if value was empty on row:' + rowIndex);
214
+ }
215
+ } else {
216
+ keepLooking = false;
217
+ }
218
+ }
219
+ for (var i = 1; i < l; i++) {
220
+ if (parsers[i].is(nodeValue, table, node)) {
221
+ return parsers[i];
222
+ }
223
+ }
224
+ // 0 is always the generic parser (text)
225
+ return parsers[0];
226
+ }
227
+
228
+ function getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex) {
229
+ return rows[rowIndex].cells[cellIndex];
230
+ }
231
+
232
+ function trimAndGetNodeText(config, node) {
233
+ return $.trim(getElementText(config, node));
234
+ }
235
+
236
+ function getParserById(name) {
237
+ var l = parsers.length;
238
+ for (var i = 0; i < l; i++) {
239
+ if (parsers[i].id.toLowerCase() == name.toLowerCase()) {
240
+ return parsers[i];
241
+ }
242
+ }
243
+ return false;
244
+ }
245
+
246
+ /* utils */
247
+
248
+ function buildCache(table) {
249
+
250
+ if (table.config.debug) {
251
+ var cacheTime = new Date();
252
+ }
253
+
254
+ var totalRows = (table.tBodies[0] && table.tBodies[0].rows.length) || 0,
255
+ totalCells = (table.tBodies[0].rows[0] && table.tBodies[0].rows[0].cells.length) || 0,
256
+ parsers = table.config.parsers,
257
+ cache = {
258
+ row: [],
259
+ normalized: []
260
+ };
261
+
262
+ for (var i = 0; i < totalRows; ++i) {
263
+
264
+ /** Add the table data to main data array */
265
+ var c = $(table.tBodies[0].rows[i]),
266
+ cols = [];
267
+
268
+ // if this is a child row, add it to the last row's children and
269
+ // continue to the next row
270
+ if (c.hasClass(table.config.cssChildRow)) {
271
+ cache.row[cache.row.length - 1] = cache.row[cache.row.length - 1].add(c);
272
+ // go to the next for loop
273
+ continue;
274
+ }
275
+
276
+ cache.row.push(c);
277
+
278
+ for (var j = 0; j < totalCells; ++j) {
279
+ cols.push(parsers[j].format(getElementText(table.config, c[0].cells[j]), table, c[0].cells[j]));
280
+ }
281
+
282
+ cols.push(cache.normalized.length); // add position for rowCache
283
+ cache.normalized.push(cols);
284
+ cols = null;
285
+ };
286
+
287
+ if (table.config.debug) {
288
+ benchmark("Building cache for " + totalRows + " rows:", cacheTime);
289
+ }
290
+
291
+ return cache;
292
+ };
293
+
294
+ function getElementText(config, node) {
295
+
296
+ var text = "";
297
+
298
+ if (!node) return "";
299
+
300
+ if (!config.supportsTextContent) config.supportsTextContent = node.textContent || false;
301
+
302
+ if (config.textExtraction == "simple") {
303
+ if (config.supportsTextContent) {
304
+ text = node.textContent;
305
+ } else {
306
+ if (node.childNodes[0] && node.childNodes[0].hasChildNodes()) {
307
+ text = node.childNodes[0].innerHTML;
308
+ } else {
309
+ text = node.innerHTML;
310
+ }
311
+ }
312
+ } else {
313
+ if (typeof(config.textExtraction) == "function") {
314
+ text = config.textExtraction(node);
315
+ } else {
316
+ text = $(node).text();
317
+ }
318
+ }
319
+ return text;
320
+ }
321
+
322
+ function appendToTable(table, cache) {
323
+
324
+ if (table.config.debug) {
325
+ var appendTime = new Date()
326
+ }
327
+
328
+ var c = cache,
329
+ r = c.row,
330
+ n = c.normalized,
331
+ totalRows = n.length,
332
+ checkCell = (n[0].length - 1),
333
+ tableBody = $(table.tBodies[0]),
334
+ rows = [];
335
+
336
+
337
+ for (var i = 0; i < totalRows; i++) {
338
+ var pos = n[i][checkCell];
339
+
340
+ rows.push(r[pos]);
341
+
342
+ if (!table.config.appender) {
343
+
344
+ //var o = ;
345
+ var l = r[pos].length;
346
+ for (var j = 0; j < l; j++) {
347
+ tableBody[0].appendChild(r[pos][j]);
348
+ }
349
+
350
+ //
351
+ }
352
+ }
353
+
354
+
355
+
356
+ if (table.config.appender) {
357
+
358
+ table.config.appender(table, rows);
359
+ }
360
+
361
+ rows = null;
362
+
363
+ if (table.config.debug) {
364
+ benchmark("Rebuilt table:", appendTime);
365
+ }
366
+
367
+ // apply table widgets
368
+ applyWidget(table);
369
+
370
+ // trigger sortend
371
+ setTimeout(function () {
372
+ $(table).trigger("sortEnd");
373
+ }, 0);
374
+
375
+ };
376
+
377
+ function buildHeaders(table) {
378
+
379
+ if (table.config.debug) {
380
+ var time = new Date();
381
+ }
382
+
383
+ var meta = ($.metadata) ? true : false;
384
+
385
+ var header_index = computeTableHeaderCellIndexes(table);
386
+
387
+ $tableHeaders = $(table.config.selectorHeaders, table).each(function (index) {
388
+
389
+ this.column = header_index[this.parentNode.rowIndex + "-" + this.cellIndex];
390
+ // this.column = index;
391
+ this.order = formatSortingOrder(table.config.sortInitialOrder);
392
+
393
+
394
+ this.count = this.order;
395
+
396
+ if (checkHeaderMetadata(this) || checkHeaderOptions(table, index)) this.sortDisabled = true;
397
+ if (checkHeaderOptionsSortingLocked(table, index)) this.order = this.lockedOrder = checkHeaderOptionsSortingLocked(table, index);
398
+
399
+ if (!this.sortDisabled) {
400
+ var $th = $(this).addClass(table.config.cssHeader);
401
+ if (table.config.onRenderHeader) table.config.onRenderHeader.apply($th);
402
+ }
403
+
404
+ // add cell to headerList
405
+ table.config.headerList[index] = this;
406
+ });
407
+
408
+ if (table.config.debug) {
409
+ benchmark("Built headers:", time);
410
+ log($tableHeaders);
411
+ }
412
+
413
+ return $tableHeaders;
414
+
415
+ };
416
+
417
+ // from:
418
+ // http://www.javascripttoolbox.com/lib/table/examples.php
419
+ // http://www.javascripttoolbox.com/temp/table_cellindex.html
420
+
421
+
422
+ function computeTableHeaderCellIndexes(t) {
423
+ var matrix = [];
424
+ var lookup = {};
425
+ var thead = t.getElementsByTagName('THEAD')[0];
426
+ var trs = thead.getElementsByTagName('TR');
427
+
428
+ for (var i = 0; i < trs.length; i++) {
429
+ var cells = trs[i].cells;
430
+ for (var j = 0; j < cells.length; j++) {
431
+ var c = cells[j];
432
+
433
+ var rowIndex = c.parentNode.rowIndex;
434
+ var cellId = rowIndex + "-" + c.cellIndex;
435
+ var rowSpan = c.rowSpan || 1;
436
+ var colSpan = c.colSpan || 1
437
+ var firstAvailCol;
438
+ if (typeof(matrix[rowIndex]) == "undefined") {
439
+ matrix[rowIndex] = [];
440
+ }
441
+ // Find first available column in the first row
442
+ for (var k = 0; k < matrix[rowIndex].length + 1; k++) {
443
+ if (typeof(matrix[rowIndex][k]) == "undefined") {
444
+ firstAvailCol = k;
445
+ break;
446
+ }
447
+ }
448
+ lookup[cellId] = firstAvailCol;
449
+ for (var k = rowIndex; k < rowIndex + rowSpan; k++) {
450
+ if (typeof(matrix[k]) == "undefined") {
451
+ matrix[k] = [];
452
+ }
453
+ var matrixrow = matrix[k];
454
+ for (var l = firstAvailCol; l < firstAvailCol + colSpan; l++) {
455
+ matrixrow[l] = "x";
456
+ }
457
+ }
458
+ }
459
+ }
460
+ return lookup;
461
+ }
462
+
463
+ function checkCellColSpan(table, rows, row) {
464
+ var arr = [],
465
+ r = table.tHead.rows,
466
+ c = r[row].cells;
467
+
468
+ for (var i = 0; i < c.length; i++) {
469
+ var cell = c[i];
470
+
471
+ if (cell.colSpan > 1) {
472
+ arr = arr.concat(checkCellColSpan(table, headerArr, row++));
473
+ } else {
474
+ if (table.tHead.length == 1 || (cell.rowSpan > 1 || !r[row + 1])) {
475
+ arr.push(cell);
476
+ }
477
+ // headerArr[row] = (i+row);
478
+ }
479
+ }
480
+ return arr;
481
+ };
482
+
483
+ function checkHeaderMetadata(cell) {
484
+ if (($.metadata) && ($(cell).metadata().sorter === false)) {
485
+ return true;
486
+ };
487
+ return false;
488
+ }
489
+
490
+ function checkHeaderOptions(table, i) {
491
+ if ((table.config.headers[i]) && (table.config.headers[i].sorter === false)) {
492
+ return true;
493
+ };
494
+ return false;
495
+ }
496
+
497
+ function checkHeaderOptionsSortingLocked(table, i) {
498
+ if ((table.config.headers[i]) && (table.config.headers[i].lockedOrder)) return table.config.headers[i].lockedOrder;
499
+ return false;
500
+ }
501
+
502
+ function applyWidget(table) {
503
+ var c = table.config.widgets;
504
+ var l = c.length;
505
+ for (var i = 0; i < l; i++) {
506
+
507
+ getWidgetById(c[i]).format(table);
508
+ }
509
+
510
+ }
511
+
512
+ function getWidgetById(name) {
513
+ var l = widgets.length;
514
+ for (var i = 0; i < l; i++) {
515
+ if (widgets[i].id.toLowerCase() == name.toLowerCase()) {
516
+ return widgets[i];
517
+ }
518
+ }
519
+ };
520
+
521
+ function formatSortingOrder(v) {
522
+ if (typeof(v) != "Number") {
523
+ return (v.toLowerCase() == "desc") ? 1 : 0;
524
+ } else {
525
+ return (v == 1) ? 1 : 0;
526
+ }
527
+ }
528
+
529
+ function isValueInArray(v, a) {
530
+ var l = a.length;
531
+ for (var i = 0; i < l; i++) {
532
+ if (a[i][0] == v) {
533
+ return true;
534
+ }
535
+ }
536
+ return false;
537
+ }
538
+
539
+ function setHeadersCss(table, $headers, list, css) {
540
+ // remove all header information
541
+ $headers.removeClass(css[0]).removeClass(css[1]);
542
+
543
+ var h = [];
544
+ $headers.each(function (offset) {
545
+ if (!this.sortDisabled) {
546
+ h[this.column] = $(this);
547
+ }
548
+ });
549
+
550
+ var l = list.length;
551
+ for (var i = 0; i < l; i++) {
552
+ h[list[i][0]].addClass(css[list[i][1]]);
553
+ }
554
+ }
555
+
556
+ function fixColumnWidth(table, $headers) {
557
+ var c = table.config;
558
+ if (c.widthFixed) {
559
+ var colgroup = $('<colgroup>');
560
+ $("tr:first td", table.tBodies[0]).each(function () {
561
+ colgroup.append($('<col>').css('width', $(this).width()));
562
+ });
563
+ $(table).prepend(colgroup);
564
+ };
565
+ }
566
+
567
+ function updateHeaderSortCount(table, sortList) {
568
+ var c = table.config,
569
+ l = sortList.length;
570
+ for (var i = 0; i < l; i++) {
571
+ var s = sortList[i],
572
+ o = c.headerList[s[0]];
573
+ o.count = s[1];
574
+ o.count++;
575
+ }
576
+ }
577
+
578
+ /* sorting methods */
579
+
580
+ function multisort(table, sortList, cache) {
581
+
582
+ if (table.config.debug) {
583
+ var sortTime = new Date();
584
+ }
585
+
586
+ var dynamicExp = "var sortWrapper = function(a,b) {",
587
+ l = sortList.length;
588
+
589
+ // TODO: inline functions.
590
+ for (var i = 0; i < l; i++) {
591
+
592
+ var c = sortList[i][0];
593
+ var order = sortList[i][1];
594
+ // var s = (getCachedSortType(table.config.parsers,c) == "text") ?
595
+ // ((order == 0) ? "sortText" : "sortTextDesc") : ((order == 0) ?
596
+ // "sortNumeric" : "sortNumericDesc");
597
+ // var s = (table.config.parsers[c].type == "text") ? ((order == 0)
598
+ // ? makeSortText(c) : makeSortTextDesc(c)) : ((order == 0) ?
599
+ // makeSortNumeric(c) : makeSortNumericDesc(c));
600
+ var s = (table.config.parsers[c].type == "text") ? ((order == 0) ? makeSortFunction("text", "asc", c) : makeSortFunction("text", "desc", c)) : ((order == 0) ? makeSortFunction("numeric", "asc", c) : makeSortFunction("numeric", "desc", c));
601
+ var e = "e" + i;
602
+
603
+ dynamicExp += "var " + e + " = " + s; // + "(a[" + c + "],b[" + c
604
+ // + "]); ";
605
+ dynamicExp += "if(" + e + ") { return " + e + "; } ";
606
+ dynamicExp += "else { ";
607
+
608
+ }
609
+
610
+ // if value is the same keep orignal order
611
+ var orgOrderCol = cache.normalized[0].length - 1;
612
+ dynamicExp += "return a[" + orgOrderCol + "]-b[" + orgOrderCol + "];";
613
+
614
+ for (var i = 0; i < l; i++) {
615
+ dynamicExp += "}; ";
616
+ }
617
+
618
+ dynamicExp += "return 0; ";
619
+ dynamicExp += "}; ";
620
+
621
+ if (table.config.debug) {
622
+ benchmark("Evaling expression:" + dynamicExp, new Date());
623
+ }
624
+
625
+ eval(dynamicExp);
626
+
627
+ cache.normalized.sort(sortWrapper);
628
+
629
+ if (table.config.debug) {
630
+ benchmark("Sorting on " + sortList.toString() + " and dir " + order + " time:", sortTime);
631
+ }
632
+
633
+ return cache;
634
+ };
635
+
636
+ function makeSortFunction(type, direction, index) {
637
+ var a = "a[" + index + "]",
638
+ b = "b[" + index + "]";
639
+ if (type == 'text' && direction == 'asc') {
640
+ return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + a + " < " + b + ") ? -1 : 1 )));";
641
+ } else if (type == 'text' && direction == 'desc') {
642
+ return "(" + a + " == " + b + " ? 0 : (" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : (" + b + " < " + a + ") ? -1 : 1 )));";
643
+ } else if (type == 'numeric' && direction == 'asc') {
644
+ return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + a + " - " + b + "));";
645
+ } else if (type == 'numeric' && direction == 'desc') {
646
+ return "(" + a + " === null && " + b + " === null) ? 0 :(" + a + " === null ? Number.POSITIVE_INFINITY : (" + b + " === null ? Number.NEGATIVE_INFINITY : " + b + " - " + a + "));";
647
+ }
648
+ };
649
+
650
+ function makeSortText(i) {
651
+ return "((a[" + i + "] < b[" + i + "]) ? -1 : ((a[" + i + "] > b[" + i + "]) ? 1 : 0));";
652
+ };
653
+
654
+ function makeSortTextDesc(i) {
655
+ return "((b[" + i + "] < a[" + i + "]) ? -1 : ((b[" + i + "] > a[" + i + "]) ? 1 : 0));";
656
+ };
657
+
658
+ function makeSortNumeric(i) {
659
+ return "a[" + i + "]-b[" + i + "];";
660
+ };
661
+
662
+ function makeSortNumericDesc(i) {
663
+ return "b[" + i + "]-a[" + i + "];";
664
+ };
665
+
666
+ function sortText(a, b) {
667
+ if (table.config.sortLocaleCompare) return a.localeCompare(b);
668
+ return ((a < b) ? -1 : ((a > b) ? 1 : 0));
669
+ };
670
+
671
+ function sortTextDesc(a, b) {
672
+ if (table.config.sortLocaleCompare) return b.localeCompare(a);
673
+ return ((b < a) ? -1 : ((b > a) ? 1 : 0));
674
+ };
675
+
676
+ function sortNumeric(a, b) {
677
+ return a - b;
678
+ };
679
+
680
+ function sortNumericDesc(a, b) {
681
+ return b - a;
682
+ };
683
+
684
+ function getCachedSortType(parsers, i) {
685
+ return parsers[i].type;
686
+ }; /* public methods */
687
+ this.construct = function (settings) {
688
+ return this.each(function () {
689
+ // if no thead or tbody quit.
690
+ if (!this.tHead || !this.tBodies) return;
691
+ // declare
692
+ var $this, $document, $headers, cache, config, shiftDown = 0,
693
+ sortOrder;
694
+ // new blank config object
695
+ this.config = {};
696
+ // merge and extend.
697
+ config = $.extend(this.config, $.tablesorter.defaults, settings);
698
+ // store common expression for speed
699
+ $this = $(this);
700
+ // save the settings where they read
701
+ $.data(this, "tablesorter", config);
702
+ // build headers
703
+ $headers = buildHeaders(this);
704
+ // try to auto detect column type, and store in tables config
705
+ this.config.parsers = buildParserCache(this, $headers);
706
+ // build the cache for the tbody cells
707
+ cache = buildCache(this);
708
+ // get the css class names, could be done else where.
709
+ var sortCSS = [config.cssDesc, config.cssAsc];
710
+ // fixate columns if the users supplies the fixedWidth option
711
+ fixColumnWidth(this);
712
+ // apply event handling to headers
713
+ // this is to big, perhaps break it out?
714
+ $headers.click(
715
+
716
+ function (e) {
717
+ var totalRows = ($this[0].tBodies[0] && $this[0].tBodies[0].rows.length) || 0;
718
+ if (!this.sortDisabled && totalRows > 0) {
719
+ // Only call sortStart if sorting is
720
+ // enabled.
721
+ $this.trigger("sortStart");
722
+ // store exp, for speed
723
+ var $cell = $(this);
724
+ // get current column index
725
+ var i = this.column;
726
+ // get current column sort order
727
+ this.order = this.count++ % 2;
728
+ // always sort on the locked order.
729
+ if(this.lockedOrder) this.order = this.lockedOrder;
730
+
731
+ // user only whants to sort on one
732
+ // column
733
+ if (!e[config.sortMultiSortKey]) {
734
+ // flush the sort list
735
+ config.sortList = [];
736
+ if (config.sortForce != null) {
737
+ var a = config.sortForce;
738
+ for (var j = 0; j < a.length; j++) {
739
+ if (a[j][0] != i) {
740
+ config.sortList.push(a[j]);
741
+ }
742
+ }
743
+ }
744
+ // add column to sort list
745
+ config.sortList.push([i, this.order]);
746
+ // multi column sorting
747
+ } else {
748
+ // the user has clicked on an all
749
+ // ready sortet column.
750
+ if (isValueInArray(i, config.sortList)) {
751
+ // revers the sorting direction
752
+ // for all tables.
753
+ for (var j = 0; j < config.sortList.length; j++) {
754
+ var s = config.sortList[j],
755
+ o = config.headerList[s[0]];
756
+ if (s[0] == i) {
757
+ o.count = s[1];
758
+ o.count++;
759
+ s[1] = o.count % 2;
760
+ }
761
+ }
762
+ } else {
763
+ // add column to sort list array
764
+ config.sortList.push([i, this.order]);
765
+ }
766
+ };
767
+ setTimeout(function () {
768
+ // set css for headers
769
+ setHeadersCss($this[0], $headers, config.sortList, sortCSS);
770
+ appendToTable(
771
+ $this[0], multisort(
772
+ $this[0], config.sortList, cache)
773
+ );
774
+ }, 1);
775
+ // stop normal event by returning false
776
+ return false;
777
+ }
778
+ // cancel selection
779
+ }).mousedown(function () {
780
+ if (config.cancelSelection) {
781
+ this.onselectstart = function () {
782
+ return false
783
+ };
784
+ return false;
785
+ }
786
+ });
787
+ // apply easy methods that trigger binded events
788
+ $this.bind("update", function () {
789
+ var me = this;
790
+ setTimeout(function () {
791
+ // rebuild parsers.
792
+ me.config.parsers = buildParserCache(
793
+ me, $headers);
794
+ // rebuild the cache map
795
+ cache = buildCache(me);
796
+ }, 1);
797
+ }).bind("updateCell", function (e, cell) {
798
+ var config = this.config;
799
+ // get position from the dom.
800
+ var pos = [(cell.parentNode.rowIndex - 1), cell.cellIndex];
801
+ // update cache
802
+ cache.normalized[pos[0]][pos[1]] = config.parsers[pos[1]].format(
803
+ getElementText(config, cell), cell);
804
+ }).bind("sorton", function (e, list) {
805
+ $(this).trigger("sortStart");
806
+ config.sortList = list;
807
+ // update and store the sortlist
808
+ var sortList = config.sortList;
809
+ // update header count index
810
+ updateHeaderSortCount(this, sortList);
811
+ // set css for headers
812
+ setHeadersCss(this, $headers, sortList, sortCSS);
813
+ // sort the table and append it to the dom
814
+ appendToTable(this, multisort(this, sortList, cache));
815
+ }).bind("appendCache", function () {
816
+ appendToTable(this, cache);
817
+ }).bind("applyWidgetId", function (e, id) {
818
+ getWidgetById(id).format(this);
819
+ }).bind("applyWidgets", function () {
820
+ // apply widgets
821
+ applyWidget(this);
822
+ });
823
+ if ($.metadata && ($(this).metadata() && $(this).metadata().sortlist)) {
824
+ config.sortList = $(this).metadata().sortlist;
825
+ }
826
+ // if user has supplied a sort list to constructor.
827
+ if (config.sortList.length > 0) {
828
+ $this.trigger("sorton", [config.sortList]);
829
+ }
830
+ // apply widgets
831
+ applyWidget(this);
832
+ });
833
+ };
834
+ this.addParser = function (parser) {
835
+ var l = parsers.length,
836
+ a = true;
837
+ for (var i = 0; i < l; i++) {
838
+ if (parsers[i].id.toLowerCase() == parser.id.toLowerCase()) {
839
+ a = false;
840
+ }
841
+ }
842
+ if (a) {
843
+ parsers.push(parser);
844
+ };
845
+ };
846
+ this.addWidget = function (widget) {
847
+ widgets.push(widget);
848
+ };
849
+ this.formatFloat = function (s) {
850
+ var i = parseFloat(s);
851
+ return (isNaN(i)) ? 0 : i;
852
+ };
853
+ this.formatInt = function (s) {
854
+ var i = parseInt(s);
855
+ return (isNaN(i)) ? 0 : i;
856
+ };
857
+ this.isDigit = function (s, config) {
858
+ // replace all an wanted chars and match.
859
+ return /^[-+]?\d*$/.test($.trim(s.replace(/[,.']/g, '')));
860
+ };
861
+ this.clearTableBody = function (table) {
862
+ if ($.browser.msie) {
863
+ function empty() {
864
+ while (this.firstChild)
865
+ this.removeChild(this.firstChild);
866
+ }
867
+ empty.apply(table.tBodies[0]);
868
+ } else {
869
+ table.tBodies[0].innerHTML = "";
870
+ }
871
+ };
872
+ }
873
+ });
874
+
875
+ // extend plugin scope
876
+ $.fn.extend({
877
+ tablesorter: $.tablesorter.construct
878
+ });
879
+
880
+ // make shortcut
881
+ var ts = $.tablesorter;
882
+
883
+ // add default parsers
884
+ ts.addParser({
885
+ id: "text",
886
+ is: function (s) {
887
+ return true;
888
+ }, format: function (s) {
889
+ return $.trim(s.toLocaleLowerCase());
890
+ }, type: "text"
891
+ });
892
+
893
+ ts.addParser({
894
+ id: "digit",
895
+ is: function (s, table) {
896
+ var c = table.config;
897
+ return $.tablesorter.isDigit(s, c);
898
+ }, format: function (s) {
899
+ return $.tablesorter.formatFloat(s);
900
+ }, type: "numeric"
901
+ });
902
+
903
+ ts.addParser({
904
+ id: "currency",
905
+ is: function (s) {
906
+ return /^[£$€?.]/.test(s);
907
+ }, format: function (s) {
908
+ return $.tablesorter.formatFloat(s.replace(new RegExp(/[£$€]/g), ""));
909
+ }, type: "numeric"
910
+ });
911
+
912
+ ts.addParser({
913
+ id: "ipAddress",
914
+ is: function (s) {
915
+ return /^\d{2,3}[\.]\d{2,3}[\.]\d{2,3}[\.]\d{2,3}$/.test(s);
916
+ }, format: function (s) {
917
+ var a = s.split("."),
918
+ r = "",
919
+ l = a.length;
920
+ for (var i = 0; i < l; i++) {
921
+ var item = a[i];
922
+ if (item.length == 2) {
923
+ r += "0" + item;
924
+ } else {
925
+ r += item;
926
+ }
927
+ }
928
+ return $.tablesorter.formatFloat(r);
929
+ }, type: "numeric"
930
+ });
931
+
932
+ ts.addParser({
933
+ id: "url",
934
+ is: function (s) {
935
+ return /^(https?|ftp|file):\/\/$/.test(s);
936
+ }, format: function (s) {
937
+ return jQuery.trim(s.replace(new RegExp(/(https?|ftp|file):\/\//), ''));
938
+ }, type: "text"
939
+ });
940
+
941
+ ts.addParser({
942
+ id: "isoDate",
943
+ is: function (s) {
944
+ return /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(s);
945
+ }, format: function (s) {
946
+ return $.tablesorter.formatFloat((s != "") ? new Date(s.replace(
947
+ new RegExp(/-/g), "/")).getTime() : "0");
948
+ }, type: "numeric"
949
+ });
950
+
951
+ ts.addParser({
952
+ id: "percent",
953
+ is: function (s) {
954
+ return /\%$/.test($.trim(s));
955
+ }, format: function (s) {
956
+ return $.tablesorter.formatFloat(s.replace(new RegExp(/%/g), ""));
957
+ }, type: "numeric"
958
+ });
959
+
960
+ ts.addParser({
961
+ id: "usLongDate",
962
+ is: function (s) {
963
+ return s.match(new RegExp(/^[A-Za-z]{3,10}\.? [0-9]{1,2}, ([0-9]{4}|'?[0-9]{2}) (([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(AM|PM)))$/));
964
+ }, format: function (s) {
965
+ return $.tablesorter.formatFloat(new Date(s).getTime());
966
+ }, type: "numeric"
967
+ });
968
+
969
+ ts.addParser({
970
+ id: "shortDate",
971
+ is: function (s) {
972
+ return /\d{1,2}[\/\-]\d{1,2}[\/\-]\d{2,4}/.test(s);
973
+ }, format: function (s, table) {
974
+ var c = table.config;
975
+ s = s.replace(/\-/g, "/");
976
+ if (c.dateFormat == "us") {
977
+ // reformat the string in ISO format
978
+ s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2");
979
+ } else if (c.dateFormat == "uk") {
980
+ // reformat the string in ISO format
981
+ s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
982
+ } else if (c.dateFormat == "dd/mm/yy" || c.dateFormat == "dd-mm-yy") {
983
+ s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");
984
+ }
985
+ return $.tablesorter.formatFloat(new Date(s).getTime());
986
+ }, type: "numeric"
987
+ });
988
+ ts.addParser({
989
+ id: "time",
990
+ is: function (s) {
991
+ return /^(([0-2]?[0-9]:[0-5][0-9])|([0-1]?[0-9]:[0-5][0-9]\s(am|pm)))$/.test(s);
992
+ }, format: function (s) {
993
+ return $.tablesorter.formatFloat(new Date("2000/01/01 " + s).getTime());
994
+ }, type: "numeric"
995
+ });
996
+ ts.addParser({
997
+ id: "metadata",
998
+ is: function (s) {
999
+ return false;
1000
+ }, format: function (s, table, cell) {
1001
+ var c = table.config,
1002
+ p = (!c.parserMetadataName) ? 'sortValue' : c.parserMetadataName;
1003
+ return $(cell).metadata()[p];
1004
+ }, type: "numeric"
1005
+ });
1006
+ // add default widgets
1007
+ ts.addWidget({
1008
+ id: "zebra",
1009
+ format: function (table) {
1010
+ if (table.config.debug) {
1011
+ var time = new Date();
1012
+ }
1013
+ var $tr, row = -1,
1014
+ odd;
1015
+ // loop through the visible rows
1016
+ $("tr:visible", table.tBodies[0]).each(function (i) {
1017
+ $tr = $(this);
1018
+ // style children rows the same way the parent
1019
+ // row was styled
1020
+ if (!$tr.hasClass(table.config.cssChildRow)) row++;
1021
+ odd = (row % 2 == 0);
1022
+ $tr.removeClass(
1023
+ table.config.widgetZebra.css[odd ? 0 : 1]).addClass(
1024
+ table.config.widgetZebra.css[odd ? 1 : 0])
1025
+ });
1026
+ if (table.config.debug) {
1027
+ $.tablesorter.benchmark("Applying Zebra widget", time);
1028
+ }
1029
+ }
1030
+ });
1031
  })(jQuery);
js/jquery.total-storage.min.js CHANGED
@@ -1,22 +1,22 @@
1
- /*
2
- * TotalStorage
3
- *
4
- * Copyright (c) 2012 Jared Novack & Upstatement (upstatement.com)
5
- * Dual licensed under the MIT and GPL licenses:
6
- * http://www.opensource.org/licenses/mit-license.php
7
- * http://www.gnu.org/licenses/gpl.html
8
- *
9
- * Total Storage is the conceptual the love child of jStorage by Andris Reinman,
10
- * and Cookie by Klaus Hartl -- though this is not connected to either project.
11
- *
12
- * @name $.totalStorage
13
- * @cat Plugins/Cookie
14
- * @author Jared Novack/jared@upstatement.com
15
- * @version 1.1.2
16
- * @url http://upstatement.com/blog/2012/01/jquery-local-storage-done-right-and-easy/
17
- */
18
-
19
- (function(c,h){var e,d;if("localStorage"in window)try{d="undefined"===typeof window.localStorage?h:window.localStorage,e="undefined"==typeof d||"undefined"==typeof window.JSON?!1:!0}catch(j){e=!1}c.totalStorage=function(b,a){return c.totalStorage.impl.init(b,a)};c.totalStorage.setItem=function(b,a){return c.totalStorage.impl.setItem(b,a)};c.totalStorage.getItem=function(b){return c.totalStorage.impl.getItem(b)};c.totalStorage.getAll=function(){return c.totalStorage.impl.getAll()};c.totalStorage.deleteItem=
20
- function(b){return c.totalStorage.impl.deleteItem(b)};c.totalStorage.impl={init:function(b,a){return"undefined"!=typeof a?this.setItem(b,a):this.getItem(b)},setItem:function(b,a){if(!e)try{return c.cookie(b,a),a}catch(g){console.log("Local Storage not supported by this browser. Install the cookie plugin on your site to take advantage of the same functionality. You can get it at https://github.com/carhartl/jquery-cookie")}var f=JSON.stringify(a);d.setItem(b,f);return this.parseResult(f)},getItem:function(b){if(!e)try{return this.parseResult(c.cookie(b))}catch(a){return null}b=
21
- d.getItem(b);return this.parseResult(b)},deleteItem:function(b){if(!e)try{return c.cookie(b,null),!0}catch(a){return!1}d.removeItem(b);return!0},getAll:function(){var b=[];if(e)for(var a in d)a.length&&b.push({key:a,value:this.parseResult(d.getItem(a))});else try{var g=document.cookie.split(";");for(a=0;a<g.length;a++){var f=g[a].split("=")[0];b.push({key:f,value:this.parseResult(c.cookie(f))})}}catch(h){return null}return b},parseResult:function(b){var a;try{a=JSON.parse(b),"undefined"==typeof a&&
22
  (a=b),"true"==a&&(a=!0),"false"==a&&(a=!1),parseFloat(a)==a&&"object"!=typeof a&&(a=parseFloat(a))}catch(c){a=b}return a}}})(jQuery);
1
+ /*
2
+ * TotalStorage
3
+ *
4
+ * Copyright (c) 2012 Jared Novack & Upstatement (upstatement.com)
5
+ * Dual licensed under the MIT and GPL licenses:
6
+ * http://www.opensource.org/licenses/mit-license.php
7
+ * http://www.gnu.org/licenses/gpl.html
8
+ *
9
+ * Total Storage is the conceptual the love child of jStorage by Andris Reinman,
10
+ * and Cookie by Klaus Hartl -- though this is not connected to either project.
11
+ *
12
+ * @name $.totalStorage
13
+ * @cat Plugins/Cookie
14
+ * @author Jared Novack/jared@upstatement.com
15
+ * @version 1.1.2
16
+ * @url http://upstatement.com/blog/2012/01/jquery-local-storage-done-right-and-easy/
17
+ */
18
+
19
+ (function(c,h){var e,d;if("localStorage"in window)try{d="undefined"===typeof window.localStorage?h:window.localStorage,e="undefined"==typeof d||"undefined"==typeof window.JSON?!1:!0}catch(j){e=!1}c.totalStorage=function(b,a){return c.totalStorage.impl.init(b,a)};c.totalStorage.setItem=function(b,a){return c.totalStorage.impl.setItem(b,a)};c.totalStorage.getItem=function(b){return c.totalStorage.impl.getItem(b)};c.totalStorage.getAll=function(){return c.totalStorage.impl.getAll()};c.totalStorage.deleteItem=
20
+ function(b){return c.totalStorage.impl.deleteItem(b)};c.totalStorage.impl={init:function(b,a){return"undefined"!=typeof a?this.setItem(b,a):this.getItem(b)},setItem:function(b,a){if(!e)try{return c.cookie(b,a),a}catch(g){console.log("Local Storage not supported by this browser. Install the cookie plugin on your site to take advantage of the same functionality. You can get it at https://github.com/carhartl/jquery-cookie")}var f=JSON.stringify(a);d.setItem(b,f);return this.parseResult(f)},getItem:function(b){if(!e)try{return this.parseResult(c.cookie(b))}catch(a){return null}b=
21
+ d.getItem(b);return this.parseResult(b)},deleteItem:function(b){if(!e)try{return c.cookie(b,null),!0}catch(a){return!1}d.removeItem(b);return!0},getAll:function(){var b=[];if(e)for(var a in d)a.length&&b.push({key:a,value:this.parseResult(d.getItem(a))});else try{var g=document.cookie.split(";");for(a=0;a<g.length;a++){var f=g[a].split("=")[0];b.push({key:f,value:this.parseResult(c.cookie(f))})}}catch(h){return null}return b},parseResult:function(b){var a;try{a=JSON.parse(b),"undefined"==typeof a&&
22
  (a=b),"true"==a&&(a=!0),"false"==a&&(a=!1),parseFloat(a)==a&&"object"!=typeof a&&(a=parseFloat(a))}catch(c){a=b}return a}}})(jQuery);
js/libraries/index.php CHANGED
@@ -1,2 +1,2 @@
1
- <?php
2
  # Silence is golden.
1
+ <?php
2
  # Silence is golden.
js/libraries/jpicker/css/jPicker-1.1.6.css CHANGED
@@ -1,232 +1,232 @@
1
- .jPicker .Icon {
2
- display: inline-block;
3
- height: 24px; /* change this value if using a different sized color picker icon */
4
- position: relative; /* make this element an absolute positioning container */
5
- text-align: left; /* make the zero width children position to the left of container */
6
- width: 25px; /* change this value if using a different sized color picker icon */
7
- }
8
- .jPicker .Icon span.Color, .jPicker .Icon span.Alpha {
9
- background-position: 2px 2px;
10
- display: block;
11
- height: 100%;
12
- left: 0px;
13
- position: absolute;
14
- top: 0px;
15
- width: 100%;
16
- }
17
- .jPicker .Icon span.Image {
18
- background-repeat: no-repeat;
19
- cursor: pointer;
20
- display: block;
21
- height: 100%;
22
- left: 0px;
23
- position: absolute;
24
- top: 0px;
25
- width: 100%;
26
- }
27
- .jPicker.Container {
28
- color: #000;
29
- z-index: 10;
30
- }
31
- table.jPicker {
32
- background-color: #efefef;
33
- border: 1px outset #666;
34
- font-family: Arial, Helvetica, Sans-Serif;
35
- font-size: 12px !important;
36
- margin: 0px;
37
- padding: 5px;
38
- width: 545px;
39
- z-index: 20;
40
- }
41
- .jPicker .Move {
42
- background-color: #dddddd;
43
- border-color: #fff #666 #666 #fff;
44
- border-style: solid;
45
- border-width: 1px;
46
- cursor: move;
47
- height: 12px;
48
- padding: 0px;
49
- }
50
- .jPicker .Title {
51
- font-size: 11px !important;
52
- font-weight: bold;
53
- margin: -2px 0px 0px 0px;
54
- padding: 10px 0px 0px 0px;
55
- text-align: center;
56
- width: 100%;
57
- }
58
- .jPicker div.Map {
59
- border-bottom: 2px solid #fff;
60
- border-left: 2px solid #9a9a9a;
61
- border-right: 2px solid #fff;
62
- border-top: 2px solid #9a9a9a;
63
- cursor: crosshair;
64
- height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
65
- margin: 0px 10px 10px 10px;
66
- overflow: hidden; /* hide the overdraw of the Color Map icon when at edge of viewing box */
67
- padding: 0px;
68
- position: relative; /* make this element an absolute positioning container */
69
- width: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
70
- }
71
- .jPicker div[class="Map"] {
72
- height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
73
- width: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
74
- }
75
- .jPicker div.Bar {
76
- border-bottom: 2px solid #fff;
77
- border-left: 2px solid #9a9a9a;
78
- border-right: 2px solid #fff;
79
- border-top: 2px solid #9a9a9a;
80
- cursor: n-resize;
81
- height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
82
- margin: 12px 10px 0px 5px;
83
- overflow: hidden;
84
- padding: 0px;
85
- position: relative;
86
- width: 24px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 20px later */
87
- }
88
- .jPicker div[class="Bar"] {
89
- height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
90
- width: 20px; /* correct to 20px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
91
- }
92
- .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3, .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4, .jPicker .Bar .Map5, .jPicker .Bar .Map6 {
93
- background-color: transparent;
94
- background-image: none;
95
- display: block;
96
- left: 0px;
97
- position: absolute;
98
- top: 0px;
99
- }
100
- .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3 {
101
- height: 2596px;
102
- width: 256px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
103
- would not be drawn if its overflow is set to hidden. */
104
- }
105
- .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {
106
- height: 3896px;
107
- width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
108
- would not be drawn if its overflow is set to hidden. */
109
- }
110
- .jPicker .Bar .Map5, .jPicker .Bar .Map6 {
111
- height: 256px;
112
- width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
113
- would not be drawn if its overflow is set to hidden. */
114
- }
115
- .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Bar .Map6 {
116
- background-repeat: no-repeat;
117
- }
118
- .jPicker .Map .Map3, .jPicker .Bar .Map5 {
119
- background-repeat: repeat;
120
- }
121
- .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {
122
- background-repeat: repeat-x;
123
- }
124
- .jPicker .Map .Arrow {
125
- display: block;
126
- position: absolute;
127
- }
128
- .jPicker .Bar .Arrow {
129
- display: block;
130
- left: 0px; /* (arrow width / 2) - (element width / 2) - position arrows' center in elements' center */
131
- position: absolute;
132
- }
133
- .jPicker .Preview {
134
- font-size: 9px;
135
- padding: 5px 0px 0px 0px;
136
- text-align: center;
137
- }
138
- .jPicker .Preview div {
139
- border: 2px inset #eee;
140
- height: 62px;
141
- margin: 0px auto;
142
- padding: 0px;
143
- width: 62px;
144
- }
145
- .jPicker .Preview div span {
146
- border: 1px solid #000;
147
- display: block;
148
- height: 30px;
149
- margin: 0px auto;
150
- padding: 0px;
151
- width: 60px;
152
- }
153
- .jPicker .Preview .Active {
154
- border-bottom-width: 0px;
155
- }
156
- .jPicker .Preview .Current {
157
- border-top-width: 0px;
158
- cursor: pointer;
159
- }
160
- .jPicker input {
161
- font-size: 13px;
162
- }
163
- .jPicker .Button {
164
- text-align: center;
165
- padding: 0px 4px;
166
- width: 115px;
167
- }
168
- .jPicker .Button input {
169
- padding: 2px 0px;
170
- width: 100px;
171
- }
172
- .jPicker .Button .Ok {
173
- margin: 12px 0px 5px 0px;
174
- }
175
- .jPicker td {
176
- margin: 0px;
177
- padding: 0px;
178
- }
179
- .jPicker td.Radio {
180
- margin: 0px;
181
- padding: 0px;
182
- width: 31px;
183
- }
184
- .jPicker td.Radio input {
185
- margin: 0px 5px 0px 0px;
186
- padding: 0px;
187
- }
188
- .jPicker td.Text {
189
- font-size: 12px !important;
190
- height: 22px;
191
- margin: 0px;
192
- padding: 0px;
193
- text-align: left;
194
- width: 70px;
195
- }
196
- .jPicker tr.Hex td.Text {
197
- width: 100px;
198
- }
199
- .jPicker td.Text input {
200
- background-color: #fff;
201
- border: 1px inset #aaa;
202
- height: 19px;
203
- margin: 0px 0px 0px 5px;
204
- text-align: left;
205
- width: 30px;
206
- }
207
- .jPicker td[class="Text"] input {
208
- height: 15px;
209
- }
210
- .jPicker tr.Hex td.Text input.Hex {
211
- width: 50px;
212
- }
213
- .jPicker tr.Hex td.Text input.AHex {
214
- width: 20px;
215
- }
216
- .jPicker .Grid {
217
- text-align: center;
218
- width: 114px;
219
- }
220
- .jPicker .Grid span.QuickColor {
221
- border: 1px inset #aaa;
222
- cursor: pointer;
223
- display: inline-block;
224
- height: 15px;
225
- line-height: 15px;
226
- margin: 0px;
227
- padding: 0px;
228
- width: 19px;
229
- }
230
- .jPicker .Grid span[class="QuickColor"] {
231
- width: 17px;
232
  }
1
+ .jPicker .Icon {
2
+ display: inline-block;
3
+ height: 24px; /* change this value if using a different sized color picker icon */
4
+ position: relative; /* make this element an absolute positioning container */
5
+ text-align: left; /* make the zero width children position to the left of container */
6
+ width: 25px; /* change this value if using a different sized color picker icon */
7
+ }
8
+ .jPicker .Icon span.Color, .jPicker .Icon span.Alpha {
9
+ background-position: 2px 2px;
10
+ display: block;
11
+ height: 100%;
12
+ left: 0px;
13
+ position: absolute;
14
+ top: 0px;
15
+ width: 100%;
16
+ }
17
+ .jPicker .Icon span.Image {
18
+ background-repeat: no-repeat;
19
+ cursor: pointer;
20
+ display: block;
21
+ height: 100%;
22
+ left: 0px;
23
+ position: absolute;
24
+ top: 0px;
25
+ width: 100%;
26
+ }
27
+ .jPicker.Container {
28
+ color: #000;
29
+ z-index: 10;
30
+ }
31
+ table.jPicker {
32
+ background-color: #efefef;
33
+ border: 1px outset #666;
34
+ font-family: Arial, Helvetica, Sans-Serif;
35
+ font-size: 12px !important;
36
+ margin: 0px;
37
+ padding: 5px;
38
+ width: 545px;
39
+ z-index: 20;
40
+ }
41
+ .jPicker .Move {
42
+ background-color: #dddddd;
43
+ border-color: #fff #666 #666 #fff;
44
+ border-style: solid;
45
+ border-width: 1px;
46
+ cursor: move;
47
+ height: 12px;
48
+ padding: 0px;
49
+ }
50
+ .jPicker .Title {
51
+ font-size: 11px !important;
52
+ font-weight: bold;
53
+ margin: -2px 0px 0px 0px;
54
+ padding: 10px 0px 0px 0px;
55
+ text-align: center;
56
+ width: 100%;
57
+ }
58
+ .jPicker div.Map {
59
+ border-bottom: 2px solid #fff;
60
+ border-left: 2px solid #9a9a9a;
61
+ border-right: 2px solid #fff;
62
+ border-top: 2px solid #9a9a9a;
63
+ cursor: crosshair;
64
+ height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
65
+ margin: 0px 10px 10px 10px;
66
+ overflow: hidden; /* hide the overdraw of the Color Map icon when at edge of viewing box */
67
+ padding: 0px;
68
+ position: relative; /* make this element an absolute positioning container */
69
+ width: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
70
+ }
71
+ .jPicker div[class="Map"] {
72
+ height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
73
+ width: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
74
+ }
75
+ .jPicker div.Bar {
76
+ border-bottom: 2px solid #fff;
77
+ border-left: 2px solid #9a9a9a;
78
+ border-right: 2px solid #fff;
79
+ border-top: 2px solid #9a9a9a;
80
+ cursor: n-resize;
81
+ height: 260px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 256px later */
82
+ margin: 12px 10px 0px 5px;
83
+ overflow: hidden;
84
+ padding: 0px;
85
+ position: relative;
86
+ width: 24px; /* IE 6 incorrectly draws border inside the width and height instead of outside - We will fix this to 20px later */
87
+ }
88
+ .jPicker div[class="Bar"] {
89
+ height: 256px; /* correct to 256px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
90
+ width: 20px; /* correct to 20px for browsers that support the "[class="xxx"]" selector (IE7+,Firefox,Safari,Chrome,Opera,etc.) */
91
+ }
92
+ .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3, .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4, .jPicker .Bar .Map5, .jPicker .Bar .Map6 {
93
+ background-color: transparent;
94
+ background-image: none;
95
+ display: block;
96
+ left: 0px;
97
+ position: absolute;
98
+ top: 0px;
99
+ }
100
+ .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Map .Map3 {
101
+ height: 2596px;
102
+ width: 256px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
103
+ would not be drawn if its overflow is set to hidden. */
104
+ }
105
+ .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {
106
+ height: 3896px;
107
+ width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
108
+ would not be drawn if its overflow is set to hidden. */
109
+ }
110
+ .jPicker .Bar .Map5, .jPicker .Bar .Map6 {
111
+ height: 256px;
112
+ width: 20px; /* must specify pixel width. IE7/8 Quirks mode ignores opacity for an absolutely positioned item in a relative container with "overflow: visible". The marker in the colorBar
113
+ would not be drawn if its overflow is set to hidden. */
114
+ }
115
+ .jPicker .Map .Map1, .jPicker .Map .Map2, .jPicker .Bar .Map6 {
116
+ background-repeat: no-repeat;
117
+ }
118
+ .jPicker .Map .Map3, .jPicker .Bar .Map5 {
119
+ background-repeat: repeat;
120
+ }
121
+ .jPicker .Bar .Map1, .jPicker .Bar .Map2, .jPicker .Bar .Map3, .jPicker .Bar .Map4 {
122
+ background-repeat: repeat-x;
123
+ }
124
+ .jPicker .Map .Arrow {
125
+ display: block;
126
+ position: absolute;
127
+ }
128
+ .jPicker .Bar .Arrow {
129
+ display: block;
130
+ left: 0px; /* (arrow width / 2) - (element width / 2) - position arrows' center in elements' center */
131
+ position: absolute;
132
+ }
133
+ .jPicker .Preview {
134
+ font-size: 9px;
135
+ padding: 5px 0px 0px 0px;
136
+ text-align: center;
137
+ }
138
+ .jPicker .Preview div {
139
+ border: 2px inset #eee;
140
+ height: 62px;
141
+ margin: 0px auto;
142
+ padding: 0px;
143
+ width: 62px;
144
+ }
145
+ .jPicker .Preview div span {
146
+ border: 1px solid #000;
147
+ display: block;
148
+ height: 30px;
149
+ margin: 0px auto;
150
+ padding: 0px;
151
+ width: 60px;
152
+ }
153
+ .jPicker .Preview .Active {
154
+ border-bottom-width: 0px;
155
+ }
156
+ .jPicker .Preview .Current {
157
+ border-top-width: 0px;
158
+ cursor: pointer;
159
+ }
160
+ .jPicker input {
161
+ font-size: 13px;
162
+ }
163
+ .jPicker .Button {
164
+ text-align: center;
165
+ padding: 0px 4px;
166
+ width: 115px;
167
+ }
168
+ .jPicker .Button input {
169
+ padding: 2px 0px;
170
+ width: 100px;
171
+ }
172
+ .jPicker .Button .Ok {
173
+ margin: 12px 0px 5px 0px;
174
+ }
175
+ .jPicker td {
176
+ margin: 0px;
177
+ padding: 0px;
178
+ }
179
+ .jPicker td.Radio {
180
+ margin: 0px;
181
+ padding: 0px;
182
+ width: 31px;
183
+ }
184
+ .jPicker td.Radio input {
185
+ margin: 0px 5px 0px 0px;
186
+ padding: 0px;
187
+ }
188
+ .jPicker td.Text {
189
+ font-size: 12px !important;
190
+ height: 22px;
191
+ margin: 0px;
192
+ padding: 0px;
193
+ text-align: left;
194
+ width: 70px;
195
+ }
196
+ .jPicker tr.Hex td.Text {
197
+ width: 100px;
198
+ }
199
+ .jPicker td.Text input {
200
+ background-color: #fff;
201
+ border: 1px inset #aaa;
202
+ height: 19px;
203
+ margin: 0px 0px 0px 5px;
204
+ text-align: left;
205
+ width: 30px;
206
+ }
207
+ .jPicker td[class="Text"] input {
208
+ height: 15px;
209
+ }
210
+ .jPicker tr.Hex td.Text input.Hex {
211
+ width: 50px;
212
+ }
213
+ .jPicker tr.Hex td.Text input.AHex {
214
+ width: 20px;
215
+ }
216
+ .jPicker .Grid {
217
+ text-align: center;
218
+ width: 114px;
219
+ }
220
+ .jPicker .Grid span.QuickColor {
221
+ border: 1px inset #aaa;
222
+ cursor: pointer;
223
+ display: inline-block;
224
+ height: 15px;
225
+ line-height: 15px;
226
+ margin: 0px;
227
+ padding: 0px;
228
+ width: 19px;
229
+ }
230
+ .jPicker .Grid span[class="QuickColor"] {
231
+ width: 17px;
232
  }
js/libraries/jpicker/css/jPicker.css CHANGED
@@ -1,17 +1,17 @@
1
- @media all
2
- {
3
- #jPicker { margin: 0px 8px; text-align: left; }
4
- #jPicker ul { font-size: 15px; margin: 0px 0px 0px 15px; padding: 0px; }
5
- #jPicker ul li { list-style: disc; padding: 2px 0px; }
6
- #jPicker ul li ul { margin-bottom: 10px; }
7
- #jPicker ul li ul li { list-style: circle; }
8
- #jPicker p { font-size: 13px; padding: 0px 10px; }
9
- #jPicker hr { clear: both; }
10
- #jPicker h2.jPicker { font-size: 16px; padding: 20px 10px; }
11
- #jPicker code { color: #8bd; font-size: 14px; font-weight: bold; }
12
- #jPicker pre { background: #eee; border: 1px solid #000; color: #000; display: block; font-size: 11px; margin: 10px 5px; padding: 5px; }
13
- #jPicker span { font-size: 13px; text-align: center; }
14
- #jPicker a { color: #ff8050; }
15
- #jPicker input { font-size: 13px; padding: 2px 5px; }
16
- #jPicker h2 { font-size: 16px; margin: 10px 0px; }
17
  }
1
+ @media all
2
+ {
3
+ #jPicker { margin: 0px 8px; text-align: left; }
4
+ #jPicker ul { font-size: 15px; margin: 0px 0px 0px 15px; padding: 0px; }
5
+ #jPicker ul li { list-style: disc; padding: 2px 0px; }
6
+ #jPicker ul li ul { margin-bottom: 10px; }
7
+ #jPicker ul li ul li { list-style: circle; }
8
+ #jPicker p { font-size: 13px; padding: 0px 10px; }
9
+ #jPicker hr { clear: both; }
10
+ #jPicker h2.jPicker { font-size: 16px; padding: 20px 10px; }
11
+ #jPicker code { color: #8bd; font-size: 14px; font-weight: bold; }
12
+ #jPicker pre { background: #eee; border: 1px solid #000; color: #000; display: block; font-size: 11px; margin: 10px 5px; padding: 5px; }
13
+ #jPicker span { font-size: 13px; text-align: center; }
14
+ #jPicker a { color: #ff8050; }
15
+ #jPicker input { font-size: 13px; padding: 2px 5px; }
16
+ #jPicker h2 { font-size: 16px; margin: 10px 0px; }
17
  }
js/libraries/jpicker/images/Thumbs.db DELETED
Binary file
js/libraries/jquery-datepicker/jquery.timepicker.css CHANGED
@@ -1,51 +1,51 @@
1
- .ui-timepicker-list {
2
- overflow-y: auto;
3
- height: 150px;
4
- width: 6.5em;
5
- background: #fff;
6
- border: 1px solid #ddd;
7
- margin: 0;
8
- padding: 0;
9
- list-style: none;
10
- -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);
11
- -moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);
12
- box-shadow:0 5px 10px rgba(0,0,0,0.2);
13
- outline: none;
14
- z-index: 10001;
15
- }
16
-
17
- .ui-timepicker-list.ui-timepicker-with-duration {
18
- width: 11em;
19
- }
20
-
21
- .ui-timepicker-duration {
22
- margin-left: 5px; color: #888;
23
- }
24
-
25
- .ui-timepicker-list:hover .ui-timepicker-duration {
26
- color: #888;
27
- }
28
-
29
- .ui-timepicker-list li {
30
- padding: 3px 0 3px 5px;
31
- cursor: pointer;
32
- white-space: nowrap;
33
- color: #000;
34
- list-style: none;
35
- margin: 0;
36
- }
37
-
38
- .ui-timepicker-list:hover .ui-timepicker-selected {
39
- background: #fff; color: #000;
40
- }
41
-
42
- li.ui-timepicker-selected,
43
- .ui-timepicker-list li:hover,
44
- .ui-timepicker-list:hover .ui-timepicker-selected:hover {
45
- background: #1980EC; color: #fff;
46
- }
47
-
48
- li.ui-timepicker-selected .ui-timepicker-duration,
49
- .ui-timepicker-list li:hover .ui-timepicker-duration {
50
- color: #ccc;
51
- }
1
+ .ui-timepicker-list {
2
+ overflow-y: auto;
3
+ height: 150px;
4
+ width: 6.5em;
5
+ background: #fff;
6
+ border: 1px solid #ddd;
7
+ margin: 0;
8
+ padding: 0;
9
+ list-style: none;
10
+ -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);
11
+ -moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);
12
+ box-shadow:0 5px 10px rgba(0,0,0,0.2);
13
+ outline: none;
14
+ z-index: 10001;
15
+ }
16
+
17
+ .ui-timepicker-list.ui-timepicker-with-duration {
18
+ width: 11em;
19
+ }
20
+
21
+ .ui-timepicker-duration {
22
+ margin-left: 5px; color: #888;
23
+ }
24
+
25
+ .ui-timepicker-list:hover .ui-timepicker-duration {
26
+ color: #888;
27
+ }
28
+
29
+ .ui-timepicker-list li {
30
+ padding: 3px 0 3px 5px;
31
+ cursor: pointer;
32
+ white-space: nowrap;
33
+ color: #000;
34
+ list-style: none;
35
+ margin: 0;
36
+ }
37
+
38
+ .ui-timepicker-list:hover .ui-timepicker-selected {
39
+ background: #fff; color: #000;
40
+ }
41
+
42
+ li.ui-timepicker-selected,
43
+ .ui-timepicker-list li:hover,
44
+ .ui-timepicker-list:hover .ui-timepicker-selected:hover {
45
+ background: #1980EC; color: #fff;
46
+ }
47
+
48
+ li.ui-timepicker-selected .ui-timepicker-duration,
49
+ .ui-timepicker-list li:hover .ui-timepicker-duration {
50
+ color: #ccc;
51
+ }
js/libraries/jquery-datepicker/jquery.timepicker.js CHANGED
@@ -1,691 +1,691 @@
1
- /************************
2
- jquery-timepicker
3
- http://jonthornton.github.com/jquery-timepicker/
4
-
5
- requires jQuery 1.7+
6
- ************************/
7
-
8
- (function (factory) {
9
- if (typeof define === 'function' && define.amd) {
10
- // AMD. Register as an anonymous module.
11
- define(['jquery'], factory);
12
- } else {
13
- // Browser globals
14
- factory(jQuery);
15
- }
16
- }(function ($) {
17
- var _baseDate = _generateBaseDate();
18
- var _ONE_DAY = 86400;
19
- var _defaults = {
20
- className: null,
21
- minTime: null,
22
- maxTime: null,
23
- durationTime: null,
24
- step: 30,
25
- showDuration: false,
26
- timeFormat: 'g:ia',
27
- scrollDefaultNow: false,
28
- scrollDefaultTime: false,
29
- selectOnBlur: false,
30
- forceRoundTime: false,
31
- appendTo: 'body'
32
- };
33
- var _lang = {
34
- decimal: '.',
35
- mins: 'mins',
36
- hr: 'hr',
37
- hrs: 'hrs'
38
- };
39
-
40
- var methods =
41
- {
42
- init: function(options)
43
- {
44
- return this.each(function()
45
- {
46
- var self = $(this);
47
-
48
- alert('hi');
49
- // convert dropdowns to text input
50
- if (self[0].tagName == 'SELECT') {
51
- var attrs = { 'type': 'text', 'value': self.val() };
52
- var raw_attrs = self[0].attributes;
53
-
54
- for (var i=0; i < raw_attrs.length; i++) {
55
- attrs[raw_attrs[i].nodeName] = raw_attrs[i].nodeValue;
56
- }
57
-
58
- var input = $('<input />', attrs);
59
- self.replaceWith(input);
60
- self = input;
61
- }
62
-
63
- var settings = $.extend({}, _defaults);
64
-
65
- if (options) {
66
- settings = $.extend(settings, options);
67
- }
68
-
69
- if (settings.minTime) {
70
- settings.minTime = _time2int(settings.minTime);
71
- }
72
-
73
- if (settings.maxTime) {
74
- settings.maxTime = _time2int(settings.maxTime);
75
- }
76
-
77
- if (settings.durationTime) {
78
- settings.durationTime = _time2int(settings.durationTime);
79
- }
80
-
81
- if (settings.lang) {
82
- _lang = $.extend(_lang, settings.lang);
83
- }
84
-
85
- self.data('timepicker-settings', settings);
86
- self.prop('autocomplete', 'off');
87
- self.on('click.timepicker focus.timepicker', methods.show);
88
- self.on('blur.timepicker', _formatValue);
89
- self.on('keydown.timepicker', _keyhandler);
90
- self.addClass('ui-timepicker-input');
91
-
92
- _formatValue.call(self.get(0));
93
- });
94
- },
95
-
96
- show: function(e)
97
- {
98
- var self = $(this);
99
-
100
- if ('ontouchstart' in document) {
101
- // block the keyboard on mobile devices
102
- self.blur();
103
- }
104
-
105
- var list = self.data('timepicker-list');
106
-
107
- // check if input is readonly
108
- if (self.prop('readonly')) {
109
- return;
110
- }
111
-
112
- // check if list needs to be rendered
113
- if (!list || list.length === 0) {
114
- _render(self);
115
- list = self.data('timepicker-list');
116
- }
117
-
118
- // check if a flag was set to close this picker
119
- if (self.hasClass('ui-timepicker-hideme')) {
120
- self.removeClass('ui-timepicker-hideme');
121
- list.hide();
122
- return;
123
- }
124
-
125
- if (list.is(':visible')) {
126
- return;
127
- }
128
-
129
- // make sure other pickers are hidden
130
- methods.hide();
131
-
132
- if ((self.offset().top + self.outerHeight(true) + list.outerHeight()) > $(window).height() + $(window).scrollTop()) {
133
- // position the dropdown on top
134
- list.css({ 'left':(self.offset().left), 'top': self.offset().top - list.outerHeight() });
135
- } else {
136
- // put it under the input
137
- list.css({ 'left':(self.offset().left), 'top': self.offset().top + self.outerHeight() });
138
- }
139
-
140
- list.show();
141
-
142
- var settings = self.data('timepicker-settings');
143
- // position scrolling
144
- var selected = list.find('.ui-timepicker-selected');
145
-
146
- if (!selected.length) {
147
- if (self.val()) {
148
- selected = _findRow(self, list, _time2int(self.val()));
149
- } else if (settings.scrollDefaultNow) {
150
- selected = _findRow(self, list, _time2int(new Date()));
151
- } else if (settings.scrollDefaultTime !== false) {
152
- selected = _findRow(self, list, _time2int(settings.scrollDefaultTime));
153
- }
154
- }
155
-
156
- if (selected && selected.length) {
157
- var topOffset = list.scrollTop() + selected.position().top - selected.outerHeight();
158
- list.scrollTop(topOffset);
159
- } else {
160
- list.scrollTop(0);
161
- }
162
-
163
- _attachCloseHandler();
164
-
165
- self.trigger('showTimepicker');
166
- },
167
-
168
- hide: function(e)
169
- {
170
- $('.ui-timepicker-list:visible').each(function() {
171
- var list = $(this);
172
- var self = list.data('timepicker-input');
173
- var settings = self.data('timepicker-settings');
174
-
175
- if (settings && settings.selectOnBlur) {
176
- _selectValue(self);
177
- }
178
-
179
- list.hide();
180
- self.trigger('hideTimepicker');
181
- });
182
- },
183
-
184
- option: function(key, value)
185
- {
186
- var self = $(this);
187
- var settings = self.data('timepicker-settings');
188
- var list = self.data('timepicker-list');
189
-
190
- if (typeof key == 'object') {
191
- settings = $.extend(settings, key);
192
-
193
- } else if (typeof key == 'string' && typeof value != 'undefined') {
194
- settings[key] = value;
195
-
196
- } else if (typeof key == 'string') {
197
- return settings[key];
198
- }
199
-
200
- if (settings.minTime) {
201
- settings.minTime = _time2int(settings.minTime);
202
- }
203
-
204
- if (settings.maxTime) {
205
- settings.maxTime = _time2int(settings.maxTime);
206
- }
207
-
208
- if (settings.durationTime) {
209
- settings.durationTime = _time2int(settings.durationTime);
210
- }
211
-
212
- self.data('timepicker-settings', settings);
213
-
214
- if (list) {
215
- list.remove();
216
- self.data('timepicker-list', false);
217
- }
218
-
219
- },
220
-
221
- getSecondsFromMidnight: function()
222
- {
223
- return _time2int($(this).val());
224
- },
225
-
226
- getTime: function()
227
- {
228
- return new Date(_baseDate.valueOf() + (_time2int($(this).val())*1000));
229
- },
230
-
231
- setTime: function(value)
232
- {
233
- var self = $(this);
234
- var prettyTime = _int2time(_time2int(value), self.data('timepicker-settings').timeFormat);
235
- self.val(prettyTime);
236
- },
237
-
238
- remove: function()
239
- {
240
- var self = $(this);
241
-
242
- // check if this element is a timepicker
243
- if (!self.hasClass('ui-timepicker-input')) {
244
- return;
245
- }
246
-
247
- self.removeAttr('autocomplete', 'off');
248
- self.removeClass('ui-timepicker-input');
249
- self.removeData('timepicker-settings');
250
- self.off('.timepicker');
251
-
252
- // timepicker-list won't be present unless the user has interacted with this timepicker
253
- if (self.data('timepicker-list')) {
254
- self.data('timepicker-list').remove();
255
- }
256
-
257
- self.removeData('timepicker-list');
258
- }
259
- };
260
-
261
- // private methods
262
-
263
- function _render(self)
264
- {
265
-
266
-
267
- var settings = self.data('timepicker-settings');
268
- var list = self.data('timepicker-list');
269
-
270
- if (list && list.length) {
271
- list.remove();
272
- self.data('timepicker-list', false);
273
- }
274
-
275
- list = $('<ul />', {
276
- 'tabindex': -1,
277
- 'class': 'ui-timepicker-list'
278
- });
279
-
280
- if (settings.className) {
281
- list.addClass(settings.className);
282
- }
283
-
284
- list.css({'display':'none', 'position': 'absolute' });
285
-
286
- if ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {
287
- list.addClass('ui-timepicker-with-duration');
288
- }
289
-
290
- var durStart = (settings.durationTime !== null) ? settings.durationTime : settings.minTime;
291
- var start = (settings.minTime !== null) ? settings.minTime : 0;
292
- var end = (settings.maxTime !== null) ? settings.maxTime : (start + _ONE_DAY - 1);
293
-
294
- if (end <= start) {
295
- // make sure the end time is greater than start time, otherwise there will be no list to show
296
- end += _ONE_DAY;
297
- }
298
-
299
- for (var i=start; i <= end; i += settings.step*60) {
300
- var timeInt = i%_ONE_DAY;
301
- var row = $('<li />');
302
- row.data('time', timeInt);
303
- row.text(_int2time(timeInt, settings.timeFormat));
304
-
305
- if ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {
306
- var duration = $('<span />');
307
- duration.addClass('ui-timepicker-duration');
308
- duration.text(' ('+_int2duration(i - durStart)+')');
309
- row.append(duration);
310
- }
311
-
312
- list.append(row);
313
- }
314
-
315
-
316
- list.data('timepicker-input', self);
317
- self.data('timepicker-list', list);
318
-
319
- var appendTo = settings.appendTo;
320
- if (typeof appendTo === 'string') {
321
- appendTo = $(appendTo);
322
- } else if (typeof appendTo === 'function') {
323
- appendTo = appendTo(self);
324
- }
325
- appendTo.append(list);
326
- _setSelected(self, list);
327
-
328
- list.on('click', 'li', function(e) {
329
- self.addClass('ui-timepicker-hideme');
330
- self[0].focus();
331
-
332
- // make sure only the clicked row is selected
333
- list.find('li').removeClass('ui-timepicker-selected');
334
- $(this).addClass('ui-timepicker-selected');
335
-
336
- _selectValue(self);
337
- list.hide();
338
- });
339
- }
340
-
341
- function _generateBaseDate()
342
- {
343
- var _baseDate = new Date();
344
- var _currentTimezoneOffset = _baseDate.getTimezoneOffset()*60000;
345
- _baseDate.setHours(0); _baseDate.setMinutes(0); _baseDate.setSeconds(0);
346
- var _baseDateTimezoneOffset = _baseDate.getTimezoneOffset()*60000;
347
-
348
- return new Date(_baseDate.valueOf() - _baseDateTimezoneOffset + _currentTimezoneOffset);
349
- }
350
-
351
- function _attachCloseHandler()
352
- {
353
- if ('ontouchstart' in document) {
354
- $('body').on('touchstart.ui-timepicker', _closeHandler);
355
- } else {
356
- $('body').on('mousedown.ui-timepicker', _closeHandler);
357
- $(window).on('scroll.ui-timepicker', _closeHandler);
358
- }
359
- }
360
-
361
- // event handler to decide whether to close timepicker
362
- function _closeHandler(e)
363
- {
364
- var target = $(e.target);
365
- var input = target.closest('.ui-timepicker-input');
366
- if (input.length === 0 && target.closest('.ui-timepicker-list').length === 0) {
367
- methods.hide();
368
- }
369
-
370
- $('body').unbind('.ui-timepicker');
371
- $(window).unbind('.ui-timepicker');
372
- }
373
-
374
- function _findRow(self, list, value)
375
- {
376
- if (!value && value !== 0) {
377
- return false;
378
- }
379
-
380
- var settings = self.data('timepicker-settings');
381
- var out = false;
382
- var halfStep = settings.step*30;
383
-
384
- // loop through the menu items
385
- list.find('li').each(function(i, obj) {
386
- var jObj = $(obj);
387
-
388
- var offset = jObj.data('time') - value;
389
-
390
- // check if the value is less than half a step from each row
391
- if (Math.abs(offset) < halfStep || offset == halfStep) {
392
- out = jObj;
393
- return false;
394
- }
395
- });
396
-
397
- return out;
398
- }
399
-
400
- function _setSelected(self, list)
401
- {
402
- var timeValue = _time2int(self.val());
403
-
404
- var selected = _findRow(self, list, timeValue);
405
- if (selected) selected.addClass('ui-timepicker-selected');
406
- }
407
-
408
-
409
- function _formatValue()
410
- {
411
- if (this.value === '') {
412
- return;
413
- }
414
-
415
- var self = $(this);
416
- var seconds = _time2int(this.value);
417
-
418
- if (seconds === null) {
419
- self.trigger('timeFormatError');
420
- return;
421
- }
422
-
423
- var settings = self.data('timepicker-settings');
424
-
425
- if (settings.forceRoundTime) {
426
- var offset = seconds % (settings.step*60); // step is in minutes
427
-
428
- if (offset >= settings.step*30) {
429
- // if offset is larger than a half step, round up
430
- seconds += (settings.step*60) - offset;
431
- } else {
432
- // round down
433
- seconds -= offset;
434
- }
435
- }
436
-
437
- var prettyTime = _int2time(seconds, settings.timeFormat);
438
- self.val(prettyTime);
439
- }
440
-
441
- function _keyhandler(e)
442
- {
443
- var self = $(this);
444
- var list = self.data('timepicker-list');
445
-
446
- if (!list.is(':visible')) {
447
- if (e.keyCode == 40) {
448
- self.focus();
449
- } else {
450
- return true;
451
- }
452
- }
453
-
454
- switch (e.keyCode) {
455
-
456
- case 13: // return
457
- _selectValue(self);
458
- methods.hide.apply(this);
459
- e.preventDefault();
460
- return false;
461
-
462
- case 38: // up
463
- var selected = list.find('.ui-timepicker-selected');
464
-
465
- if (!selected.length) {
466
- list.children().each(function(i, obj) {
467
- if ($(obj).position().top > 0) {
468
- selected = $(obj);
469
- return false;
470
- }
471
- });
472
- selected.addClass('ui-timepicker-selected');
473
-
474
- } else if (!selected.is(':first-child')) {
475
- selected.removeClass('ui-timepicker-selected');
476
- selected.prev().addClass('ui-timepicker-selected');
477
-
478
- if (selected.prev().position().top < selected.outerHeight()) {
479
- list.scrollTop(list.scrollTop() - selected.outerHeight());
480
- }
481
- }
482
-
483
- break;
484
-
485
- case 40: // down
486
- selected = list.find('.ui-timepicker-selected');
487
-
488
- if (selected.length === 0) {
489
- list.children().each(function(i, obj) {
490
- if ($(obj).position().top > 0) {
491
- selected = $(obj);
492
- return false;
493
- }
494
- });
495
-
496
- selected.addClass('ui-timepicker-selected');
497
- } else if (!selected.is(':last-child')) {
498
- selected.removeClass('ui-timepicker-selected');
499
- selected.next().addClass('ui-timepicker-selected');
500
-
501
- if (selected.next().position().top + 2*selected.outerHeight() > list.outerHeight()) {
502
- list.scrollTop(list.scrollTop() + selected.outerHeight());
503
- }
504
- }
505
-
506
- break;
507
-
508
- case 27: // escape
509
- list.find('li').removeClass('ui-timepicker-selected');
510
- list.hide();
511
- break;
512
-
513
- case 9: //tab
514
- methods.hide();
515
- break;
516
-
517
- case 16:
518
- case 17:
519
- case 18:
520
- case 19:
521
- case 20:
522
- case 33:
523
- case 34:
524
- case 35:
525
- case 36:
526
- case 37:
527
- case 39:
528
- case 45:
529
- return;
530
-
531
- default:
532
- list.find('li').removeClass('ui-timepicker-selected');
533
- return;
534
- }
535
- }
536
-
537
- function _selectValue(self)
538
- {
539
- var settings = self.data('timepicker-settings');
540
- var list = self.data('timepicker-list');
541
- var timeValue = null;
542
-
543
- var cursor = list.find('.ui-timepicker-selected');
544
-
545
- if (cursor.length) {
546
- // selected value found
547
- timeValue = cursor.data('time');
548
-
549
- } else if (self.val()) {
550
-
551
- // no selected value; fall back on input value
552
- timeValue = _time2int(self.val());
553
-
554
- _setSelected(self, list);
555
- }
556
-
557
- if (timeValue !== null) {
558
- var timeString = _int2time(timeValue, settings.timeFormat);
559
- self.val(timeString);
560
- }
561
-
562
- self.trigger('change').trigger('changeTime');
563
- }
564
-
565
- function _int2duration(seconds)
566
- {
567
- var minutes = Math.round(seconds/60);
568
- var duration;
569
-
570
- if (Math.abs(minutes) < 60) {
571
- duration = [minutes, _lang.mins];
572
- } else if (minutes == 60) {
573
- duration = ['1', _lang.hr];
574
- } else {
575
- var hours = (minutes/60).toFixed(1);
576
- if (_lang.decimal != '.') hours = hours.replace('.', _lang.decimal);
577
- duration = [hours, _lang.hrs];
578
- }
579
-
580
- return duration.join(' ');
581
- }
582
-
583
- function _int2time(seconds, format)
584
- {
585
- if (seconds === null) {
586
- return;
587
- }
588
-
589
- var time = new Date(_baseDate.valueOf() + (seconds*1000));
590
- var output = '';
591
- var hour, code;
592
-
593
- for (var i=0; i<format.length; i++) {
594
-
595
- code = format.charAt(i);
596
- switch (code) {
597
-
598
- case 'a':
599
- output += (time.getHours() > 11) ? 'pm' : 'am';
600
- break;
601
-
602
- case 'A':
603
- output += (time.getHours() > 11) ? 'PM' : 'AM';
604
- break;
605
-
606
- case 'g':
607
- hour = time.getHours() % 12;
608
- output += (hour === 0) ? '12' : hour;
609
- break;
610
-
611
- case 'G':
612
- output += time.getHours();
613
- break;
614
-
615
- case 'h':
616
- hour = time.getHours() % 12;
617
-
618
- if (hour !== 0 && hour < 10) {
619
- hour = '0'+hour;
620
- }
621
-
622
- output += (hour === 0) ? '12' : hour;
623
- break;
624
-
625
- case 'H':
626
- hour = time.getHours();
627
- output += (hour > 9) ? hour : '0'+hour;
628
- break;
629
-
630
- case 'i':
631
- var minutes = time.getMinutes();
632
- output += (minutes > 9) ? minutes : '0'+minutes;
633
- break;
634
-
635
- case 's':
636
- seconds = time.getSeconds();
637
- output += (seconds > 9) ? seconds : '0'+seconds;
638
- break;
639
-
640
- default:
641
- output += code;
642
- }
643
- }
644
-
645
- return output;
646
- }
647
-
648
- function _time2int(timeString)
649
- {
650
- if (timeString === '') return null;
651
- if (timeString+0 == timeString) return timeString;
652
-
653
- if (typeof(timeString) == 'object') {
654
- timeString = timeString.getHours()+':'+timeString.getMinutes()+':'+timeString.getSeconds();
655
- }
656
-
657
- var d = new Date(0);
658
- var time = timeString.toLowerCase().match(/(\d{1,2})(?::(\d{1,2}))?(?::(\d{2}))?\s*([pa]?)/);
659
-
660
- if (!time) {
661
- return null;
662
- }
663
-
664
- var hour = parseInt(time[1]*1, 10);
665
- var hours;
666
-
667
- if (time[4]) {
668
- if (hour == 12) {
669
- hours = (time[4] == 'p') ? 12 : 0;
670
- } else {
671
- hours = (hour + (time[4] == 'p' ? 12 : 0));
672
- }
673
-
674
- } else {
675
- hours = hour;
676
- }
677
-
678
- var minutes = ( time[2]*1 || 0 );
679
- var seconds = ( time[3]*1 || 0 );
680
- return hours*3600 + minutes*60 + seconds;
681
- }
682
-
683
- // Plugin entry
684
- $.fn.timepicker = function(method)
685
- {
686
-
687
- if(methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); }
688
- else if(typeof method === "object" || !method) { return methods.init.apply(this, arguments); }
689
- else { $.error("Method "+ method + " does not exist on jQuery.timepicker"); }
690
- };
691
- }));
1
+ /************************
2
+ jquery-timepicker
3
+ http://jonthornton.github.com/jquery-timepicker/
4
+
5
+ requires jQuery 1.7+
6
+ ************************/
7
+
8
+ (function (factory) {
9
+ if (typeof define === 'function' && define.amd) {
10
+ // AMD. Register as an anonymous module.
11
+ define(['jquery'], factory);
12
+ } else {
13
+ // Browser globals
14
+ factory(jQuery);
15
+ }
16
+ }(function ($) {
17
+ var _baseDate = _generateBaseDate();
18
+ var _ONE_DAY = 86400;
19
+ var _defaults = {
20
+ className: null,
21
+ minTime: null,
22
+ maxTime: null,
23
+ durationTime: null,
24
+ step: 30,
25
+ showDuration: false,
26
+ timeFormat: 'g:ia',
27
+ scrollDefaultNow: false,
28
+ scrollDefaultTime: false,
29
+ selectOnBlur: false,
30
+ forceRoundTime: false,
31
+ appendTo: 'body'
32
+ };
33
+ var _lang = {
34
+ decimal: '.',
35
+ mins: 'mins',
36
+ hr: 'hr',
37
+ hrs: 'hrs'
38
+ };
39
+
40
+ var methods =
41
+ {
42
+ init: function(options)
43
+ {
44
+ return this.each(function()
45
+ {
46
+ var self = $(this);
47
+
48
+ alert('hi');
49
+ // convert dropdowns to text input
50
+ if (self[0].tagName == 'SELECT') {
51
+ var attrs = { 'type': 'text', 'value': self.val() };
52
+ var raw_attrs = self[0].attributes;
53
+
54
+ for (var i=0; i < raw_attrs.length; i++) {
55
+ attrs[raw_attrs[i].nodeName] = raw_attrs[i].nodeValue;
56
+ }
57
+
58
+ var input = $('<input />', attrs);
59
+ self.replaceWith(input);
60
+ self = input;
61
+ }
62
+
63
+ var settings = $.extend({}, _defaults);
64
+
65
+ if (options) {
66
+ settings = $.extend(settings, options);
67
+ }
68
+
69
+ if (settings.minTime) {
70
+ settings.minTime = _time2int(settings.minTime);
71
+ }
72
+
73
+ if (settings.maxTime) {
74
+ settings.maxTime = _time2int(settings.maxTime);
75
+ }
76
+
77
+ if (settings.durationTime) {
78
+ settings.durationTime = _time2int(settings.durationTime);
79
+ }
80
+
81
+ if (settings.lang) {
82
+ _lang = $.extend(_lang, settings.lang);
83
+ }
84
+
85
+ self.data('timepicker-settings', settings);
86
+ self.prop('autocomplete', 'off');
87
+ self.on('click.timepicker focus.timepicker', methods.show);
88
+ self.on('blur.timepicker', _formatValue);
89
+ self.on('keydown.timepicker', _keyhandler);
90
+ self.addClass('ui-timepicker-input');
91
+
92
+ _formatValue.call(self.get(0));
93
+ });
94
+ },
95
+
96
+ show: function(e)
97
+ {
98
+ var self = $(this);
99
+
100
+ if ('ontouchstart' in document) {
101
+ // block the keyboard on mobile devices
102
+ self.blur();
103
+ }
104
+
105
+ var list = self.data('timepicker-list');
106
+
107
+ // check if input is readonly
108
+ if (self.prop('readonly')) {
109
+ return;
110
+ }
111
+
112
+ // check if list needs to be rendered
113
+ if (!list || list.length === 0) {
114
+ _render(self);
115
+ list = self.data('timepicker-list');
116
+ }
117
+
118
+ // check if a flag was set to close this picker
119
+ if (self.hasClass('ui-timepicker-hideme')) {
120
+ self.removeClass('ui-timepicker-hideme');
121
+ list.hide();
122
+ return;
123
+ }
124
+
125
+ if (list.is(':visible')) {
126
+ return;
127
+ }
128
+
129
+ // make sure other pickers are hidden
130
+ methods.hide();
131
+
132
+ if ((self.offset().top + self.outerHeight(true) + list.outerHeight()) > $(window).height() + $(window).scrollTop()) {
133
+ // position the dropdown on top
134
+ list.css({ 'left':(self.offset().left), 'top': self.offset().top - list.outerHeight() });
135
+ } else {
136
+ // put it under the input
137
+ list.css({ 'left':(self.offset().left), 'top': self.offset().top + self.outerHeight() });
138
+ }
139
+
140
+ list.show();
141
+
142
+ var settings = self.data('timepicker-settings');
143
+ // position scrolling
144
+ var selected = list.find('.ui-timepicker-selected');
145
+
146
+ if (!selected.length) {
147
+ if (self.val()) {
148
+ selected = _findRow(self, list, _time2int(self.val()));
149
+ } else if (settings.scrollDefaultNow) {
150
+ selected = _findRow(self, list, _time2int(new Date()));
151
+ } else if (settings.scrollDefaultTime !== false) {
152
+ selected = _findRow(self, list, _time2int(settings.scrollDefaultTime));
153
+ }
154
+ }
155
+
156
+ if (selected && selected.length) {
157
+ var topOffset = list.scrollTop() + selected.position().top - selected.outerHeight();
158
+ list.scrollTop(topOffset);
159
+ } else {
160
+ list.scrollTop(0);
161
+ }
162
+
163
+ _attachCloseHandler();
164
+
165
+ self.trigger('showTimepicker');
166
+ },
167
+
168
+ hide: function(e)
169
+ {
170
+ $('.ui-timepicker-list:visible').each(function() {
171
+ var list = $(this);
172
+ var self = list.data('timepicker-input');
173
+ var settings = self.data('timepicker-settings');
174
+
175
+ if (settings && settings.selectOnBlur) {
176
+ _selectValue(self);
177
+ }
178
+
179
+ list.hide();
180
+ self.trigger('hideTimepicker');
181
+ });
182
+ },
183
+
184
+ option: function(key, value)
185
+ {
186
+ var self = $(this);
187
+ var settings = self.data('timepicker-settings');
188
+ var list = self.data('timepicker-list');
189
+
190
+ if (typeof key == 'object') {
191
+ settings = $.extend(settings, key);
192
+
193
+ } else if (typeof key == 'string' && typeof value != 'undefined') {
194
+ settings[key] = value;
195
+
196
+ } else if (typeof key == 'string') {
197
+ return settings[key];
198
+ }
199
+
200
+ if (settings.minTime) {
201
+ settings.minTime = _time2int(settings.minTime);
202
+ }
203
+
204
+ if (settings.maxTime) {
205
+ settings.maxTime = _time2int(settings.maxTime);
206
+ }
207
+
208
+ if (settings.durationTime) {
209
+ settings.durationTime = _time2int(settings.durationTime);
210
+ }
211
+
212
+ self.data('timepicker-settings', settings);
213
+
214
+ if (list) {
215
+ list.remove();
216
+ self.data('timepicker-list', false);
217
+ }
218
+
219
+ },
220
+
221
+ getSecondsFromMidnight: function()
222
+ {
223
+ return _time2int($(this).val());
224
+ },
225
+
226
+ getTime: function()
227
+ {
228
+ return new Date(_baseDate.valueOf() + (_time2int($(this).val())*1000));
229
+ },
230
+
231
+ setTime: function(value)
232
+ {
233
+ var self = $(this);
234
+ var prettyTime = _int2time(_time2int(value), self.data('timepicker-settings').timeFormat);
235
+ self.val(prettyTime);
236
+ },
237
+
238
+ remove: function()
239
+ {
240
+ var self = $(this);
241
+
242
+ // check if this element is a timepicker
243
+ if (!self.hasClass('ui-timepicker-input')) {
244
+ return;
245
+ }
246
+
247
+ self.removeAttr('autocomplete', 'off');
248
+ self.removeClass('ui-timepicker-input');
249
+ self.removeData('timepicker-settings');
250
+ self.off('.timepicker');
251
+
252
+ // timepicker-list won't be present unless the user has interacted with this timepicker
253
+ if (self.data('timepicker-list')) {
254
+ self.data('timepicker-list').remove();
255
+ }
256
+
257
+ self.removeData('timepicker-list');
258
+ }
259
+ };
260
+
261
+ // private methods
262
+
263
+ function _render(self)
264
+ {
265
+
266
+
267
+ var settings = self.data('timepicker-settings');
268
+ var list = self.data('timepicker-list');
269
+
270
+ if (list && list.length) {
271
+ list.remove();
272
+ self.data('timepicker-list', false);
273
+ }
274
+
275
+ list = $('<ul />', {
276
+ 'tabindex': -1,
277
+ 'class': 'ui-timepicker-list'
278
+ });
279
+
280
+ if (settings.className) {
281
+ list.addClass(settings.className);
282
+ }
283
+
284
+ list.css({'display':'none', 'position': 'absolute' });
285
+
286
+ if ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {
287
+ list.addClass('ui-timepicker-with-duration');
288
+ }
289
+
290
+ var durStart = (settings.durationTime !== null) ? settings.durationTime : settings.minTime;
291
+ var start = (settings.minTime !== null) ? settings.minTime : 0;
292
+ var end = (settings.maxTime !== null) ? settings.maxTime : (start + _ONE_DAY - 1);
293
+
294
+ if (end <= start) {
295
+ // make sure the end time is greater than start time, otherwise there will be no list to show
296
+ end += _ONE_DAY;
297
+ }
298
+
299
+ for (var i=start; i <= end; i += settings.step*60) {
300
+ var timeInt = i%_ONE_DAY;
301
+ var row = $('<li />');
302
+ row.data('time', timeInt);
303
+ row.text(_int2time(timeInt, settings.timeFormat));
304
+
305
+ if ((settings.minTime !== null || settings.durationTime !== null) && settings.showDuration) {
306
+ var duration = $('<span />');
307
+ duration.addClass('ui-timepicker-duration');
308
+ duration.text(' ('+_int2duration(i - durStart)+')');
309
+ row.append(duration);
310
+ }
311
+
312
+ list.append(row);
313
+ }
314
+
315
+
316
+ list.data('timepicker-input', self);
317
+ self.data('timepicker-list', list);
318
+
319
+ var appendTo = settings.appendTo;
320
+ if (typeof appendTo === 'string') {
321
+ appendTo = $(appendTo);
322
+ } else if (typeof appendTo === 'function') {
323
+ appendTo = appendTo(self);
324
+ }
325
+ appendTo.append(list);
326
+ _setSelected(self, list);
327
+
328
+ list.on('click', 'li', function(e) {
329
+ self.addClass('ui-timepicker-hideme');
330
+ self[0].focus();
331
+
332
+ // make sure only the clicked row is selected
333
+ list.find('li').removeClass('ui-timepicker-selected');
334
+ $(this).addClass('ui-timepicker-selected');
335
+
336
+ _selectValue(self);
337
+ list.hide();
338
+ });
339
+ }
340
+
341
+ function _generateBaseDate()
342
+ {
343
+ var _baseDate = new Date();
344
+ var _currentTimezoneOffset = _baseDate.getTimezoneOffset()*60000;
345
+ _baseDate.setHours(0); _baseDate.setMinutes(0); _baseDate.setSeconds(0);
346
+ var _baseDateTimezoneOffset = _baseDate.getTimezoneOffset()*60000;
347
+
348
+ return new Date(_baseDate.valueOf() - _baseDateTimezoneOffset + _currentTimezoneOffset);
349
+ }
350
+
351
+ function _attachCloseHandler()
352
+ {
353
+ if ('ontouchstart' in document) {
354
+ $('body').on('touchstart.ui-timepicker', _closeHandler);
355
+ } else {
356
+ $('body').on('mousedown.ui-timepicker', _closeHandler);
357
+ $(window).on('scroll.ui-timepicker', _closeHandler);
358
+ }
359
+ }
360
+
361
+ // event handler to decide whether to close timepicker
362
+ function _closeHandler(e)
363
+ {
364
+ var target = $(e.target);
365
+ var input = target.closest('.ui-timepicker-input');
366
+ if (input.length === 0 && target.closest('.ui-timepicker-list').length === 0) {
367
+ methods.hide();
368
+ }
369
+
370
+ $('body').unbind('.ui-timepicker');
371
+ $(window).unbind('.ui-timepicker');
372
+ }
373
+
374
+ function _findRow(self, list, value)
375
+ {
376
+ if (!value && value !== 0) {
377
+ return false;
378
+ }
379
+
380
+ var settings = self.data('timepicker-settings');
381
+ var out = false;
382
+ var halfStep = settings.step*30;
383
+
384
+ // loop through the menu items
385
+ list.find('li').each(function(i, obj) {
386
+ var jObj = $(obj);
387
+
388
+ var offset = jObj.data('time') - value;
389
+
390
+ // check if the value is less than half a step from each row
391
+ if (Math.abs(offset) < halfStep || offset == halfStep) {
392
+ out = jObj;
393
+ return false;
394
+ }
395
+ });
396
+
397
+ return out;
398
+ }
399
+
400
+ function _setSelected(self, list)
401
+ {
402
+ var timeValue = _time2int(self.val());
403
+
404
+ var selected = _findRow(self, list, timeValue);
405
+ if (selected) selected.addClass('ui-timepicker-selected');
406
+ }
407
+
408
+
409
+ function _formatValue()
410
+ {
411
+ if (this.value === '') {
412
+ return;
413
+ }
414
+
415
+ var self = $(this);
416
+ var seconds = _time2int(this.value);
417
+
418
+ if (seconds === null) {
419
+ self.trigger('timeFormatError');
420
+ return;
421
+ }
422
+
423
+ var settings = self.data('timepicker-settings');
424
+
425
+ if (settings.forceRoundTime) {
426
+ var offset = seconds % (settings.step*60); // step is in minutes
427
+
428
+ if (offset >= settings.step*30) {
429
+ // if offset is larger than a half step, round up
430
+ seconds += (settings.step*60) - offset;
431
+ } else {
432
+ // round down
433
+ seconds -= offset;
434
+ }
435
+ }
436
+
437
+ var prettyTime = _int2time(seconds, settings.timeFormat);
438
+ self.val(prettyTime);
439
+ }
440
+
441
+ function _keyhandler(e)
442
+ {
443
+ var self = $(this);
444
+ var list = self.data('timepicker-list');
445
+
446
+ if (!list.is(':visible')) {
447
+ if (e.keyCode == 40) {
448
+ self.focus();
449
+ } else {
450
+ return true;
451
+ }
452
+ }
453
+
454
+ switch (e.keyCode) {
455
+
456
+ case 13: // return
457
+ _selectValue(self);
458
+ methods.hide.apply(this);
459
+ e.preventDefault();
460
+ return false;
461
+
462
+ case 38: // up
463
+ var selected = list.find('.ui-timepicker-selected');
464
+
465
+ if (!selected.length) {
466
+ list.children().each(function(i, obj) {
467
+ if ($(obj).position().top > 0) {
468
+ selected = $(obj);
469
+ return false;
470
+ }
471
+ });
472
+ selected.addClass('ui-timepicker-selected');
473
+
474
+ } else if (!selected.is(':first-child')) {
475
+ selected.removeClass('ui-timepicker-selected');
476
+ selected.prev().addClass('ui-timepicker-selected');
477
+
478
+ if (selected.prev().position().top < selected.outerHeight()) {
479
+ list.scrollTop(list.scrollTop() - selected.outerHeight());
480
+ }
481
+ }
482
+
483
+ break;
484
+
485
+ case 40: // down
486
+ selected = list.find('.ui-timepicker-selected');
487
+
488
+ if (selected.length === 0) {
489
+ list.children().each(function(i, obj) {
490
+ if ($(obj).position().top > 0) {
491
+ selected = $(obj);
492
+ return false;
493
+ }
494
+ });
495
+
496
+ selected.addClass('ui-timepicker-selected');
497
+ } else if (!selected.is(':last-child')) {
498
+ selected.removeClass('ui-timepicker-selected');
499
+ selected.next().addClass('ui-timepicker-selected');
500
+
501
+ if (selected.next().position().top + 2*selected.outerHeight() > list.outerHeight()) {
502
+ list.scrollTop(list.scrollTop() + selected.outerHeight());
503
+ }
504
+ }
505
+
506
+ break;
507
+
508
+ case 27: // escape
509
+ list.find('li').removeClass('ui-timepicker-selected');
510
+ list.hide();
511
+ break;
512
+
513
+ case 9: //tab
514
+ methods.hide();
515
+ break;
516
+
517
+ case 16:
518
+ case 17:
519
+ case 18:
520
+ case 19:
521
+ case 20:
522
+ case 33:
523
+ case 34:
524
+ case 35:
525
+ case 36:
526
+ case 37:
527
+ case 39:
528
+ case 45:
529
+ return;
530
+
531
+ default:
532
+ list.find('li').removeClass('ui-timepicker-selected');
533
+ return;
534
+ }
535
+ }
536
+
537
+ function _selectValue(self)
538
+ {
539
+ var settings = self.data('timepicker-settings');
540
+ var list = self.data('timepicker-list');
541
+ var timeValue = null;
542
+
543
+ var cursor = list.find('.ui-timepicker-selected');
544
+
545
+ if (cursor.length) {
546
+ // selected value found
547
+ timeValue = cursor.data('time');
548
+
549
+ } else if (self.val()) {
550
+
551
+ // no selected value; fall back on input value
552
+ timeValue = _time2int(self.val());
553
+
554
+ _setSelected(self, list);
555
+ }
556
+
557
+ if (timeValue !== null) {
558
+ var timeString = _int2time(timeValue, settings.timeFormat);
559
+ self.val(timeString);
560
+ }
561
+
562
+ self.trigger('change').trigger('changeTime');
563
+ }
564
+
565
+ function _int2duration(seconds)
566
+ {
567
+ var minutes = Math.round(seconds/60);
568
+ var duration;
569
+
570
+ if (Math.abs(minutes) < 60) {
571
+ duration = [minutes, _lang.mins];
572
+ } else if (minutes == 60) {
573
+ duration = ['1', _lang.hr];
574
+ } else {
575
+ var hours = (minutes/60).toFixed(1);
576
+ if (_lang.decimal != '.') hours = hours.replace('.', _lang.decimal);
577
+ duration = [hours, _lang.hrs];
578
+ }
579
+
580
+ return duration.join(' ');
581
+ }
582
+
583
+ function _int2time(seconds, format)
584
+ {
585
+ if (seconds === null) {
586
+ return;
587
+ }
588
+
589
+ var time = new Date(_baseDate.valueOf() + (seconds*1000));
590
+ var output = '';
591
+ var hour, code;
592
+
593
+ for (var i=0; i<format.length; i++) {
594
+
595
+ code = format.charAt(i);
596
+ switch (code) {
597
+
598
+ case 'a':
599
+ output += (time.getHours() > 11) ? 'pm' : 'am';
600
+ break;
601
+
602
+ case 'A':
603
+ output += (time.getHours() > 11) ? 'PM' : 'AM';
604
+ break;
605
+
606
+ case 'g':
607
+ hour = time.getHours() % 12;
608
+ output += (hour === 0) ? '12' : hour;
609
+ break;
610
+
611
+ case 'G':
612
+ output += time.getHours();
613
+ break;
614
+
615
+ case 'h':
616
+ hour = time.getHours() % 12;
617
+
618
+ if (hour !== 0 && hour < 10) {
619
+ hour = '0'+hour;
620
+ }
621
+
622
+ output += (hour === 0) ? '12' : hour;
623
+ break;
624
+
625
+ case 'H':
626
+ hour = time.getHours();
627
+ output += (hour > 9) ? hour : '0'+hour;
628
+ break;
629
+
630
+ case 'i':
631
+ var minutes = time.getMinutes();
632
+ output += (minutes > 9) ? minutes : '0'+minutes;
633
+ break;
634
+
635
+ case 's':
636
+ seconds = time.getSeconds();
637
+ output += (seconds > 9) ? seconds : '0'+seconds;
638
+ break;
639
+
640
+ default:
641
+ output += code;
642
+ }
643
+ }
644
+
645
+ return output;
646
+ }
647
+
648
+ function _time2int(timeString)
649
+ {
650
+ if (timeString === '') return null;
651
+ if (timeString+0 == timeString) return timeString;
652
+
653
+ if (typeof(timeString) == 'object') {
654
+ timeString = timeString.getHours()+':'+timeString.getMinutes()+':'+timeString.getSeconds();
655
+ }
656
+
657
+ var d = new Date(0);
658
+ var time = timeString.toLowerCase().match(/(\d{1,2})(?::(\d{1,2}))?(?::(\d{2}))?\s*([pa]?)/);
659
+
660
+ if (!time) {
661
+ return null;
662
+ }
663
+
664
+ var hour = parseInt(time[1]*1, 10);
665
+ var hours;
666
+
667
+ if (time[4]) {
668
+ if (hour == 12) {
669
+ hours = (time[4] == 'p') ? 12 : 0;
670
+ } else {
671
+ hours = (hour + (time[4] == 'p' ? 12 : 0));
672
+ }
673
+
674
+ } else {
675
+ hours = hour;
676
+ }
677
+
678
+ var minutes = ( time[2]*1 || 0 );
679
+ var seconds = ( time[3]*1 || 0 );
680
+ return hours*3600 + minutes*60 + seconds;
681
+ }
682
+
683
+ // Plugin entry
684
+ $.fn.timepicker = function(method)
685
+ {
686
+
687
+ if(methods[method]) { return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); }
688
+ else if(typeof method === "object" || !method) { return methods.init.apply(this, arguments); }
689
+ else { $.error("Method "+ method + " does not exist on jQuery.timepicker"); }
690
+ };
691
+ }));
js/libraries/jquery-datepicker/jquery.timepicker.min.js CHANGED
@@ -1,3 +1,3 @@
1
- jQuery(document).ready(function($) {
2
- (function(e){typeof define=="function"&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function o(t){var r=t.data("timepicker-settings"),i=t.data("timepicker-list");i&&i.length&&(i.remove(),t.data("timepicker-list",!1)),i=e("<ul />",{tabindex:-1,"class":"ui-timepicker-list"}),r.className&&i.addClass(r.className),i.css({display:"none",position:"absolute"}),(r.minTime!==null||r.durationTime!==null)&&r.showDuration&&i.addClass("ui-timepicker-with-duration");var s=r.durationTime!==null?r.durationTime:r.minTime,o=r.minTime!==null?r.minTime:0,u=r.maxTime!==null?r.maxTime:o+n-1;u<=o&&(u+=n);for(var a=o;a<=u;a+=r.step*60){var f=a%n,l=e("<li />");l.data("time",f),l.text(m(f,r.timeFormat));if((r.minTime!==null||r.durationTime!==null)&&r.showDuration){var h=e("<span />");h.addClass("ui-timepicker-duration"),h.text(" ("+v(a-s)+")"),l.append(h)}i.append(l)}i.data("timepicker-input",t),t.data("timepicker-list",i);var p=r.appendTo;typeof p=="string"?p=e(p):typeof p=="function"&&(p=p(t)),p.append(i),c(t,i),i.on("click","li",function(n){t.addClass("ui-timepicker-hideme"),t[0].focus(),i.find("li").removeClass("ui-timepicker-selected"),e(this).addClass("ui-timepicker-selected"),d(t),i.hide()})}function u(){var e=new Date,t=e.getTimezoneOffset()*6e4;e.setHours(0),e.setMinutes(0),e.setSeconds(0);var n=e.getTimezoneOffset()*6e4;return new Date(e.valueOf()-n+t)}function a(){"ontouchstart"in document?e("body").on("touchstart.ui-timepicker",f):(e("body").on("mousedown.ui-timepicker",f),e(window).on("scroll.ui-timepicker",f))}function f(t){var n=e(t.target),r=n.closest(".ui-timepicker-input");r.length===0&&n.closest(".ui-timepicker-list").length===0&&s.hide(),e("body").unbind(".ui-timepicker"),e(window).unbind(".ui-timepicker")}function l(t,n,r){if(!r&&r!==0)return!1;var i=t.data("timepicker-settings"),s=!1,o=i.step*30;return n.find("li").each(function(t,n){var i=e(n),u=i.data("time")-r;if(Math.abs(u)<o||u==o)return s=i,!1}),s}function c(e,t){var n=g(e.val()),r=l(e,t,n);r&&r.addClass("ui-timepicker-selected")}function h(){if(this.value==="")return;var t=e(this),n=g(this.value);if(n===null){t.trigger("timeFormatError");return}var r=t.data("timepicker-settings");if(r.forceRoundTime){var i=n%(r.step*60);i>=r.step*30?n+=r.step*60-i:n-=i}var s=m(n,r.timeFormat);t.val(s)}function p(t){var n=e(this),r=n.data("timepicker-list");if(!r.is(":visible")){if(t.keyCode!=40)return!0;n.focus()}switch(t.keyCode){case 13:return d(n),s.hide.apply(this),t.preventDefault(),!1;case 38:var i=r.find(".ui-timepicker-selected");i.length?i.is(":first-child")||(i.removeClass("ui-timepicker-selected"),i.prev().addClass("ui-timepicker-selected"),i.prev().position().top<i.outerHeight()&&r.scrollTop(r.scrollTop()-i.outerHeight())):(r.children().each(function(t,n){if(e(n).position().top>0)return i=e(n),!1}),i.addClass("ui-timepicker-selected"));break;case 40:i=r.find(".ui-timepicker-selected"),i.length===0?(r.children().each(function(t,n){if(e(n).position().top>0)return i=e(n),!1}),i.addClass("ui-timepicker-selected")):i.is(":last-child")||(i.removeClass("ui-timepicker-selected"),i.next().addClass("ui-timepicker-selected"),i.next().position().top+2*i.outerHeight()>r.outerHeight()&&r.scrollTop(r.scrollTop()+i.outerHeight()));break;case 27:r.find("li").removeClass("ui-timepicker-selected"),r.hide();break;case 9:s.hide();break;case 16:case 17:case 18:case 19:case 20:case 33:case 34:case 35:case 36:case 37:case 39:case 45:return;default:r.find("li").removeClass("ui-timepicker-selected");return}}function d(e){var t=e.data("timepicker-settings"),n=e.data("timepicker-list"),r=null,i=n.find(".ui-timepicker-selected");i.length?r=i.data("time"):e.val()&&(r=g(e.val()),c(e,n));if(r!==null){var s=m(r,t.timeFormat);e.val(s)}e.trigger("change").trigger("changeTime")}function v(e){var t=Math.round(e/60),n;if(Math.abs(t)<60)n=[t,i.mins];else if(t==60)n=["1",i.hr];else{var r=(t/60).toFixed(1);i.decimal!="."&&(r=r.replace(".",i.decimal)),n=[r,i.hrs]}return n.join(" ")}function m(e,n){if(e===null)return;var r=new Date(t.valueOf()+e*1e3),i="",s,o;for(var u=0;u<n.length;u++){o=n.charAt(u);switch(o){case"a":i+=r.getHours()>11?"pm":"am";break;case"A":i+=r.getHours()>11?"PM":"AM";break;case"g":s=r.getHours()%12,i+=s===0?"12":s;break;case"G":i+=r.getHours();break;case"h":s=r.getHours()%12,s!==0&&s<10&&(s="0"+s),i+=s===0?"12":s;break;case"H":s=r.getHours(),i+=s>9?s:"0"+s;break;case"i":var a=r.getMinutes();i+=a>9?a:"0"+a;break;case"s":e=r.getSeconds(),i+=e>9?e:"0"+e;break;default:i+=o}}return i}function g(e){if(e==="")return null;if(e+0==e)return e;typeof e=="object"&&(e=e.getHours()+":"+e.getMinutes()+":"+e.getSeconds());var t=new Date(0),n=e.toLowerCase().match(/(\d{1,2})(?::(\d{1,2}))?(?::(\d{2}))?\s*([pa]?)/);if(!n)return null;var r=parseInt(n[1]*1,10),i;n[4]?r==12?i=n[4]=="p"?12:0:i=r+(n[4]=="p"?12:0):i=r;var s=n[2]*1||0,o=n[3]*1||0;return i*3600+s*60+o}var t=u(),n=86400,r={className:null,minTime:null,maxTime:null,durationTime:null,step:30,showDuration:!1,timeFormat:"g:ia",scrollDefaultNow:!1,scrollDefaultTime:!1,selectOnBlur:!1,forceRoundTime:!1,appendTo:"body"},i={decimal:".",mins:"mins",hr:"hr",hrs:"hrs"},s={init:function(t){return this.each(function(){var n=e(this);if(n[0].tagName=="SELECT"){var o={type:"text",value:n.val()},u=n[0].attributes;for(var a=0;a<u.length;a++)o[u[a].nodeName]=u[a].nodeValue;var f=e("<input />",o);n.replaceWith(f),n=f}var l=e.extend({},r);t&&(l=e.extend(l,t)),l.minTime&&(l.minTime=g(l.minTime)),l.maxTime&&(l.maxTime=g(l.maxTime)),l.durationTime&&(l.durationTime=g(l.durationTime)),l.lang&&(i=e.extend(i,l.lang)),n.data("timepicker-settings",l),n.prop("autocomplete","off"),n.on("click.timepicker focus.timepicker",s.show),n.on("blur.timepicker",h),n.on("keydown.timepicker",p),n.addClass("ui-timepicker-input"),h.call(n.get(0))})},show:function(t){var n=e(this);"ontouchstart"in document&&n.blur();var r=n.data("timepicker-list");if(n.prop("readonly"))return;if(!r||r.length===0)o(n),r=n.data("timepicker-list");if(n.hasClass("ui-timepicker-hideme")){n.removeClass("ui-timepicker-hideme"),r.hide();return}if(r.is(":visible"))return;s.hide(),n.offset().top+n.outerHeight(!0)+r.outerHeight()>e(window).height()+e(window).scrollTop()?r.css({left:n.offset().left,top:n.offset().top-r.outerHeight()}):r.css({left:n.offset().left,top:n.offset().top+n.outerHeight()}),r.show();var i=n.data("timepicker-settings"),u=r.find(".ui-timepicker-selected");u.length||(n.val()?u=l(n,r,g(n.val())):i.scrollDefaultNow?u=l(n,r,g(new Date)):i.scrollDefaultTime!==!1&&(u=l(n,r,g(i.scrollDefaultTime))));if(u&&u.length){var f=r.scrollTop()+u.position().top-u.outerHeight();r.scrollTop(f)}else r.scrollTop(0);a(),n.trigger("showTimepicker")},hide:function(t){e(".ui-timepicker-list:visible").each(function(){var t=e(this),n=t.data("timepicker-input"),r=n.data("timepicker-settings");r&&r.selectOnBlur&&d(n),t.hide(),n.trigger("hideTimepicker")})},option:function(t,n){var r=e(this),i=r.data("timepicker-settings"),s=r.data("timepicker-list");if(typeof t=="object")i=e.extend(i,t);else if(typeof t=="string"&&typeof n!="undefined")i[t]=n;else if(typeof t=="string")return i[t];i.minTime&&(i.minTime=g(i.minTime)),i.maxTime&&(i.maxTime=g(i.maxTime)),i.durationTime&&(i.durationTime=g(i.durationTime)),r.data("timepicker-settings",i),s&&(s.remove(),r.data("timepicker-list",!1))},getSecondsFromMidnight:function(){return g(e(this).val())},getTime:function(){return new Date(t.valueOf()+g(e(this).val())*1e3)},setTime:function(t){var n=e(this),r=m(g(t),n.data("timepicker-settings").timeFormat);n.val(r)},remove:function(){var t=e(this);if(!t.hasClass("ui-timepicker-input"))return;t.removeAttr("autocomplete","off"),t.removeClass("ui-timepicker-input"),t.removeData("timepicker-settings"),t.off(".timepicker"),t.data("timepicker-list")&&t.data("timepicker-list").remove(),t.removeData("timepicker-list")}};e.fn.timepicker=function(t){if(s[t])return s[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return s.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.timepicker")}});
3
  });
1
+ jQuery(document).ready(function($) {
2
+ (function(e){typeof define=="function"&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function o(t){var r=t.data("timepicker-settings"),i=t.data("timepicker-list");i&&i.length&&(i.remove(),t.data("timepicker-list",!1)),i=e("<ul />",{tabindex:-1,"class":"ui-timepicker-list"}),r.className&&i.addClass(r.className),i.css({display:"none",position:"absolute"}),(r.minTime!==null||r.durationTime!==null)&&r.showDuration&&i.addClass("ui-timepicker-with-duration");var s=r.durationTime!==null?r.durationTime:r.minTime,o=r.minTime!==null?r.minTime:0,u=r.maxTime!==null?r.maxTime:o+n-1;u<=o&&(u+=n);for(var a=o;a<=u;a+=r.step*60){var f=a%n,l=e("<li />");l.data("time",f),l.text(m(f,r.timeFormat));if((r.minTime!==null||r.durationTime!==null)&&r.showDuration){var h=e("<span />");h.addClass("ui-timepicker-duration"),h.text(" ("+v(a-s)+")"),l.append(h)}i.append(l)}i.data("timepicker-input",t),t.data("timepicker-list",i);var p=r.appendTo;typeof p=="string"?p=e(p):typeof p=="function"&&(p=p(t)),p.append(i),c(t,i),i.on("click","li",function(n){t.addClass("ui-timepicker-hideme"),t[0].focus(),i.find("li").removeClass("ui-timepicker-selected"),e(this).addClass("ui-timepicker-selected"),d(t),i.hide()})}function u(){var e=new Date,t=e.getTimezoneOffset()*6e4;e.setHours(0),e.setMinutes(0),e.setSeconds(0);var n=e.getTimezoneOffset()*6e4;return new Date(e.valueOf()-n+t)}function a(){"ontouchstart"in document?e("body").on("touchstart.ui-timepicker",f):(e("body").on("mousedown.ui-timepicker",f),e(window).on("scroll.ui-timepicker",f))}function f(t){var n=e(t.target),r=n.closest(".ui-timepicker-input");r.length===0&&n.closest(".ui-timepicker-list").length===0&&s.hide(),e("body").unbind(".ui-timepicker"),e(window).unbind(".ui-timepicker")}function l(t,n,r){if(!r&&r!==0)return!1;var i=t.data("timepicker-settings"),s=!1,o=i.step*30;return n.find("li").each(function(t,n){var i=e(n),u=i.data("time")-r;if(Math.abs(u)<o||u==o)return s=i,!1}),s}function c(e,t){var n=g(e.val()),r=l(e,t,n);r&&r.addClass("ui-timepicker-selected")}function h(){if(this.value==="")return;var t=e(this),n=g(this.value);if(n===null){t.trigger("timeFormatError");return}var r=t.data("timepicker-settings");if(r.forceRoundTime){var i=n%(r.step*60);i>=r.step*30?n+=r.step*60-i:n-=i}var s=m(n,r.timeFormat);t.val(s)}function p(t){var n=e(this),r=n.data("timepicker-list");if(!r.is(":visible")){if(t.keyCode!=40)return!0;n.focus()}switch(t.keyCode){case 13:return d(n),s.hide.apply(this),t.preventDefault(),!1;case 38:var i=r.find(".ui-timepicker-selected");i.length?i.is(":first-child")||(i.removeClass("ui-timepicker-selected"),i.prev().addClass("ui-timepicker-selected"),i.prev().position().top<i.outerHeight()&&r.scrollTop(r.scrollTop()-i.outerHeight())):(r.children().each(function(t,n){if(e(n).position().top>0)return i=e(n),!1}),i.addClass("ui-timepicker-selected"));break;case 40:i=r.find(".ui-timepicker-selected"),i.length===0?(r.children().each(function(t,n){if(e(n).position().top>0)return i=e(n),!1}),i.addClass("ui-timepicker-selected")):i.is(":last-child")||(i.removeClass("ui-timepicker-selected"),i.next().addClass("ui-timepicker-selected"),i.next().position().top+2*i.outerHeight()>r.outerHeight()&&r.scrollTop(r.scrollTop()+i.outerHeight()));break;case 27:r.find("li").removeClass("ui-timepicker-selected"),r.hide();break;case 9:s.hide();break;case 16:case 17:case 18:case 19:case 20:case 33:case 34:case 35:case 36:case 37:case 39:case 45:return;default:r.find("li").removeClass("ui-timepicker-selected");return}}function d(e){var t=e.data("timepicker-settings"),n=e.data("timepicker-list"),r=null,i=n.find(".ui-timepicker-selected");i.length?r=i.data("time"):e.val()&&(r=g(e.val()),c(e,n));if(r!==null){var s=m(r,t.timeFormat);e.val(s)}e.trigger("change").trigger("changeTime")}function v(e){var t=Math.round(e/60),n;if(Math.abs(t)<60)n=[t,i.mins];else if(t==60)n=["1",i.hr];else{var r=(t/60).toFixed(1);i.decimal!="."&&(r=r.replace(".",i.decimal)),n=[r,i.hrs]}return n.join(" ")}function m(e,n){if(e===null)return;var r=new Date(t.valueOf()+e*1e3),i="",s,o;for(var u=0;u<n.length;u++){o=n.charAt(u);switch(o){case"a":i+=r.getHours()>11?"pm":"am";break;case"A":i+=r.getHours()>11?"PM":"AM";break;case"g":s=r.getHours()%12,i+=s===0?"12":s;break;case"G":i+=r.getHours();break;case"h":s=r.getHours()%12,s!==0&&s<10&&(s="0"+s),i+=s===0?"12":s;break;case"H":s=r.getHours(),i+=s>9?s:"0"+s;break;case"i":var a=r.getMinutes();i+=a>9?a:"0"+a;break;case"s":e=r.getSeconds(),i+=e>9?e:"0"+e;break;default:i+=o}}return i}function g(e){if(e==="")return null;if(e+0==e)return e;typeof e=="object"&&(e=e.getHours()+":"+e.getMinutes()+":"+e.getSeconds());var t=new Date(0),n=e.toLowerCase().match(/(\d{1,2})(?::(\d{1,2}))?(?::(\d{2}))?\s*([pa]?)/);if(!n)return null;var r=parseInt(n[1]*1,10),i;n[4]?r==12?i=n[4]=="p"?12:0:i=r+(n[4]=="p"?12:0):i=r;var s=n[2]*1||0,o=n[3]*1||0;return i*3600+s*60+o}var t=u(),n=86400,r={className:null,minTime:null,maxTime:null,durationTime:null,step:30,showDuration:!1,timeFormat:"g:ia",scrollDefaultNow:!1,scrollDefaultTime:!1,selectOnBlur:!1,forceRoundTime:!1,appendTo:"body"},i={decimal:".",mins:"mins",hr:"hr",hrs:"hrs"},s={init:function(t){return this.each(function(){var n=e(this);if(n[0].tagName=="SELECT"){var o={type:"text",value:n.val()},u=n[0].attributes;for(var a=0;a<u.length;a++)o[u[a].nodeName]=u[a].nodeValue;var f=e("<input />",o);n.replaceWith(f),n=f}var l=e.extend({},r);t&&(l=e.extend(l,t)),l.minTime&&(l.minTime=g(l.minTime)),l.maxTime&&(l.maxTime=g(l.maxTime)),l.durationTime&&(l.durationTime=g(l.durationTime)),l.lang&&(i=e.extend(i,l.lang)),n.data("timepicker-settings",l),n.prop("autocomplete","off"),n.on("click.timepicker focus.timepicker",s.show),n.on("blur.timepicker",h),n.on("keydown.timepicker",p),n.addClass("ui-timepicker-input"),h.call(n.get(0))})},show:function(t){var n=e(this);"ontouchstart"in document&&n.blur();var r=n.data("timepicker-list");if(n.prop("readonly"))return;if(!r||r.length===0)o(n),r=n.data("timepicker-list");if(n.hasClass("ui-timepicker-hideme")){n.removeClass("ui-timepicker-hideme"),r.hide();return}if(r.is(":visible"))return;s.hide(),n.offset().top+n.outerHeight(!0)+r.outerHeight()>e(window).height()+e(window).scrollTop()?r.css({left:n.offset().left,top:n.offset().top-r.outerHeight()}):r.css({left:n.offset().left,top:n.offset().top+n.outerHeight()}),r.show();var i=n.data("timepicker-settings"),u=r.find(".ui-timepicker-selected");u.length||(n.val()?u=l(n,r,g(n.val())):i.scrollDefaultNow?u=l(n,r,g(new Date)):i.scrollDefaultTime!==!1&&(u=l(n,r,g(i.scrollDefaultTime))));if(u&&u.length){var f=r.scrollTop()+u.position().top-u.outerHeight();r.scrollTop(f)}else r.scrollTop(0);a(),n.trigger("showTimepicker")},hide:function(t){e(".ui-timepicker-list:visible").each(function(){var t=e(this),n=t.data("timepicker-input"),r=n.data("timepicker-settings");r&&r.selectOnBlur&&d(n),t.hide(),n.trigger("hideTimepicker")})},option:function(t,n){var r=e(this),i=r.data("timepicker-settings"),s=r.data("timepicker-list");if(typeof t=="object")i=e.extend(i,t);else if(typeof t=="string"&&typeof n!="undefined")i[t]=n;else if(typeof t=="string")return i[t];i.minTime&&(i.minTime=g(i.minTime)),i.maxTime&&(i.maxTime=g(i.maxTime)),i.durationTime&&(i.durationTime=g(i.durationTime)),r.data("timepicker-settings",i),s&&(s.remove(),r.data("timepicker-list",!1))},getSecondsFromMidnight:function(){return g(e(this).val())},getTime:function(){return new Date(t.valueOf()+g(e(this).val())*1e3)},setTime:function(t){var n=e(this),r=m(g(t),n.data("timepicker-settings").timeFormat);n.val(r)},remove:function(){var t=e(this);if(!t.hasClass("ui-timepicker-input"))return;t.removeAttr("autocomplete","off"),t.removeClass("ui-timepicker-input"),t.removeData("timepicker-settings"),t.off(".timepicker"),t.data("timepicker-list")&&t.data("timepicker-list").remove(),t.removeData("timepicker-list")}};e.fn.timepicker=function(t){if(s[t])return s[t].apply(this,Array.prototype.slice.call(arguments,1));if(typeof t=="object"||!t)return s.init.apply(this,arguments);e.error("Method "+t+" does not exist on jQuery.timepicker")}});
3
  });
js/libraries/jquery-datepicker/lib/base.css CHANGED
@@ -1,390 +1,390 @@
1
- .jquery-date-picker input {width:80px;}
2
- .jquery-date-picker h3 { margin: 0 0 10px 0; }
3
- .jquery-date-picker p { margin: 20px 0 0 0; }
4
-
5
- /* Bootstrap datepicker CSS */
6
- .dropdown { position:relative; }
7
- .dropdown-toggle { *margin-bottom:-3px; }
8
- .dropdown-toggle:active, .open .dropdown-toggle { outline:0; }
9
- .caret {
10
- display:inline-block;
11
- width:0;
12
- height:0;
13
- text-indent:-99999px;
14
- *text-indent:0;
15
- vertical-align:top;
16
- border-left:4px solid transparent;
17
- border-right:4px solid transparent;
18
- border-top:4px solid #000000;
19
- opacity:0.3;
20
- filter:alpha(opacity=30);
21
- content:"\2193";
22
- }
23
- .dropdown .caret {
24
- margin-top:8px;
25
- margin-left:2px;
26
- }
27
- .dropdown:hover .caret, .open.dropdown .caret {
28
- opacity:1;
29
- filter:alpha(opacity=100);
30
- }
31
- .dropdown-menu {
32
- position:absolute;
33
- top:100%;
34
- left:0;
35
- z-index:1000;
36
- float:left;
37
- display:none;
38
- min-width:160px;
39
- max-width:220px;
40
- _width:160px;
41
- padding:4px 0;
42
- margin:0;
43
- list-style:none;
44
- background-color:#ffffff;
45
- border-color:#cccccc;
46
- border-color:rgba(0,0,0,0.2);
47
- border-style:solid;
48
- border-width:1px;
49
- -webkit-border-radius:0 0 5px 5px;
50
- -moz-border-radius:0 0 5px 5px;
51
- border-radius:0 0 5px 5px;
52
- -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);
53
- -moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);
54
- box-shadow:0 5px 10px rgba(0,0,0,0.2);
55
- -webkit-background-clip:padding-box;
56
- -moz-background-clip:padding;
57
- background-clip:padding-box;
58
- *border-right-width:2px;
59
- *border-bottom-width:2px;
60
- }
61
- .dropdown-menu.bottom-up {
62
- top:auto;
63
- bottom:100%;
64
- margin-bottom:2px;
65
- }
66
- .dropdown-menu .divider {
67
- height:1px;
68
- margin:5px 1px;
69
- overflow:hidden;
70
- background-color:#e5e5e5;
71
- border-bottom:1px solid #ffffff;
72
- *width:100%;
73
- *margin:-5px 0 5px;
74
- }
75
- .dropdown-menu a {
76
- display:block;
77
- padding:3px 15px;
78
- clear:both;
79
- font-weight:normal;
80
- line-height:18px;
81
- color:#555555;
82
- white-space:nowrap;
83
- }
84
- .dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover {
85
- color:#ffffff;
86
- text-decoration:none;
87
- background-color:#0060b6;
88
- }
89
- .dropdown.open { *z-index:1000; }
90
- .dropdown.open .dropdown-toggle {
91
- color:#ffffff;
92
- background:#cccccc;
93
- background:rgba(0,0,0,0.3);
94
- }
95
- .dropdown.open .dropdown-menu { display:block; }
96
- .typeahead {
97
- margin-top:2px;
98
- -webkit-border-radius:4px;
99
- -moz-border-radius:4px;
100
- border-radius:4px;
101
- }
102
- /*!
103
- * Datepicker for Bootstrap
104
- *
105
- * Copyright 2012 Stefan Petre
106
- * Improvements by Andrew Rowls
107
- * Licensed under the Apache License v2.0
108
- * http://www.apache.org/licenses/LICENSE-2.0
109
- *
110
- */
111
- .datepicker {
112
- top: 0;
113
- left: 0;
114
- padding: 4px;
115
- margin-top: 1px;
116
- -webkit-border-radius: 4px;
117
- -moz-border-radius: 4px;
118
- border-radius: 4px;
119
- /*.dow {
120
- border-top: 1px solid #ddd !important;
121
- }*/
122
-
123
- }
124
- .datepicker:before {
125
- content: '';
126
- display: inline-block;
127
- border-left: 7px solid transparent;
128
- border-right: 7px solid transparent;
129
- border-bottom: 7px solid #ccc;
130
- border-bottom-color: rgba(0, 0, 0, 0.2);
131
- position: absolute;
132
- top: -7px;
133
- left: 6px;
134
- }
135
- .datepicker:after {
136
- content: '';
137
- display: inline-block;
138
- border-left: 6px solid transparent;
139
- border-right: 6px solid transparent;
140
- border-bottom: 6px solid #ffffff;
141
- position: absolute;
142
- top: -6px;
143
- left: 7px;
144
- }
145
- .datepicker > div {
146
- display: none;
147
- }
148
- .datepicker.days div.datepicker-days {
149
- display: block;
150
- }
151
- .datepicker.months div.datepicker-months {
152
- display: block;
153
- }
154
- .datepicker.years div.datepicker-years {
155
- display: block;
156
- }
157
- .datepicker table {
158
- margin: 0;
159
- }
160
- .datepicker td,
161
- .datepicker th {
162
- text-align: center;
163
- width: 20px;
164
- height: 20px;
165
- -webkit-border-radius: 4px;
166
- -moz-border-radius: 4px;
167
- border-radius: 4px;
168
- }
169
- .datepicker td.day:hover {
170
- background: #eeeeee;
171
- cursor: pointer;
172
- }
173
- .datepicker td.old,
174
- .datepicker td.new {
175
- color: #999999;
176
- }
177
- .datepicker td.disabled,
178
- .datepicker td.disabled:hover {
179
- background: none;
180
- color: #999999;
181
- cursor: default;
182
- }
183
- .datepicker td.today,
184
- .datepicker td.today:hover,
185
- .datepicker td.today.disabled,
186
- .datepicker td.today.disabled:hover {
187
- background-color: #fde19a;
188
- background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
189
- background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
190
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
191
- background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
192
- background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
193
- background-image: linear-gradient(top, #fdd49a, #fdf59a);
194
- background-repeat: repeat-x;
195
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
196
- border-color: #fdf59a #fdf59a #fbed50;
197
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
198
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
199
- }
200
- .datepicker td.today:hover,
201
- .datepicker td.today:hover:hover,
202
- .datepicker td.today.disabled:hover,
203
- .datepicker td.today.disabled:hover:hover,
204
- .datepicker td.today:active,
205
- .datepicker td.today:hover:active,
206
- .datepicker td.today.disabled:active,
207
- .datepicker td.today.disabled:hover:active,
208
- .datepicker td.today.active,
209
- .datepicker td.today:hover.active,
210
- .datepicker td.today.disabled.active,
211
- .datepicker td.today.disabled:hover.active,
212
- .datepicker td.today.disabled,
213
- .datepicker td.today:hover.disabled,
214
- .datepicker td.today.disabled.disabled,
215
- .datepicker td.today.disabled:hover.disabled,
216
- .datepicker td.today[disabled],
217
- .datepicker td.today:hover[disabled],
218
- .datepicker td.today.disabled[disabled],
219
- .datepicker td.today.disabled:hover[disabled] {
220
- background-color: #fdf59a;
221
- }
222
- .datepicker td.today:active,
223
- .datepicker td.today:hover:active,
224
- .datepicker td.today.disabled:active,
225
- .datepicker td.today.disabled:hover:active,
226
- .datepicker td.today.active,
227
- .datepicker td.today:hover.active,
228
- .datepicker td.today.disabled.active,
229
- .datepicker td.today.disabled:hover.active {
230
- background-color: #fbf069 \9;
231
- }
232
- .datepicker td.active,
233
- .datepicker td.active:hover,
234
- .datepicker td.active.disabled,
235
- .datepicker td.active.disabled:hover {
236
- background-color: #006dcc;
237
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
238
- background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
239
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
240
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
241
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
242
- background-image: linear-gradient(top, #0088cc, #0044cc);
243
- background-repeat: repeat-x;
244
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
245
- border-color: #0044cc #0044cc #002a80;
246
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
247
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
248
- color: #fff;
249
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
250
- }
251
- .datepicker td.active:hover,
252
- .datepicker td.active:hover:hover,
253
- .datepicker td.active.disabled:hover,
254
- .datepicker td.active.disabled:hover:hover,
255
- .datepicker td.active:active,
256
- .datepicker td.active:hover:active,
257
- .datepicker td.active.disabled:active,
258
- .datepicker td.active.disabled:hover:active,
259
- .datepicker td.active.active,
260
- .datepicker td.active:hover.active,
261
- .datepicker td.active.disabled.active,
262
- .datepicker td.active.disabled:hover.active,
263
- .datepicker td.active.disabled,
264
- .datepicker td.active:hover.disabled,
265
- .datepicker td.active.disabled.disabled,
266
- .datepicker td.active.disabled:hover.disabled,
267
- .datepicker td.active[disabled],
268
- .datepicker td.active:hover[disabled],
269
- .datepicker td.active.disabled[disabled],
270
- .datepicker td.active.disabled:hover[disabled] {
271
- background-color: #0044cc;
272
- }
273
- .datepicker td.active:active,
274
- .datepicker td.active:hover:active,
275
- .datepicker td.active.disabled:active,
276
- .datepicker td.active.disabled:hover:active,
277
- .datepicker td.active.active,
278
- .datepicker td.active:hover.active,
279
- .datepicker td.active.disabled.active,
280
- .datepicker td.active.disabled:hover.active {
281
- background-color: #003399 \9;
282
- }
283
- .datepicker td span {
284
- display: block;
285
- width: 23%;
286
- height: 54px;
287
- line-height: 54px;
288
- float: left;
289
- margin: 1%;
290
- cursor: pointer;
291
- -webkit-border-radius: 4px;
292
- -moz-border-radius: 4px;
293
- border-radius: 4px;
294
- }
295
- .datepicker td span:hover {
296
- background: #eeeeee;
297
- }
298
- .datepicker td span.disabled,
299
- .datepicker td span.disabled:hover {
300
- background: none;
301
- color: #999999;
302
- cursor: default;
303
- }
304
- .datepicker td span.active,
305
- .datepicker td span.active:hover,
306
- .datepicker td span.active.disabled,
307
- .datepicker td span.active.disabled:hover {
308
- background-color: #006dcc;
309
- background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
310
- background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
311
- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
312
- background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
313
- background-image: -o-linear-gradient(top, #0088cc, #0044cc);
314
- background-image: linear-gradient(top, #0088cc, #0044cc);
315
- background-repeat: repeat-x;
316
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
317
- border-color: #0044cc #0044cc #002a80;
318
- border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
319
- filter: progid:dximagetransform.microsoft.gradient(enabled=false);
320
- color: #fff;
321
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
322
- }
323
- .datepicker td span.active:hover,
324
- .datepicker td span.active:hover:hover,
325
- .datepicker td span.active.disabled:hover,
326
- .datepicker td span.active.disabled:hover:hover,
327
- .datepicker td span.active:active,
328
- .datepicker td span.active:hover:active,
329
- .datepicker td span.active.disabled:active,
330
- .datepicker td span.active.disabled:hover:active,
331
- .datepicker td span.active.active,
332
- .datepicker td span.active:hover.active,
333
- .datepicker td span.active.disabled.active,
334
- .datepicker td span.active.disabled:hover.active,
335
- .datepicker td span.active.disabled,
336
- .datepicker td span.active:hover.disabled,
337
- .datepicker td span.active.disabled.disabled,
338
- .datepicker td span.active.disabled:hover.disabled,
339
- .datepicker td span.active[disabled],
340
- .datepicker td span.active:hover[disabled],
341
- .datepicker td span.active.disabled[disabled],
342
- .datepicker td span.active.disabled:hover[disabled] {
343
- background-color: #0044cc;
344
- }
345
- .datepicker td span.active:active,
346
- .datepicker td span.active:hover:active,
347
- .datepicker td span.active.disabled:active,
348
- .datepicker td span.active.disabled:hover:active,
349
- .datepicker td span.active.active,
350
- .datepicker td span.active:hover.active,
351
- .datepicker td span.active.disabled.active,
352
- .datepicker td span.active.disabled:hover.active {
353
- background-color: #003399 \9;
354
- }
355
- .datepicker td span.old {
356
- color: #999999;
357
- }
358
- .datepicker th.switch {
359
- width: 145px;
360
- }
361
- .datepicker thead tr:first-child th,
362
- .datepicker tfoot tr:first-child th {
363
- cursor: pointer;
364
- }
365
- .datepicker thead tr:first-child th:hover,
366
- .datepicker tfoot tr:first-child th:hover {
367
- background: #eeeeee;
368
- }
369
- .input-append.date .add-on i,
370
- .input-prepend.date .add-on i {
371
- display: block;
372
- cursor: pointer;
373
- width: 16px;
374
- height: 16px;
375
- }
376
-
377
- [class^="icon-"], [class*=" icon-"] {
378
- display:inline-block;
379
- width:14px;
380
- height:14px;
381
- *margin-right:.3em;
382
- line-height:14px;
383
- vertical-align:text-top;
384
- background-image:url("glyphicons-halflings.png");
385
- background-position:14px 14px;
386
- background-repeat:no-repeat;
387
- }
388
- [class^="icon-"]:last-child, [class*=" icon-"]:last-child { *margin-left:0; }
389
- .icon-arrow-left { background-position:-240px -96px; }
390
  .icon-arrow-right { background-position:-264px -96px; }
1
+ .jquery-date-picker input {width:80px;}
2
+ .jquery-date-picker h3 { margin: 0 0 10px 0; }
3
+ .jquery-date-picker p { margin: 20px 0 0 0; }
4
+
5
+ /* Bootstrap datepicker CSS */
6
+ .dropdown { position:relative; }
7
+ .dropdown-toggle { *margin-bottom:-3px; }
8
+ .dropdown-toggle:active, .open .dropdown-toggle { outline:0; }
9
+ .caret {
10
+ display:inline-block;
11
+ width:0;
12
+ height:0;
13
+ text-indent:-99999px;
14
+ *text-indent:0;
15
+ vertical-align:top;
16
+ border-left:4px solid transparent;
17
+ border-right:4px solid transparent;
18
+ border-top:4px solid #000000;
19
+ opacity:0.3;
20
+ filter:alpha(opacity=30);
21
+ content:"\2193";
22
+ }
23
+ .dropdown .caret {
24
+ margin-top:8px;
25
+ margin-left:2px;
26
+ }
27
+ .dropdown:hover .caret, .open.dropdown .caret {
28
+ opacity:1;
29
+ filter:alpha(opacity=100);
30
+ }
31
+ .dropdown-menu {
32
+ position:absolute;
33
+ top:100%;
34
+ left:0;
35
+ z-index:1000;
36
+ float:left;
37
+ display:none;
38
+ min-width:160px;
39
+ max-width:220px;
40
+ _width:160px;
41
+ padding:4px 0;
42
+ margin:0;
43
+ list-style:none;
44
+ background-color:#ffffff;
45
+ border-color:#cccccc;
46
+ border-color:rgba(0,0,0,0.2);
47
+ border-style:solid;
48
+ border-width:1px;
49
+ -webkit-border-radius:0 0 5px 5px;
50
+ -moz-border-radius:0 0 5px 5px;
51
+ border-radius:0 0 5px 5px;
52
+ -webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);
53
+ -moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);
54
+ box-shadow:0 5px 10px rgba(0,0,0,0.2);
55
+ -webkit-background-clip:padding-box;
56
+ -moz-background-clip:padding;
57
+ background-clip:padding-box;
58
+ *border-right-width:2px;
59
+ *border-bottom-width:2px;
60
+ }
61
+ .dropdown-menu.bottom-up {
62
+ top:auto;
63
+ bottom:100%;
64
+ margin-bottom:2px;
65
+ }
66
+ .dropdown-menu .divider {
67
+ height:1px;
68
+ margin:5px 1px;
69
+ overflow:hidden;
70
+ background-color:#e5e5e5;
71
+ border-bottom:1px solid #ffffff;
72
+ *width:100%;
73
+ *margin:-5px 0 5px;
74
+ }
75
+ .dropdown-menu a {
76
+ display:block;
77
+ padding:3px 15px;
78
+ clear:both;
79
+ font-weight:normal;
80
+ line-height:18px;
81
+ color:#555555;
82
+ white-space:nowrap;
83
+ }
84
+ .dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover {
85
+ color:#ffffff;
86
+ text-decoration:none;
87
+ background-color:#0060b6;
88
+ }
89
+ .dropdown.open { *z-index:1000; }
90
+ .dropdown.open .dropdown-toggle {
91
+ color:#ffffff;
92
+ background:#cccccc;
93
+ background:rgba(0,0,0,0.3);
94
+ }
95
+ .dropdown.open .dropdown-menu { display:block; }
96
+ .typeahead {
97
+ margin-top:2px;
98
+ -webkit-border-radius:4px;
99
+ -moz-border-radius:4px;
100
+ border-radius:4px;
101
+ }
102
+ /*!
103
+ * Datepicker for Bootstrap
104
+ *
105
+ * Copyright 2012 Stefan Petre
106
+ * Improvements by Andrew Rowls
107
+ * Licensed under the Apache License v2.0
108
+ * http://www.apache.org/licenses/LICENSE-2.0
109
+ *
110
+ */
111
+ .datepicker {
112
+ top: 0;
113
+ left: 0;
114
+ padding: 4px;
115
+ margin-top: 1px;
116
+ -webkit-border-radius: 4px;
117
+ -moz-border-radius: 4px;
118
+ border-radius: 4px;
119
+ /*.dow {
120
+ border-top: 1px solid #ddd !important;
121
+ }*/
122
+
123
+ }
124
+ .datepicker:before {
125
+ content: '';
126
+ display: inline-block;
127
+ border-left: 7px solid transparent;
128
+ border-right: 7px solid transparent;
129
+ border-bottom: 7px solid #ccc;
130
+ border-bottom-color: rgba(0, 0, 0, 0.2);
131
+ position: absolute;
132
+ top: -7px;
133
+ left: 6px;
134
+ }
135
+ .datepicker:after {
136
+ content: '';
137
+ display: inline-block;
138
+ border-left: 6px solid transparent;
139
+ border-right: 6px solid transparent;
140
+ border-bottom: 6px solid #ffffff;
141
+ position: absolute;
142
+ top: -6px;
143
+ left: 7px;
144
+ }
145
+ .datepicker > div {
146
+ display: none;
147
+ }
148
+ .datepicker.days div.datepicker-days {
149
+ display: block;
150
+ }
151
+ .datepicker.months div.datepicker-months {
152
+ display: block;
153
+ }
154
+ .datepicker.years div.datepicker-years {
155
+ display: block;
156
+ }
157
+ .datepicker table {
158
+ margin: 0;
159
+ }
160
+ .datepicker td,
161
+ .datepicker th {
162
+ text-align: center;
163
+ width: 20px;
164
+ height: 20px;
165
+ -webkit-border-radius: 4px;
166
+ -moz-border-radius: 4px;
167
+ border-radius: 4px;
168
+ }
169
+ .datepicker td.day:hover {
170
+ background: #eeeeee;
171
+ cursor: pointer;
172
+ }
173
+ .datepicker td.old,
174
+ .datepicker td.new {
175
+ color: #999999;
176
+ }
177
+ .datepicker td.disabled,
178
+ .datepicker td.disabled:hover {
179
+ background: none;
180
+ color: #999999;
181
+ cursor: default;
182
+ }
183
+ .datepicker td.today,
184
+ .datepicker td.today:hover,
185
+ .datepicker td.today.disabled,
186
+ .datepicker td.today.disabled:hover {
187
+ background-color: #fde19a;
188
+ background-image: -moz-linear-gradient(top, #fdd49a, #fdf59a);
189
+ background-image: -ms-linear-gradient(top, #fdd49a, #fdf59a);
190
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
191
+ background-image: -webkit-linear-gradient(top, #fdd49a, #fdf59a);
192
+ background-image: -o-linear-gradient(top, #fdd49a, #fdf59a);
193
+ background-image: linear-gradient(top, #fdd49a, #fdf59a);
194
+ background-repeat: repeat-x;
195
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
196
+ border-color: #fdf59a #fdf59a #fbed50;
197
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
198
+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);
199
+ }
200
+ .datepicker td.today:hover,
201
+ .datepicker td.today:hover:hover,
202
+ .datepicker td.today.disabled:hover,
203
+ .datepicker td.today.disabled:hover:hover,
204
+ .datepicker td.today:active,
205
+ .datepicker td.today:hover:active,
206
+ .datepicker td.today.disabled:active,
207
+ .datepicker td.today.disabled:hover:active,
208
+ .datepicker td.today.active,
209
+ .datepicker td.today:hover.active,
210
+ .datepicker td.today.disabled.active,
211
+ .datepicker td.today.disabled:hover.active,
212
+ .datepicker td.today.disabled,
213
+ .datepicker td.today:hover.disabled,
214
+ .datepicker td.today.disabled.disabled,
215
+ .datepicker td.today.disabled:hover.disabled,
216
+ .datepicker td.today[disabled],
217
+ .datepicker td.today:hover[disabled],
218
+ .datepicker td.today.disabled[disabled],
219
+ .datepicker td.today.disabled:hover[disabled] {
220
+ background-color: #fdf59a;
221
+ }
222
+ .datepicker td.today:active,
223
+ .datepicker td.today:hover:active,
224
+ .datepicker td.today.disabled:active,
225
+ .datepicker td.today.disabled:hover:active,
226
+ .datepicker td.today.active,
227
+ .datepicker td.today:hover.active,
228
+ .datepicker td.today.disabled.active,
229
+ .datepicker td.today.disabled:hover.active {
230
+ background-color: #fbf069 \9;
231
+ }
232
+ .datepicker td.active,
233
+ .datepicker td.active:hover,
234
+ .datepicker td.active.disabled,
235
+ .datepicker td.active.disabled:hover {
236
+ background-color: #006dcc;
237
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
238
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
239
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
240
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
241
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
242
+ background-image: linear-gradient(top, #0088cc, #0044cc);
243
+ background-repeat: repeat-x;
244
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
245
+ border-color: #0044cc #0044cc #002a80;
246
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
247
+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);
248
+ color: #fff;
249
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
250
+ }
251
+ .datepicker td.active:hover,
252
+ .datepicker td.active:hover:hover,
253
+ .datepicker td.active.disabled:hover,
254
+ .datepicker td.active.disabled:hover:hover,
255
+ .datepicker td.active:active,
256
+ .datepicker td.active:hover:active,
257
+ .datepicker td.active.disabled:active,
258
+ .datepicker td.active.disabled:hover:active,
259
+ .datepicker td.active.active,
260
+ .datepicker td.active:hover.active,
261
+ .datepicker td.active.disabled.active,
262
+ .datepicker td.active.disabled:hover.active,
263
+ .datepicker td.active.disabled,
264
+ .datepicker td.active:hover.disabled,
265
+ .datepicker td.active.disabled.disabled,
266
+ .datepicker td.active.disabled:hover.disabled,
267
+ .datepicker td.active[disabled],
268
+ .datepicker td.active:hover[disabled],
269
+ .datepicker td.active.disabled[disabled],
270
+ .datepicker td.active.disabled:hover[disabled] {
271
+ background-color: #0044cc;
272
+ }
273
+ .datepicker td.active:active,
274
+ .datepicker td.active:hover:active,
275
+ .datepicker td.active.disabled:active,
276
+ .datepicker td.active.disabled:hover:active,
277
+ .datepicker td.active.active,
278
+ .datepicker td.active:hover.active,
279
+ .datepicker td.active.disabled.active,
280
+ .datepicker td.active.disabled:hover.active {
281
+ background-color: #003399 \9;
282
+ }
283
+ .datepicker td span {
284
+ display: block;
285
+ width: 23%;
286
+ height: 54px;
287
+ line-height: 54px;
288
+ float: left;
289
+ margin: 1%;
290
+ cursor: pointer;
291
+ -webkit-border-radius: 4px;
292
+ -moz-border-radius: 4px;
293
+ border-radius: 4px;
294
+ }
295
+ .datepicker td span:hover {
296
+ background: #eeeeee;
297
+ }
298
+ .datepicker td span.disabled,
299
+ .datepicker td span.disabled:hover {
300
+ background: none;
301
+ color: #999999;
302
+ cursor: default;
303
+ }
304
+ .datepicker td span.active,
305
+ .datepicker td span.active:hover,
306
+ .datepicker td span.active.disabled,
307
+ .datepicker td span.active.disabled:hover {
308
+ background-color: #006dcc;
309
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
310
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
311
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
312
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
313
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
314
+ background-image: linear-gradient(top, #0088cc, #0044cc);
315
+ background-repeat: repeat-x;
316
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
317
+ border-color: #0044cc #0044cc #002a80;
318
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
319
+ filter: progid:dximagetransform.microsoft.gradient(enabled=false);
320
+ color: #fff;
321
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
322
+ }
323
+ .datepicker td span.active:hover,
324
+ .datepicker td span.active:hover:hover,
325
+ .datepicker td span.active.disabled:hover,
326
+ .datepicker td span.active.disabled:hover:hover,
327
+ .datepicker td span.active:active,
328
+ .datepicker td span.active:hover:active,
329
+ .datepicker td span.active.disabled:active,
330
+ .datepicker td span.active.disabled:hover:active,
331
+ .datepicker td span.active.active,
332
+ .datepicker td span.active:hover.active,
333
+ .datepicker td span.active.disabled.active,
334
+ .datepicker td span.active.disabled:hover.active,
335
+ .datepicker td span.active.disabled,
336
+ .datepicker td span.active:hover.disabled,
337
+ .datepicker td span.active.disabled.disabled,
338
+ .datepicker td span.active.disabled:hover.disabled,
339
+ .datepicker td span.active[disabled],
340
+ .datepicker td span.active:hover[disabled],
341
+ .datepicker td span.active.disabled[disabled],
342
+ .datepicker td span.active.disabled:hover[disabled] {
343
+ background-color: #0044cc;
344
+ }
345
+ .datepicker td span.active:active,
346
+ .datepicker td span.active:hover:active,
347
+ .datepicker td span.active.disabled:active,
348
+ .datepicker td span.active.disabled:hover:active,
349
+ .datepicker td span.active.active,
350
+ .datepicker td span.active:hover.active,
351
+ .datepicker td span.active.disabled.active,
352
+ .datepicker td span.active.disabled:hover.active {
353
+ background-color: #003399 \9;
354
+ }
355
+ .datepicker td span.old {
356
+ color: #999999;
357
+ }
358
+ .datepicker th.switch {
359
+ width: 145px;
360
+ }
361
+ .datepicker thead tr:first-child th,
362
+ .datepicker tfoot tr:first-child th {
363
+ cursor: pointer;
364
+ }
365
+ .datepicker thead tr:first-child th:hover,
366
+ .datepicker tfoot tr:first-child th:hover {
367
+ background: #eeeeee;
368
+ }
369
+ .input-append.date .add-on i,
370
+ .input-prepend.date .add-on i {
371
+ display: block;
372
+ cursor: pointer;
373
+ width: 16px;
374
+ height: 16px;
375
+ }
376
+
377
+ [class^="icon-"], [class*=" icon-"] {
378
+ display:inline-block;
379
+ width:14px;
380
+ height:14px;
381
+ *margin-right:.3em;
382
+ line-height:14px;
383
+ vertical-align:text-top;
384
+ background-image:url("glyphicons-halflings.png");
385
+ background-position:14px 14px;
386
+ background-repeat:no-repeat;
387
+ }
388
+ [class^="icon-"]:last-child, [class*=" icon-"]:last-child { *margin-left:0; }
389
+ .icon-arrow-left { background-position:-240px -96px; }
390
  .icon-arrow-right { background-position:-264px -96px; }
js/libraries/jquery-datepicker/lib/base.js CHANGED
@@ -1,14 +1,14 @@
1
- /* Rainbow v1.1.8 rainbowco.de | included languages: generic, javascript */
2
- window.Rainbow=function(){function q(a){var b,c=a.getAttribute&&a.getAttribute("data-language")||0;if(!c){a=a.attributes;for(b=0;b<a.length;++b)if("data-language"===a[b].nodeName)return a[b].nodeValue}return c}function B(a){var b=q(a)||q(a.parentNode);if(!b){var c=/\blang(?:uage)?-(\w+)/;(a=a.className.match(c)||a.parentNode.className.match(c))&&(b=a[1])}return b}function C(a,b){for(var c in e[d]){c=parseInt(c,10);if(a==c&&b==e[d][c]?0:a<=c&&b>=e[d][c])delete e[d][c],delete j[d][c];if(a>=c&&a<e[d][c]||
3
- b>c&&b<e[d][c])return!0}return!1}function r(a,b){return'<span class="'+a.replace(/\./g," ")+(l?" "+l:"")+'">'+b+"</span>"}function s(a,b,c,h){var f=a.exec(c);if(f){++t;!b.name&&"string"==typeof b.matches[0]&&(b.name=b.matches[0],delete b.matches[0]);var k=f[0],i=f.index,u=f[0].length+i,g=function(){function f(){s(a,b,c,h)}t%100>0?f():setTimeout(f,0)};if(C(i,u))g();else{var m=v(b.matches),l=function(a,c,h){if(a>=c.length)h(k);else{var d=f[c[a]];if(d){var e=b.matches[c[a]],i=e.language,g=e.name&&e.matches?
4
- e.matches:e,j=function(b,d,e){var i;i=0;var g;for(g=1;g<c[a];++g)f[g]&&(i=i+f[g].length);d=e?r(e,d):d;k=k.substr(0,i)+k.substr(i).replace(b,d);l(++a,c,h)};i?n(d,i,function(a){j(d,a)}):typeof e==="string"?j(d,d,e):w(d,g.length?g:[g],function(a){j(d,a,e.matches?e.name:0)})}else l(++a,c,h)}};l(0,m,function(a){b.name&&(a=r(b.name,a));if(!j[d]){j[d]={};e[d]={}}j[d][i]={replace:f[0],"with":a};e[d][i]=u;g()})}}else h()}function v(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push(c);return b.sort(function(a,
5
- b){return b-a})}function w(a,b,c){function h(b,k){k<b.length?s(b[k].pattern,b[k],a,function(){h(b,++k)}):D(a,function(a){delete j[d];delete e[d];--d;c(a)})}++d;h(b,0)}function D(a,b){function c(a,b,h,e){if(h<b.length){++x;var g=b[h],l=j[d][g],a=a.substr(0,g)+a.substr(g).replace(l.replace,l["with"]),g=function(){c(a,b,++h,e)};0<x%250?g():setTimeout(g,0)}else e(a)}var h=v(j[d]);c(a,h,0,b)}function n(a,b,c){var d=m[b]||[],f=m[y]||[],b=z[b]?d:d.concat(f);w(a.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/&(?![\w\#]+;)/g,
6
- "&amp;"),b,c)}function o(a,b,c){if(b<a.length){var d=a[b],f=B(d);return!(-1<(" "+d.className+" ").indexOf(" rainbow "))&&f?(f=f.toLowerCase(),d.className+=d.className?" rainbow":"rainbow",n(d.innerHTML,f,function(k){d.innerHTML=k;j={};e={};p&&p(d,f);setTimeout(function(){o(a,++b,c)},0)})):o(a,++b,c)}c&&c()}function A(a,b){var a=a&&"function"==typeof a.getElementsByTagName?a:document,c=a.getElementsByTagName("pre"),d=a.getElementsByTagName("code"),f,e=[];for(f=0;f<d.length;++f)e.push(d[f]);for(f=0;f<
7
- c.length;++f)c[f].getElementsByTagName("code").length||e.push(c[f]);o(e,0,b)}var j={},e={},m={},z={},d=0,y=0,t=0,x=0,l,p;return{extend:function(a,b,c){1==arguments.length&&(b=a,a=y);z[a]=c;m[a]=b.concat(m[a]||[])},b:function(a){p=a},a:function(a){l=a},color:function(a,b,c){if("string"==typeof a)return n(a,b,c);if("function"==typeof a)return A(0,a);A(a,b)}}}();window.addEventListener?window.addEventListener("load",Rainbow.color,!1):window.attachEvent("onload",Rainbow.color);Rainbow.onHighlight=Rainbow.b;
8
- Rainbow.addClass=Rainbow.a;Rainbow.extend([{matches:{1:{name:"keyword.operator",pattern:/\=/g},2:{name:"string",matches:{name:"constant.character.escape",pattern:/\\('|"){1}/g}}},pattern:/(\(|\s|\[|\=|:)(('|")([^\\\1]|\\.)*?(\3))/gm},{name:"comment",pattern:/\/\*[\s\S]*?\*\/|(\/\/|\#)[\s\S]*?$/gm},{name:"constant.numeric",pattern:/\b(\d+(\.\d+)?(e(\+|\-)?\d+)?(f|d)?|0x[\da-f]+)\b/gi},{matches:{1:"keyword"},pattern:/\b(and|array|as|bool(ean)?|c(atch|har|lass|onst)|d(ef|elete|o(uble)?)|e(cho|lse(if)?|xit|xtends|xcept)|f(inally|loat|or(each)?|unction)|global|if|import|int(eger)?|long|new|object|or|pr(int|ivate|otected)|public|return|self|st(ring|ruct|atic)|switch|th(en|is|row)|try|(un)?signed|var|void|while)(?=\(|\b)/gi},
9
- {name:"constant.language",pattern:/true|false|null/g},{name:"keyword.operator",pattern:/\+|\!|\-|&(gt|lt|amp);|\||\*|\=/g},{matches:{1:"function.call"},pattern:/(\w+?)(?=\()/g},{matches:{1:"storage.function",2:"entity.name.function"},pattern:/(function)\s(.*?)(?=\()/g}]);Rainbow.extend("javascript",[{name:"selector",pattern:/(\s|^)\$(?=\.|\()/g},{name:"support",pattern:/\b(window|document)\b/g},{matches:{1:"support.property"},pattern:/\.(length|node(Name|Value))\b/g},{matches:{1:"support.function"},pattern:/(setTimeout|setInterval)(?=\()/g},{matches:{1:"support.method"},pattern:/\.(getAttribute|push|getElementById|getElementsByClassName|log|setTimeout|setInterval)(?=\()/g},{matches:{1:"support.tag.script",2:[{name:"string",pattern:/('|")(.*?)(\1)/g},{name:"entity.tag.script",
10
- pattern:/(\w+)/g}],3:"support.tag.script"},pattern:/(&lt;\/?)(script.*?)(&gt;)/g},{name:"string.regexp",matches:{1:"string.regexp.open",2:{name:"constant.regexp.escape",pattern:/\\(.){1}/g},3:"string.regexp.close",4:"string.regexp.modifier"},pattern:/(\/)(?!\*)(.+)(\/)([igm]{0,3})/g},{matches:{1:"storage",3:"entity.function"},pattern:/(var)?(\s|^)(.*)(?=\s?=\s?function\()/g},{name:"entity.function",pattern:/(\w+)(?=:\s{0,}function)/g}]);
11
-
12
-
13
- // https://github.com/eternicode/bootstrap-datepicker
14
  !function(a){function b(){return new Date(Date.UTC.apply(Date,arguments))}var d=function(b,c){var d=this;switch(this.element=a(b),this.language=c.language||this.element.data("date-language")||"en",this.language=this.language in e?this.language:"en",this.format=f.parseFormat(c.format||this.element.data("date-format")||"mm/dd/yyyy"),this.picker=a(f.template).appendTo("body").on({click:a.proxy(this.click,this)}),this.isInput=this.element.is("input"),this.component=this.element.is(".date")?this.element.find(".add-on"):!1,this.hasInput=this.component&&this.element.find("input").length,this.component&&0===this.component.length&&(this.component=!1),this._attachEvents(),this.forceParse=!0,"forceParse"in c?this.forceParse=c.forceParse:"dateForceParse"in this.element.data()&&(this.forceParse=this.element.data("date-force-parse")),a(document).on("mousedown",function(b){0==a(b.target).closest(".datepicker").length&&d.hide()}),this.autoclose=!1,"autoclose"in c?this.autoclose=c.autoclose:"dateAutoclose"in this.element.data()&&(this.autoclose=this.element.data("date-autoclose")),this.keyboardNavigation=!0,"keyboardNavigation"in c?this.keyboardNavigation=c.keyboardNavigation:"dateKeyboardNavigation"in this.element.data()&&(this.keyboardNavigation=this.element.data("date-keyboard-navigation")),c.startView||this.element.data("date-start-view")){case 2:case"decade":this.viewMode=this.startViewMode=2;break;case 1:case"year":this.viewMode=this.startViewMode=1;break;case 0:case"month":default:this.viewMode=this.startViewMode=0}this.todayBtn=c.todayBtn||this.element.data("date-today-btn")||!1,this.todayHighlight=c.todayHighlight||this.element.data("date-today-highlight")||!1,this.weekStart=(c.weekStart||this.element.data("date-weekstart")||e[this.language].weekStart||0)%7,this.weekEnd=(this.weekStart+6)%7,this.startDate=-1/0,this.endDate=1/0,this.daysOfWeekDisabled=[],this.setStartDate(c.startDate||this.element.data("date-startdate")),this.setEndDate(c.endDate||this.element.data("date-enddate")),this.setDaysOfWeekDisabled(c.daysOfWeekDisabled||this.element.data("date-days-of-week-disabled")),this.fillDow(),this.fillMonths(),this.update(),this.showMode()};d.prototype={constructor:d,_events:[],_attachEvents:function(){this._detachEvents(),this._events=this.isInput?[[this.element,{focus:a.proxy(this.show,this),keyup:a.proxy(this.update,this),keydown:a.proxy(this.keydown,this)}]]:this.component&&this.hasInput?[[this.element.find("input"),{focus:a.proxy(this.show,this),keyup:a.proxy(this.update,this),keydown:a.proxy(this.keydown,this)}],[this.component,{click:a.proxy(this.show,this)}]]:[[this.element,{click:a.proxy(this.show,this)}]];for(var c,d,b=0;this._events.length>b;b++)c=this._events[b][0],d=this._events[b][1],c.on(d)},_detachEvents:function(){for(var b,c,a=0;this._events.length>a;a++)b=this._events[a][0],c=this._events[a][1],b.off(c);this._events=[]},show:function(b){this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.update(),this.place(),a(window).on("resize",a.proxy(this.place,this)),b&&(b.stopPropagation(),b.preventDefault()),this.element.trigger({type:"show",date:this.date})},hide:function(){this.picker.hide(),a(window).off("resize",this.place),this.viewMode=this.startViewMode,this.showMode(),this.isInput||a(document).off("mousedown",this.hide),this.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())&&this.setValue(),this.element.trigger({type:"hide",date:this.date})},remove:function(){this._detachEvents(),this.picker.remove(),delete this.element.data().datepicker},getDate:function(){var a=this.getUTCDate();return new Date(a.getTime()+6e4*a.getTimezoneOffset())},getUTCDate:function(){return this.date},setDate:function(a){this.setUTCDate(new Date(a.getTime()-6e4*a.getTimezoneOffset()))},setUTCDate:function(a){this.date=a,this.setValue()},setValue:function(){var a=f.formatDate(this.date,this.format,this.language);this.isInput?this.element.prop("value",a):(this.component&&this.element.find("input").prop("value",a),this.element.data("date",a))},setStartDate:function(a){this.startDate=a||-1/0,this.startDate!==-1/0&&(this.startDate=f.parseDate(this.startDate,this.format,this.language)),this.update(),this.updateNavArrows()},setEndDate:function(a){this.endDate=a||1/0,1/0!==this.endDate&&(this.endDate=f.parseDate(this.endDate,this.format,this.language)),this.update(),this.updateNavArrows()},setDaysOfWeekDisabled:function(b){this.daysOfWeekDisabled=b||[],a.isArray(this.daysOfWeekDisabled)||(this.daysOfWeekDisabled=this.daysOfWeekDisabled.split(/,\s*/)),this.daysOfWeekDisabled=a.map(this.daysOfWeekDisabled,function(a){return parseInt(a,10)}),this.update(),this.updateNavArrows()},place:function(){var b=parseInt(this.element.parents().filter(function(){return"auto"!=a(this).css("z-index")}).first().css("z-index"))+10,c=this.component?this.component.offset():this.element.offset();this.picker.css({top:c.top+this.height,left:c.left,zIndex:b})},update:function(){this.date=f.parseDate(this.isInput?this.element.prop("value"):this.element.data("date")||this.element.find("input").prop("value"),this.format,this.language),this.viewDate=this.date<this.startDate?new Date(this.startDate):this.date>this.endDate?new Date(this.endDate):new Date(this.date),this.fill()},fillDow:function(){for(var a=this.weekStart,b="<tr>";this.weekStart+7>a;)b+='<th class="dow">'+e[this.language].daysMin[a++%7]+"</th>";b+="</tr>",this.picker.find(".datepicker-days thead").append(b)},fillMonths:function(){for(var a="",b=0;12>b;)a+='<span class="month">'+e[this.language].monthsShort[b++]+"</span>";this.picker.find(".datepicker-months td").html(a)},fill:function(){var c=new Date(this.viewDate),d=c.getUTCFullYear(),g=c.getUTCMonth(),h=this.startDate!==-1/0?this.startDate.getUTCFullYear():-1/0,i=this.startDate!==-1/0?this.startDate.getUTCMonth():-1/0,j=1/0!==this.endDate?this.endDate.getUTCFullYear():1/0,k=1/0!==this.endDate?this.endDate.getUTCMonth():1/0,l=this.date.valueOf(),m=new Date;this.picker.find(".datepicker-days thead th:eq(1)").text(e[this.language].months[g]+" "+d),this.picker.find("tfoot th.today").text(e[this.language].today).toggle(this.todayBtn!==!1),this.updateNavArrows(),this.fillMonths();var n=b(d,g-1,28,0,0,0,0),o=f.getDaysInMonth(n.getUTCFullYear(),n.getUTCMonth());n.setUTCDate(o),n.setUTCDate(o-(n.getUTCDay()-this.weekStart+7)%7);var p=new Date(n);p.setUTCDate(p.getUTCDate()+42),p=p.valueOf();for(var r,q=[];p>n.valueOf();)n.getUTCDay()==this.weekStart&&q.push("<tr>"),r="",d>n.getUTCFullYear()||n.getUTCFullYear()==d&&g>n.getUTCMonth()?r+=" old":(n.getUTCFullYear()>d||n.getUTCFullYear()==d&&n.getUTCMonth()>g)&&(r+=" new"),this.todayHighlight&&n.getUTCFullYear()==m.getFullYear()&&n.getUTCMonth()==m.getMonth()&&n.getUTCDate()==m.getDate()&&(r+=" today"),n.valueOf()==l&&(r+=" active"),(n.valueOf()<this.startDate||n.valueOf()>this.endDate||-1!==a.inArray(n.getUTCDay(),this.daysOfWeekDisabled))&&(r+=" disabled"),q.push('<td class="day'+r+'">'+n.getUTCDate()+"</td>"),n.getUTCDay()==this.weekEnd&&q.push("</tr>"),n.setUTCDate(n.getUTCDate()+1);this.picker.find(".datepicker-days tbody").empty().append(q.join(""));var s=this.date.getUTCFullYear(),t=this.picker.find(".datepicker-months").find("th:eq(1)").text(d).end().find("span").removeClass("active");s==d&&t.eq(this.date.getUTCMonth()).addClass("active"),(h>d||d>j)&&t.addClass("disabled"),d==h&&t.slice(0,i).addClass("disabled"),d==j&&t.slice(k+1).addClass("disabled"),q="",d=10*parseInt(d/10,10);var u=this.picker.find(".datepicker-years").find("th:eq(1)").text(d+"-"+(d+9)).end().find("td");d-=1;for(var v=-1;11>v;v++)q+='<span class="year'+(-1==v||10==v?" old":"")+(s==d?" active":"")+(h>d||d>j?" disabled":"")+'">'+d+"</span>",d+=1;u.html(q)},updateNavArrows:function(){var a=new Date(this.viewDate),b=a.getUTCFullYear(),c=a.getUTCMonth();switch(this.viewMode){case 0:this.startDate!==-1/0&&this.startDate.getUTCFullYear()>=b&&this.startDate.getUTCMonth()>=c?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),1/0!==this.endDate&&b>=this.endDate.getUTCFullYear()&&c>=this.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:this.startDate!==-1/0&&this.startDate.getUTCFullYear()>=b?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),1/0!==this.endDate&&b>=this.endDate.getUTCFullYear()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}},click:function(c){c.stopPropagation(),c.preventDefault();var d=a(c.target).closest("span, td, th");if(1==d.length)switch(d[0].nodeName.toLowerCase()){case"th":switch(d[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var e=f.modes[this.viewMode].navStep*("prev"==d[0].className?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,e);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,e)}this.fill();break;case"today":var g=new Date;g.setUTCHours(0),g.setUTCMinutes(0),g.setUTCSeconds(0),g.setUTCMilliseconds(0),this.showMode(-2);var h="linked"==this.todayBtn?null:"view";this._setDate(g,h)}break;case"span":if(!d.is(".disabled")){if(this.viewDate.setUTCDate(1),d.is(".month")){var i=d.parent().find("span").index(d);this.viewDate.setUTCMonth(i),this.element.trigger({type:"changeMonth",date:this.viewDate})}else{var j=parseInt(d.text(),10)||0;this.viewDate.setUTCFullYear(j),this.element.trigger({type:"changeYear",date:this.viewDate})}this.showMode(-1),this.fill()}break;case"td":if(d.is(".day")&&!d.is(".disabled")){var k=parseInt(d.text(),10)||1,j=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth();d.is(".old")?0==i?(i=11,j-=1):i-=1:d.is(".new")&&(11==i?(i=0,j+=1):i+=1),this._setDate(b(j,i,k,0,0,0,0))}}},_setDate:function(a,b){b&&"date"!=b||(this.date=a),b&&"view"!=b||(this.viewDate=a),this.fill(),this.setValue(),this.element.trigger({type:"changeDate",date:this.date});var c;this.isInput?c=this.element:this.component&&(c=this.element.find("input")),c&&(c.change(),this.autoclose&&this.hide())},moveMonth:function(a,b){if(!b)return a;var g,h,c=new Date(a.valueOf()),d=c.getUTCDate(),e=c.getUTCMonth(),f=Math.abs(b);if(b=b>0?1:-1,1==f)h=-1==b?function(){return c.getUTCMonth()==e}:function(){return c.getUTCMonth()!=g},g=e+b,c.setUTCMonth(g),(0>g||g>11)&&(g=(g+12)%12);else{for(var i=0;f>i;i++)c=this.moveMonth(c,b);g=c.getUTCMonth(),c.setUTCDate(d),h=function(){return g!=c.getUTCMonth()}}for(;h();)c.setUTCDate(--d),c.setUTCMonth(g);return c},moveYear:function(a,b){return this.moveMonth(a,12*b)},dateWithinRange:function(a){return a>=this.startDate&&this.endDate>=a},keydown:function(a){if(this.picker.is(":not(:visible)"))return 27==a.keyCode&&this.show(),void 0;var c,f,g,b=!1;switch(a.keyCode){case 27:this.hide(),a.preventDefault();break;case 37:case 39:if(!this.keyboardNavigation)break;c=37==a.keyCode?-1:1,a.ctrlKey?(f=this.moveYear(this.date,c),g=this.moveYear(this.viewDate,c)):a.shiftKey?(f=this.moveMonth(this.date,c),g=this.moveMonth(this.viewDate,c)):(f=new Date(this.date),f.setUTCDate(this.date.getUTCDate()+c),g=new Date(this.viewDate),g.setUTCDate(this.viewDate.getUTCDate()+c)),this.dateWithinRange(f)&&(this.date=f,this.viewDate=g,this.setValue(),this.update(),a.preventDefault(),b=!0);break;case 38:case 40:if(!this.keyboardNavigation)break;c=38==a.keyCode?-1:1,a.ctrlKey?(f=this.moveYear(this.date,c),g=this.moveYear(this.viewDate,c)):a.shiftKey?(f=this.moveMonth(this.date,c),g=this.moveMonth(this.viewDate,c)):(f=new Date(this.date),f.setUTCDate(this.date.getUTCDate()+7*c),g=new Date(this.viewDate),g.setUTCDate(this.viewDate.getUTCDate()+7*c)),this.dateWithinRange(f)&&(this.date=f,this.viewDate=g,this.setValue(),this.update(),a.preventDefault(),b=!0);break;case 13:this.hide(),a.preventDefault();break;case 9:this.hide()}if(b){this.element.trigger({type:"changeDate",date:this.date});var h;this.isInput?h=this.element:this.component&&(h=this.element.find("input")),h&&h.change()}},showMode:function(a){a&&(this.viewMode=Math.max(0,Math.min(2,this.viewMode+a))),this.picker.find(">div").hide().filter(".datepicker-"+f.modes[this.viewMode].clsName).show(),this.updateNavArrows()}},a.fn.datepicker=function(b){var c=Array.apply(null,arguments);return c.shift(),this.each(function(){var e=a(this),f=e.data("datepicker"),g="object"==typeof b&&b;f||e.data("datepicker",f=new d(this,a.extend({},a.fn.datepicker.defaults,g))),"string"==typeof b&&"function"==typeof f[b]&&f[b].apply(f,c)})},a.fn.datepicker.defaults={},a.fn.datepicker.Constructor=d;var e=a.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today"}},f={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(a){return 0===a%4&&0!==a%100||0===a%400},getDaysInMonth:function(a,b){return[31,f.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][b]},validParts:/dd?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[-`{-~\t\n\r]+/g,parseFormat:function(a){var b=a.replace(this.validParts,"\0").split("\0"),c=a.match(this.validParts);if(!b||!b.length||!c||0==c.length)throw Error("Invalid date format.");return{separators:b,parts:c}},parseDate:function(c,f,g){if(c instanceof Date)return c;if(/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(c)){var j,k,h=/([-+]\d+)([dmwy])/,i=c.match(/([-+]\d+)([dmwy])/g);c=new Date;for(var l=0;i.length>l;l++)switch(j=h.exec(i[l]),k=parseInt(j[1]),j[2]){case"d":c.setUTCDate(c.getUTCDate()+k);break;case"m":c=d.prototype.moveMonth.call(d.prototype,c,k);break;case"w":c.setUTCDate(c.getUTCDate()+7*k);break;case"y":c=d.prototype.moveYear.call(d.prototype,c,k)}return b(c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate(),0,0,0)}var p,q,j,i=c&&c.match(this.nonpunctuation)||[],c=new Date,m={},n=["yyyy","yy","M","MM","m","mm","d","dd"],o={yyyy:function(a,b){return a.setUTCFullYear(b)},yy:function(a,b){return a.setUTCFullYear(2e3+b)},m:function(a,b){for(b-=1;0>b;)b+=12;for(b%=12,a.setUTCMonth(b);a.getUTCMonth()!=b;)a.setUTCDate(a.getUTCDate()-1);return a},d:function(a,b){return a.setUTCDate(b)}};if(o.M=o.MM=o.mm=o.m,o.dd=o.d,c=b(c.getFullYear(),c.getMonth(),c.getDate(),0,0,0),i.length==f.parts.length){for(var l=0,r=f.parts.length;r>l;l++){if(p=parseInt(i[l],10),j=f.parts[l],isNaN(p))switch(j){case"MM":q=a(e[g].months).filter(function(){var a=this.slice(0,i[l].length),b=i[l].slice(0,a.length);return a==b}),p=a.inArray(q[0],e[g].months)+1;break;case"M":q=a(e[g].monthsShort).filter(function(){var a=this.slice(0,i[l].length),b=i[l].slice(0,a.length);return a==b}),p=a.inArray(q[0],e[g].monthsShort)+1}m[j]=p}for(var s,l=0;n.length>l;l++)s=n[l],s in m&&!isNaN(m[s])&&o[s](c,m[s])}return c},formatDate:function(b,c,d){var f={d:b.getUTCDate(),m:b.getUTCMonth()+1,M:e[d].monthsShort[b.getUTCMonth()],MM:e[d].months[b.getUTCMonth()],yy:(""+b.getUTCFullYear()).substring(2),yyyy:b.getUTCFullYear()};f.dd=(10>f.d?"0":"")+f.d,f.mm=(10>f.m?"0":"")+f.m;for(var b=[],g=a.extend([],c.separators),h=0,i=c.parts.length;i>h;h++)g.length&&b.push(g.shift()),b.push(f[c.parts[h]]);return b.join("")},headTemplate:'<thead><tr><th class="prev"><i class="icon-arrow-left"/></th><th colspan="5" class="switch"></th><th class="next"><i class="icon-arrow-right"/></th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'};f.template='<div class="datepicker dropdown-menu"><div class="datepicker-days"><table class=" table-condensed">'+f.headTemplate+"<tbody></tbody>"+f.footTemplate+"</table>"+"</div>"+'<div class="datepicker-months">'+'<table class="table-condensed">'+f.headTemplate+f.contTemplate+f.footTemplate+"</table>"+"</div>"+'<div class="datepicker-years">'+'<table class="table-condensed">'+f.headTemplate+f.contTemplate+f.footTemplate+"</table>"+"</div>"+"</div>"}(window.jQuery);
1
+ /* Rainbow v1.1.8 rainbowco.de | included languages: generic, javascript */
2
+ window.Rainbow=function(){function q(a){var b,c=a.getAttribute&&a.getAttribute("data-language")||0;if(!c){a=a.attributes;for(b=0;b<a.length;++b)if("data-language"===a[b].nodeName)return a[b].nodeValue}return c}function B(a){var b=q(a)||q(a.parentNode);if(!b){var c=/\blang(?:uage)?-(\w+)/;(a=a.className.match(c)||a.parentNode.className.match(c))&&(b=a[1])}return b}function C(a,b){for(var c in e[d]){c=parseInt(c,10);if(a==c&&b==e[d][c]?0:a<=c&&b>=e[d][c])delete e[d][c],delete j[d][c];if(a>=c&&a<e[d][c]||
3
+ b>c&&b<e[d][c])return!0}return!1}function r(a,b){return'<span class="'+a.replace(/\./g," ")+(l?" "+l:"")+'">'+b+"</span>"}function s(a,b,c,h){var f=a.exec(c);if(f){++t;!b.name&&"string"==typeof b.matches[0]&&(b.name=b.matches[0],delete b.matches[0]);var k=f[0],i=f.index,u=f[0].length+i,g=function(){function f(){s(a,b,c,h)}t%100>0?f():setTimeout(f,0)};if(C(i,u))g();else{var m=v(b.matches),l=function(a,c,h){if(a>=c.length)h(k);else{var d=f[c[a]];if(d){var e=b.matches[c[a]],i=e.language,g=e.name&&e.matches?
4
+ e.matches:e,j=function(b,d,e){var i;i=0;var g;for(g=1;g<c[a];++g)f[g]&&(i=i+f[g].length);d=e?r(e,d):d;k=k.substr(0,i)+k.substr(i).replace(b,d);l(++a,c,h)};i?n(d,i,function(a){j(d,a)}):typeof e==="string"?j(d,d,e):w(d,g.length?g:[g],function(a){j(d,a,e.matches?e.name:0)})}else l(++a,c,h)}};l(0,m,function(a){b.name&&(a=r(b.name,a));if(!j[d]){j[d]={};e[d]={}}j[d][i]={replace:f[0],"with":a};e[d][i]=u;g()})}}else h()}function v(a){var b=[],c;for(c in a)a.hasOwnProperty(c)&&b.push(c);return b.sort(function(a,
5
+ b){return b-a})}function w(a,b,c){function h(b,k){k<b.length?s(b[k].pattern,b[k],a,function(){h(b,++k)}):D(a,function(a){delete j[d];delete e[d];--d;c(a)})}++d;h(b,0)}function D(a,b){function c(a,b,h,e){if(h<b.length){++x;var g=b[h],l=j[d][g],a=a.substr(0,g)+a.substr(g).replace(l.replace,l["with"]),g=function(){c(a,b,++h,e)};0<x%250?g():setTimeout(g,0)}else e(a)}var h=v(j[d]);c(a,h,0,b)}function n(a,b,c){var d=m[b]||[],f=m[y]||[],b=z[b]?d:d.concat(f);w(a.replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/&(?![\w\#]+;)/g,
6
+ "&amp;"),b,c)}function o(a,b,c){if(b<a.length){var d=a[b],f=B(d);return!(-1<(" "+d.className+" ").indexOf(" rainbow "))&&f?(f=f.toLowerCase(),d.className+=d.className?" rainbow":"rainbow",n(d.innerHTML,f,function(k){d.innerHTML=k;j={};e={};p&&p(d,f);setTimeout(function(){o(a,++b,c)},0)})):o(a,++b,c)}c&&c()}function A(a,b){var a=a&&"function"==typeof a.getElementsByTagName?a:document,c=a.getElementsByTagName("pre"),d=a.getElementsByTagName("code"),f,e=[];for(f=0;f<d.length;++f)e.push(d[f]);for(f=0;f<
7
+ c.length;++f)c[f].getElementsByTagName("code").length||e.push(c[f]);o(e,0,b)}var j={},e={},m={},z={},d=0,y=0,t=0,x=0,l,p;return{extend:function(a,b,c){1==arguments.length&&(b=a,a=y);z[a]=c;m[a]=b.concat(m[a]||[])},b:function(a){p=a},a:function(a){l=a},color:function(a,b,c){if("string"==typeof a)return n(a,b,c);if("function"==typeof a)return A(0,a);A(a,b)}}}();window.addEventListener?window.addEventListener("load",Rainbow.color,!1):window.attachEvent("onload",Rainbow.color);Rainbow.onHighlight=Rainbow.b;
8
+ Rainbow.addClass=Rainbow.a;Rainbow.extend([{matches:{1:{name:"keyword.operator",pattern:/\=/g},2:{name:"string",matches:{name:"constant.character.escape",pattern:/\\('|"){1}/g}}},pattern:/(\(|\s|\[|\=|:)(('|")([^\\\1]|\\.)*?(\3))/gm},{name:"comment",pattern:/\/\*[\s\S]*?\*\/|(\/\/|\#)[\s\S]*?$/gm},{name:"constant.numeric",pattern:/\b(\d+(\.\d+)?(e(\+|\-)?\d+)?(f|d)?|0x[\da-f]+)\b/gi},{matches:{1:"keyword"},pattern:/\b(and|array|as|bool(ean)?|c(atch|har|lass|onst)|d(ef|elete|o(uble)?)|e(cho|lse(if)?|xit|xtends|xcept)|f(inally|loat|or(each)?|unction)|global|if|import|int(eger)?|long|new|object|or|pr(int|ivate|otected)|public|return|self|st(ring|ruct|atic)|switch|th(en|is|row)|try|(un)?signed|var|void|while)(?=\(|\b)/gi},
9
+ {name:"constant.language",pattern:/true|false|null/g},{name:"keyword.operator",pattern:/\+|\!|\-|&(gt|lt|amp);|\||\*|\=/g},{matches:{1:"function.call"},pattern:/(\w+?)(?=\()/g},{matches:{1:"storage.function",2:"entity.name.function"},pattern:/(function)\s(.*?)(?=\()/g}]);Rainbow.extend("javascript",[{name:"selector",pattern:/(\s|^)\$(?=\.|\()/g},{name:"support",pattern:/\b(window|document)\b/g},{matches:{1:"support.property"},pattern:/\.(length|node(Name|Value))\b/g},{matches:{1:"support.function"},pattern:/(setTimeout|setInterval)(?=\()/g},{matches:{1:"support.method"},pattern:/\.(getAttribute|push|getElementById|getElementsByClassName|log|setTimeout|setInterval)(?=\()/g},{matches:{1:"support.tag.script",2:[{name:"string",pattern:/('|")(.*?)(\1)/g},{name:"entity.tag.script",
10
+ pattern:/(\w+)/g}],3:"support.tag.script"},pattern:/(&lt;\/?)(script.*?)(&gt;)/g},{name:"string.regexp",matches:{1:"string.regexp.open",2:{name:"constant.regexp.escape",pattern:/\\(.){1}/g},3:"string.regexp.close",4:"string.regexp.modifier"},pattern:/(\/)(?!\*)(.+)(\/)([igm]{0,3})/g},{matches:{1:"storage",3:"entity.function"},pattern:/(var)?(\s|^)(.*)(?=\s?=\s?function\()/g},{name:"entity.function",pattern:/(\w+)(?=:\s{0,}function)/g}]);
11
+
12
+
13
+ // https://github.com/eternicode/bootstrap-datepicker
14
  !function(a){function b(){return new Date(Date.UTC.apply(Date,arguments))}var d=function(b,c){var d=this;switch(this.element=a(b),this.language=c.language||this.element.data("date-language")||"en",this.language=this.language in e?this.language:"en",this.format=f.parseFormat(c.format||this.element.data("date-format")||"mm/dd/yyyy"),this.picker=a(f.template).appendTo("body").on({click:a.proxy(this.click,this)}),this.isInput=this.element.is("input"),this.component=this.element.is(".date")?this.element.find(".add-on"):!1,this.hasInput=this.component&&this.element.find("input").length,this.component&&0===this.component.length&&(this.component=!1),this._attachEvents(),this.forceParse=!0,"forceParse"in c?this.forceParse=c.forceParse:"dateForceParse"in this.element.data()&&(this.forceParse=this.element.data("date-force-parse")),a(document).on("mousedown",function(b){0==a(b.target).closest(".datepicker").length&&d.hide()}),this.autoclose=!1,"autoclose"in c?this.autoclose=c.autoclose:"dateAutoclose"in this.element.data()&&(this.autoclose=this.element.data("date-autoclose")),this.keyboardNavigation=!0,"keyboardNavigation"in c?this.keyboardNavigation=c.keyboardNavigation:"dateKeyboardNavigation"in this.element.data()&&(this.keyboardNavigation=this.element.data("date-keyboard-navigation")),c.startView||this.element.data("date-start-view")){case 2:case"decade":this.viewMode=this.startViewMode=2;break;case 1:case"year":this.viewMode=this.startViewMode=1;break;case 0:case"month":default:this.viewMode=this.startViewMode=0}this.todayBtn=c.todayBtn||this.element.data("date-today-btn")||!1,this.todayHighlight=c.todayHighlight||this.element.data("date-today-highlight")||!1,this.weekStart=(c.weekStart||this.element.data("date-weekstart")||e[this.language].weekStart||0)%7,this.weekEnd=(this.weekStart+6)%7,this.startDate=-1/0,this.endDate=1/0,this.daysOfWeekDisabled=[],this.setStartDate(c.startDate||this.element.data("date-startdate")),this.setEndDate(c.endDate||this.element.data("date-enddate")),this.setDaysOfWeekDisabled(c.daysOfWeekDisabled||this.element.data("date-days-of-week-disabled")),this.fillDow(),this.fillMonths(),this.update(),this.showMode()};d.prototype={constructor:d,_events:[],_attachEvents:function(){this._detachEvents(),this._events=this.isInput?[[this.element,{focus:a.proxy(this.show,this),keyup:a.proxy(this.update,this),keydown:a.proxy(this.keydown,this)}]]:this.component&&this.hasInput?[[this.element.find("input"),{focus:a.proxy(this.show,this),keyup:a.proxy(this.update,this),keydown:a.proxy(this.keydown,this)}],[this.component,{click:a.proxy(this.show,this)}]]:[[this.element,{click:a.proxy(this.show,this)}]];for(var c,d,b=0;this._events.length>b;b++)c=this._events[b][0],d=this._events[b][1],c.on(d)},_detachEvents:function(){for(var b,c,a=0;this._events.length>a;a++)b=this._events[a][0],c=this._events[a][1],b.off(c);this._events=[]},show:function(b){this.picker.show(),this.height=this.component?this.component.outerHeight():this.element.outerHeight(),this.update(),this.place(),a(window).on("resize",a.proxy(this.place,this)),b&&(b.stopPropagation(),b.preventDefault()),this.element.trigger({type:"show",date:this.date})},hide:function(){this.picker.hide(),a(window).off("resize",this.place),this.viewMode=this.startViewMode,this.showMode(),this.isInput||a(document).off("mousedown",this.hide),this.forceParse&&(this.isInput&&this.element.val()||this.hasInput&&this.element.find("input").val())&&this.setValue(),this.element.trigger({type:"hide",date:this.date})},remove:function(){this._detachEvents(),this.picker.remove(),delete this.element.data().datepicker},getDate:function(){var a=this.getUTCDate();return new Date(a.getTime()+6e4*a.getTimezoneOffset())},getUTCDate:function(){return this.date},setDate:function(a){this.setUTCDate(new Date(a.getTime()-6e4*a.getTimezoneOffset()))},setUTCDate:function(a){this.date=a,this.setValue()},setValue:function(){var a=f.formatDate(this.date,this.format,this.language);this.isInput?this.element.prop("value",a):(this.component&&this.element.find("input").prop("value",a),this.element.data("date",a))},setStartDate:function(a){this.startDate=a||-1/0,this.startDate!==-1/0&&(this.startDate=f.parseDate(this.startDate,this.format,this.language)),this.update(),this.updateNavArrows()},setEndDate:function(a){this.endDate=a||1/0,1/0!==this.endDate&&(this.endDate=f.parseDate(this.endDate,this.format,this.language)),this.update(),this.updateNavArrows()},setDaysOfWeekDisabled:function(b){this.daysOfWeekDisabled=b||[],a.isArray(this.daysOfWeekDisabled)||(this.daysOfWeekDisabled=this.daysOfWeekDisabled.split(/,\s*/)),this.daysOfWeekDisabled=a.map(this.daysOfWeekDisabled,function(a){return parseInt(a,10)}),this.update(),this.updateNavArrows()},place:function(){var b=parseInt(this.element.parents().filter(function(){return"auto"!=a(this).css("z-index")}).first().css("z-index"))+10,c=this.component?this.component.offset():this.element.offset();this.picker.css({top:c.top+this.height,left:c.left,zIndex:b})},update:function(){this.date=f.parseDate(this.isInput?this.element.prop("value"):this.element.data("date")||this.element.find("input").prop("value"),this.format,this.language),this.viewDate=this.date<this.startDate?new Date(this.startDate):this.date>this.endDate?new Date(this.endDate):new Date(this.date),this.fill()},fillDow:function(){for(var a=this.weekStart,b="<tr>";this.weekStart+7>a;)b+='<th class="dow">'+e[this.language].daysMin[a++%7]+"</th>";b+="</tr>",this.picker.find(".datepicker-days thead").append(b)},fillMonths:function(){for(var a="",b=0;12>b;)a+='<span class="month">'+e[this.language].monthsShort[b++]+"</span>";this.picker.find(".datepicker-months td").html(a)},fill:function(){var c=new Date(this.viewDate),d=c.getUTCFullYear(),g=c.getUTCMonth(),h=this.startDate!==-1/0?this.startDate.getUTCFullYear():-1/0,i=this.startDate!==-1/0?this.startDate.getUTCMonth():-1/0,j=1/0!==this.endDate?this.endDate.getUTCFullYear():1/0,k=1/0!==this.endDate?this.endDate.getUTCMonth():1/0,l=this.date.valueOf(),m=new Date;this.picker.find(".datepicker-days thead th:eq(1)").text(e[this.language].months[g]+" "+d),this.picker.find("tfoot th.today").text(e[this.language].today).toggle(this.todayBtn!==!1),this.updateNavArrows(),this.fillMonths();var n=b(d,g-1,28,0,0,0,0),o=f.getDaysInMonth(n.getUTCFullYear(),n.getUTCMonth());n.setUTCDate(o),n.setUTCDate(o-(n.getUTCDay()-this.weekStart+7)%7);var p=new Date(n);p.setUTCDate(p.getUTCDate()+42),p=p.valueOf();for(var r,q=[];p>n.valueOf();)n.getUTCDay()==this.weekStart&&q.push("<tr>"),r="",d>n.getUTCFullYear()||n.getUTCFullYear()==d&&g>n.getUTCMonth()?r+=" old":(n.getUTCFullYear()>d||n.getUTCFullYear()==d&&n.getUTCMonth()>g)&&(r+=" new"),this.todayHighlight&&n.getUTCFullYear()==m.getFullYear()&&n.getUTCMonth()==m.getMonth()&&n.getUTCDate()==m.getDate()&&(r+=" today"),n.valueOf()==l&&(r+=" active"),(n.valueOf()<this.startDate||n.valueOf()>this.endDate||-1!==a.inArray(n.getUTCDay(),this.daysOfWeekDisabled))&&(r+=" disabled"),q.push('<td class="day'+r+'">'+n.getUTCDate()+"</td>"),n.getUTCDay()==this.weekEnd&&q.push("</tr>"),n.setUTCDate(n.getUTCDate()+1);this.picker.find(".datepicker-days tbody").empty().append(q.join(""));var s=this.date.getUTCFullYear(),t=this.picker.find(".datepicker-months").find("th:eq(1)").text(d).end().find("span").removeClass("active");s==d&&t.eq(this.date.getUTCMonth()).addClass("active"),(h>d||d>j)&&t.addClass("disabled"),d==h&&t.slice(0,i).addClass("disabled"),d==j&&t.slice(k+1).addClass("disabled"),q="",d=10*parseInt(d/10,10);var u=this.picker.find(".datepicker-years").find("th:eq(1)").text(d+"-"+(d+9)).end().find("td");d-=1;for(var v=-1;11>v;v++)q+='<span class="year'+(-1==v||10==v?" old":"")+(s==d?" active":"")+(h>d||d>j?" disabled":"")+'">'+d+"</span>",d+=1;u.html(q)},updateNavArrows:function(){var a=new Date(this.viewDate),b=a.getUTCFullYear(),c=a.getUTCMonth();switch(this.viewMode){case 0:this.startDate!==-1/0&&this.startDate.getUTCFullYear()>=b&&this.startDate.getUTCMonth()>=c?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),1/0!==this.endDate&&b>=this.endDate.getUTCFullYear()&&c>=this.endDate.getUTCMonth()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"});break;case 1:case 2:this.startDate!==-1/0&&this.startDate.getUTCFullYear()>=b?this.picker.find(".prev").css({visibility:"hidden"}):this.picker.find(".prev").css({visibility:"visible"}),1/0!==this.endDate&&b>=this.endDate.getUTCFullYear()?this.picker.find(".next").css({visibility:"hidden"}):this.picker.find(".next").css({visibility:"visible"})}},click:function(c){c.stopPropagation(),c.preventDefault();var d=a(c.target).closest("span, td, th");if(1==d.length)switch(d[0].nodeName.toLowerCase()){case"th":switch(d[0].className){case"switch":this.showMode(1);break;case"prev":case"next":var e=f.modes[this.viewMode].navStep*("prev"==d[0].className?-1:1);switch(this.viewMode){case 0:this.viewDate=this.moveMonth(this.viewDate,e);break;case 1:case 2:this.viewDate=this.moveYear(this.viewDate,e)}this.fill();break;case"today":var g=new Date;g.setUTCHours(0),g.setUTCMinutes(0),g.setUTCSeconds(0),g.setUTCMilliseconds(0),this.showMode(-2);var h="linked"==this.todayBtn?null:"view";this._setDate(g,h)}break;case"span":if(!d.is(".disabled")){if(this.viewDate.setUTCDate(1),d.is(".month")){var i=d.parent().find("span").index(d);this.viewDate.setUTCMonth(i),this.element.trigger({type:"changeMonth",date:this.viewDate})}else{var j=parseInt(d.text(),10)||0;this.viewDate.setUTCFullYear(j),this.element.trigger({type:"changeYear",date:this.viewDate})}this.showMode(-1),this.fill()}break;case"td":if(d.is(".day")&&!d.is(".disabled")){var k=parseInt(d.text(),10)||1,j=this.viewDate.getUTCFullYear(),i=this.viewDate.getUTCMonth();d.is(".old")?0==i?(i=11,j-=1):i-=1:d.is(".new")&&(11==i?(i=0,j+=1):i+=1),this._setDate(b(j,i,k,0,0,0,0))}}},_setDate:function(a,b){b&&"date"!=b||(this.date=a),b&&"view"!=b||(this.viewDate=a),this.fill(),this.setValue(),this.element.trigger({type:"changeDate",date:this.date});var c;this.isInput?c=this.element:this.component&&(c=this.element.find("input")),c&&(c.change(),this.autoclose&&this.hide())},moveMonth:function(a,b){if(!b)return a;var g,h,c=new Date(a.valueOf()),d=c.getUTCDate(),e=c.getUTCMonth(),f=Math.abs(b);if(b=b>0?1:-1,1==f)h=-1==b?function(){return c.getUTCMonth()==e}:function(){return c.getUTCMonth()!=g},g=e+b,c.setUTCMonth(g),(0>g||g>11)&&(g=(g+12)%12);else{for(var i=0;f>i;i++)c=this.moveMonth(c,b);g=c.getUTCMonth(),c.setUTCDate(d),h=function(){return g!=c.getUTCMonth()}}for(;h();)c.setUTCDate(--d),c.setUTCMonth(g);return c},moveYear:function(a,b){return this.moveMonth(a,12*b)},dateWithinRange:function(a){return a>=this.startDate&&this.endDate>=a},keydown:function(a){if(this.picker.is(":not(:visible)"))return 27==a.keyCode&&this.show(),void 0;var c,f,g,b=!1;switch(a.keyCode){case 27:this.hide(),a.preventDefault();break;case 37:case 39:if(!this.keyboardNavigation)break;c=37==a.keyCode?-1:1,a.ctrlKey?(f=this.moveYear(this.date,c),g=this.moveYear(this.viewDate,c)):a.shiftKey?(f=this.moveMonth(this.date,c),g=this.moveMonth(this.viewDate,c)):(f=new Date(this.date),f.setUTCDate(this.date.getUTCDate()+c),g=new Date(this.viewDate),g.setUTCDate(this.viewDate.getUTCDate()+c)),this.dateWithinRange(f)&&(this.date=f,this.viewDate=g,this.setValue(),this.update(),a.preventDefault(),b=!0);break;case 38:case 40:if(!this.keyboardNavigation)break;c=38==a.keyCode?-1:1,a.ctrlKey?(f=this.moveYear(this.date,c),g=this.moveYear(this.viewDate,c)):a.shiftKey?(f=this.moveMonth(this.date,c),g=this.moveMonth(this.viewDate,c)):(f=new Date(this.date),f.setUTCDate(this.date.getUTCDate()+7*c),g=new Date(this.viewDate),g.setUTCDate(this.viewDate.getUTCDate()+7*c)),this.dateWithinRange(f)&&(this.date=f,this.viewDate=g,this.setValue(),this.update(),a.preventDefault(),b=!0);break;case 13:this.hide(),a.preventDefault();break;case 9:this.hide()}if(b){this.element.trigger({type:"changeDate",date:this.date});var h;this.isInput?h=this.element:this.component&&(h=this.element.find("input")),h&&h.change()}},showMode:function(a){a&&(this.viewMode=Math.max(0,Math.min(2,this.viewMode+a))),this.picker.find(">div").hide().filter(".datepicker-"+f.modes[this.viewMode].clsName).show(),this.updateNavArrows()}},a.fn.datepicker=function(b){var c=Array.apply(null,arguments);return c.shift(),this.each(function(){var e=a(this),f=e.data("datepicker"),g="object"==typeof b&&b;f||e.data("datepicker",f=new d(this,a.extend({},a.fn.datepicker.defaults,g))),"string"==typeof b&&"function"==typeof f[b]&&f[b].apply(f,c)})},a.fn.datepicker.defaults={},a.fn.datepicker.Constructor=d;var e=a.fn.datepicker.dates={en:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],daysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"],daysMin:["Su","Mo","Tu","We","Th","Fr","Sa","Su"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],today:"Today"}},f={modes:[{clsName:"days",navFnc:"Month",navStep:1},{clsName:"months",navFnc:"FullYear",navStep:1},{clsName:"years",navFnc:"FullYear",navStep:10}],isLeapYear:function(a){return 0===a%4&&0!==a%100||0===a%400},getDaysInMonth:function(a,b){return[31,f.isLeapYear(a)?29:28,31,30,31,30,31,31,30,31,30,31][b]},validParts:/dd?|mm?|MM?|yy(?:yy)?/g,nonpunctuation:/[^ -\/:-@\[-`{-~\t\n\r]+/g,parseFormat:function(a){var b=a.replace(this.validParts,"\0").split("\0"),c=a.match(this.validParts);if(!b||!b.length||!c||0==c.length)throw Error("Invalid date format.");return{separators:b,parts:c}},parseDate:function(c,f,g){if(c instanceof Date)return c;if(/^[-+]\d+[dmwy]([\s,]+[-+]\d+[dmwy])*$/.test(c)){var j,k,h=/([-+]\d+)([dmwy])/,i=c.match(/([-+]\d+)([dmwy])/g);c=new Date;for(var l=0;i.length>l;l++)switch(j=h.exec(i[l]),k=parseInt(j[1]),j[2]){case"d":c.setUTCDate(c.getUTCDate()+k);break;case"m":c=d.prototype.moveMonth.call(d.prototype,c,k);break;case"w":c.setUTCDate(c.getUTCDate()+7*k);break;case"y":c=d.prototype.moveYear.call(d.prototype,c,k)}return b(c.getUTCFullYear(),c.getUTCMonth(),c.getUTCDate(),0,0,0)}var p,q,j,i=c&&c.match(this.nonpunctuation)||[],c=new Date,m={},n=["yyyy","yy","M","MM","m","mm","d","dd"],o={yyyy:function(a,b){return a.setUTCFullYear(b)},yy:function(a,b){return a.setUTCFullYear(2e3+b)},m:function(a,b){for(b-=1;0>b;)b+=12;for(b%=12,a.setUTCMonth(b);a.getUTCMonth()!=b;)a.setUTCDate(a.getUTCDate()-1);return a},d:function(a,b){return a.setUTCDate(b)}};if(o.M=o.MM=o.mm=o.m,o.dd=o.d,c=b(c.getFullYear(),c.getMonth(),c.getDate(),0,0,0),i.length==f.parts.length){for(var l=0,r=f.parts.length;r>l;l++){if(p=parseInt(i[l],10),j=f.parts[l],isNaN(p))switch(j){case"MM":q=a(e[g].months).filter(function(){var a=this.slice(0,i[l].length),b=i[l].slice(0,a.length);return a==b}),p=a.inArray(q[0],e[g].months)+1;break;case"M":q=a(e[g].monthsShort).filter(function(){var a=this.slice(0,i[l].length),b=i[l].slice(0,a.length);return a==b}),p=a.inArray(q[0],e[g].monthsShort)+1}m[j]=p}for(var s,l=0;n.length>l;l++)s=n[l],s in m&&!isNaN(m[s])&&o[s](c,m[s])}return c},formatDate:function(b,c,d){var f={d:b.getUTCDate(),m:b.getUTCMonth()+1,M:e[d].monthsShort[b.getUTCMonth()],MM:e[d].months[b.getUTCMonth()],yy:(""+b.getUTCFullYear()).substring(2),yyyy:b.getUTCFullYear()};f.dd=(10>f.d?"0":"")+f.d,f.mm=(10>f.m?"0":"")+f.m;for(var b=[],g=a.extend([],c.separators),h=0,i=c.parts.length;i>h;h++)g.length&&b.push(g.shift()),b.push(f[c.parts[h]]);return b.join("")},headTemplate:'<thead><tr><th class="prev"><i class="icon-arrow-left"/></th><th colspan="5" class="switch"></th><th class="next"><i class="icon-arrow-right"/></th></tr></thead>',contTemplate:'<tbody><tr><td colspan="7"></td></tr></tbody>',footTemplate:'<tfoot><tr><th colspan="7" class="today"></th></tr></tfoot>'};f.template='<div class="datepicker dropdown-menu"><div class="datepicker-days"><table class=" table-condensed">'+f.headTemplate+"<tbody></tbody>"+f.footTemplate+"</table>"+"</div>"+'<div class="datepicker-months">'+'<table class="table-condensed">'+f.headTemplate+f.contTemplate+f.footTemplate+"</table>"+"</div>"+'<div class="datepicker-years">'+'<table class="table-condensed">'+f.headTemplate+f.contTemplate+f.footTemplate+"</table>"+"</div>"+"</div>"}(window.jQuery);
js/libraries/jquery-datepicker/lib/datepair.js CHANGED
@@ -1,204 +1,204 @@
1
- jQuery(document).ready(function($) {
2
- $(function() {
3
-
4
- var DATE_FORMAT = 'Y-m-d';
5
- var DATEPICKER_FORMAT = 'yyyy-m-d';
6
-
7
- $('.datepair input.date').each(function(){
8
- var $this = $(this);
9
- $this.datepicker({
10
- 'format': DATEPICKER_FORMAT,
11
- 'autoclose': true
12
- });
13
-
14
- if ($this.hasClass('start') || $this.hasClass('end')) {
15
- $this.on('changeDate change', doDatepair);
16
- }
17
-
18
- });
19
-
20
- $('.datepair input.time').each(function() {
21
- var $this = $(this);
22
- var opts = { 'showDuration': true, 'timeFormat': 'g:ia', 'scrollDefaultNow': true };
23
-
24
- if ($this.hasClass('start') || $this.hasClass('end')) {
25
- opts.onSelect = doDatepair;
26
- }
27
-
28
- $this.timepicker(opts);
29
- });
30
-
31
- $('.datepair').each(initDatepair);
32
-
33
- function initDatepair()
34
- {
35
- var container = $(this);
36
-
37
- var startDateInput = container.find('input.start.date');
38
- var endDateInput = container.find('input.end.date');
39
- var dateDelta = 0;
40
-
41
- if (startDateInput.length && endDateInput.length) {
42
- var startDate = new Date(startDateInput.val());
43
- var endDate = new Date(endDateInput.val());
44
-
45
- dateDelta = endDate.getTime() - startDate.getTime();
46
-
47
- container.data('dateDelta', dateDelta);
48
- }
49
-
50
- var startTimeInput = container.find('input.start.time');
51
- var endTimeInput = container.find('input.end.time');
52
-
53
- if (startTimeInput.length && endTimeInput.length) {
54
- var startInt = startTimeInput.timepicker('getSecondsFromMidnight');
55
- var endInt = endTimeInput.timepicker('getSecondsFromMidnight');
56
-
57
- container.data('timeDelta', endInt - startInt);
58
-
59
- if (dateDelta < 86400000) {
60
- endTimeInput.timepicker('option', 'minTime', startInt);
61
- }
62
- }
63
- }
64
-
65
- function doDatepair()
66
- {
67
- var target = $(this);
68
- if (target.val() == '') {
69
- return;
70
- }
71
-
72
- var container = target.closest('.datepair');
73
-
74
- if (target.hasClass('date')) {
75
- updateDatePair(target, container);
76
-
77
- } else if (target.hasClass('time')) {
78
- updateTimePair(target, container);
79
- }
80
- }
81
-
82
- function updateDatePair(target, container)
83
- {
84
- var start = container.find('input.start.date');
85
- var end = container.find('input.end.date');
86
-
87
- if (!start.length || !end.length) {
88
- return;
89
- }
90
-
91
- var startDate = new Date(start.val());
92
- var endDate = new Date(end.val());
93
-
94
- var oldDelta = container.data('dateDelta');
95
-
96
- if (oldDelta && target.hasClass('start')) {
97
- var newEnd = new Date(startDate.getTime()+oldDelta);
98
- end.val(newEnd.format(DATE_FORMAT));
99
- end.datepicker('update');
100
- return;
101
-
102
- } else {
103
- var newDelta = endDate.getTime() - startDate.getTime();
104
-
105
- if (newDelta < 0) {
106
- newDelta = 0;
107
-
108
- if (target.hasClass('start')) {
109
- end.val(start.val());
110
- end.datepicker('update');
111
- } else if (target.hasClass('end')) {
112
- start.val(end.val());
113
- start.datepicker('update');
114
- }
115
- }
116
-
117
- if (newDelta < 86400000) {
118
- var startTimeVal = container.find('input.start.time').val();
119
-
120
- if (startTimeVal) {
121
- container.find('input.end.time').timepicker('option', {'minTime': startTimeVal});
122
- }
123
- } else {
124
- container.find('input.end.time').timepicker('option', {'minTime': null});
125
- }
126
-
127
- container.data('dateDelta', newDelta);
128
- }
129
- }
130
-
131
- function updateTimePair(target, container)
132
- {
133
- var start = container.find('input.start.time');
134
- var end = container.find('input.end.time');
135
-
136
- if (!start.length || !end.length) {
137
- return;
138
- }
139
-
140
- var startInt = start.timepicker('getSecondsFromMidnight');
141
- var endInt = end.timepicker('getSecondsFromMidnight');
142
-
143
- var oldDelta = container.data('timeDelta');
144
- var dateDelta = container.data('dateDelta');
145
-
146
- if (target.hasClass('start') && (!dateDelta || dateDelta < 86400000)) {
147
- end.timepicker('option', 'minTime', startInt);
148
- }
149
-
150
- var endDateAdvance = 0;
151
- var newDelta;
152
-
153
- if (oldDelta && target.hasClass('start')) {
154
- // lock the duration and advance the end time
155
-
156
- var newEnd = (startInt+oldDelta)%86400;
157
-
158
- if (newEnd < 0) {
159
- newEnd += 86400;
160
- }
161
-
162
- end.timepicker('setTime', newEnd);
163
- newDelta = newEnd - startInt;
164
- } else if (startInt !== null && endInt !== null) {
165
- newDelta = endInt - startInt;
166
- } else {
167
- return;
168
- }
169
-
170
- container.data('timeDelta', newDelta);
171
-
172
- if (newDelta < 0 && (!oldDelta || oldDelta > 0)) {
173
- // overnight time span. advance the end date 1 day
174
- var endDateAdvance = 86400000;
175
-
176
- } else if (newDelta > 0 && oldDelta < 0) {
177
- // switching from overnight to same-day time span. decrease the end date 1 day
178
- var endDateAdvance = -86400000;
179
- }
180
-
181
- var startInput = container.find('.start.date');
182
- var endInput = container.find('.end.date');
183
-
184
- if (startInput.val() && !endInput.val()) {
185
- endInput.val(startInput.val());
186
- endInput.datepicker('update');
187
- dateDelta = 0;
188
- container.data('dateDelta', 0);
189
- }
190
-
191
- if (endDateAdvance != 0) {
192
- if (dateDelta || dateDelta === 0) {
193
- var endDate = new Date(endInput.val());
194
- var newEnd = new Date(endDate.getTime() + endDateAdvance);
195
- endInput.val(newEnd.format(DATE_FORMAT));
196
- endInput.datepicker('update');
197
- container.data('dateDelta', dateDelta + endDateAdvance);
198
- }
199
- }
200
- }
201
- });
202
- });
203
- // Simulates PHP's date function
204
- Date.prototype.format=function(format){var returnStr='';var replace=Date.replaceChars;for(var i=0;i<format.length;i++){var curChar=format.charAt(i);if(replace[curChar]){returnStr+=replace[curChar].call(this);}else{returnStr+=curChar;}}return returnStr;};Date.replaceChars={shortMonths:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],longMonths:['January','February','March','April','May','June','July','August','September','October','November','December'],shortDays:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],longDays:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],d:function(){return(this.getDate()<10?'0':'')+this.getDate();},D:function(){return Date.replaceChars.shortDays[this.getDay()];},j:function(){return this.getDate();},l:function(){return Date.replaceChars.longDays[this.getDay()];},N:function(){return this.getDay()+1;},S:function(){return(this.getDate()%10==1&&this.getDate()!=11?'st':(this.getDate()%10==2&&this.getDate()!=12?'nd':(this.getDate()%10==3&&this.getDate()!=13?'rd':'th')));},w:function(){return this.getDay();},z:function(){return"Not Yet Supported";},W:function(){return"Not Yet Supported";},F:function(){return Date.replaceChars.longMonths[this.getMonth()];},m:function(){return(this.getMonth()<9?'0':'')+(this.getMonth()+1);},M:function(){return Date.replaceChars.shortMonths[this.getMonth()];},n:function(){return this.getMonth()+1;},t:function(){return"Not Yet Supported";},L:function(){return(((this.getFullYear()%4==0)&&(this.getFullYear()%100!=0))||(this.getFullYear()%400==0))?'1':'0';},o:function(){return"Not Supported";},Y:function(){return this.getFullYear();},y:function(){return(''+this.getFullYear()).substr(2);},a:function(){return this.getHours()<12?'am':'pm';},A:function(){return this.getHours()<12?'AM':'PM';},B:function(){return"Not Yet Supported";},g:function(){return this.getHours()%12||12;},G:function(){return this.getHours();},h:function(){return((this.getHours()%12||12)<10?'0':'')+(this.getHours()%12||12);},H:function(){return(this.getHours()<10?'0':'')+this.getHours();},i:function(){return(this.getMinutes()<10?'0':'')+this.getMinutes();},s:function(){return(this.getSeconds()<10?'0':'')+this.getSeconds();},e:function(){return"Not Yet Supported";},I:function(){return"Not Supported";},O:function(){return(-this.getTimezoneOffset()<0?'-':'+')+(Math.abs(this.getTimezoneOffset()/60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()/60))+'00';},P:function(){return(-this.getTimezoneOffset()<0?'-':'+')+(Math.abs(this.getTimezoneOffset()/60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()/60))+':'+(Math.abs(this.getTimezoneOffset()%60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()%60));},T:function(){var m=this.getMonth();this.setMonth(0);var result=this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/,'$1');this.setMonth(m);return result;},Z:function(){return-this.getTimezoneOffset()*60;},c:function(){return this.format("Y-m-d")+"T"+this.format("H:i:sP");},r:function(){return this.toString();},U:function(){return this.getTime()/1000;}};
1
+ jQuery(document).ready(function($) {
2
+ $(function() {
3
+
4
+ var DATE_FORMAT = 'Y-m-d';
5
+ var DATEPICKER_FORMAT = 'yyyy-m-d';
6
+
7
+ $('.datepair input.date').each(function(){
8
+ var $this = $(this);
9
+ $this.datepicker({
10
+ 'format': DATEPICKER_FORMAT,
11
+ 'autoclose': true
12
+ });
13
+
14
+ if ($this.hasClass('start') || $this.hasClass('end')) {
15
+ $this.on('changeDate change', doDatepair);
16
+ }
17
+
18
+ });
19
+
20
+ $('.datepair input.time').each(function() {
21
+ var $this = $(this);
22
+ var opts = { 'showDuration': true, 'timeFormat': 'g:ia', 'scrollDefaultNow': true };
23
+
24
+ if ($this.hasClass('start') || $this.hasClass('end')) {
25
+ opts.onSelect = doDatepair;
26
+ }
27
+
28
+ $this.timepicker(opts);
29
+ });
30
+
31
+ $('.datepair').each(initDatepair);
32
+
33
+ function initDatepair()
34
+ {
35
+ var container = $(this);
36
+
37
+ var startDateInput = container.find('input.start.date');
38
+ var endDateInput = container.find('input.end.date');
39
+ var dateDelta = 0;
40
+
41
+ if (startDateInput.length && endDateInput.length) {
42
+ var startDate = new Date(startDateInput.val());
43
+ var endDate = new Date(endDateInput.val());
44
+
45
+ dateDelta = endDate.getTime() - startDate.getTime();
46
+
47
+ container.data('dateDelta', dateDelta);
48
+ }
49
+
50
+ var startTimeInput = container.find('input.start.time');
51
+ var endTimeInput = container.find('input.end.time');
52
+
53
+ if (startTimeInput.length && endTimeInput.length) {
54
+ var startInt = startTimeInput.timepicker('getSecondsFromMidnight');
55
+ var endInt = endTimeInput.timepicker('getSecondsFromMidnight');
56
+
57
+ container.data('timeDelta', endInt - startInt);
58
+
59
+ if (dateDelta < 86400000) {
60
+ endTimeInput.timepicker('option', 'minTime', startInt);
61
+ }
62
+ }
63
+ }
64
+
65
+ function doDatepair()
66
+ {
67
+ var target = $(this);
68
+ if (target.val() == '') {
69
+ return;
70
+ }
71
+
72
+ var container = target.closest('.datepair');
73
+
74
+ if (target.hasClass('date')) {
75
+ updateDatePair(target, container);
76
+
77
+ } else if (target.hasClass('time')) {
78
+ updateTimePair(target, container);
79
+ }
80
+ }
81
+
82
+ function updateDatePair(target, container)
83
+ {
84
+ var start = container.find('input.start.date');
85
+ var end = container.find('input.end.date');
86
+
87
+ if (!start.length || !end.length) {
88
+ return;
89
+ }
90
+
91
+ var startDate = new Date(start.val());
92
+ var endDate = new Date(end.val());
93
+
94
+ var oldDelta = container.data('dateDelta');
95
+
96
+ if (oldDelta && target.hasClass('start')) {
97
+ var newEnd = new Date(startDate.getTime()+oldDelta);
98
+ end.val(newEnd.format(DATE_FORMAT));
99
+ end.datepicker('update');
100
+ return;
101
+
102
+ } else {
103
+ var newDelta = endDate.getTime() - startDate.getTime();
104
+
105
+ if (newDelta < 0) {
106
+ newDelta = 0;
107
+
108
+ if (target.hasClass('start')) {
109
+ end.val(start.val());
110
+ end.datepicker('update');
111
+ } else if (target.hasClass('end')) {
112
+ start.val(end.val());
113
+ start.datepicker('update');
114
+ }
115
+ }
116
+
117
+ if (newDelta < 86400000) {
118
+ var startTimeVal = container.find('input.start.time').val();
119
+
120
+ if (startTimeVal) {
121
+ container.find('input.end.time').timepicker('option', {'minTime': startTimeVal});
122
+ }
123
+ } else {
124
+ container.find('input.end.time').timepicker('option', {'minTime': null});
125
+ }
126
+
127
+ container.data('dateDelta', newDelta);
128
+ }
129
+ }
130
+
131
+ function updateTimePair(target, container)
132
+ {
133
+ var start = container.find('input.start.time');
134
+ var end = container.find('input.end.time');
135
+
136
+ if (!start.length || !end.length) {
137
+ return;
138
+ }
139
+
140
+ var startInt = start.timepicker('getSecondsFromMidnight');
141
+ var endInt = end.timepicker('getSecondsFromMidnight');
142
+
143
+ var oldDelta = container.data('timeDelta');
144
+ var dateDelta = container.data('dateDelta');
145
+
146
+ if (target.hasClass('start') && (!dateDelta || dateDelta < 86400000)) {
147
+ end.timepicker('option', 'minTime', startInt);
148
+ }
149
+
150
+ var endDateAdvance = 0;
151
+ var newDelta;
152
+
153
+ if (oldDelta && target.hasClass('start')) {
154
+ // lock the duration and advance the end time
155
+
156
+ var newEnd = (startInt+oldDelta)%86400;
157
+
158
+ if (newEnd < 0) {
159
+ newEnd += 86400;
160
+ }
161
+
162
+ end.timepicker('setTime', newEnd);
163
+ newDelta = newEnd - startInt;
164
+ } else if (startInt !== null && endInt !== null) {
165
+ newDelta = endInt - startInt;
166
+ } else {
167
+ return;
168
+ }
169
+
170
+ container.data('timeDelta', newDelta);
171
+
172
+ if (newDelta < 0 && (!oldDelta || oldDelta > 0)) {
173
+ // overnight time span. advance the end date 1 day
174
+ var endDateAdvance = 86400000;
175
+
176
+ } else if (newDelta > 0 && oldDelta < 0) {
177
+ // switching from overnight to same-day time span. decrease the end date 1 day
178
+ var endDateAdvance = -86400000;
179
+ }
180
+
181
+ var startInput = container.find('.start.date');
182
+ var endInput = container.find('.end.date');
183
+
184
+ if (startInput.val() && !endInput.val()) {
185
+ endInput.val(startInput.val());
186
+ endInput.datepicker('update');
187
+ dateDelta = 0;
188
+ container.data('dateDelta', 0);
189
+ }
190
+
191
+ if (endDateAdvance != 0) {
192
+ if (dateDelta || dateDelta === 0) {
193
+ var endDate = new Date(endInput.val());
194
+ var newEnd = new Date(endDate.getTime() + endDateAdvance);
195
+ endInput.val(newEnd.format(DATE_FORMAT));
196
+ endInput.datepicker('update');
197
+ container.data('dateDelta', dateDelta + endDateAdvance);
198
+ }
199
+ }
200
+ }
201
+ });
202
+ });
203
+ // Simulates PHP's date function
204
+ Date.prototype.format=function(format){var returnStr='';var replace=Date.replaceChars;for(var i=0;i<format.length;i++){var curChar=format.charAt(i);if(replace[curChar]){returnStr+=replace[curChar].call(this);}else{returnStr+=curChar;}}return returnStr;};Date.replaceChars={shortMonths:['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'],longMonths:['January','February','March','April','May','June','July','August','September','October','November','December'],shortDays:['Sun','Mon','Tue','Wed','Thu','Fri','Sat'],longDays:['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'],d:function(){return(this.getDate()<10?'0':'')+this.getDate();},D:function(){return Date.replaceChars.shortDays[this.getDay()];},j:function(){return this.getDate();},l:function(){return Date.replaceChars.longDays[this.getDay()];},N:function(){return this.getDay()+1;},S:function(){return(this.getDate()%10==1&&this.getDate()!=11?'st':(this.getDate()%10==2&&this.getDate()!=12?'nd':(this.getDate()%10==3&&this.getDate()!=13?'rd':'th')));},w:function(){return this.getDay();},z:function(){return"Not Yet Supported";},W:function(){return"Not Yet Supported";},F:function(){return Date.replaceChars.longMonths[this.getMonth()];},m:function(){return(this.getMonth()<9?'0':'')+(this.getMonth()+1);},M:function(){return Date.replaceChars.shortMonths[this.getMonth()];},n:function(){return this.getMonth()+1;},t:function(){return"Not Yet Supported";},L:function(){return(((this.getFullYear()%4==0)&&(this.getFullYear()%100!=0))||(this.getFullYear()%400==0))?'1':'0';},o:function(){return"Not Supported";},Y:function(){return this.getFullYear();},y:function(){return(''+this.getFullYear()).substr(2);},a:function(){return this.getHours()<12?'am':'pm';},A:function(){return this.getHours()<12?'AM':'PM';},B:function(){return"Not Yet Supported";},g:function(){return this.getHours()%12||12;},G:function(){return this.getHours();},h:function(){return((this.getHours()%12||12)<10?'0':'')+(this.getHours()%12||12);},H:function(){return(this.getHours()<10?'0':'')+this.getHours();},i:function(){return(this.getMinutes()<10?'0':'')+this.getMinutes();},s:function(){return(this.getSeconds()<10?'0':'')+this.getSeconds();},e:function(){return"Not Yet Supported";},I:function(){return"Not Supported";},O:function(){return(-this.getTimezoneOffset()<0?'-':'+')+(Math.abs(this.getTimezoneOffset()/60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()/60))+'00';},P:function(){return(-this.getTimezoneOffset()<0?'-':'+')+(Math.abs(this.getTimezoneOffset()/60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()/60))+':'+(Math.abs(this.getTimezoneOffset()%60)<10?'0':'')+(Math.abs(this.getTimezoneOffset()%60));},T:function(){var m=this.getMonth();this.setMonth(0);var result=this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/,'$1');this.setMonth(m);return result;},Z:function(){return-this.getTimezoneOffset()*60;},c:function(){return this.format("Y-m-d")+"T"+this.format("H:i:sP");},r:function(){return this.toString();},U:function(){return this.getTime()/1000;}};
js/libraries/jquery-datepicker/picker_functions.js CHANGED
@@ -1,48 +1,48 @@
1
- jQuery(document).ready(function ($) {
2
-
3
- /* Populates timepicker values */
4
-
5
- jQuery('.time-picker').timepicker({ 'timeFormat': 'H:i' });
6
-
7
- if ($('.current_lander .new-date').length) { // implies *not* zero
8
- var current_val = jQuery(".current_lander .new-date").val();
9
- } else {
10
- var current_val = jQuery(".new-date").val();
11
- }
12
- // if no timepicker in options fix it
13
- if (typeof (current_val) == "undefined" || current_val === null || current_val == "") {
14
- var current_val = '';
15
- }
16
-
17
- jQuery('.new-date').each(function(){
18
- var the_val = $(this).val();
19
- if (typeof (the_val) == "undefined" || the_val === null || the_val == "") {
20
- var the_val = '';
21
- }
22
- var ret = the_val.split(" ");
23
- var current_date = ret[0];
24
- var current_time = ret[1];
25
- jQuery(this).parent().parent().find(".date.start").val(current_date);
26
- jQuery(this).parent().parent().find(".time-picker").val(current_time);
27
- });
28
-
29
- jQuery("body").on('change', '.jquery-date-picker .date.start', function () {
30
- var date_chosen = jQuery(this).val();
31
- var time_chosen = jQuery(this).parent().parent().find(".jquery-date-picker .time-picker").val();
32
- var total_time = date_chosen + " " + time_chosen;
33
- jQuery(this).parent().parent().find(".new-date").val(total_time);
34
-
35
- });
36
-
37
- jQuery("body").on('change', '.jquery-date-picker .time-picker', function () {
38
- var date_chosen = jQuery(this).parent().parent().find(".jquery-date-picker .date.start").val();
39
- var time_chosen = jQuery(this).val();
40
- if (typeof (time_chosen) === "undefined" && time_chosen == null && time_chosen === "") {
41
- var time_chosen = "00:00";
42
- }
43
- var total_time = date_chosen + " " + time_chosen;
44
- jQuery(this).parent().find(".new-date").val(total_time);
45
-
46
- });
47
-
48
  });
1
+ jQuery(document).ready(function ($) {
2
+
3
+ /* Populates timepicker values */
4
+
5
+ jQuery('.time-picker').timepicker({ 'timeFormat': 'H:i' });
6
+
7
+ if ($('.current_lander .new-date').length) { // implies *not* zero
8
+ var current_val = jQuery(".current_lander .new-date").val();
9
+ } else {
10
+ var current_val = jQuery(".new-date").val();
11
+ }
12
+ // if no timepicker in options fix it
13
+ if (typeof (current_val) == "undefined" || current_val === null || current_val == "") {
14
+ var current_val = '';
15
+ }
16
+
17
+ jQuery('.new-date').each(function(){
18
+ var the_val = $(this).val();
19
+ if (typeof (the_val) == "undefined" || the_val === null || the_val == "") {
20
+ var the_val = '';
21
+ }
22
+ var ret = the_val.split(" ");
23
+ var current_date = ret[0];
24
+ var current_time = ret[1];
25
+ jQuery(this).parent().parent().find(".date.start").val(current_date);
26
+ jQuery(this).parent().parent().find(".time-picker").val(current_time);
27
+ });
28
+
29
+ jQuery("body").on('change', '.jquery-date-picker .date.start', function () {
30
+ var date_chosen = jQuery(this).val();
31
+ var time_chosen = jQuery(this).parent().parent().find(".jquery-date-picker .time-picker").val();
32
+ var total_time = date_chosen + " " + time_chosen;
33
+ jQuery(this).parent().parent().find(".new-date").val(total_time);
34
+
35
+ });
36
+
37
+ jQuery("body").on('change', '.jquery-date-picker .time-picker', function () {
38
+ var date_chosen = jQuery(this).parent().parent().find(".jquery-date-picker .date.start").val();
39
+ var time_chosen = jQuery(this).val();
40
+ if (typeof (time_chosen) === "undefined" && time_chosen == null && time_chosen === "") {
41
+ var time_chosen = "00:00";
42
+ }
43
+ var total_time = date_chosen + " " + time_chosen;
44
+ jQuery(this).parent().find(".new-date").val(total_time);
45
+
46
+ });
47
+
48
  });
js/libraries/jquery-qtip/jquery.qtip.min.js CHANGED
@@ -1,2 +1,2 @@
1
- /*! qtip2 v2.0.0 | http://craigsworks.com/projects/qtip2/ | Licensed MIT, GPL */
2
  (function(e,t,n){(function(e){"use strict";typeof define=="function"&&define.amd?define(["jquery"],e):jQuery&&!jQuery.fn.qtip&&e(jQuery)})(function(r){function _(n){E={pageX:n.pageX,pageY:n.pageY,type:"mousemove",scrollX:e.pageXOffset||t.body.scrollLeft||t.documentElement.scrollLeft,scrollY:e.pageYOffset||t.body.scrollTop||t.documentElement.scrollTop}}function D(e){var t=function(e){return e===o||"object"!=typeof e},n=function(e){return!r.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"==typeof e&&!e.jquery&&!e.then)};if(!e||"object"!=typeof e)return s;t(e.metadata)&&(e.metadata={type:e.metadata});if("content"in e){if(t(e.content)||e.content.jquery)e.content={text:e.content};n(e.content.text||s)&&(e.content.text=s),"title"in e.content&&(t(e.content.title)&&(e.content.title={text:e.content.title}),n(e.content.title.text||s)&&(e.content.title.text=s))}return"position"in e&&t(e.position)&&(e.position={my:e.position,at:e.position}),"show"in e&&t(e.show)&&(e.show=e.show.jquery?{target:e.show}:{event:e.show}),"hide"in e&&t(e.hide)&&(e.hide=e.hide.jquery?{target:e.hide}:{event:e.hide}),"style"in e&&t(e.style)&&(e.style={classes:e.style}),r.each(w,function(){this.sanitize&&this.sanitize(e)}),e}function P(u,a,f,l){function q(e){var t=0,n,r=a,i=e.split(".");while(r=r[i[t++]])t<i.length&&(n=r);return[n||a,i.pop()]}function R(e){return T.concat("").join(e?"-"+e+" ":" ")}function U(){var e=a.style.widget,t=H.hasClass(j);H.removeClass(j),j=e?"ui-state-disabled":"qtip-disabled",H.toggleClass(j,t),H.toggleClass("ui-helper-reset "+R(),e).toggleClass(C,a.style.def&&!e),F.content&&F.content.toggleClass(R("content"),e),F.titlebar&&F.titlebar.toggleClass(R("header"),e),F.button&&F.button.toggleClass(S+"-icon",!e)}function z(e){F.title&&(F.titlebar.remove(),F.titlebar=F.title=F.button=o,e!==s&&m.reposition())}function W(){var e=a.content.title.button,t=typeof e=="string",n=t?e:"Close tooltip";F.button&&F.button.remove(),e.jquery?F.button=e:F.button=r("<a />",{"class":"qtip-close "+(a.style.widget?"":S+"-icon"),title:n,"aria-label":n}).prepend(r("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),F.button.appendTo(F.titlebar||H).attr("role","button").click(function(e){return H.hasClass(j)||m.hide(e),s})}function X(){var e=y+"-title";F.titlebar&&z(),F.titlebar=r("<div />",{"class":S+"-titlebar "+(a.style.widget?R("header"):"")}).append(F.title=r("<div />",{id:e,"class":S+"-title","aria-atomic":i})).insertBefore(F.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(e){r(this).toggleClass("ui-state-active ui-state-focus",e.type.substr(-4)==="down")}).delegate(".qtip-close","mouseover mouseout",function(e){r(this).toggleClass("ui-state-hover",e.type==="mouseover")}),a.content.title.button&&W()}function V(e){var t=F.button;if(!m.rendered)return s;e?W():t.remove()}function J(e,t){var n=F.title;if(!m.rendered||!e)return s;r.isFunction(e)&&(e=e.call(u,I.event,m));if(e===s||!e&&e!=="")return z(s);e.jquery&&e.length>0?n.empty().append(e.css({display:"block"})):n.html(e),t!==s&&m.rendered&&H[0].offsetWidth>0&&m.reposition(I.event)}function K(e){e&&r.isFunction(e.done)&&e.done(function(e){Q(e,null,s)})}function Q(e,t,i){function f(e){function a(n){n&&(delete u[n.src],clearTimeout(m.timers.img[n.src]),r(n).unbind(B)),r.isEmptyObject(u)&&(t!==s&&m.reposition(I.event),e())}var i,u={};if((i=o.find("img[src]:not([height]):not([width])")).length===0)return a();i.each(function(e,t){if(u[t.src]!==n)return;var i=0,s=3;(function o(){if(t.height||t.width||i>s)return a(t);i+=1,m.timers.img[t.src]=setTimeout(o,700)})(),r(t).bind("error"+B+" load"+B,function(){a(this)}),u[t.src]=t})}var o=F.content;return!m.rendered||!e?s:(r.isFunction(e)&&(e=e.call(u,I.event,m)||""),i!==s&&K(a.content.deferred),e.jquery&&e.length>0?o.empty().append(e.css({display:"block"})):o.html(e),m.rendered<0?H.queue("fx",f):(P=0,f(r.noop)),m)}function G(){function h(e){if(H.hasClass(j))return s;clearTimeout(m.timers.show),clearTimeout(m.timers.hide);var t=function(){m.toggle(i,e)};a.show.delay>0?m.timers.show=setTimeout(t,a.show.delay):t()}function p(e){if(H.hasClass(j)||A||P)return s;var t=r(e.relatedTarget||e.target),i=t.closest(N)[0]===H[0],u=t[0]===o.show[0];clearTimeout(m.timers.show),clearTimeout(m.timers.hide);if(n.target==="mouse"&&i||a.hide.fixed&&/mouse(out|leave|move)/.test(e.type)&&(i||u)){try{e.preventDefault(),e.stopImmediatePropagation()}catch(f){}return}a.hide.delay>0?m.timers.hide=setTimeout(function(){m.hide(e)},a.hide.delay):m.hide(e)}function d(e){if(H.hasClass(j))return s;clearTimeout(m.timers.inactive),m.timers.inactive=setTimeout(function(){m.hide(e)},a.hide.inactive)}function v(e){m.rendered&&H[0].offsetWidth>0&&m.reposition(e)}var n=a.position,o={show:a.show.target,hide:a.hide.target,viewport:r(n.viewport),document:r(t),body:r(t.body),window:r(e)},l={show:r.trim(""+a.show.event).split(" "),hide:r.trim(""+a.hide.event).split(" ")},c=r.browser.msie&&parseInt(r.browser.version,10)===6;H.bind("mouseenter"+B+" mouseleave"+B,function(e){var t=e.type==="mouseenter";t&&m.focus(e),H.toggleClass(L,t)}),/mouse(out|leave)/i.test(a.hide.event)&&a.hide.leave==="window"&&o.window.bind("mouseout"+B+" blur"+B,function(e){!/select|option/.test(e.target.nodeName)&&!e.relatedTarget&&m.hide(e)}),a.hide.fixed?(o.hide=o.hide.add(H),H.bind("mouseover"+B,function(){H.hasClass(j)||clearTimeout(m.timers.hide)})):/mouse(over|enter)/i.test(a.show.event)&&o.hide.bind("mouseleave"+B,function(e){clearTimeout(m.timers.show)}),(""+a.hide.event).indexOf("unfocus")>-1&&n.container.closest("html").bind("mousedown"+B+" touchstart"+B,function(e){var t=r(e.target),n=m.rendered&&!H.hasClass(j)&&H[0].offsetWidth>0,i=t.parents(N).filter(H[0]).length>0;t[0]!==u[0]&&t[0]!==H[0]&&!i&&!u.has(t[0]).length&&!t.attr("disabled")&&m.hide(e)}),"number"==typeof a.hide.inactive&&(o.show.bind("qtip-"+f+"-inactive",d),r.each(b.inactiveEvents,function(e,t){o.hide.add(F.tooltip).bind(t+B+"-inactive",d)})),r.each(l.hide,function(e,t){var n=r.inArray(t,l.show),i=r(o.hide);n>-1&&i.add(o.show).length===i.length||t==="unfocus"?(o.show.bind(t+B,function(e){H[0].offsetWidth>0?p(e):h(e)}),delete l.show[n]):o.hide.bind(t+B,p)}),r.each(l.show,function(e,t){o.show.bind(t+B,h)}),"number"==typeof a.hide.distance&&o.show.add(H).bind("mousemove"+B,function(e){var t=I.origin||{},n=a.hide.distance,r=Math.abs;(r(e.pageX-t.pageX)>=n||r(e.pageY-t.pageY)>=n)&&m.hide(e)}),n.target==="mouse"&&(o.show.bind("mousemove"+B,_),n.adjust.mouse&&(a.hide.event&&(H.bind("mouseleave"+B,function(e){(e.relatedTarget||e.target)!==o.show[0]&&m.hide(e)}),F.target.bind("mouseenter"+B+" mouseleave"+B,function(e){I.onTarget=e.type==="mouseenter"})),o.document.bind("mousemove"+B,function(e){m.rendered&&I.onTarget&&!H.hasClass(j)&&H[0].offsetWidth>0&&m.reposition(e||E)}))),(n.adjust.resize||o.viewport.length)&&(r.event.special.resize?o.viewport:o.window).bind("resize"+B,v),o.window.bind("scroll"+B,v)}function Y(){var n=[a.show.target[0],a.hide.target[0],m.rendered&&F.tooltip[0],a.position.container[0],a.position.viewport[0],a.position.container.closest("html")[0],e,t];m.rendered?r([]).pushStack(r.grep(n,function(e){return typeof e=="object"})).unbind(B):a.show.target.unbind(B+"-create")}var m=this,g=t.body,y=S+"-"+f,A=0,P=0,H=r(),B=".qtip-"+f,j="qtip-disabled",F,I;m.id=f,m.rendered=s,m.destroyed=s,m.elements=F={target:u},m.timers={img:{}},m.options=a,m.checks={},m.plugins={},m.cache=I={event:{},target:r(),disabled:s,attr:l,onTarget:s,lastClass:""},m.checks.builtin={"^id$":function(e,t,n){var o=n===i?b.nextid:n,u=S+"-"+o;o!==s&&o.length>0&&!r("#"+u).length&&(H[0].id=u,F.content[0].id=u+"-content",F.title[0].id=u+"-title")},"^content.text$":function(e,t,n){Q(a.content.text)},"^content.deferred$":function(e,t,n){K(a.content.deferred)},"^content.title.text$":function(e,t,n){if(!n)return z();!F.title&&n&&X(),J(n)},"^content.title.button$":function(e,t,n){V(n)},"^position.(my|at)$":function(e,t,n){"string"==typeof n&&(e[t]=new w.Corner(n))},"^position.container$":function(e,t,n){m.rendered&&H.appendTo(n)},"^show.ready$":function(){m.rendered?m.toggle(i):m.render(1)},"^style.classes$":function(e,t,n){H.attr("class",S+" qtip "+n)},"^style.width|height":function(e,t,n){H.css(t,n)},"^style.widget|content.title":U,"^events.(render|show|move|hide|focus|blur)$":function(e,t,n){H[(r.isFunction(n)?"":"un")+"bind"]("tooltip"+t,n)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var e=a.position;H.attr("tracking",e.target==="mouse"&&e.adjust.mouse),Y(),G()}},r.extend(m,{_triggerEvent:function(e,t,n){var i=r.Event("tooltip"+e);return i.originalEvent=(n?r.extend({},n):o)||I.event||o,H.trigger(i,[m].concat(t||[])),!i.isDefaultPrevented()},render:function(e){if(m.rendered)return m;var t=a.content.text,n=a.content.title,o=a.position;return r.attr(u[0],"aria-describedby",y),H=F.tooltip=r("<div/>",{id:y,"class":[S,C,a.style.classes,S+"-pos-"+a.position.my.abbrev()].join(" "),width:a.style.width||"",height:a.style.height||"",tracking:o.target==="mouse"&&o.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":s,"aria-describedby":y+"-content","aria-hidden":i}).toggleClass(j,I.disabled).data("qtip",m).appendTo(a.position.container).append(F.content=r("<div />",{"class":S+"-content",id:y+"-content","aria-atomic":i})),m.rendered=-1,A=1,n.text?(X(),r.isFunction(n.text)||J(n.text,s)):n.button&&W(),(!r.isFunction(t)||t.then)&&Q(t,s),m.rendered=i,U(),r.each(a.events,function(e,t){r.isFunction(t)&&H.bind(e==="toggle"?"tooltipshow tooltiphide":"tooltip"+e,t)}),r.each(w,function(){this.initialize==="render"&&this(m)}),G(),H.queue("fx",function(t){m._triggerEvent("render"),A=0,(a.show.ready||e)&&m.toggle(i,I.event,s),t()}),m},get:function(e){var t,n;switch(e.toLowerCase()){case"dimensions":t={height:H.outerHeight(s),width:H.outerWidth(s)};break;case"offset":t=w.offset(H,a.position.container);break;default:n=q(e.toLowerCase()),t=n[0][n[1]],t=t.precedance?t.string():t}return t},set:function(e,t){function h(e,t){var n,r,i;for(n in l)for(r in l[n])if(i=(new RegExp(r,"i")).exec(e))t.push(i),l[n][r].apply(m,t)}var n=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,u=/^content\.(title|attr)|style/i,f=s,l=m.checks,c;return"string"==typeof e?(c=e,e={},e[c]=t):e=r.extend(i,{},e),r.each(e,function(t,i){var s=q(t.toLowerCase()),o;o=s[0][s[1]],s[0][s[1]]="object"==typeof i&&i.nodeType?r(i):i,e[t]=[s[0],s[1],i,o],f=n.test(t)||f}),D(a),A=1,r.each(e,h),A=0,m.rendered&&H[0].offsetWidth>0&&f&&m.reposition(a.position.target==="mouse"?o:I.event),m},toggle:function(e,n){function b(){e?(r.browser.msie&&H[0].style.removeAttribute("filter"),H.css("overflow",""),"string"==typeof u.autofocus&&r(u.autofocus,H).focus(),u.target.trigger("qtip-"+f+"-inactive")):H.css({display:"",visibility:"",opacity:"",left:"",top:""}),m._triggerEvent(e?"visible":"hidden")}if(n){if(/over|enter/.test(n.type)&&/out|leave/.test(I.event.type)&&a.show.target.add(n.target).length===a.show.target.length&&H.has(n.relatedTarget).length)return m;I.event=r.extend({},n)}if(!m.rendered)return e?m.render(1):m;var o=e?"show":"hide",u=a[o],l=a[e?"hide":"show"],c=a.position,h=a.content,p=H[0].offsetWidth>0,d=e||u.target.length===1,v=!n||u.target.length<2||I.target[0]===n.target,g,y;return(typeof e).search("boolean|number")&&(e=!p),!H.is(":animated")&&p===e&&v?m:m._triggerEvent(o,[90])?(r.attr(H[0],"aria-hidden",!e),e?(I.origin=r.extend({},E),m.focus(n),r.isFunction(h.text)&&Q(h.text,s),r.isFunction(h.title.text)&&J(h.title.text,s),!M&&c.target==="mouse"&&c.adjust.mouse&&(r(t).bind("mousemove.qtip",_),M=i),m.reposition(n,arguments[2]),!u.solo||r(N,u.solo).not(H).qtip("hide",r.Event("tooltipsolo"))):(clearTimeout(m.timers.show),delete I.origin,M&&!r(N+'[tracking="true"]:visible',u.solo).not(H).length&&(r(t).unbind("mousemove.qtip"),M=s),m.blur(n)),u.effect===s||d===s?(H[o](),b.call(H)):r.isFunction(u.effect)?(H.stop(1,1),u.effect.call(H,m),H.queue("fx",function(e){b(),e()})):H.fadeTo(90,e?1:0,b),e&&u.target.trigger("qtip-"+f+"-inactive"),m):m},show:function(e){return m.toggle(i,e)},hide:function(e){return m.toggle(s,e)},focus:function(e){if(!m.rendered)return m;var t=r(N),n=parseInt(H[0].style.zIndex,10),i=b.zindex+t.length,s=r.extend({},e),o;return H.hasClass(k)||m._triggerEvent("focus",[i],s)&&(n!==i&&(t.each(function(){this.style.zIndex>n&&(this.style.zIndex=this.style.zIndex-1)}),t.filter("."+k).qtip("blur",s)),H.addClass(k)[0].style.zIndex=i),m},blur:function(e){return H.removeClass(k),m._triggerEvent("blur",[H.css("zIndex")],e),m},reposition:function(n,i){if(!m.rendered||A)return m;A=1;var o=a.position.target,u=a.position,f=u.my,l=u.at,g=u.adjust,y=g.method.split(" "),b=H.outerWidth(s),S=H.outerHeight(s),x=0,T=0,N=H.css("position"),C=u.viewport,k={left:0,top:0},L=u.container,O=H[0].offsetWidth>0,M=n&&n.type==="scroll",_=r(e),D,P;if(r.isArray(o)&&o.length===2)l={x:h,y:c},k={left:o[0],top:o[1]};else if(o==="mouse"&&(n&&n.pageX||I.event.pageX))l={x:h,y:c},n=E&&E.pageX&&(g.mouse||!n||!n.pageX)?{pageX:E.pageX,pageY:E.pageY}:(!n||n.type!=="resize"&&n.type!=="scroll"?n&&n.pageX&&n.type==="mousemove"?n:!g.mouse&&I.origin&&I.origin.pageX&&a.show.distance?I.origin:n:I.event)||n||I.event||E||{},N!=="static"&&(k=L.offset()),k={left:n.pageX-k.left,top:n.pageY-k.top},g.mouse&&M&&(k.left-=E.scrollX-_.scrollLeft(),k.top-=E.scrollY-_.scrollTop());else{o==="event"&&n&&n.target&&n.type!=="scroll"&&n.type!=="resize"?I.target=r(n.target):o!=="event"&&(I.target=r(o.jquery?o:F.target)),o=I.target,o=r(o).eq(0);if(o.length===0)return m;o[0]===t||o[0]===e?(x=w.iOS?e.innerWidth:o.width(),T=w.iOS?e.innerHeight:o.height(),o[0]===e&&(k={top:(C||o).scrollTop(),left:(C||o).scrollLeft()})):w.imagemap&&o.is("area")?D=w.imagemap(m,o,l,w.viewport?y:s):w.svg&&o[0].ownerSVGElement?D=w.svg(m,o,l,w.viewport?y:s):(x=o.outerWidth(s),T=o.outerHeight(s),k=w.offset(o,L)),D&&(x=D.width,T=D.height,P=D.offset,k=D.position);if(w.iOS>3.1&&w.iOS<4.1||w.iOS>=4.3&&w.iOS<4.33||!w.iOS&&N==="fixed")k.left-=_.scrollLeft(),k.top-=_.scrollTop();k.left+=l.x===d?x:l.x===v?x/2:0,k.top+=l.y===p?T:l.y===v?T/2:0}return k.left+=g.x+(f.x===d?-b:f.x===v?-b/2:0),k.top+=g.y+(f.y===p?-S:f.y===v?-S/2:0),w.viewport?(k.adjusted=w.viewport(m,k,u,x,T,b,S),P&&k.adjusted.left&&(k.left+=P.left),P&&k.adjusted.top&&(k.top+=P.top)):k.adjusted={left:0,top:0},m._triggerEvent("move",[k,C.elem||C],n)?(delete k.adjusted,i===s||!O||isNaN(k.left)||isNaN(k.top)||o==="mouse"||!r.isFunction(u.effect)?H.css(k):r.isFunction(u.effect)&&(u.effect.call(H,m,r.extend({},k)),H.queue(function(e){r(this).css({opacity:"",height:""}),r.browser.msie&&this.style.removeAttribute("filter"),e()})),A=0,m):m},disable:function(e){return"boolean"!=typeof e&&(e=!H.hasClass(j)&&!I.disabled),m.rendered?(H.toggleClass(j,e),r.attr(H[0],"aria-disabled",e)):I.disabled=!!e,m},enable:function(){return m.disable(s)},destroy:function(){var e=u[0],t=r.attr(e,O),n=u.data("qtip");m.destroyed=i,m.rendered&&(H.stop(1,0).remove(),r.each(m.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(m.timers.show),clearTimeout(m.timers.hide),Y();if(!n||m===n)r.removeData(e,"qtip"),a.suppress&&t&&(r.attr(e,"title",t),u.removeAttr(O)),u.removeAttr("aria-describedby");return u.unbind(".qtip-"+f),delete x[m.id],u}})}function H(e,n){var u,a,f,l,c,h=r(this),p=r(t.body),d=this===t?p:h,v=h.metadata?h.metadata(n.metadata):o,m=n.metadata.type==="html5"&&v?v[n.metadata.name]:o,g=h.data(n.metadata.name||"qtipopts");try{g=typeof g=="string"?r.parseJSON(g):g}catch(y){}l=r.extend(i,{},b.defaults,n,typeof g=="object"?D(g):o,D(m||v)),a=l.position,l.id=e;if("boolean"==typeof l.content.text){f=h.attr(l.content.attr);if(l.content.attr===s||!f)return s;l.content.text=f}a.container.length||(a.container=p),a.target===s&&(a.target=d),l.show.target===s&&(l.show.target=d),l.show.solo===i&&(l.show.solo=a.container.closest("body")),l.hide.target===s&&(l.hide.target=d),l.position.viewport===i&&(l.position.viewport=a.container),a.container=a.container.eq(0),a.at=new w.Corner(a.at),a.my=new w.Corner(a.my);if(r.data(this,"qtip"))if(l.overwrite)h.qtip("destroy");else if(l.overwrite===s)return s;return l.suppress&&(c=r.attr(this,"title"))&&r(this).removeAttr("title").attr(O,c).attr("title",""),u=new P(h,l,e,!!f),r.data(this,"qtip",u),h.bind("remove.qtip-"+e+" removeqtip.qtip-"+e,function(){u.destroy()}),u}function B(e){var t=this,n=e.elements.tooltip,o=e.options.content.ajax,u=b.defaults.content.ajax,a=".qtip-ajax",f=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,l=i,c=s,h;e.checks.ajax={"^content.ajax":function(e,r,i){r==="ajax"&&(o=i),r==="once"?t.init():o&&o.url?t.load():n.unbind(a)}},r.extend(t,{init:function(){return o&&o.url&&n.unbind(a)[o.once?"one":"bind"]("tooltipshow"+a,t.load),t},load:function(n){function g(){var t;if(e.destroyed)return;l=s,v&&(c=i,e.show(n.originalEvent)),(t=u.complete||o.complete)&&r.isFunction(t)&&t.apply(o.context||e,arguments)}function y(t,n,i){var s;if(e.destroyed)return;d&&"string"==typeof t&&(t=r("<div/>").append(t.replace(f,"")).find(d)),(s=u.success||o.success)&&r.isFunction(s)?s.call(o.context||e,t,n,i):e.set("content.text",t)}function b(t,n,r){if(e.destroyed||t.status===0)return;e.set("content.text",n+": "+r)}if(c){c=s;return}var a=o.url.lastIndexOf(" "),p=o.url,d,v=!o.loading&&l;if(v)try{n.preventDefault()}catch(m){}else if(n&&n.isDefaultPrevented())return t;h&&h.abort&&h.abort(),a>-1&&(d=p.substr(a),p=p.substr(0,a)),h=r.ajax(r.extend({error:u.error||b,context:e},o,{url:p,success:y,complete:g}))},destroy:function(){h&&h.abort&&h.abort(),e.destroyed=i}}),t.init()}function j(e,t,n){var r=Math.ceil(t/2),i=Math.ceil(n/2),s={bottomright:[[0,0],[t,n],[t,0]],bottomleft:[[0,0],[t,0],[0,n]],topright:[[0,n],[t,0],[t,n]],topleft:[[0,0],[0,n],[t,n]],topcenter:[[0,n],[r,0],[t,n]],bottomcenter:[[0,0],[t,0],[r,n]],rightcenter:[[0,0],[t,i],[0,n]],leftcenter:[[t,0],[t,n],[0,i]]};return s.lefttop=s.bottomright,s.righttop=s.bottomleft,s.leftbottom=s.topright,s.rightbottom=s.topleft,s[e.string()]}function F(e,t){function A(e){var t=E.is(":visible");E.show(),e(),E.toggle(t)}function O(){x.width=g.height,x.height=g.width}function M(){x.width=g.width,x.height=g.height}function _(t,r,o,f){if(!b.tip)return;var l=m.corner.clone(),w=o.adjusted,E=e.options.position.adjust.method.split(" "),x=E[0],T=E[1]||E[0],N={left:s,top:s,x:0,y:0},C,k={},L;m.corner.fixed!==i&&(x===y&&l.precedance===u&&w.left&&l.y!==v?l.precedance=l.precedance===u?a:u:x!==y&&w.left&&(l.x=l.x===v?w.left>0?h:d:l.x===h?d:h),T===y&&l.precedance===a&&w.top&&l.x!==v?l.precedance=l.precedance===a?u:a:T!==y&&w.top&&(l.y=l.y===v?w.top>0?c:p:l.y===c?p:c),l.string()!==S.corner.string()&&(S.top!==w.top||S.left!==w.left)&&m.update(l,s)),C=m.position(l,w),C[l.x]+=P(l,l.x),C[l.y]+=P(l,l.y),C.right!==n&&(C.left=-C.right),C.bottom!==n&&(C.top=-C.bottom),C.user=Math.max(0,g.offset);if(N.left=x===y&&!!w.left)l.x===v?k["margin-left"]=N.x=C["margin-left"]:(L=C.right!==n?[w.left,-C.left]:[-w.left,C.left],(N.x=Math.max(L[0],L[1]))>L[0]&&(o.left-=w.left,N.left=s),k[C.right!==n?d:h]=N.x);if(N.top=T===y&&!!w.top)l.y===v?k["margin-top"]=N.y=C["margin-top"]:(L=C.bottom!==n?[w.top,-C.top]:[-w.top,C.top],(N.y=Math.max(L[0],L[1]))>L[0]&&(o.top-=w.top,N.top=s),k[C.bottom!==n?p:c]=N.y);b.tip.css(k).toggle(!(N.x&&N.y||l.x===v&&N.y||l.y===v&&N.x)),o.left-=C.left.charAt?C.user:x!==y||N.top||!N.left&&!N.top?C.left:0,o.top-=C.top.charAt?C.user:T!==y||N.left||!N.left&&!N.top?C.top:0,S.left=w.left,S.top=w.top,S.corner=l.clone()}function D(){var t=g.corner,n=e.options.position,r=n.at,o=n.my.string?n.my.string():n.my;return t===s||o===s&&r===s?s:(t===i?m.corner=new w.Corner(o):t.string||(m.corner=new w.Corner(t),m.corner.fixed=i),S.corner=new w.Corner(m.corner.string()),m.corner.string()!=="centercenter")}function P(e,t,n){t=t?t:e[e.precedance];var r=b.titlebar&&e.y===c,i=r?b.titlebar:E,s="border-"+t+"-width",o=function(e){return parseInt(e.css(s),10)},u;return A(function(){u=(n?o(n):o(b.content)||o(i)||o(E))||0}),u}function H(e){var t=b.titlebar&&e.y===c,n=t?b.titlebar:b.content,i=r.browser.mozilla,s=i?"-moz-":r.browser.webkit?"-webkit-":"",o="border-radius-"+e.y+e.x,u="border-"+e.y+"-"+e.x+"-radius",a=function(e){return parseInt(n.css(e),10)||parseInt(E.css(e),10)},f;return A(function(){f=a(u)||a(s+u)||a(s+o)||a(o)||0}),f}function B(e){function N(e,t,n){var r=e.css(t)||p;return n&&r===e.css(n)?s:f.test(r)?s:r}var t,n,o,u=b.tip.css("cssText",""),a=e||m.corner,f=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,l="border-"+a[a.precedance]+"-color",h="background-color",p="transparent",d=" !important",y=b.titlebar,w=y&&(a.y===c||a.y===v&&u.position().top+x.height/2+g.offset<y.outerHeight(i)),S=w?y:b.content;A(function(){T.fill=N(u,h)||N(S,h)||N(b.content,h)||N(E,h)||u.css(h),T.border=N(u,l,"color")||N(S,l,"color")||N(b.content,l,"color")||N(E,l,"color")||E.css(l),r("*",u).add(u).css("cssText",h+":"+p+d+";border:0"+d+";")})}function F(e){var t=e.precedance===a,n=x[t?f:l],r=x[t?l:f],i=e.string().indexOf(v)>-1,s=n*(i?.5:1),o=Math.pow,u=Math.round,c,h,p,d=Math.sqrt(o(s,2)+o(r,2)),m=[N/s*d,N/r*d];return m[2]=Math.sqrt(o(m[0],2)-o(N,2)),m[3]=Math.sqrt(o(m[1],2)-o(N,2)),c=d+m[2]+m[3]+(i?0:m[0]),h=c/d,p=[u(h*r),u(h*n)],{height:p[t?0:1],width:p[t?1:0]}}function I(e,t,n){return"<qvml:"+e+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(t||"")+' style="behavior: url(#default#VML); '+(n||"")+'" />'}var m=this,g=e.options.style.tip,b=e.elements,E=b.tooltip,S={top:0,left:0},x={width:g.width,height:g.height},T={},N=g.border||0,C=".qtip-tip",k=!!(r("<canvas />")[0]||{}).getContext,L;m.corner=o,m.mimic=o,m.border=N,m.offset=g.offset,m.size=x,e.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){m.init()||m.destroy(),e.reposition()},"^style.tip.(height|width)$":function(){x={width:g.width,height:g.height},m.create(),m.update(),e.reposition()},"^content.title.text|style.(classes|widget)$":function(){b.tip&&b.tip.length&&m.update()}},r.extend(m,{init:function(){var e=D()&&(k||r.browser.msie);return e&&(m.create(),m.update(),E.unbind(C).bind("tooltipmove"+C,_)),e},create:function(){var e=x.width,t=x.height,n;b.tip&&b.tip.remove(),b.tip=r("<div />",{"class":"qtip-tip"}).css({width:e,height:t}).prependTo(E),k?r("<canvas />").appendTo(b.tip)[0].getContext("2d").save():(n=I("shape",'coordorigin="0,0"',"position:absolute;"),b.tip.html(n+n),r("*",b.tip).bind("click mousedown",function(e){e.stopPropagation()}))},update:function(e,t){var n=b.tip,f=n.children(),l=x.width,y=x.height,C=g.mimic,L=Math.round,A,_,D,H,q;e||(e=S.corner||m.corner),C===s?C=e:(C=new w.Corner(C),C.precedance=e.precedance,C.x==="inherit"?C.x=e.x:C.y==="inherit"?C.y=e.y:C.x===C.y&&(C[e.precedance]=e[e.precedance])),A=C.precedance,e.precedance===u?O():M(),b.tip.css({width:l=x.width,height:y=x.height}),B(e),T.border!=="transparent"?(N=P(e,o),g.border===0&&N>0&&(T.fill=T.border),m.border=N=g.border!==i?g.border:N):m.border=N=0,D=j(C,l,y),m.size=q=F(e),n.css(q).css("line-height",q.height+"px"),e.precedance===a?H=[L(C.x===h?N:C.x===d?q.width-l-N:(q.width-l)/2),L(C.y===c?q.height-y:0)]:H=[L(C.x===h?q.width-l:0),L(C.y===c?N:C.y===p?q.height-y-N:(q.height-y)/2)],k?(f.attr(q),_=f[0].getContext("2d"),_.restore(),_.save(),_.clearRect(0,0,3e3,3e3),_.fillStyle=T.fill,_.strokeStyle=T.border,_.lineWidth=N*2,_.lineJoin="miter",_.miterLimit=100,_.translate(H[0],H[1]),_.beginPath(),_.moveTo(D[0][0],D[0][1]),_.lineTo(D[1][0],D[1][1]),_.lineTo(D[2][0],D[2][1]),_.closePath(),N&&(E.css("background-clip")==="border-box"&&(_.strokeStyle=T.fill,_.stroke()),_.strokeStyle=T.border,_.stroke()),_.fill()):(D="m"+D[0][0]+","+D[0][1]+" l"+D[1][0]+","+D[1][1]+" "+D[2][0]+","+D[2][1]+" xe",H[2]=N&&/^(r|b)/i.test(e.string())?parseFloat(r.browser.version,10)===8?2:1:0,f.css({coordsize:l+N+" "+(y+N),antialias:""+(C.string().indexOf(v)>-1),left:H[0],top:H[1],width:l+N,height:y+N}).each(function(e){var t=r(this);t[t.prop?"prop":"attr"]({coordsize:l+N+" "+(y+N),path:D,fillcolor:T.fill,filled:!!e,stroked:!e}).toggle(!!N||!!e),!e&&t.html()===""&&t.html(I("stroke",'weight="'+N*2+'px" color="'+T.border+'" miterlimit="1000" joinstyle="miter"'))})),t!==s&&m.position(e)},position:function(e){var t=b.tip,n={},i=Math.max(0,g.offset),o,p,d;return g.corner===s||!t?s:(e=e||m.corner,o=e.precedance,p=F(e),d=[e.x,e.y],o===u&&d.reverse(),r.each(d,function(t,r){var s,u,d;r===v?(s=o===a?h:c,n[s]="50%",n["margin-"+s]=-Math.round(p[o===a?f:l]/2)+i):(s=P(e,r),u=P(e,r,b.content),d=H(e),n[r]=t?u:i+(d>s?d:-s))}),n[e[o]]-=p[o===u?f:l],t.css({top:"",bottom:"",left:"",right:"",margin:""}).css(n),n)},destroy:function(){b.tip&&b.tip.remove(),b.tip=!1,E.unbind(C)}}),m.init()}function I(n){function y(){m=r(v,f).not("[disabled]").map(function(){return typeof this.focus=="function"?this:null})}function b(e){m.length<1&&e.length?e.not("body").blur():m.first().focus()}function E(e){var t=r(e.target),n=t.closest(".qtip"),i;i=n.length<1?s:parseInt(n[0].style.zIndex,10)>parseInt(f[0].style.zIndex,10),!i&&r(e.target).closest(N)[0]!==f[0]&&b(t)}var o=this,u=n.options.show.modal,a=n.elements,f=a.tooltip,l="#qtip-overlay",c=".qtipmodal",h=c+n.id,p="is-modal-qtip",d=r(t.body),v=w.modal.focusable.join(","),m={},g;n.checks.modal={"^show.modal.(on|blur)$":function(){o.init(),a.overlay.toggle(f.is(":visible"))},"^content.text$":function(){y()}},r.extend(o,{init:function(){return u.on?(g=o.create(),f.attr(p,i).css("z-index",w.modal.zindex+r(N+"["+p+"]").length).unbind(c).unbind(h).bind("tooltipshow"+c+" tooltiphide"+c,function(e,t,n){var i=e.originalEvent;if(e.target===f[0])if(i&&e.type==="tooltiphide"&&/mouse(leave|enter)/.test(i.type)&&r(i.relatedTarget).closest(g[0]).length)try{e.preventDefault()}catch(s){}else(!i||i&&!i.solo)&&o[e.type.replace("tooltip","")](e,n)}).bind("tooltipfocus"+c,function(e){if(e.isDefaultPrevented()||e.target!==f[0])return;var t=r(N).filter("["+p+"]"),n=w.modal.zindex+t.length,i=parseInt(f[0].style.zIndex,10);g[0].style.zIndex=n-2,t.each(function(){this.style.zIndex>i&&(this.style.zIndex-=1)}),t.end().filter("."+k).qtip("blur",e.originalEvent),f.addClass(k)[0].style.zIndex=n;try{e.preventDefault()}catch(s){}}).bind("tooltiphide"+c,function(e){e.target===f[0]&&r("["+p+"]").filter(":visible").not(f).last().qtip("focus",e)}),u.escape&&r(t).unbind(h).bind("keydown"+h,function(e){e.keyCode===27&&f.hasClass(k)&&n.hide(e)}),u.blur&&a.overlay.unbind(h).bind("click"+h,function(e){f.hasClass(k)&&n.hide(e)}),y(),o):o},create:function(){function i(){g.css({height:n.height(),width:n.width()})}var t=r(l),n=r(e);return t.length?a.overlay=t.insertAfter(r(N).last()):(g=a.overlay=r("<div />",{id:l.substr(1),html:"<div></div>",mousedown:function(){return s}}).hide().insertAfter(r(N).last()),n.unbind(c).bind("resize"+c,i),i(),g)},toggle:function(e,t,n){if(e&&e.isDefaultPrevented())return o;var a=u.effect,l=t?"show":"hide",c=g.is(":visible"),v=r("["+p+"]").filter(":visible").not(f),m;return g||(g=o.create()),g.is(":animated")&&c===t&&g.data("toggleState")!==s||!t&&v.length?o:(t?(g.css({left:0,top:0}),g.toggleClass("blurs",u.blur),u.stealfocus!==s&&(d.bind("focusin"+h,E),b(r("body :focus")))):d.unbind("focusin"+h),g.stop(i,s).data("toggleState",t),r.isFunction(a)?a.call(g,t):a===s?g[l]():g.fadeTo(parseInt(n,10)||90,t?1:0,function(){t||r(this).hide()}),t||g.queue(function(e){g.css({left:"",top:""}).removeData("toggleState"),e()}),o)},show:function(e,t){return o.toggle(e,i,t)},hide:function(e,t){return o.toggle(e,s,t)},destroy:function(){var e=g;return e&&(e=r("["+p+"]").not(f).length<1,e?(a.overlay.remove(),r(t).unbind(c)):a.overlay.unbind(c+n.id),d.unbind("focusin"+h)),f.removeAttr(p).unbind(c)}}),o.init()}function q(n){var o=this,u=n.elements,a=n.options,c=u.tooltip,h=".ie6-"+n.id,p=r("select, object").length<1,d=0,v=s,m;n.checks.ie6={"^content|style$":function(e,t,n){redraw()}},r.extend(o,{init:function(){var n=r(e),s;p&&(u.bgiframe=r('<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>'),u.bgiframe.appendTo(c),c.bind("tooltipmove"+h,o.adjustBGIFrame)),m=r("<div/>",{id:"qtip-rcontainer"}).appendTo(t.body),o.redraw(),u.overlay&&!v&&(s=function(){u.overlay[0].style.top=n.scrollTop()+"px"},n.bind("scroll.qtip-ie6, resize.qtip-ie6",s),s(),u.overlay.addClass("qtipmodal-ie6fix"),v=i)},adjustBGIFrame:function(){var e=n.get("dimensions"),t=n.plugins.tip,r=u.tip,i,s;s=parseInt(c.css("border-left-width"),10)||0,s={left:-s,top:-s},t&&r&&(i=t.corner.precedance==="x"?["width","left"]:["height","top"],s[i[1]]-=r[i[0]]()),u.bgiframe.css(s).css(e)},redraw:function(){if(n.rendered<1||d)return o;var e=a.style,t=a.position.container,r,i,s,u;return d=1,e.height&&c.css(l,e.height),e.width?c.css(f,e.width):(c.css(f,"").appendTo(m),i=c.width(),i%2<1&&(i+=1),s=c.css("max-width")||"",u=c.css("min-width")||"",r=(s+u).indexOf("%")>-1?t.width()/100:0,s=(s.indexOf("%")>-1?r:1)*parseInt(s,10)||i,u=(u.indexOf("%")>-1?r:1)*parseInt(u,10)||0,i=s+u?Math.min(Math.max(i,u),s):i,c.css(f,Math.round(i)).appendTo(t)),d=0,o},destroy:function(){p&&u.bgiframe.remove(),c.unbind(h)}}),o.init()}var i=!0,s=!1,o=null,u="x",a="y",f="width",l="height",c="top",h="left",p="bottom",d="right",v="center",m="flip",g="flipinvert",y="shift",b,w,E,S="qtip",x={},T=["ui-widget","ui-tooltip"],N="div.qtip."+S,C=S+"-default",k=S+"-focus",L=S+"-hover",A="_replacedByqTip",O="oldtitle",M;b=r.fn.qtip=function(e,t,u){var a=(""+e).toLowerCase(),f=o,l=r.makeArray(arguments).slice(1),c=l[l.length-1],h=this[0]?r.data(this[0],"qtip"):o;if(!arguments.length&&h||a==="api")return h;if("string"==typeof e)return this.each(function(){var e=r.data(this,"qtip");if(!e)return i;c&&c.timeStamp&&(e.cache.event=c);if(a!=="option"&&a!=="options"||!t)e[a]&&e[a].apply(e[a],l);else{if(!r.isPlainObject(t)&&u===n)return f=e.get(t),s;e.set(t,u)}}),f!==o?f:this;if("object"==typeof e||!arguments.length)return h=D(r.extend(i,{},e)),b.bind.call(this,h,c)},b.bind=function(e,t){return this.each(function(o){function p(e){function t(){c.render(typeof e=="object"||u.show.ready),a.show.add(a.hide).unbind(l)}if(c.cache.disabled)return s;c.cache.event=r.extend({},e),c.cache.target=e?r(e.target):[n],u.show.delay>0?(clearTimeout(c.timers.show),c.timers.show=setTimeout(t,u.show.delay),f.show!==f.hide&&a.hide.bind(f.hide,function(){clearTimeout(c.timers.show)})):t()}var u,a,f,l,c,h;h=r.isArray(e.id)?e.id[o]:e.id,h=!h||h===s||h.length<1||x[h]?b.nextid++:x[h]=h,l=".qtip-"+h+"-create",c=H.call(this,h,e);if(c===s)return i;u=c.options,r.each(w,function(){this.initialize==="initialize"&&this(c)}),a={show:u.show.target,hide:u.hide.target},f={show:r.trim(""+u.show.event).replace(/ /g,l+" ")+l,hide:r.trim(""+u.hide.event).replace(/ /g,l+" ")+l},/mouse(over|enter)/i.test(f.show)&&!/mouse(out|leave)/i.test(f.hide)&&(f.hide+=" mouseleave"+l),a.show.bind("mousemove"+l,function(e){_(e),c.cache.onTarget=i}),a.show.bind(f.show,p),(u.show.ready||u.prerender)&&p(t)}).attr("data-hasqtip",i)},w=b.plugins={Corner:function(e){e=(""+e).replace(/([A-Z])/," $1").replace(/middle/gi,v).toLowerCase(),this.x=(e.match(/left|right/i)||e.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(e.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var t=e.charAt(0);this.precedance=t==="t"||t==="b"?a:u,this.string=function(){return this.precedance===a?this.y+this.x:this.x+this.y},this.abbrev=function(){var e=this.x.substr(0,1),t=this.y.substr(0,1);return e===t?e:this.precedance===a?t+e:e+t},this.invertx=function(e){this.x=this.x===h?d:this.x===d?h:e||this.x},this.inverty=function(e){this.y=this.y===c?p:this.y===p?c:e||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(e,n){function c(e,t){i.left+=t*e.scrollLeft(),i.top+=t*e.scrollTop()}var i=e.offset(),s=e.closest("body"),o=r.browser.msie&&t.compatMode!=="CSS1Compat",u=n,a,f,l;if(u){do u.css("position")!=="static"&&(f=u.position(),i.left-=f.left+(parseInt(u.css("borderLeftWidth"),10)||0)+(parseInt(u.css("marginLeft"),10)||0),i.top-=f.top+(parseInt(u.css("borderTopWidth"),10)||0)+(parseInt(u.css("marginTop"),10)||0),!a&&(l=u.css("overflow"))!=="hidden"&&l!=="visible"&&(a=u));while((u=r(u[0].offsetParent)).length);(a&&a[0]!==s[0]||o)&&c(a||s,1)}return i},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||s,fn:{attr:function(e,t){if(this.length){var n=this[0],i="title",s=r.data(n,"qtip");if(e===i&&s&&"object"==typeof s&&s.options.suppress)return arguments.length<2?r.attr(n,O):(s&&s.options.content.attr===i&&s.cache.attr&&s.set("content.text",t),this.attr(O,t))}return r.fn["attr"+A].apply(this,arguments)},clone:function(e){var t=r([]),n="title",i=r.fn["clone"+A].apply(this,arguments);return e||i.filter("["+O+"]").attr("title",function(){return r.attr(this,O)}).removeAttr(O),i}}},r.each(w.fn,function(e,t){if(!t||r.fn[e+A])return i;var n=r.fn[e+A]=r.fn[e];r.fn[e]=function(){return t.apply(this,arguments)||n.apply(this,arguments)}}),r.ui||(r["cleanData"+A]=r.cleanData,r.cleanData=function(e){for(var t=0,i;(i=e[t])!==n;t++)try{r(i).triggerHandler("removeqtip")}catch(s){}r["cleanData"+A](e)}),b.version="2.0.0-nightly-15f5c6bc20",b.nextid=0,b.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),b.zindex=15e3,b.defaults={prerender:s,id:s,overwrite:i,suppress:i,content:{text:i,attr:"title",deferred:s,title:{text:s,button:s}},position:{my:"top left",at:"bottom right",target:s,container:s,viewport:s,adjust:{x:0,y:0,mouse:i,resize:i,method:"flipinvert flipinvert"},effect:function(e,t,n){r(this).animate(t,{duration:200,queue:s})}},show:{target:s,event:"mouseenter",effect:i,delay:90,solo:s,ready:s,autofocus:s},hide:{target:s,event:"mouseleave",effect:i,delay:0,fixed:s,inactive:s,leave:"window",distance:s},style:{classes:"",widget:s,width:s,height:s,def:i},events:{render:o,move:o,show:o,hide:o,toggle:o,visible:o,hidden:o,focus:o,blur:o}},w.svg=function(e,n,i,s){var o=r(t),u=n[0],a={width:0,height:0,position:{top:1e10,left:1e10}},f,l,c,h,p;while(!u.getBBox)u=u.parentNode;if(u.getBBox&&u.parentNode){f=u.getBBox(),l=u.getScreenCTM(),c=u.farthestViewportElement||u;if(!c.createSVGPoint)return a;h=c.createSVGPoint(),h.x=f.x,h.y=f.y,p=h.matrixTransform(l),a.position.left=p.x,a.position.top=p.y,h.x+=f.width,h.y+=f.height,p=h.matrixTransform(l),a.width=p.x-a.position.left,a.height=p.y-a.position.top,a.position.left+=o.scrollLeft(),a.position.top+=o.scrollTop()}return a},w.ajax=function(e){var t=e.plugins.ajax;return"object"==typeof t?t:e.plugins.ajax=new B(e)},w.ajax.initialize="render",w.ajax.sanitize=function(e){var t=e.content,n;t&&"ajax"in t&&(n=t.ajax,typeof n!="object"&&(n=e.content.ajax={url:n}),"boolean"!=typeof n.once&&n.once&&(n.once=!!n.once))},r.extend(i,b.defaults,{content:{ajax:{loading:i,once:i}}}),w.tip=function(e){var t=e.plugins.tip;return"object"==typeof t?t:e.plugins.tip=new F(e)},w.tip.initialize="render",w.tip.sanitize=function(e){var t=e.style,n;t&&"tip"in t&&(n=e.style.tip,typeof n!="object"&&(e.style.tip={corner:n}),/string|boolean/i.test(typeof n.corner)||(n.corner=i),typeof n.width!="number"&&delete n.width,typeof n.height!="number"&&delete n.height,typeof n.border!="number"&&n.border!==i&&delete n.border,typeof n.offset!="number"&&delete n.offset)},r.extend(i,b.defaults,{style:{tip:{corner:i,mimic:s,width:6,height:6,border:i,offset:0}}}),w.modal=function(e){var t=e.plugins.modal;return"object"==typeof t?t:e.plugins.modal=new I(e)},w.modal.initialize="render",w.modal.sanitize=function(e){e.show&&(typeof e.show.modal!="object"?e.show.modal={on:!!e.show.modal}:typeof e.show.modal.on=="undefined"&&(e.show.modal.on=i))},w.modal.zindex=b.zindex-200,w.modal.focusable=["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"],r.extend(i,b.defaults,{show:{modal:{on:s,effect:i,blur:i,stealfocus:i,escape:i}}}),w.viewport=function(n,r,i,s,o,m,b){function j(e,t,n,i,s,o,u,a,f){var l=r[s],c=x[e],h=T[e],p=n===y,d=-O.offset[s]+A.offset[s]+A["scroll"+s],m=c===s?f:c===o?-f:-f/2,b=h===s?a:h===o?-a:-a/2,w=_&&_.size?_.size[u]||0:0,E=_&&_.corner&&_.corner.precedance===e&&!p?w:0,S=d-l+E,N=l+f-A[u]-d+E,C=m-(x.precedance===e||c===x[t]?b:0)-(h===v?a/2:0);return p?(E=_&&_.corner&&_.corner.precedance===t?w:0,C=(c===s?1:-1)*m-E,r[s]+=S>0?S:N>0?-N:0,r[s]=Math.max(-O.offset[s]+A.offset[s]+(E&&_.corner[e]===v?_.offset:0),l-C,Math.min(Math.max(-O.offset[s]+A.offset[s]+A[u],l+C),r[s]))):(i*=n===g?2:0,S>0&&(c!==s||N>0)?(r[s]-=C+i,H["invert"+e](s)):N>0&&(c!==o||S>0)&&(r[s]-=(c===v?-C:C)+i,H["invert"+e](o)),r[s]<d&&-r[s]>N&&(r[s]=l,H=x.clone())),r[s]-l}var w=i.target,E=n.elements.tooltip,x=i.my,T=i.at,N=i.adjust,C=N.method.split(" "),k=C[0],L=C[1]||C[0],A=i.viewport,O=i.container,M=n.cache,_=n.plugins.tip,D={left:0,top:0},P,H,B;if(!A.jquery||w[0]===e||w[0]===t.body||N.method==="none")return D;P=E.css("position")==="fixed",A={elem:A,height:A[(A[0]===e?"h":"outerH")+"eight"](),width:A[(A[0]===e?"w":"outerW")+"idth"](),scrollleft:P?0:A.scrollLeft(),scrolltop:P?0:A.scrollTop(),offset:A.offset()||{left:0,top:0}},O={elem:O,scrollLeft:O.scrollLeft(),scrollTop:O.scrollTop(),offset:O.offset()||{left:0,top:0}};if(k!=="shift"||L!=="shift")H=x.clone();return D={left:k!=="none"?j(u,a,k,N.x,h,d,f,s,m):0,top:L!=="none"?j(a,u,L,N.y,c,p,l,o,b):0},H&&M.lastClass!==(B=S+"-pos-"+H.abbrev())&&E.removeClass(n.cache.lastClass).addClass(n.cache.lastClass=B),D},w.imagemap=function(e,t,n,i){function E(e,t,n){var r=0,i=1,s=1,o=0,u=0,a=e.width,f=e.height;while(a>0&&f>0&&i>0&&s>0){a=Math.floor(a/2),f=Math.floor(f/2),n.x===h?i=a:n.x===d?i=e.width-a:i+=Math.floor(a/2),n.y===c?s=f:n.y===p?s=e.height-f:s+=Math.floor(f/2),r=t.length;while(r--){if(t.length<2)break;o=t[r][0]-e.position.left,u=t[r][1]-e.position.top,(n.x===h&&o>=i||n.x===d&&o<=i||n.x===v&&(o<i||o>e.width-i)||n.y===c&&u>=s||n.y===p&&u<=s||n.y===v&&(u<s||u>e.height-s))&&t.splice(r,1)}}return{left:t[0][0],top:t[0][1]}}t.jquery||(t=r(t));var s=e.cache.areas={},o=(t[0].shape||t.attr("shape")).toLowerCase(),u=t[0].coords||t.attr("coords"),a=u.split(","),f=[],l=r('img[usemap="#'+t.parent("map").attr("name")+'"]'),m=l.offset(),g={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10}},y=0,b=0,w;m.left+=Math.ceil((l.outerWidth()-l.width())/2),m.top+=Math.ceil((l.outerHeight()-l.height())/2);if(o==="poly"){y=a.length;while(y--)b=[parseInt(a[--y],10),parseInt(a[y+1],10)],b[0]>g.position.right&&(g.position.right=b[0]),b[0]<g.position.left&&(g.position.left=b[0]),b[1]>g.position.bottom&&(g.position.bottom=b[1]),b[1]<g.position.top&&(g.position.top=b[1]),f.push(b)}else{y=-1;while(y++<a.length)f.push(parseInt(a[y],10))}switch(o){case"rect":g={width:Math.abs(f[2]-f[0]),height:Math.abs(f[3]-f[1]),position:{left:Math.min(f[0],f[2]),top:Math.min(f[1],f[3])}};break;case"circle":g={width:f[2]+2,height:f[2]+2,position:{left:f[0],top:f[1]}};break;case"poly":g.width=Math.abs(g.position.right-g.position.left),g.height=Math.abs(g.position.bottom-g.position.top),n.abbrev()==="c"?g.position={left:g.position.left+g.width/2,top:g.position.top+g.height/2}:(s[n+u]||(g.position=E(g,f.slice(),n),i&&(i[0]==="flip"||i[1]==="flip")&&(g.offset=E(g,f.slice(),{x:n.x===h?d:n.x===d?h:v,y:n.y===c?p:n.y===p?c:v}),g.offset.left-=g.position.left,g.offset.top-=g.position.top),s[n+u]=g),g=s[n+u]),g.width=g.height=0}return g.position.left+=m.left,g.position.top+=m.top,g},w.ie6=function(e){var t=r.browser,n=e.plugins.ie6;return!t.msie||(""+t.version).charAt(0)!=="6"?s:"object"==typeof n?n:e.plugins.ie6=new q(e)},w.ie6.initialize="render"})})(window,document);
1
+ /*! qtip2 v2.0.0 | http://craigsworks.com/projects/qtip2/ | Licensed MIT, GPL */
2
  (function(e,t,n){(function(e){"use strict";typeof define=="function"&&define.amd?define(["jquery"],e):jQuery&&!jQuery.fn.qtip&&e(jQuery)})(function(r){function _(n){E={pageX:n.pageX,pageY:n.pageY,type:"mousemove",scrollX:e.pageXOffset||t.body.scrollLeft||t.documentElement.scrollLeft,scrollY:e.pageYOffset||t.body.scrollTop||t.documentElement.scrollTop}}function D(e){var t=function(e){return e===o||"object"!=typeof e},n=function(e){return!r.isFunction(e)&&(!e&&!e.attr||e.length<1||"object"==typeof e&&!e.jquery&&!e.then)};if(!e||"object"!=typeof e)return s;t(e.metadata)&&(e.metadata={type:e.metadata});if("content"in e){if(t(e.content)||e.content.jquery)e.content={text:e.content};n(e.content.text||s)&&(e.content.text=s),"title"in e.content&&(t(e.content.title)&&(e.content.title={text:e.content.title}),n(e.content.title.text||s)&&(e.content.title.text=s))}return"position"in e&&t(e.position)&&(e.position={my:e.position,at:e.position}),"show"in e&&t(e.show)&&(e.show=e.show.jquery?{target:e.show}:{event:e.show}),"hide"in e&&t(e.hide)&&(e.hide=e.hide.jquery?{target:e.hide}:{event:e.hide}),"style"in e&&t(e.style)&&(e.style={classes:e.style}),r.each(w,function(){this.sanitize&&this.sanitize(e)}),e}function P(u,a,f,l){function q(e){var t=0,n,r=a,i=e.split(".");while(r=r[i[t++]])t<i.length&&(n=r);return[n||a,i.pop()]}function R(e){return T.concat("").join(e?"-"+e+" ":" ")}function U(){var e=a.style.widget,t=H.hasClass(j);H.removeClass(j),j=e?"ui-state-disabled":"qtip-disabled",H.toggleClass(j,t),H.toggleClass("ui-helper-reset "+R(),e).toggleClass(C,a.style.def&&!e),F.content&&F.content.toggleClass(R("content"),e),F.titlebar&&F.titlebar.toggleClass(R("header"),e),F.button&&F.button.toggleClass(S+"-icon",!e)}function z(e){F.title&&(F.titlebar.remove(),F.titlebar=F.title=F.button=o,e!==s&&m.reposition())}function W(){var e=a.content.title.button,t=typeof e=="string",n=t?e:"Close tooltip";F.button&&F.button.remove(),e.jquery?F.button=e:F.button=r("<a />",{"class":"qtip-close "+(a.style.widget?"":S+"-icon"),title:n,"aria-label":n}).prepend(r("<span />",{"class":"ui-icon ui-icon-close",html:"&times;"})),F.button.appendTo(F.titlebar||H).attr("role","button").click(function(e){return H.hasClass(j)||m.hide(e),s})}function X(){var e=y+"-title";F.titlebar&&z(),F.titlebar=r("<div />",{"class":S+"-titlebar "+(a.style.widget?R("header"):"")}).append(F.title=r("<div />",{id:e,"class":S+"-title","aria-atomic":i})).insertBefore(F.content).delegate(".qtip-close","mousedown keydown mouseup keyup mouseout",function(e){r(this).toggleClass("ui-state-active ui-state-focus",e.type.substr(-4)==="down")}).delegate(".qtip-close","mouseover mouseout",function(e){r(this).toggleClass("ui-state-hover",e.type==="mouseover")}),a.content.title.button&&W()}function V(e){var t=F.button;if(!m.rendered)return s;e?W():t.remove()}function J(e,t){var n=F.title;if(!m.rendered||!e)return s;r.isFunction(e)&&(e=e.call(u,I.event,m));if(e===s||!e&&e!=="")return z(s);e.jquery&&e.length>0?n.empty().append(e.css({display:"block"})):n.html(e),t!==s&&m.rendered&&H[0].offsetWidth>0&&m.reposition(I.event)}function K(e){e&&r.isFunction(e.done)&&e.done(function(e){Q(e,null,s)})}function Q(e,t,i){function f(e){function a(n){n&&(delete u[n.src],clearTimeout(m.timers.img[n.src]),r(n).unbind(B)),r.isEmptyObject(u)&&(t!==s&&m.reposition(I.event),e())}var i,u={};if((i=o.find("img[src]:not([height]):not([width])")).length===0)return a();i.each(function(e,t){if(u[t.src]!==n)return;var i=0,s=3;(function o(){if(t.height||t.width||i>s)return a(t);i+=1,m.timers.img[t.src]=setTimeout(o,700)})(),r(t).bind("error"+B+" load"+B,function(){a(this)}),u[t.src]=t})}var o=F.content;return!m.rendered||!e?s:(r.isFunction(e)&&(e=e.call(u,I.event,m)||""),i!==s&&K(a.content.deferred),e.jquery&&e.length>0?o.empty().append(e.css({display:"block"})):o.html(e),m.rendered<0?H.queue("fx",f):(P=0,f(r.noop)),m)}function G(){function h(e){if(H.hasClass(j))return s;clearTimeout(m.timers.show),clearTimeout(m.timers.hide);var t=function(){m.toggle(i,e)};a.show.delay>0?m.timers.show=setTimeout(t,a.show.delay):t()}function p(e){if(H.hasClass(j)||A||P)return s;var t=r(e.relatedTarget||e.target),i=t.closest(N)[0]===H[0],u=t[0]===o.show[0];clearTimeout(m.timers.show),clearTimeout(m.timers.hide);if(n.target==="mouse"&&i||a.hide.fixed&&/mouse(out|leave|move)/.test(e.type)&&(i||u)){try{e.preventDefault(),e.stopImmediatePropagation()}catch(f){}return}a.hide.delay>0?m.timers.hide=setTimeout(function(){m.hide(e)},a.hide.delay):m.hide(e)}function d(e){if(H.hasClass(j))return s;clearTimeout(m.timers.inactive),m.timers.inactive=setTimeout(function(){m.hide(e)},a.hide.inactive)}function v(e){m.rendered&&H[0].offsetWidth>0&&m.reposition(e)}var n=a.position,o={show:a.show.target,hide:a.hide.target,viewport:r(n.viewport),document:r(t),body:r(t.body),window:r(e)},l={show:r.trim(""+a.show.event).split(" "),hide:r.trim(""+a.hide.event).split(" ")},c=r.browser.msie&&parseInt(r.browser.version,10)===6;H.bind("mouseenter"+B+" mouseleave"+B,function(e){var t=e.type==="mouseenter";t&&m.focus(e),H.toggleClass(L,t)}),/mouse(out|leave)/i.test(a.hide.event)&&a.hide.leave==="window"&&o.window.bind("mouseout"+B+" blur"+B,function(e){!/select|option/.test(e.target.nodeName)&&!e.relatedTarget&&m.hide(e)}),a.hide.fixed?(o.hide=o.hide.add(H),H.bind("mouseover"+B,function(){H.hasClass(j)||clearTimeout(m.timers.hide)})):/mouse(over|enter)/i.test(a.show.event)&&o.hide.bind("mouseleave"+B,function(e){clearTimeout(m.timers.show)}),(""+a.hide.event).indexOf("unfocus")>-1&&n.container.closest("html").bind("mousedown"+B+" touchstart"+B,function(e){var t=r(e.target),n=m.rendered&&!H.hasClass(j)&&H[0].offsetWidth>0,i=t.parents(N).filter(H[0]).length>0;t[0]!==u[0]&&t[0]!==H[0]&&!i&&!u.has(t[0]).length&&!t.attr("disabled")&&m.hide(e)}),"number"==typeof a.hide.inactive&&(o.show.bind("qtip-"+f+"-inactive",d),r.each(b.inactiveEvents,function(e,t){o.hide.add(F.tooltip).bind(t+B+"-inactive",d)})),r.each(l.hide,function(e,t){var n=r.inArray(t,l.show),i=r(o.hide);n>-1&&i.add(o.show).length===i.length||t==="unfocus"?(o.show.bind(t+B,function(e){H[0].offsetWidth>0?p(e):h(e)}),delete l.show[n]):o.hide.bind(t+B,p)}),r.each(l.show,function(e,t){o.show.bind(t+B,h)}),"number"==typeof a.hide.distance&&o.show.add(H).bind("mousemove"+B,function(e){var t=I.origin||{},n=a.hide.distance,r=Math.abs;(r(e.pageX-t.pageX)>=n||r(e.pageY-t.pageY)>=n)&&m.hide(e)}),n.target==="mouse"&&(o.show.bind("mousemove"+B,_),n.adjust.mouse&&(a.hide.event&&(H.bind("mouseleave"+B,function(e){(e.relatedTarget||e.target)!==o.show[0]&&m.hide(e)}),F.target.bind("mouseenter"+B+" mouseleave"+B,function(e){I.onTarget=e.type==="mouseenter"})),o.document.bind("mousemove"+B,function(e){m.rendered&&I.onTarget&&!H.hasClass(j)&&H[0].offsetWidth>0&&m.reposition(e||E)}))),(n.adjust.resize||o.viewport.length)&&(r.event.special.resize?o.viewport:o.window).bind("resize"+B,v),o.window.bind("scroll"+B,v)}function Y(){var n=[a.show.target[0],a.hide.target[0],m.rendered&&F.tooltip[0],a.position.container[0],a.position.viewport[0],a.position.container.closest("html")[0],e,t];m.rendered?r([]).pushStack(r.grep(n,function(e){return typeof e=="object"})).unbind(B):a.show.target.unbind(B+"-create")}var m=this,g=t.body,y=S+"-"+f,A=0,P=0,H=r(),B=".qtip-"+f,j="qtip-disabled",F,I;m.id=f,m.rendered=s,m.destroyed=s,m.elements=F={target:u},m.timers={img:{}},m.options=a,m.checks={},m.plugins={},m.cache=I={event:{},target:r(),disabled:s,attr:l,onTarget:s,lastClass:""},m.checks.builtin={"^id$":function(e,t,n){var o=n===i?b.nextid:n,u=S+"-"+o;o!==s&&o.length>0&&!r("#"+u).length&&(H[0].id=u,F.content[0].id=u+"-content",F.title[0].id=u+"-title")},"^content.text$":function(e,t,n){Q(a.content.text)},"^content.deferred$":function(e,t,n){K(a.content.deferred)},"^content.title.text$":function(e,t,n){if(!n)return z();!F.title&&n&&X(),J(n)},"^content.title.button$":function(e,t,n){V(n)},"^position.(my|at)$":function(e,t,n){"string"==typeof n&&(e[t]=new w.Corner(n))},"^position.container$":function(e,t,n){m.rendered&&H.appendTo(n)},"^show.ready$":function(){m.rendered?m.toggle(i):m.render(1)},"^style.classes$":function(e,t,n){H.attr("class",S+" qtip "+n)},"^style.width|height":function(e,t,n){H.css(t,n)},"^style.widget|content.title":U,"^events.(render|show|move|hide|focus|blur)$":function(e,t,n){H[(r.isFunction(n)?"":"un")+"bind"]("tooltip"+t,n)},"^(show|hide|position).(event|target|fixed|inactive|leave|distance|viewport|adjust)":function(){var e=a.position;H.attr("tracking",e.target==="mouse"&&e.adjust.mouse),Y(),G()}},r.extend(m,{_triggerEvent:function(e,t,n){var i=r.Event("tooltip"+e);return i.originalEvent=(n?r.extend({},n):o)||I.event||o,H.trigger(i,[m].concat(t||[])),!i.isDefaultPrevented()},render:function(e){if(m.rendered)return m;var t=a.content.text,n=a.content.title,o=a.position;return r.attr(u[0],"aria-describedby",y),H=F.tooltip=r("<div/>",{id:y,"class":[S,C,a.style.classes,S+"-pos-"+a.position.my.abbrev()].join(" "),width:a.style.width||"",height:a.style.height||"",tracking:o.target==="mouse"&&o.adjust.mouse,role:"alert","aria-live":"polite","aria-atomic":s,"aria-describedby":y+"-content","aria-hidden":i}).toggleClass(j,I.disabled).data("qtip",m).appendTo(a.position.container).append(F.content=r("<div />",{"class":S+"-content",id:y+"-content","aria-atomic":i})),m.rendered=-1,A=1,n.text?(X(),r.isFunction(n.text)||J(n.text,s)):n.button&&W(),(!r.isFunction(t)||t.then)&&Q(t,s),m.rendered=i,U(),r.each(a.events,function(e,t){r.isFunction(t)&&H.bind(e==="toggle"?"tooltipshow tooltiphide":"tooltip"+e,t)}),r.each(w,function(){this.initialize==="render"&&this(m)}),G(),H.queue("fx",function(t){m._triggerEvent("render"),A=0,(a.show.ready||e)&&m.toggle(i,I.event,s),t()}),m},get:function(e){var t,n;switch(e.toLowerCase()){case"dimensions":t={height:H.outerHeight(s),width:H.outerWidth(s)};break;case"offset":t=w.offset(H,a.position.container);break;default:n=q(e.toLowerCase()),t=n[0][n[1]],t=t.precedance?t.string():t}return t},set:function(e,t){function h(e,t){var n,r,i;for(n in l)for(r in l[n])if(i=(new RegExp(r,"i")).exec(e))t.push(i),l[n][r].apply(m,t)}var n=/^position\.(my|at|adjust|target|container)|style|content|show\.ready/i,u=/^content\.(title|attr)|style/i,f=s,l=m.checks,c;return"string"==typeof e?(c=e,e={},e[c]=t):e=r.extend(i,{},e),r.each(e,function(t,i){var s=q(t.toLowerCase()),o;o=s[0][s[1]],s[0][s[1]]="object"==typeof i&&i.nodeType?r(i):i,e[t]=[s[0],s[1],i,o],f=n.test(t)||f}),D(a),A=1,r.each(e,h),A=0,m.rendered&&H[0].offsetWidth>0&&f&&m.reposition(a.position.target==="mouse"?o:I.event),m},toggle:function(e,n){function b(){e?(r.browser.msie&&H[0].style.removeAttribute("filter"),H.css("overflow",""),"string"==typeof u.autofocus&&r(u.autofocus,H).focus(),u.target.trigger("qtip-"+f+"-inactive")):H.css({display:"",visibility:"",opacity:"",left:"",top:""}),m._triggerEvent(e?"visible":"hidden")}if(n){if(/over|enter/.test(n.type)&&/out|leave/.test(I.event.type)&&a.show.target.add(n.target).length===a.show.target.length&&H.has(n.relatedTarget).length)return m;I.event=r.extend({},n)}if(!m.rendered)return e?m.render(1):m;var o=e?"show":"hide",u=a[o],l=a[e?"hide":"show"],c=a.position,h=a.content,p=H[0].offsetWidth>0,d=e||u.target.length===1,v=!n||u.target.length<2||I.target[0]===n.target,g,y;return(typeof e).search("boolean|number")&&(e=!p),!H.is(":animated")&&p===e&&v?m:m._triggerEvent(o,[90])?(r.attr(H[0],"aria-hidden",!e),e?(I.origin=r.extend({},E),m.focus(n),r.isFunction(h.text)&&Q(h.text,s),r.isFunction(h.title.text)&&J(h.title.text,s),!M&&c.target==="mouse"&&c.adjust.mouse&&(r(t).bind("mousemove.qtip",_),M=i),m.reposition(n,arguments[2]),!u.solo||r(N,u.solo).not(H).qtip("hide",r.Event("tooltipsolo"))):(clearTimeout(m.timers.show),delete I.origin,M&&!r(N+'[tracking="true"]:visible',u.solo).not(H).length&&(r(t).unbind("mousemove.qtip"),M=s),m.blur(n)),u.effect===s||d===s?(H[o](),b.call(H)):r.isFunction(u.effect)?(H.stop(1,1),u.effect.call(H,m),H.queue("fx",function(e){b(),e()})):H.fadeTo(90,e?1:0,b),e&&u.target.trigger("qtip-"+f+"-inactive"),m):m},show:function(e){return m.toggle(i,e)},hide:function(e){return m.toggle(s,e)},focus:function(e){if(!m.rendered)return m;var t=r(N),n=parseInt(H[0].style.zIndex,10),i=b.zindex+t.length,s=r.extend({},e),o;return H.hasClass(k)||m._triggerEvent("focus",[i],s)&&(n!==i&&(t.each(function(){this.style.zIndex>n&&(this.style.zIndex=this.style.zIndex-1)}),t.filter("."+k).qtip("blur",s)),H.addClass(k)[0].style.zIndex=i),m},blur:function(e){return H.removeClass(k),m._triggerEvent("blur",[H.css("zIndex")],e),m},reposition:function(n,i){if(!m.rendered||A)return m;A=1;var o=a.position.target,u=a.position,f=u.my,l=u.at,g=u.adjust,y=g.method.split(" "),b=H.outerWidth(s),S=H.outerHeight(s),x=0,T=0,N=H.css("position"),C=u.viewport,k={left:0,top:0},L=u.container,O=H[0].offsetWidth>0,M=n&&n.type==="scroll",_=r(e),D,P;if(r.isArray(o)&&o.length===2)l={x:h,y:c},k={left:o[0],top:o[1]};else if(o==="mouse"&&(n&&n.pageX||I.event.pageX))l={x:h,y:c},n=E&&E.pageX&&(g.mouse||!n||!n.pageX)?{pageX:E.pageX,pageY:E.pageY}:(!n||n.type!=="resize"&&n.type!=="scroll"?n&&n.pageX&&n.type==="mousemove"?n:!g.mouse&&I.origin&&I.origin.pageX&&a.show.distance?I.origin:n:I.event)||n||I.event||E||{},N!=="static"&&(k=L.offset()),k={left:n.pageX-k.left,top:n.pageY-k.top},g.mouse&&M&&(k.left-=E.scrollX-_.scrollLeft(),k.top-=E.scrollY-_.scrollTop());else{o==="event"&&n&&n.target&&n.type!=="scroll"&&n.type!=="resize"?I.target=r(n.target):o!=="event"&&(I.target=r(o.jquery?o:F.target)),o=I.target,o=r(o).eq(0);if(o.length===0)return m;o[0]===t||o[0]===e?(x=w.iOS?e.innerWidth:o.width(),T=w.iOS?e.innerHeight:o.height(),o[0]===e&&(k={top:(C||o).scrollTop(),left:(C||o).scrollLeft()})):w.imagemap&&o.is("area")?D=w.imagemap(m,o,l,w.viewport?y:s):w.svg&&o[0].ownerSVGElement?D=w.svg(m,o,l,w.viewport?y:s):(x=o.outerWidth(s),T=o.outerHeight(s),k=w.offset(o,L)),D&&(x=D.width,T=D.height,P=D.offset,k=D.position);if(w.iOS>3.1&&w.iOS<4.1||w.iOS>=4.3&&w.iOS<4.33||!w.iOS&&N==="fixed")k.left-=_.scrollLeft(),k.top-=_.scrollTop();k.left+=l.x===d?x:l.x===v?x/2:0,k.top+=l.y===p?T:l.y===v?T/2:0}return k.left+=g.x+(f.x===d?-b:f.x===v?-b/2:0),k.top+=g.y+(f.y===p?-S:f.y===v?-S/2:0),w.viewport?(k.adjusted=w.viewport(m,k,u,x,T,b,S),P&&k.adjusted.left&&(k.left+=P.left),P&&k.adjusted.top&&(k.top+=P.top)):k.adjusted={left:0,top:0},m._triggerEvent("move",[k,C.elem||C],n)?(delete k.adjusted,i===s||!O||isNaN(k.left)||isNaN(k.top)||o==="mouse"||!r.isFunction(u.effect)?H.css(k):r.isFunction(u.effect)&&(u.effect.call(H,m,r.extend({},k)),H.queue(function(e){r(this).css({opacity:"",height:""}),r.browser.msie&&this.style.removeAttribute("filter"),e()})),A=0,m):m},disable:function(e){return"boolean"!=typeof e&&(e=!H.hasClass(j)&&!I.disabled),m.rendered?(H.toggleClass(j,e),r.attr(H[0],"aria-disabled",e)):I.disabled=!!e,m},enable:function(){return m.disable(s)},destroy:function(){var e=u[0],t=r.attr(e,O),n=u.data("qtip");m.destroyed=i,m.rendered&&(H.stop(1,0).remove(),r.each(m.plugins,function(){this.destroy&&this.destroy()})),clearTimeout(m.timers.show),clearTimeout(m.timers.hide),Y();if(!n||m===n)r.removeData(e,"qtip"),a.suppress&&t&&(r.attr(e,"title",t),u.removeAttr(O)),u.removeAttr("aria-describedby");return u.unbind(".qtip-"+f),delete x[m.id],u}})}function H(e,n){var u,a,f,l,c,h=r(this),p=r(t.body),d=this===t?p:h,v=h.metadata?h.metadata(n.metadata):o,m=n.metadata.type==="html5"&&v?v[n.metadata.name]:o,g=h.data(n.metadata.name||"qtipopts");try{g=typeof g=="string"?r.parseJSON(g):g}catch(y){}l=r.extend(i,{},b.defaults,n,typeof g=="object"?D(g):o,D(m||v)),a=l.position,l.id=e;if("boolean"==typeof l.content.text){f=h.attr(l.content.attr);if(l.content.attr===s||!f)return s;l.content.text=f}a.container.length||(a.container=p),a.target===s&&(a.target=d),l.show.target===s&&(l.show.target=d),l.show.solo===i&&(l.show.solo=a.container.closest("body")),l.hide.target===s&&(l.hide.target=d),l.position.viewport===i&&(l.position.viewport=a.container),a.container=a.container.eq(0),a.at=new w.Corner(a.at),a.my=new w.Corner(a.my);if(r.data(this,"qtip"))if(l.overwrite)h.qtip("destroy");else if(l.overwrite===s)return s;return l.suppress&&(c=r.attr(this,"title"))&&r(this).removeAttr("title").attr(O,c).attr("title",""),u=new P(h,l,e,!!f),r.data(this,"qtip",u),h.bind("remove.qtip-"+e+" removeqtip.qtip-"+e,function(){u.destroy()}),u}function B(e){var t=this,n=e.elements.tooltip,o=e.options.content.ajax,u=b.defaults.content.ajax,a=".qtip-ajax",f=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,l=i,c=s,h;e.checks.ajax={"^content.ajax":function(e,r,i){r==="ajax"&&(o=i),r==="once"?t.init():o&&o.url?t.load():n.unbind(a)}},r.extend(t,{init:function(){return o&&o.url&&n.unbind(a)[o.once?"one":"bind"]("tooltipshow"+a,t.load),t},load:function(n){function g(){var t;if(e.destroyed)return;l=s,v&&(c=i,e.show(n.originalEvent)),(t=u.complete||o.complete)&&r.isFunction(t)&&t.apply(o.context||e,arguments)}function y(t,n,i){var s;if(e.destroyed)return;d&&"string"==typeof t&&(t=r("<div/>").append(t.replace(f,"")).find(d)),(s=u.success||o.success)&&r.isFunction(s)?s.call(o.context||e,t,n,i):e.set("content.text",t)}function b(t,n,r){if(e.destroyed||t.status===0)return;e.set("content.text",n+": "+r)}if(c){c=s;return}var a=o.url.lastIndexOf(" "),p=o.url,d,v=!o.loading&&l;if(v)try{n.preventDefault()}catch(m){}else if(n&&n.isDefaultPrevented())return t;h&&h.abort&&h.abort(),a>-1&&(d=p.substr(a),p=p.substr(0,a)),h=r.ajax(r.extend({error:u.error||b,context:e},o,{url:p,success:y,complete:g}))},destroy:function(){h&&h.abort&&h.abort(),e.destroyed=i}}),t.init()}function j(e,t,n){var r=Math.ceil(t/2),i=Math.ceil(n/2),s={bottomright:[[0,0],[t,n],[t,0]],bottomleft:[[0,0],[t,0],[0,n]],topright:[[0,n],[t,0],[t,n]],topleft:[[0,0],[0,n],[t,n]],topcenter:[[0,n],[r,0],[t,n]],bottomcenter:[[0,0],[t,0],[r,n]],rightcenter:[[0,0],[t,i],[0,n]],leftcenter:[[t,0],[t,n],[0,i]]};return s.lefttop=s.bottomright,s.righttop=s.bottomleft,s.leftbottom=s.topright,s.rightbottom=s.topleft,s[e.string()]}function F(e,t){function A(e){var t=E.is(":visible");E.show(),e(),E.toggle(t)}function O(){x.width=g.height,x.height=g.width}function M(){x.width=g.width,x.height=g.height}function _(t,r,o,f){if(!b.tip)return;var l=m.corner.clone(),w=o.adjusted,E=e.options.position.adjust.method.split(" "),x=E[0],T=E[1]||E[0],N={left:s,top:s,x:0,y:0},C,k={},L;m.corner.fixed!==i&&(x===y&&l.precedance===u&&w.left&&l.y!==v?l.precedance=l.precedance===u?a:u:x!==y&&w.left&&(l.x=l.x===v?w.left>0?h:d:l.x===h?d:h),T===y&&l.precedance===a&&w.top&&l.x!==v?l.precedance=l.precedance===a?u:a:T!==y&&w.top&&(l.y=l.y===v?w.top>0?c:p:l.y===c?p:c),l.string()!==S.corner.string()&&(S.top!==w.top||S.left!==w.left)&&m.update(l,s)),C=m.position(l,w),C[l.x]+=P(l,l.x),C[l.y]+=P(l,l.y),C.right!==n&&(C.left=-C.right),C.bottom!==n&&(C.top=-C.bottom),C.user=Math.max(0,g.offset);if(N.left=x===y&&!!w.left)l.x===v?k["margin-left"]=N.x=C["margin-left"]:(L=C.right!==n?[w.left,-C.left]:[-w.left,C.left],(N.x=Math.max(L[0],L[1]))>L[0]&&(o.left-=w.left,N.left=s),k[C.right!==n?d:h]=N.x);if(N.top=T===y&&!!w.top)l.y===v?k["margin-top"]=N.y=C["margin-top"]:(L=C.bottom!==n?[w.top,-C.top]:[-w.top,C.top],(N.y=Math.max(L[0],L[1]))>L[0]&&(o.top-=w.top,N.top=s),k[C.bottom!==n?p:c]=N.y);b.tip.css(k).toggle(!(N.x&&N.y||l.x===v&&N.y||l.y===v&&N.x)),o.left-=C.left.charAt?C.user:x!==y||N.top||!N.left&&!N.top?C.left:0,o.top-=C.top.charAt?C.user:T!==y||N.left||!N.left&&!N.top?C.top:0,S.left=w.left,S.top=w.top,S.corner=l.clone()}function D(){var t=g.corner,n=e.options.position,r=n.at,o=n.my.string?n.my.string():n.my;return t===s||o===s&&r===s?s:(t===i?m.corner=new w.Corner(o):t.string||(m.corner=new w.Corner(t),m.corner.fixed=i),S.corner=new w.Corner(m.corner.string()),m.corner.string()!=="centercenter")}function P(e,t,n){t=t?t:e[e.precedance];var r=b.titlebar&&e.y===c,i=r?b.titlebar:E,s="border-"+t+"-width",o=function(e){return parseInt(e.css(s),10)},u;return A(function(){u=(n?o(n):o(b.content)||o(i)||o(E))||0}),u}function H(e){var t=b.titlebar&&e.y===c,n=t?b.titlebar:b.content,i=r.browser.mozilla,s=i?"-moz-":r.browser.webkit?"-webkit-":"",o="border-radius-"+e.y+e.x,u="border-"+e.y+"-"+e.x+"-radius",a=function(e){return parseInt(n.css(e),10)||parseInt(E.css(e),10)},f;return A(function(){f=a(u)||a(s+u)||a(s+o)||a(o)||0}),f}function B(e){function N(e,t,n){var r=e.css(t)||p;return n&&r===e.css(n)?s:f.test(r)?s:r}var t,n,o,u=b.tip.css("cssText",""),a=e||m.corner,f=/rgba?\(0, 0, 0(, 0)?\)|transparent|#123456/i,l="border-"+a[a.precedance]+"-color",h="background-color",p="transparent",d=" !important",y=b.titlebar,w=y&&(a.y===c||a.y===v&&u.position().top+x.height/2+g.offset<y.outerHeight(i)),S=w?y:b.content;A(function(){T.fill=N(u,h)||N(S,h)||N(b.content,h)||N(E,h)||u.css(h),T.border=N(u,l,"color")||N(S,l,"color")||N(b.content,l,"color")||N(E,l,"color")||E.css(l),r("*",u).add(u).css("cssText",h+":"+p+d+";border:0"+d+";")})}function F(e){var t=e.precedance===a,n=x[t?f:l],r=x[t?l:f],i=e.string().indexOf(v)>-1,s=n*(i?.5:1),o=Math.pow,u=Math.round,c,h,p,d=Math.sqrt(o(s,2)+o(r,2)),m=[N/s*d,N/r*d];return m[2]=Math.sqrt(o(m[0],2)-o(N,2)),m[3]=Math.sqrt(o(m[1],2)-o(N,2)),c=d+m[2]+m[3]+(i?0:m[0]),h=c/d,p=[u(h*r),u(h*n)],{height:p[t?0:1],width:p[t?1:0]}}function I(e,t,n){return"<qvml:"+e+' xmlns="urn:schemas-microsoft.com:vml" class="qtip-vml" '+(t||"")+' style="behavior: url(#default#VML); '+(n||"")+'" />'}var m=this,g=e.options.style.tip,b=e.elements,E=b.tooltip,S={top:0,left:0},x={width:g.width,height:g.height},T={},N=g.border||0,C=".qtip-tip",k=!!(r("<canvas />")[0]||{}).getContext,L;m.corner=o,m.mimic=o,m.border=N,m.offset=g.offset,m.size=x,e.checks.tip={"^position.my|style.tip.(corner|mimic|border)$":function(){m.init()||m.destroy(),e.reposition()},"^style.tip.(height|width)$":function(){x={width:g.width,height:g.height},m.create(),m.update(),e.reposition()},"^content.title.text|style.(classes|widget)$":function(){b.tip&&b.tip.length&&m.update()}},r.extend(m,{init:function(){var e=D()&&(k||r.browser.msie);return e&&(m.create(),m.update(),E.unbind(C).bind("tooltipmove"+C,_)),e},create:function(){var e=x.width,t=x.height,n;b.tip&&b.tip.remove(),b.tip=r("<div />",{"class":"qtip-tip"}).css({width:e,height:t}).prependTo(E),k?r("<canvas />").appendTo(b.tip)[0].getContext("2d").save():(n=I("shape",'coordorigin="0,0"',"position:absolute;"),b.tip.html(n+n),r("*",b.tip).bind("click mousedown",function(e){e.stopPropagation()}))},update:function(e,t){var n=b.tip,f=n.children(),l=x.width,y=x.height,C=g.mimic,L=Math.round,A,_,D,H,q;e||(e=S.corner||m.corner),C===s?C=e:(C=new w.Corner(C),C.precedance=e.precedance,C.x==="inherit"?C.x=e.x:C.y==="inherit"?C.y=e.y:C.x===C.y&&(C[e.precedance]=e[e.precedance])),A=C.precedance,e.precedance===u?O():M(),b.tip.css({width:l=x.width,height:y=x.height}),B(e),T.border!=="transparent"?(N=P(e,o),g.border===0&&N>0&&(T.fill=T.border),m.border=N=g.border!==i?g.border:N):m.border=N=0,D=j(C,l,y),m.size=q=F(e),n.css(q).css("line-height",q.height+"px"),e.precedance===a?H=[L(C.x===h?N:C.x===d?q.width-l-N:(q.width-l)/2),L(C.y===c?q.height-y:0)]:H=[L(C.x===h?q.width-l:0),L(C.y===c?N:C.y===p?q.height-y-N:(q.height-y)/2)],k?(f.attr(q),_=f[0].getContext("2d"),_.restore(),_.save(),_.clearRect(0,0,3e3,3e3),_.fillStyle=T.fill,_.strokeStyle=T.border,_.lineWidth=N*2,_.lineJoin="miter",_.miterLimit=100,_.translate(H[0],H[1]),_.beginPath(),_.moveTo(D[0][0],D[0][1]),_.lineTo(D[1][0],D[1][1]),_.lineTo(D[2][0],D[2][1]),_.closePath(),N&&(E.css("background-clip")==="border-box"&&(_.strokeStyle=T.fill,_.stroke()),_.strokeStyle=T.border,_.stroke()),_.fill()):(D="m"+D[0][0]+","+D[0][1]+" l"+D[1][0]+","+D[1][1]+" "+D[2][0]+","+D[2][1]+" xe",H[2]=N&&/^(r|b)/i.test(e.string())?parseFloat(r.browser.version,10)===8?2:1:0,f.css({coordsize:l+N+" "+(y+N),antialias:""+(C.string().indexOf(v)>-1),left:H[0],top:H[1],width:l+N,height:y+N}).each(function(e){var t=r(this);t[t.prop?"prop":"attr"]({coordsize:l+N+" "+(y+N),path:D,fillcolor:T.fill,filled:!!e,stroked:!e}).toggle(!!N||!!e),!e&&t.html()===""&&t.html(I("stroke",'weight="'+N*2+'px" color="'+T.border+'" miterlimit="1000" joinstyle="miter"'))})),t!==s&&m.position(e)},position:function(e){var t=b.tip,n={},i=Math.max(0,g.offset),o,p,d;return g.corner===s||!t?s:(e=e||m.corner,o=e.precedance,p=F(e),d=[e.x,e.y],o===u&&d.reverse(),r.each(d,function(t,r){var s,u,d;r===v?(s=o===a?h:c,n[s]="50%",n["margin-"+s]=-Math.round(p[o===a?f:l]/2)+i):(s=P(e,r),u=P(e,r,b.content),d=H(e),n[r]=t?u:i+(d>s?d:-s))}),n[e[o]]-=p[o===u?f:l],t.css({top:"",bottom:"",left:"",right:"",margin:""}).css(n),n)},destroy:function(){b.tip&&b.tip.remove(),b.tip=!1,E.unbind(C)}}),m.init()}function I(n){function y(){m=r(v,f).not("[disabled]").map(function(){return typeof this.focus=="function"?this:null})}function b(e){m.length<1&&e.length?e.not("body").blur():m.first().focus()}function E(e){var t=r(e.target),n=t.closest(".qtip"),i;i=n.length<1?s:parseInt(n[0].style.zIndex,10)>parseInt(f[0].style.zIndex,10),!i&&r(e.target).closest(N)[0]!==f[0]&&b(t)}var o=this,u=n.options.show.modal,a=n.elements,f=a.tooltip,l="#qtip-overlay",c=".qtipmodal",h=c+n.id,p="is-modal-qtip",d=r(t.body),v=w.modal.focusable.join(","),m={},g;n.checks.modal={"^show.modal.(on|blur)$":function(){o.init(),a.overlay.toggle(f.is(":visible"))},"^content.text$":function(){y()}},r.extend(o,{init:function(){return u.on?(g=o.create(),f.attr(p,i).css("z-index",w.modal.zindex+r(N+"["+p+"]").length).unbind(c).unbind(h).bind("tooltipshow"+c+" tooltiphide"+c,function(e,t,n){var i=e.originalEvent;if(e.target===f[0])if(i&&e.type==="tooltiphide"&&/mouse(leave|enter)/.test(i.type)&&r(i.relatedTarget).closest(g[0]).length)try{e.preventDefault()}catch(s){}else(!i||i&&!i.solo)&&o[e.type.replace("tooltip","")](e,n)}).bind("tooltipfocus"+c,function(e){if(e.isDefaultPrevented()||e.target!==f[0])return;var t=r(N).filter("["+p+"]"),n=w.modal.zindex+t.length,i=parseInt(f[0].style.zIndex,10);g[0].style.zIndex=n-2,t.each(function(){this.style.zIndex>i&&(this.style.zIndex-=1)}),t.end().filter("."+k).qtip("blur",e.originalEvent),f.addClass(k)[0].style.zIndex=n;try{e.preventDefault()}catch(s){}}).bind("tooltiphide"+c,function(e){e.target===f[0]&&r("["+p+"]").filter(":visible").not(f).last().qtip("focus",e)}),u.escape&&r(t).unbind(h).bind("keydown"+h,function(e){e.keyCode===27&&f.hasClass(k)&&n.hide(e)}),u.blur&&a.overlay.unbind(h).bind("click"+h,function(e){f.hasClass(k)&&n.hide(e)}),y(),o):o},create:function(){function i(){g.css({height:n.height(),width:n.width()})}var t=r(l),n=r(e);return t.length?a.overlay=t.insertAfter(r(N).last()):(g=a.overlay=r("<div />",{id:l.substr(1),html:"<div></div>",mousedown:function(){return s}}).hide().insertAfter(r(N).last()),n.unbind(c).bind("resize"+c,i),i(),g)},toggle:function(e,t,n){if(e&&e.isDefaultPrevented())return o;var a=u.effect,l=t?"show":"hide",c=g.is(":visible"),v=r("["+p+"]").filter(":visible").not(f),m;return g||(g=o.create()),g.is(":animated")&&c===t&&g.data("toggleState")!==s||!t&&v.length?o:(t?(g.css({left:0,top:0}),g.toggleClass("blurs",u.blur),u.stealfocus!==s&&(d.bind("focusin"+h,E),b(r("body :focus")))):d.unbind("focusin"+h),g.stop(i,s).data("toggleState",t),r.isFunction(a)?a.call(g,t):a===s?g[l]():g.fadeTo(parseInt(n,10)||90,t?1:0,function(){t||r(this).hide()}),t||g.queue(function(e){g.css({left:"",top:""}).removeData("toggleState"),e()}),o)},show:function(e,t){return o.toggle(e,i,t)},hide:function(e,t){return o.toggle(e,s,t)},destroy:function(){var e=g;return e&&(e=r("["+p+"]").not(f).length<1,e?(a.overlay.remove(),r(t).unbind(c)):a.overlay.unbind(c+n.id),d.unbind("focusin"+h)),f.removeAttr(p).unbind(c)}}),o.init()}function q(n){var o=this,u=n.elements,a=n.options,c=u.tooltip,h=".ie6-"+n.id,p=r("select, object").length<1,d=0,v=s,m;n.checks.ie6={"^content|style$":function(e,t,n){redraw()}},r.extend(o,{init:function(){var n=r(e),s;p&&(u.bgiframe=r('<iframe class="qtip-bgiframe" frameborder="0" tabindex="-1" src="javascript:\'\';" style="display:block; position:absolute; z-index:-1; filter:alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";"></iframe>'),u.bgiframe.appendTo(c),c.bind("tooltipmove"+h,o.adjustBGIFrame)),m=r("<div/>",{id:"qtip-rcontainer"}).appendTo(t.body),o.redraw(),u.overlay&&!v&&(s=function(){u.overlay[0].style.top=n.scrollTop()+"px"},n.bind("scroll.qtip-ie6, resize.qtip-ie6",s),s(),u.overlay.addClass("qtipmodal-ie6fix"),v=i)},adjustBGIFrame:function(){var e=n.get("dimensions"),t=n.plugins.tip,r=u.tip,i,s;s=parseInt(c.css("border-left-width"),10)||0,s={left:-s,top:-s},t&&r&&(i=t.corner.precedance==="x"?["width","left"]:["height","top"],s[i[1]]-=r[i[0]]()),u.bgiframe.css(s).css(e)},redraw:function(){if(n.rendered<1||d)return o;var e=a.style,t=a.position.container,r,i,s,u;return d=1,e.height&&c.css(l,e.height),e.width?c.css(f,e.width):(c.css(f,"").appendTo(m),i=c.width(),i%2<1&&(i+=1),s=c.css("max-width")||"",u=c.css("min-width")||"",r=(s+u).indexOf("%")>-1?t.width()/100:0,s=(s.indexOf("%")>-1?r:1)*parseInt(s,10)||i,u=(u.indexOf("%")>-1?r:1)*parseInt(u,10)||0,i=s+u?Math.min(Math.max(i,u),s):i,c.css(f,Math.round(i)).appendTo(t)),d=0,o},destroy:function(){p&&u.bgiframe.remove(),c.unbind(h)}}),o.init()}var i=!0,s=!1,o=null,u="x",a="y",f="width",l="height",c="top",h="left",p="bottom",d="right",v="center",m="flip",g="flipinvert",y="shift",b,w,E,S="qtip",x={},T=["ui-widget","ui-tooltip"],N="div.qtip."+S,C=S+"-default",k=S+"-focus",L=S+"-hover",A="_replacedByqTip",O="oldtitle",M;b=r.fn.qtip=function(e,t,u){var a=(""+e).toLowerCase(),f=o,l=r.makeArray(arguments).slice(1),c=l[l.length-1],h=this[0]?r.data(this[0],"qtip"):o;if(!arguments.length&&h||a==="api")return h;if("string"==typeof e)return this.each(function(){var e=r.data(this,"qtip");if(!e)return i;c&&c.timeStamp&&(e.cache.event=c);if(a!=="option"&&a!=="options"||!t)e[a]&&e[a].apply(e[a],l);else{if(!r.isPlainObject(t)&&u===n)return f=e.get(t),s;e.set(t,u)}}),f!==o?f:this;if("object"==typeof e||!arguments.length)return h=D(r.extend(i,{},e)),b.bind.call(this,h,c)},b.bind=function(e,t){return this.each(function(o){function p(e){function t(){c.render(typeof e=="object"||u.show.ready),a.show.add(a.hide).unbind(l)}if(c.cache.disabled)return s;c.cache.event=r.extend({},e),c.cache.target=e?r(e.target):[n],u.show.delay>0?(clearTimeout(c.timers.show),c.timers.show=setTimeout(t,u.show.delay),f.show!==f.hide&&a.hide.bind(f.hide,function(){clearTimeout(c.timers.show)})):t()}var u,a,f,l,c,h;h=r.isArray(e.id)?e.id[o]:e.id,h=!h||h===s||h.length<1||x[h]?b.nextid++:x[h]=h,l=".qtip-"+h+"-create",c=H.call(this,h,e);if(c===s)return i;u=c.options,r.each(w,function(){this.initialize==="initialize"&&this(c)}),a={show:u.show.target,hide:u.hide.target},f={show:r.trim(""+u.show.event).replace(/ /g,l+" ")+l,hide:r.trim(""+u.hide.event).replace(/ /g,l+" ")+l},/mouse(over|enter)/i.test(f.show)&&!/mouse(out|leave)/i.test(f.hide)&&(f.hide+=" mouseleave"+l),a.show.bind("mousemove"+l,function(e){_(e),c.cache.onTarget=i}),a.show.bind(f.show,p),(u.show.ready||u.prerender)&&p(t)}).attr("data-hasqtip",i)},w=b.plugins={Corner:function(e){e=(""+e).replace(/([A-Z])/," $1").replace(/middle/gi,v).toLowerCase(),this.x=(e.match(/left|right/i)||e.match(/center/)||["inherit"])[0].toLowerCase(),this.y=(e.match(/top|bottom|center/i)||["inherit"])[0].toLowerCase();var t=e.charAt(0);this.precedance=t==="t"||t==="b"?a:u,this.string=function(){return this.precedance===a?this.y+this.x:this.x+this.y},this.abbrev=function(){var e=this.x.substr(0,1),t=this.y.substr(0,1);return e===t?e:this.precedance===a?t+e:e+t},this.invertx=function(e){this.x=this.x===h?d:this.x===d?h:e||this.x},this.inverty=function(e){this.y=this.y===c?p:this.y===p?c:e||this.y},this.clone=function(){return{x:this.x,y:this.y,precedance:this.precedance,string:this.string,abbrev:this.abbrev,clone:this.clone,invertx:this.invertx,inverty:this.inverty}}},offset:function(e,n){function c(e,t){i.left+=t*e.scrollLeft(),i.top+=t*e.scrollTop()}var i=e.offset(),s=e.closest("body"),o=r.browser.msie&&t.compatMode!=="CSS1Compat",u=n,a,f,l;if(u){do u.css("position")!=="static"&&(f=u.position(),i.left-=f.left+(parseInt(u.css("borderLeftWidth"),10)||0)+(parseInt(u.css("marginLeft"),10)||0),i.top-=f.top+(parseInt(u.css("borderTopWidth"),10)||0)+(parseInt(u.css("marginTop"),10)||0),!a&&(l=u.css("overflow"))!=="hidden"&&l!=="visible"&&(a=u));while((u=r(u[0].offsetParent)).length);(a&&a[0]!==s[0]||o)&&c(a||s,1)}return i},iOS:parseFloat((""+(/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))||s,fn:{attr:function(e,t){if(this.length){var n=this[0],i="title",s=r.data(n,"qtip");if(e===i&&s&&"object"==typeof s&&s.options.suppress)return arguments.length<2?r.attr(n,O):(s&&s.options.content.attr===i&&s.cache.attr&&s.set("content.text",t),this.attr(O,t))}return r.fn["attr"+A].apply(this,arguments)},clone:function(e){var t=r([]),n="title",i=r.fn["clone"+A].apply(this,arguments);return e||i.filter("["+O+"]").attr("title",function(){return r.attr(this,O)}).removeAttr(O),i}}},r.each(w.fn,function(e,t){if(!t||r.fn[e+A])return i;var n=r.fn[e+A]=r.fn[e];r.fn[e]=function(){return t.apply(this,arguments)||n.apply(this,arguments)}}),r.ui||(r["cleanData"+A]=r.cleanData,r.cleanData=function(e){for(var t=0,i;(i=e[t])!==n;t++)try{r(i).triggerHandler("removeqtip")}catch(s){}r["cleanData"+A](e)}),b.version="2.0.0-nightly-15f5c6bc20",b.nextid=0,b.inactiveEvents="click dblclick mousedown mouseup mousemove mouseleave mouseenter".split(" "),b.zindex=15e3,b.defaults={prerender:s,id:s,overwrite:i,suppress:i,content:{text:i,attr:"title",deferred:s,title:{text:s,button:s}},position:{my:"top left",at:"bottom right",target:s,container:s,viewport:s,adjust:{x:0,y:0,mouse:i,resize:i,method:"flipinvert flipinvert"},effect:function(e,t,n){r(this).animate(t,{duration:200,queue:s})}},show:{target:s,event:"mouseenter",effect:i,delay:90,solo:s,ready:s,autofocus:s},hide:{target:s,event:"mouseleave",effect:i,delay:0,fixed:s,inactive:s,leave:"window",distance:s},style:{classes:"",widget:s,width:s,height:s,def:i},events:{render:o,move:o,show:o,hide:o,toggle:o,visible:o,hidden:o,focus:o,blur:o}},w.svg=function(e,n,i,s){var o=r(t),u=n[0],a={width:0,height:0,position:{top:1e10,left:1e10}},f,l,c,h,p;while(!u.getBBox)u=u.parentNode;if(u.getBBox&&u.parentNode){f=u.getBBox(),l=u.getScreenCTM(),c=u.farthestViewportElement||u;if(!c.createSVGPoint)return a;h=c.createSVGPoint(),h.x=f.x,h.y=f.y,p=h.matrixTransform(l),a.position.left=p.x,a.position.top=p.y,h.x+=f.width,h.y+=f.height,p=h.matrixTransform(l),a.width=p.x-a.position.left,a.height=p.y-a.position.top,a.position.left+=o.scrollLeft(),a.position.top+=o.scrollTop()}return a},w.ajax=function(e){var t=e.plugins.ajax;return"object"==typeof t?t:e.plugins.ajax=new B(e)},w.ajax.initialize="render",w.ajax.sanitize=function(e){var t=e.content,n;t&&"ajax"in t&&(n=t.ajax,typeof n!="object"&&(n=e.content.ajax={url:n}),"boolean"!=typeof n.once&&n.once&&(n.once=!!n.once))},r.extend(i,b.defaults,{content:{ajax:{loading:i,once:i}}}),w.tip=function(e){var t=e.plugins.tip;return"object"==typeof t?t:e.plugins.tip=new F(e)},w.tip.initialize="render",w.tip.sanitize=function(e){var t=e.style,n;t&&"tip"in t&&(n=e.style.tip,typeof n!="object"&&(e.style.tip={corner:n}),/string|boolean/i.test(typeof n.corner)||(n.corner=i),typeof n.width!="number"&&delete n.width,typeof n.height!="number"&&delete n.height,typeof n.border!="number"&&n.border!==i&&delete n.border,typeof n.offset!="number"&&delete n.offset)},r.extend(i,b.defaults,{style:{tip:{corner:i,mimic:s,width:6,height:6,border:i,offset:0}}}),w.modal=function(e){var t=e.plugins.modal;return"object"==typeof t?t:e.plugins.modal=new I(e)},w.modal.initialize="render",w.modal.sanitize=function(e){e.show&&(typeof e.show.modal!="object"?e.show.modal={on:!!e.show.modal}:typeof e.show.modal.on=="undefined"&&(e.show.modal.on=i))},w.modal.zindex=b.zindex-200,w.modal.focusable=["a[href]","area[href]","input","select","textarea","button","iframe","object","embed","[tabindex]","[contenteditable]"],r.extend(i,b.defaults,{show:{modal:{on:s,effect:i,blur:i,stealfocus:i,escape:i}}}),w.viewport=function(n,r,i,s,o,m,b){function j(e,t,n,i,s,o,u,a,f){var l=r[s],c=x[e],h=T[e],p=n===y,d=-O.offset[s]+A.offset[s]+A["scroll"+s],m=c===s?f:c===o?-f:-f/2,b=h===s?a:h===o?-a:-a/2,w=_&&_.size?_.size[u]||0:0,E=_&&_.corner&&_.corner.precedance===e&&!p?w:0,S=d-l+E,N=l+f-A[u]-d+E,C=m-(x.precedance===e||c===x[t]?b:0)-(h===v?a/2:0);return p?(E=_&&_.corner&&_.corner.precedance===t?w:0,C=(c===s?1:-1)*m-E,r[s]+=S>0?S:N>0?-N:0,r[s]=Math.max(-O.offset[s]+A.offset[s]+(E&&_.corner[e]===v?_.offset:0),l-C,Math.min(Math.max(-O.offset[s]+A.offset[s]+A[u],l+C),r[s]))):(i*=n===g?2:0,S>0&&(c!==s||N>0)?(r[s]-=C+i,H["invert"+e](s)):N>0&&(c!==o||S>0)&&(r[s]-=(c===v?-C:C)+i,H["invert"+e](o)),r[s]<d&&-r[s]>N&&(r[s]=l,H=x.clone())),r[s]-l}var w=i.target,E=n.elements.tooltip,x=i.my,T=i.at,N=i.adjust,C=N.method.split(" "),k=C[0],L=C[1]||C[0],A=i.viewport,O=i.container,M=n.cache,_=n.plugins.tip,D={left:0,top:0},P,H,B;if(!A.jquery||w[0]===e||w[0]===t.body||N.method==="none")return D;P=E.css("position")==="fixed",A={elem:A,height:A[(A[0]===e?"h":"outerH")+"eight"](),width:A[(A[0]===e?"w":"outerW")+"idth"](),scrollleft:P?0:A.scrollLeft(),scrolltop:P?0:A.scrollTop(),offset:A.offset()||{left:0,top:0}},O={elem:O,scrollLeft:O.scrollLeft(),scrollTop:O.scrollTop(),offset:O.offset()||{left:0,top:0}};if(k!=="shift"||L!=="shift")H=x.clone();return D={left:k!=="none"?j(u,a,k,N.x,h,d,f,s,m):0,top:L!=="none"?j(a,u,L,N.y,c,p,l,o,b):0},H&&M.lastClass!==(B=S+"-pos-"+H.abbrev())&&E.removeClass(n.cache.lastClass).addClass(n.cache.lastClass=B),D},w.imagemap=function(e,t,n,i){function E(e,t,n){var r=0,i=1,s=1,o=0,u=0,a=e.width,f=e.height;while(a>0&&f>0&&i>0&&s>0){a=Math.floor(a/2),f=Math.floor(f/2),n.x===h?i=a:n.x===d?i=e.width-a:i+=Math.floor(a/2),n.y===c?s=f:n.y===p?s=e.height-f:s+=Math.floor(f/2),r=t.length;while(r--){if(t.length<2)break;o=t[r][0]-e.position.left,u=t[r][1]-e.position.top,(n.x===h&&o>=i||n.x===d&&o<=i||n.x===v&&(o<i||o>e.width-i)||n.y===c&&u>=s||n.y===p&&u<=s||n.y===v&&(u<s||u>e.height-s))&&t.splice(r,1)}}return{left:t[0][0],top:t[0][1]}}t.jquery||(t=r(t));var s=e.cache.areas={},o=(t[0].shape||t.attr("shape")).toLowerCase(),u=t[0].coords||t.attr("coords"),a=u.split(","),f=[],l=r('img[usemap="#'+t.parent("map").attr("name")+'"]'),m=l.offset(),g={width:0,height:0,position:{top:1e10,right:0,bottom:0,left:1e10}},y=0,b=0,w;m.left+=Math.ceil((l.outerWidth()-l.width())/2),m.top+=Math.ceil((l.outerHeight()-l.height())/2);if(o==="poly"){y=a.length;while(y--)b=[parseInt(a[--y],10),parseInt(a[y+1],10)],b[0]>g.position.right&&(g.position.right=b[0]),b[0]<g.position.left&&(g.position.left=b[0]),b[1]>g.position.bottom&&(g.position.bottom=b[1]),b[1]<g.position.top&&(g.position.top=b[1]),f.push(b)}else{y=-1;while(y++<a.length)f.push(parseInt(a[y],10))}switch(o){case"rect":g={width:Math.abs(f[2]-f[0]),height:Math.abs(f[3]-f[1]),position:{left:Math.min(f[0],f[2]),top:Math.min(f[1],f[3])}};break;case"circle":g={width:f[2]+2,height:f[2]+2,position:{left:f[0],top:f[1]}};break;case"poly":g.width=Math.abs(g.position.right-g.position.left),g.height=Math.abs(g.position.bottom-g.position.top),n.abbrev()==="c"?g.position={left:g.position.left+g.width/2,top:g.position.top+g.height/2}:(s[n+u]||(g.position=E(g,f.slice(),n),i&&(i[0]==="flip"||i[1]==="flip")&&(g.offset=E(g,f.slice(),{x:n.x===h?d:n.x===d?h:v,y:n.y===c?p:n.y===p?c:v}),g.offset.left-=g.position.left,g.offset.top-=g.position.top),s[n+u]=g),g=s[n+u]),g.width=g.height=0}return g.position.left+=m.left,g.position.top+=m.top,g},w.ie6=function(e){var t=r.browser,n=e.plugins.ie6;return!t.msie||(""+t.version).charAt(0)!=="6"?s:"object"==typeof n?n:e.plugins.ie6=new q(e)},w.ie6.initialize="render"})})(window,document);
js/libraries/jquery-qtip/load.qtip.js CHANGED
@@ -1,56 +1,56 @@
1
- jQuery(document).ready(function($) {
2
-
3
-
4
- jQuery('.lp_tooltip').on('mouseover', function(event) {
5
- // Bind the qTip within the event handler
6
- jQuery(this).qtip({
7
- overwrite: false, // Make sure the tooltip won't be overridden once created
8
- content: {
9
- title: {
10
- text: 'What does this do?'
11
- }
12
- },
13
- position: {
14
- my: 'bottom center', // Use the corner...
15
- at: 'top center', // ...and opposite corner
16
- viewport: jQuery(window)
17
- },
18
- style: {
19
- classes: 'qtip-shadow qtip-jtools',
20
- },
21
- show: {
22
- event: event.type, // Use the same show event as the one that triggered the event handler
23
- ready: true, // Show the tooltip as soon as it's bound, vital so it shows up the first time you hover!
24
- solo: true
25
- },
26
- hide: 'unfocus'
27
- }, event); // Pass through our original event to qTip
28
- })
29
-
30
- jQuery('.lp_tooltip_templates').on('mouseover', function(event) {
31
- // Bind the qTip within the event handler
32
- jQuery(this).qtip({
33
- overwrite: false, // Make sure the tooltip won't be overridden once created
34
- content: {
35
- title: {
36
- text: 'About this Template'
37
- }
38
- },
39
- position: {
40
- my: 'bottom center', // Use the corner...
41
- at: 'top center', // ...and opposite corner
42
- viewport: jQuery(window)
43
- },
44
- style: {
45
- classes: 'qtip-shadow qtip-jtools',
46
- },
47
- show: {
48
- event: event.type, // Use the same show event as the one that triggered the event handler
49
- ready: true, // Show the tooltip as soon as it's bound, vital so it shows up the first time you hover!
50
- solo: true
51
- },
52
- hide: 'unfocus'
53
- }, event); // Pass through our original event to qTip
54
- })
55
- // put all your jQuery goodness in here.
56
  });
1
+ jQuery(document).ready(function($) {
2
+
3
+
4
+ jQuery('.lp_tooltip').on('mouseover', function(event) {
5
+ // Bind the qTip within the event handler
6
+ jQuery(this).qtip({
7
+ overwrite: false, // Make sure the tooltip won't be overridden once created
8
+ content: {
9
+ title: {
10
+ text: 'What does this do?'
11
+ }
12
+ },
13
+ position: {
14
+ my: 'bottom center', // Use the corner...
15
+ at: 'top center', // ...and opposite corner
16
+ viewport: jQuery(window)
17
+ },
18
+ style: {
19
+ classes: 'qtip-shadow qtip-jtools',
20
+ },
21
+ show: {
22
+ event: event.type, // Use the same show event as the one that triggered the event handler
23
+ ready: true, // Show the tooltip as soon as it's bound, vital so it shows up the first time you hover!
24
+ solo: true
25
+ },
26
+ hide: 'unfocus'
27
+ }, event); // Pass through our original event to qTip
28
+ })
29
+
30
+ jQuery('.lp_tooltip_templates').on('mouseover', function(event) {
31
+ // Bind the qTip within the event handler
32
+ jQuery(this).qtip({
33
+ overwrite: false, // Make sure the tooltip won't be overridden once created
34
+ content: {
35
+ title: {
36
+ text: 'About this Template'
37
+ }
38
+ },
39
+ position: {
40
+ my: 'bottom center', // Use the corner...
41
+ at: 'top center', // ...and opposite corner
42
+ viewport: jQuery(window)
43
+ },
44
+ style: {
45
+ classes: 'qtip-shadow qtip-jtools',
46
+ },
47
+ show: {
48
+ event: event.type, // Use the same show event as the one that triggered the event handler
49
+ ready: true, // Show the tooltip as soon as it's bound, vital so it shows up the first time you hover!
50
+ solo: true
51
+ },
52
+ hide: 'unfocus'
53
+ }, event); // Pass through our original event to qTip
54
+ })
55
+ // put all your jQuery goodness in here.
56
  });
js/libraries/tiny_mce/license.txt CHANGED
@@ -1,504 +1,504 @@
1
- GNU LESSER GENERAL PUBLIC LICENSE
2
- Version 2.1, February 1999
3
-
4
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
- Everyone is permitted to copy and distribute verbatim copies
7
- of this license document, but changing it is not allowed.
8
-
9
- [This is the first released version of the Lesser GPL. It also counts
10
- as the successor of the GNU Library Public License, version 2, hence
11
- the version number 2.1.]
12
-
13
- Preamble
14
-
15
- The licenses for most software are designed to take away your
16
- freedom to share and change it. By contrast, the GNU General Public
17
- Licenses are intended to guarantee your freedom to share and change
18
- free software--to make sure the software is free for all its users.
19
-
20
- This license, the Lesser General Public License, applies to some
21
- specially designated software packages--typically libraries--of the
22
- Free Software Foundation and other authors who decide to use it. You
23
- can use it too, but we suggest you first think carefully about whether
24
- this license or the ordinary General Public License is the better
25
- strategy to use in any particular case, based on the explanations below.
26
-
27
- When we speak of free software, we are referring to freedom of use,
28
- not price. Our General Public Licenses are designed to make sure that
29
- you have the freedom to distribute copies of free software (and charge
30
- for this service if you wish); that you receive source code or can get
31
- it if you want it; that you can change the software and use pieces of
32
- it in new free programs; and that you are informed that you can do
33
- these things.
34
-
35
- To protect your rights, we need to make restrictions that forbid
36
- distributors to deny you these rights or to ask you to surrender these
37
- rights. These restrictions translate to certain responsibilities for
38
- you if you distribute copies of the library or if you modify it.
39
-
40
- For example, if you distribute copies of the library, whether gratis
41
- or for a fee, you must give the recipients all the rights that we gave
42
- you. You must make sure that they, too, receive or can get the source
43
- code. If you link other code with the library, you must provide
44
- complete object files to the recipients, so that they can relink them
45
- with the library after making changes to the library and recompiling
46
- it. And you must show them these terms so they know their rights.
47
-
48
- We protect your rights with a two-step method: (1) we copyright the
49
- library, and (2) we offer you this license, which gives you legal
50
- permission to copy, distribute and/or modify the library.
51
-
52
- To protect each distributor, we want to make it very clear that
53
- there is no warranty for the free library. Also, if the library is
54
- modified by someone else and passed on, the recipients should know
55
- that what they have is not the original version, so that the original
56
- author's reputation will not be affected by problems that might be
57
- introduced by others.
58
-
59
- Finally, software patents pose a constant threat to the existence of
60
- any free program. We wish to make sure that a company cannot
61
- effectively restrict the users of a free program by obtaining a
62
- restrictive license from a patent holder. Therefore, we insist that
63
- any patent license obtained for a version of the library must be
64
- consistent with the full freedom of use specified in this license.
65
-
66
- Most GNU software, including some libraries, is covered by the
67
- ordinary GNU General Public License. This license, the GNU Lesser
68
- General Public License, applies to certain designated libraries, and
69
- is quite different from the ordinary General Public License. We use
70
- this license for certain libraries in order to permit linking those
71
- libraries into non-free programs.
72
-
73
- When a program is linked with a library, whether statically or using
74
- a shared library, the combination of the two is legally speaking a
75
- combined work, a derivative of the original library. The ordinary
76
- General Public License therefore permits such linking only if the
77
- entire combination fits its criteria of freedom. The Lesser General
78
- Public License permits more lax criteria for linking other code with
79
- the library.
80
-
81
- We call this license the "Lesser" General Public License because it
82
- does Less to protect the user's freedom than the ordinary General
83
- Public License. It also provides other free software developers Less
84
- of an advantage over competing non-free programs. These disadvantages
85
- are the reason we use the ordinary General Public License for many
86
- libraries. However, the Lesser license provides advantages in certain
87
- special circumstances.
88
-
89
- For example, on rare occasions, there may be a special need to
90
- encourage the widest possible use of a certain library, so that it becomes
91
- a de-facto standard. To achieve this, non-free programs must be
92
- allowed to use the library. A more frequent case is that a free
93
- library does the same job as widely used non-free libraries. In this
94
- case, there is little to gain by limiting the free library to free
95
- software only, so we use the Lesser General Public License.
96
-
97
- In other cases, permission to use a particular library in non-free
98
- programs enables a greater number of people to use a large body of
99
- free software. For example, permission to use the GNU C Library in
100
- non-free programs enables many more people to use the whole GNU
101
- operating system, as well as its variant, the GNU/Linux operating
102
- system.
103
-
104
- Although the Lesser General Public License is Less protective of the
105
- users' freedom, it does ensure that the user of a program that is
106
- linked with the Library has the freedom and the wherewithal to run
107
- that program using a modified version of the Library.
108
-
109
- The precise terms and conditions for copying, distribution and
110
- modification follow. Pay close attention to the difference between a
111
- "work based on the library" and a "work that uses the library". The
112
- former contains code derived from the library, whereas the latter must
113
- be combined with the library in order to run.
114
-
115
- GNU LESSER GENERAL PUBLIC LICENSE
116
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
-
118
- 0. This License Agreement applies to any software library or other
119
- program which contains a notice placed by the copyright holder or
120
- other authorized party saying it may be distributed under the terms of
121
- this Lesser General Public License (also called "this License").
122
- Each licensee is addressed as "you".
123
-
124
- A "library" means a collection of software functions and/or data
125
- prepared so as to be conveniently linked with application programs
126
- (which use some of those functions and data) to form executables.
127
-
128
- The "Library", below, refers to any such software library or work
129
- which has been distributed under these terms. A "work based on the
130
- Library" means either the Library or any derivative work under
131
- copyright law: that is to say, a work containing the Library or a
132
- portion of it, either verbatim or with modifications and/or translated
133
- straightforwardly into another language. (Hereinafter, translation is
134
- included without limitation in the term "modification".)
135
-
136
- "Source code" for a work means the preferred form of the work for
137
- making modifications to it. For a library, complete source code means
138
- all the source code for all modules it contains, plus any associated
139
- interface definition files, plus the scripts used to control compilation
140
- and installation of the library.
141
-
142
- Activities other than copying, distribution and modification are not
143
- covered by this License; they are outside its scope. The act of
144
- running a program using the Library is not restricted, and output from
145
- such a program is covered only if its contents constitute a work based
146
- on the Library (independent of the use of the Library in a tool for
147
- writing it). Whether that is true depends on what the Library does
148
- and what the program that uses the Library does.
149
-
150
- 1. You may copy and distribute verbatim copies of the Library's
151
- complete source code as you receive it, in any medium, provided that
152
- you conspicuously and appropriately publish on each copy an
153
- appropriate copyright notice and disclaimer of warranty; keep intact
154
- all the notices that refer to this License and to the absence of any
155
- warranty; and distribute a copy of this License along with the
156
- Library.
157
-
158
- You may charge a fee for the physical act of transferring a copy,
159
- and you may at your option offer warranty protection in exchange for a
160
- fee.
161
-
162
- 2. You may modify your copy or copies of the Library or any portion
163
- of it, thus forming a work based on the Library, and copy and
164
- distribute such modifications or work under the terms of Section 1
165
- above, provided that you also meet all of these conditions:
166
-
167
- a) The modified work must itself be a software library.
168
-
169
- b) You must cause the files modified to carry prominent notices
170
- stating that you changed the files and the date of any change.
171
-
172
- c) You must cause the whole of the work to be licensed at no
173
- charge to all third parties under the terms of this License.
174
-
175
- d) If a facility in the modified Library refers to a function or a
176
- table of data to be supplied by an application program that uses
177
- the facility, other than as an argument passed when the facility
178
- is invoked, then you must make a good faith effort to ensure that,
179
- in the event an application does not supply such function or
180
- table, the facility still operates, and performs whatever part of
181
- its purpose remains meaningful.
182
-
183
- (For example, a function in a library to compute square roots has
184
- a purpose that is entirely well-defined independent of the
185
- application. Therefore, Subsection 2d requires that any
186
- application-supplied function or table used by this function must
187
- be optional: if the application does not supply it, the square
188
- root function must still compute square roots.)
189
-
190
- These requirements apply to the modified work as a whole. If
191
- identifiable sections of that work are not derived from the Library,
192
- and can be reasonably considered independent and separate works in
193
- themselves, then this License, and its terms, do not apply to those
194
- sections when you distribute them as separate works. But when you
195
- distribute the same sections as part of a whole which is a work based
196
- on the Library, the distribution of the whole must be on the terms of
197
- this License, whose permissions for other licensees extend to the
198
- entire whole, and thus to each and every part regardless of who wrote
199
- it.
200
-
201
- Thus, it is not the intent of this section to claim rights or contest
202
- your rights to work written entirely by you; rather, the intent is to
203
- exercise the right to control the distribution of derivative or
204
- collective works based on the Library.
205
-
206
- In addition, mere aggregation of another work not based on the Library
207
- with the Library (or with a work based on the Library) on a volume of
208
- a storage or distribution medium does not bring the other work under
209
- the scope of this License.
210
-
211
- 3. You may opt to apply the terms of the ordinary GNU General Public
212
- License instead of this License to a given copy of the Library. To do
213
- this, you must alter all the notices that refer to this License, so
214
- that they refer to the ordinary GNU General Public License, version 2,
215
- instead of to this License. (If a newer version than version 2 of the
216
- ordinary GNU General Public License has appeared, then you can specify
217
- that version instead if you wish.) Do not make any other change in
218
- these notices.
219
-
220
- Once this change is made in a given copy, it is irreversible for
221
- that copy, so the ordinary GNU General Public License applies to all
222
- subsequent copies and derivative works made from that copy.
223
-
224
- This option is useful when you wish to copy part of the code of
225
- the Library into a program that is not a library.
226
-
227
- 4. You may copy and distribute the Library (or a portion or
228
- derivative of it, under Section 2) in object code or executable form
229
- under the terms of Sections 1 and 2 above provided that you accompany
230
- it with the complete corresponding machine-readable source code, which
231
- must be distributed under the terms of Sections 1 and 2 above on a
232
- medium customarily used for software interchange.
233
-
234
- If distribution of object code is made by offering access to copy
235
- from a designated place, then offering equivalent access to copy the
236
- source code from the same place satisfies the requirement to
237
- distribute the source code, even though third parties are not
238
- compelled to copy the source along with the object code.
239
-
240
- 5. A program that contains no derivative of any portion of the
241
- Library, but is designed to work with the Library by being compiled or
242
- linked with it, is called a "work that uses the Library". Such a
243
- work, in isolation, is not a derivative work of the Library, and
244
- therefore falls outside the scope of this License.
245
-
246
- However, linking a "work that uses the Library" with the Library
247
- creates an executable that is a derivative of the Library (because it
248
- contains portions of the Library), rather than a "work that uses the
249
- library". The executable is therefore covered by this License.
250
- Section 6 states terms for distribution of such executables.
251
-
252
- When a "work that uses the Library" uses material from a header file
253
- that is part of the Library, the object code for the work may be a
254
- derivative work of the Library even though the source code is not.
255
- Whether this is true is especially significant if the work can be
256
- linked without the Library, or if the work is itself a library. The
257
- threshold for this to be true is not precisely defined by law.
258
-
259
- If such an object file uses only numerical parameters, data
260
- structure layouts and accessors, and small macros and small inline
261
- functions (ten lines or less in length), then the use of the object
262
- file is unrestricted, regardless of whether it is legally a derivative
263
- work. (Executables containing this object code plus portions of the
264
- Library will still fall under Section 6.)
265
-
266
- Otherwise, if the work is a derivative of the Library, you may
267
- distribute the object code for the work under the terms of Section 6.
268
- Any executables containing that work also fall under Section 6,
269
- whether or not they are linked directly with the Library itself.
270
-
271
- 6. As an exception to the Sections above, you may also combine or
272
- link a "work that uses the Library" with the Library to produce a
273
- work containing portions of the Library, and distribute that work
274
- under terms of your choice, provided that the terms permit
275
- modification of the work for the customer's own use and reverse
276
- engineering for debugging such modifications.
277
-
278
- You must give prominent notice with each copy of the work that the
279
- Library is used in it and that the Library and its use are covered by
280
- this License. You must supply a copy of this License. If the work
281
- during execution displays copyright notices, you must include the
282
- copyright notice for the Library among them, as well as a reference
283
- directing the user to the copy of this License. Also, you must do one
284
- of these things:
285
-
286
- a) Accompany the work with the complete corresponding
287
- machine-readable source code for the Library including whatever
288
- changes were used in the work (which must be distributed under
289
- Sections 1 and 2 above); and, if the work is an executable linked
290
- with the Library, with the complete machine-readable "work that
291
- uses the Library", as object code and/or source code, so that the
292
- user can modify the Library and then relink to produce a modified
293
- executable containing the modified Library. (It is understood
294
- that the user who changes the contents of definitions files in the
295
- Library will not necessarily be able to recompile the application
296
- to use the modified definitions.)
297
-
298
- b) Use a suitable shared library mechanism for linking with the
299
- Library. A suitable mechanism is one that (1) uses at run time a
300
- copy of the library already present on the user's computer system,
301
- rather than copying library functions into the executable, and (2)
302
- will operate properly with a modified version of the library, if
303
- the user installs one, as long as the modified version is
304
- interface-compatible with the version that the work was made with.
305
-
306
- c) Accompany the work with a written offer, valid for at
307
- least three years, to give the same user the materials
308
- specified in Subsection 6a, above, for a charge no more
309
- than the cost of performing this distribution.
310
-
311
- d) If distribution of the work is made by offering access to copy
312
- from a designated place, offer equivalent access to copy the above
313
- specified materials from the same place.
314
-
315
- e) Verify that the user has already received a copy of these
316
- materials or that you have already sent this user a copy.
317
-
318
- For an executable, the required form of the "work that uses the
319
- Library" must include any data and utility programs needed for
320
- reproducing the executable from it. However, as a special exception,
321
- the materials to be distributed need not include anything that is
322
- normally distributed (in either source or binary form) with the major
323
- components (compiler, kernel, and so on) of the operating system on
324
- which the executable runs, unless that component itself accompanies
325
- the executable.
326
-
327
- It may happen that this requirement contradicts the license
328
- restrictions of other proprietary libraries that do not normally
329
- accompany the operating system. Such a contradiction means you cannot
330
- use both them and the Library together in an executable that you
331
- distribute.
332
-
333
- 7. You may place library facilities that are a work based on the
334
- Library side-by-side in a single library together with other library
335
- facilities not covered by this License, and distribute such a combined
336
- library, provided that the separate distribution of the work based on
337
- the Library and of the other library facilities is otherwise
338
- permitted, and provided that you do these two things:
339
-
340
- a) Accompany the combined library with a copy of the same work
341
- based on the Library, uncombined with any other library
342
- facilities. This must be distributed under the terms of the
343
- Sections above.
344
-
345
- b) Give prominent notice with the combined library of the fact
346
- that part of it is a work based on the Library, and explaining
347
- where to find the accompanying uncombined form of the same work.
348
-
349
- 8. You may not copy, modify, sublicense, link with, or distribute
350
- the Library except as expressly provided under this License. Any
351
- attempt otherwise to copy, modify, sublicense, link with, or
352
- distribute the Library is void, and will automatically terminate your
353
- rights under this License. However, parties who have received copies,
354
- or rights, from you under this License will not have their licenses
355
- terminated so long as such parties remain in full compliance.
356
-
357
- 9. You are not required to accept this License, since you have not
358
- signed it. However, nothing else grants you permission to modify or
359
- distribute the Library or its derivative works. These actions are
360
- prohibited by law if you do not accept this License. Therefore, by
361
- modifying or distributing the Library (or any work based on the
362
- Library), you indicate your acceptance of this License to do so, and
363
- all its terms and conditions for copying, distributing or modifying
364
- the Library or works based on it.
365
-
366
- 10. Each time you redistribute the Library (or any work based on the
367
- Library), the recipient automatically receives a license from the
368
- original licensor to copy, distribute, link with or modify the Library
369
- subject to these terms and conditions. You may not impose any further
370
- restrictions on the recipients' exercise of the rights granted herein.
371
- You are not responsible for enforcing compliance by third parties with
372
- this License.
373
-
374
- 11. If, as a consequence of a court judgment or allegation of patent
375
- infringement or for any other reason (not limited to patent issues),
376
- conditions are imposed on you (whether by court order, agreement or
377
- otherwise) that contradict the conditions of this License, they do not
378
- excuse you from the conditions of this License. If you cannot
379
- distribute so as to satisfy simultaneously your obligations under this
380
- License and any other pertinent obligations, then as a consequence you
381
- may not distribute the Library at all. For example, if a patent
382
- license would not permit royalty-free redistribution of the Library by
383
- all those who receive copies directly or indirectly through you, then
384
- the only way you could satisfy both it and this License would be to
385
- refrain entirely from distribution of the Library.
386
-
387
- If any portion of this section is held invalid or unenforceable under any
388
- particular circumstance, the balance of the section is intended to apply,
389
- and the section as a whole is intended to apply in other circumstances.
390
-
391
- It is not the purpose of this section to induce you to infringe any
392
- patents or other property right claims or to contest validity of any
393
- such claims; this section has the sole purpose of protecting the
394
- integrity of the free software distribution system which is
395
- implemented by public license practices. Many people have made
396
- generous contributions to the wide range of software distributed
397
- through that system in reliance on consistent application of that
398
- system; it is up to the author/donor to decide if he or she is willing
399
- to distribute software through any other system and a licensee cannot
400
- impose that choice.
401
-
402
- This section is intended to make thoroughly clear what is believed to
403
- be a consequence of the rest of this License.
404
-
405
- 12. If the distribution and/or use of the Library is restricted in
406
- certain countries either by patents or by copyrighted interfaces, the
407
- original copyright holder who places the Library under this License may add
408
- an explicit geographical distribution limitation excluding those countries,
409
- so that distribution is permitted only in or among countries not thus
410
- excluded. In such case, this License incorporates the limitation as if
411
- written in the body of this License.
412
-
413
- 13. The Free Software Foundation may publish revised and/or new
414
- versions of the Lesser General Public License from time to time.
415
- Such new versions will be similar in spirit to the present version,
416
- but may differ in detail to address new problems or concerns.
417
-
418
- Each version is given a distinguishing version number. If the Library
419
- specifies a version number of this License which applies to it and
420
- "any later version", you have the option of following the terms and
421
- conditions either of that version or of any later version published by
422
- the Free Software Foundation. If the Library does not specify a
423
- license version number, you may choose any version ever published by
424
- the Free Software Foundation.
425
-
426
- 14. If you wish to incorporate parts of the Library into other free
427
- programs whose distribution conditions are incompatible with these,
428
- write to the author to ask for permission. For software which is
429
- copyrighted by the Free Software Foundation, write to the Free
430
- Software Foundation; we sometimes make exceptions for this. Our
431
- decision will be guided by the two goals of preserving the free status
432
- of all derivatives of our free software and of promoting the sharing
433
- and reuse of software generally.
434
-
435
- NO WARRANTY
436
-
437
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
- WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
- EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
- OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
- KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
- PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
- LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
- THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
-
447
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
- WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
- AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
- FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
- CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
- LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
- RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
- FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
- SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
- DAMAGES.
457
-
458
- END OF TERMS AND CONDITIONS
459
-
460
- How to Apply These Terms to Your New Libraries
461
-
462
- If you develop a new library, and you want it to be of the greatest
463
- possible use to the public, we recommend making it free software that
464
- everyone can redistribute and change. You can do so by permitting
465
- redistribution under these terms (or, alternatively, under the terms of the
466
- ordinary General Public License).
467
-
468
- To apply these terms, attach the following notices to the library. It is
469
- safest to attach them to the start of each source file to most effectively
470
- convey the exclusion of warranty; and each file should have at least the
471
- "copyright" line and a pointer to where the full notice is found.
472
-
473
- <one line to give the library's name and a brief idea of what it does.>
474
- Copyright (C) <year> <name of author>
475
-
476
- This library is free software; you can redistribute it and/or
477
- modify it under the terms of the GNU Lesser General Public
478
- License as published by the Free Software Foundation; either
479
- version 2.1 of the License, or (at your option) any later version.
480
-
481
- This library is distributed in the hope that it will be useful,
482
- but WITHOUT ANY WARRANTY; without even the implied warranty of
483
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
- Lesser General Public License for more details.
485
-
486
- You should have received a copy of the GNU Lesser General Public
487
- License along with this library; if not, write to the Free Software
488
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
489
-
490
- Also add information on how to contact you by electronic and paper mail.
491
-
492
- You should also get your employer (if you work as a programmer) or your
493
- school, if any, to sign a "copyright disclaimer" for the library, if
494
- necessary. Here is a sample; alter the names:
495
-
496
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
-
499
- <signature of Ty Coon>, 1 April 1990
500
- Ty Coon, President of Vice
501
-
502
- That's all there is to it!
503
-
504
-
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 2.1, February 1999
3
+
4
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ [This is the first released version of the Lesser GPL. It also counts
10
+ as the successor of the GNU Library Public License, version 2, hence
11
+ the version number 2.1.]
12
+
13
+ Preamble
14
+
15
+ The licenses for most software are designed to take away your
16
+ freedom to share and change it. By contrast, the GNU General Public
17
+ Licenses are intended to guarantee your freedom to share and change
18
+ free software--to make sure the software is free for all its users.
19
+
20
+ This license, the Lesser General Public License, applies to some
21
+ specially designated software packages--typically libraries--of the
22
+ Free Software Foundation and other authors who decide to use it. You
23
+ can use it too, but we suggest you first think carefully about whether
24
+ this license or the ordinary General Public License is the better
25
+ strategy to use in any particular case, based on the explanations below.
26
+
27
+ When we speak of free software, we are referring to freedom of use,
28
+ not price. Our General Public Licenses are designed to make sure that
29
+ you have the freedom to distribute copies of free software (and charge
30
+ for this service if you wish); that you receive source code or can get
31
+ it if you want it; that you can change the software and use pieces of
32
+ it in new free programs; and that you are informed that you can do
33
+ these things.
34
+
35
+ To protect your rights, we need to make restrictions that forbid
36
+ distributors to deny you these rights or to ask you to surrender these
37
+ rights. These restrictions translate to certain responsibilities for
38
+ you if you distribute copies of the library or if you modify it.
39
+
40
+ For example, if you distribute copies of the library, whether gratis
41
+ or for a fee, you must give the recipients all the rights that we gave
42
+ you. You must make sure that they, too, receive or can get the source
43
+ code. If you link other code with the library, you must provide
44
+ complete object files to the recipients, so that they can relink them
45
+ with the library after making changes to the library and recompiling
46
+ it. And you must show them these terms so they know their rights.
47
+
48
+ We protect your rights with a two-step method: (1) we copyright the
49
+ library, and (2) we offer you this license, which gives you legal
50
+ permission to copy, distribute and/or modify the library.
51
+
52
+ To protect each distributor, we want to make it very clear that
53
+ there is no warranty for the free library. Also, if the library is
54
+ modified by someone else and passed on, the recipients should know
55
+ that what they have is not the original version, so that the original
56
+ author's reputation will not be affected by problems that might be
57
+ introduced by others.
58
+
59
+ Finally, software patents pose a constant threat to the existence of
60
+ any free program. We wish to make sure that a company cannot
61
+ effectively restrict the users of a free program by obtaining a
62
+ restrictive license from a patent holder. Therefore, we insist that
63
+ any patent license obtained for a version of the library must be
64
+ consistent with the full freedom of use specified in this license.
65
+
66
+ Most GNU software, including some libraries, is covered by the
67
+ ordinary GNU General Public License. This license, the GNU Lesser
68
+ General Public License, applies to certain designated libraries, and
69
+ is quite different from the ordinary General Public License. We use
70
+ this license for certain libraries in order to permit linking those
71
+ libraries into non-free programs.
72
+
73
+ When a program is linked with a library, whether statically or using
74
+ a shared library, the combination of the two is legally speaking a
75
+ combined work, a derivative of the original library. The ordinary
76
+ General Public License therefore permits such linking only if the
77
+ entire combination fits its criteria of freedom. The Lesser General
78
+ Public License permits more lax criteria for linking other code with
79
+ the library.
80
+
81
+ We call this license the "Lesser" General Public License because it
82
+ does Less to protect the user's freedom than the ordinary General
83
+ Public License. It also provides other free software developers Less
84
+ of an advantage over competing non-free programs. These disadvantages
85
+ are the reason we use the ordinary General Public License for many
86
+ libraries. However, the Lesser license provides advantages in certain
87
+ special circumstances.
88
+
89
+ For example, on rare occasions, there may be a special need to
90
+ encourage the widest possible use of a certain library, so that it becomes
91
+ a de-facto standard. To achieve this, non-free programs must be
92
+ allowed to use the library. A more frequent case is that a free
93
+ library does the same job as widely used non-free libraries. In this
94
+ case, there is little to gain by limiting the free library to free
95
+ software only, so we use the Lesser General Public License.
96
+
97
+ In other cases, permission to use a particular library in non-free
98
+ programs enables a greater number of people to use a large body of
99
+ free software. For example, permission to use the GNU C Library in
100
+ non-free programs enables many more people to use the whole GNU
101
+ operating system, as well as its variant, the GNU/Linux operating
102
+ system.
103
+
104
+ Although the Lesser General Public License is Less protective of the
105
+ users' freedom, it does ensure that the user of a program that is
106
+ linked with the Library has the freedom and the wherewithal to run
107
+ that program using a modified version of the Library.
108
+
109
+ The precise terms and conditions for copying, distribution and
110
+ modification follow. Pay close attention to the difference between a
111
+ "work based on the library" and a "work that uses the library". The
112
+ former contains code derived from the library, whereas the latter must
113
+ be combined with the library in order to run.
114
+
115
+ GNU LESSER GENERAL PUBLIC LICENSE
116
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
+
118
+ 0. This License Agreement applies to any software library or other
119
+ program which contains a notice placed by the copyright holder or
120
+ other authorized party saying it may be distributed under the terms of
121
+ this Lesser General Public License (also called "this License").
122
+ Each licensee is addressed as "you".
123
+
124
+ A "library" means a collection of software functions and/or data
125
+ prepared so as to be conveniently linked with application programs
126
+ (which use some of those functions and data) to form executables.
127
+
128
+ The "Library", below, refers to any such software library or work
129
+ which has been distributed under these terms. A "work based on the
130
+ Library" means either the Library or any derivative work under
131
+ copyright law: that is to say, a work containing the Library or a
132
+ portion of it, either verbatim or with modifications and/or translated
133
+ straightforwardly into another language. (Hereinafter, translation is
134
+ included without limitation in the term "modification".)
135
+
136
+ "Source code" for a work means the preferred form of the work for
137
+ making modifications to it. For a library, complete source code means
138
+ all the source code for all modules it contains, plus any associated
139
+ interface definition files, plus the scripts used to control compilation
140
+ and installation of the library.
141
+
142
+ Activities other than copying, distribution and modification are not
143
+ covered by this License; they are outside its scope. The act of
144
+ running a program using the Library is not restricted, and output from
145
+ such a program is covered only if its contents constitute a work based
146
+ on the Library (independent of the use of the Library in a tool for
147
+ writing it). Whether that is true depends on what the Library does
148
+ and what the program that uses the Library does.
149
+
150
+ 1. You may copy and distribute verbatim copies of the Library's
151
+ complete source code as you receive it, in any medium, provided that
152
+ you conspicuously and appropriately publish on each copy an
153
+ appropriate copyright notice and disclaimer of warranty; keep intact
154
+ all the notices that refer to this License and to the absence of any
155
+ warranty; and distribute a copy of this License along with the
156
+ Library.
157
+
158
+ You may charge a fee for the physical act of transferring a copy,
159
+ and you may at your option offer warranty protection in exchange for a
160
+ fee.
161
+
162
+ 2. You may modify your copy or copies of the Library or any portion
163
+ of it, thus forming a work based on the Library, and copy and
164
+ distribute such modifications or work under the terms of Section 1
165
+ above, provided that you also meet all of these conditions:
166
+
167
+ a) The modified work must itself be a software library.
168
+
169
+ b) You must cause the files modified to carry prominent notices
170
+ stating that you changed the files and the date of any change.
171
+
172
+ c) You must cause the whole of the work to be licensed at no
173
+ charge to all third parties under the terms of this License.
174
+
175
+ d) If a facility in the modified Library refers to a function or a
176
+ table of data to be supplied by an application program that uses
177
+ the facility, other than as an argument passed when the facility
178
+ is invoked, then you must make a good faith effort to ensure that,
179
+ in the event an application does not supply such function or
180
+ table, the facility still operates, and performs whatever part of
181
+ its purpose remains meaningful.
182
+
183
+ (For example, a function in a library to compute square roots has
184
+ a purpose that is entirely well-defined independent of the
185
+ application. Therefore, Subsection 2d requires that any
186
+ application-supplied function or table used by this function must
187
+ be optional: if the application does not supply it, the square
188
+ root function must still compute square roots.)
189
+
190
+ These requirements apply to the modified work as a whole. If
191
+ identifiable sections of that work are not derived from the Library,
192
+ and can be reasonably considered independent and separate works in
193
+ themselves, then this License, and its terms, do not apply to those
194
+ sections when you distribute them as separate works. But when you
195
+ distribute the same sections as part of a whole which is a work based
196
+ on the Library, the distribution of the whole must be on the terms of
197
+ this License, whose permissions for other licensees extend to the
198
+ entire whole, and thus to each and every part regardless of who wrote
199
+ it.
200
+
201
+ Thus, it is not the intent of this section to claim rights or contest
202
+ your rights to work written entirely by you; rather, the intent is to
203
+ exercise the right to control the distribution of derivative or
204
+ collective works based on the Library.
205
+
206
+ In addition, mere aggregation of another work not based on the Library
207
+ with the Library (or with a work based on the Library) on a volume of
208
+ a storage or distribution medium does not bring the other work under
209
+ the scope of this License.
210
+
211
+ 3. You may opt to apply the terms of the ordinary GNU General Public
212
+ License instead of this License to a given copy of the Library. To do
213
+ this, you must alter all the notices that refer to this License, so
214
+ that they refer to the ordinary GNU General Public License, version 2,
215
+ instead of to this License. (If a newer version than version 2 of the
216
+ ordinary GNU General Public License has appeared, then you can specify
217
+ that version instead if you wish.) Do not make any other change in
218
+ these notices.
219
+
220
+ Once this change is made in a given copy, it is irreversible for
221
+ that copy, so the ordinary GNU General Public License applies to all
222
+ subsequent copies and derivative works made from that copy.
223
+
224
+ This option is useful when you wish to copy part of the code of
225
+ the Library into a program that is not a library.
226
+
227
+ 4. You may copy and distribute the Library (or a portion or
228
+ derivative of it, under Section 2) in object code or executable form
229
+ under the terms of Sections 1 and 2 above provided that you accompany
230
+ it with the complete corresponding machine-readable source code, which
231
+ must be distributed under the terms of Sections 1 and 2 above on a
232
+ medium customarily used for software interchange.
233
+
234
+ If distribution of object code is made by offering access to copy
235
+ from a designated place, then offering equivalent access to copy the
236
+ source code from the same place satisfies the requirement to
237
+ distribute the source code, even though third parties are not
238
+ compelled to copy the source along with the object code.
239
+
240
+ 5. A program that contains no derivative of any portion of the
241
+ Library, but is designed to work with the Library by being compiled or
242
+ linked with it, is called a "work that uses the Library". Such a
243
+ work, in isolation, is not a derivative work of the Library, and
244
+ therefore falls outside the scope of this License.
245
+
246
+ However, linking a "work that uses the Library" with the Library
247
+ creates an executable that is a derivative of the Library (because it
248
+ contains portions of the Library), rather than a "work that uses the
249
+ library". The executable is therefore covered by this License.
250
+ Section 6 states terms for distribution of such executables.
251
+
252
+ When a "work that uses the Library" uses material from a header file
253
+ that is part of the Library, the object code for the work may be a
254
+ derivative work of the Library even though the source code is not.
255
+ Whether this is true is especially significant if the work can be
256
+ linked without the Library, or if the work is itself a library. The
257
+ threshold for this to be true is not precisely defined by law.
258
+
259
+ If such an object file uses only numerical parameters, data
260
+ structure layouts and accessors, and small macros and small inline
261
+ functions (ten lines or less in length), then the use of the object
262
+ file is unrestricted, regardless of whether it is legally a derivative
263
+ work. (Executables containing this object code plus portions of the
264
+ Library will still fall under Section 6.)
265
+
266
+ Otherwise, if the work is a derivative of the Library, you may
267
+ distribute the object code for the work under the terms of Section 6.
268
+ Any executables containing that work also fall under Section 6,
269
+ whether or not they are linked directly with the Library itself.
270
+
271
+ 6. As an exception to the Sections above, you may also combine or
272
+ link a "work that uses the Library" with the Library to produce a
273
+ work containing portions of the Library, and distribute that work
274
+ under terms of your choice, provided that the terms permit
275
+ modification of the work for the customer's own use and reverse
276
+ engineering for debugging such modifications.
277
+
278
+ You must give prominent notice with each copy of the work that the
279
+ Library is used in it and that the Library and its use are covered by
280
+ this License. You must supply a copy of this License. If the work
281
+ during execution displays copyright notices, you must include the
282
+ copyright notice for the Library among them, as well as a reference
283
+ directing the user to the copy of this License. Also, you must do one
284
+ of these things:
285
+
286
+ a) Accompany the work with the complete corresponding
287
+ machine-readable source code for the Library including whatever
288
+ changes were used in the work (which must be distributed under
289
+ Sections 1 and 2 above); and, if the work is an executable linked
290
+ with the Library, with the complete machine-readable "work that
291
+ uses the Library", as object code and/or source code, so that the
292
+ user can modify the Library and then relink to produce a modified
293
+ executable containing the modified Library. (It is understood
294
+ that the user who changes the contents of definitions files in the
295
+ Library will not necessarily be able to recompile the application
296
+ to use the modified definitions.)
297
+
298
+ b) Use a suitable shared library mechanism for linking with the
299
+ Library. A suitable mechanism is one that (1) uses at run time a
300
+ copy of the library already present on the user's computer system,
301
+ rather than copying library functions into the executable, and (2)
302
+ will operate properly with a modified version of the library, if
303
+ the user installs one, as long as the modified version is
304
+ interface-compatible with the version that the work was made with.
305
+
306
+ c) Accompany the work with a written offer, valid for at
307
+ least three years, to give the same user the materials
308
+ specified in Subsection 6a, above, for a charge no more
309
+ than the cost of performing this distribution.
310
+
311
+ d) If distribution of the work is made by offering access to copy
312
+ from a designated place, offer equivalent access to copy the above
313
+ specified materials from the same place.
314
+
315
+ e) Verify that the user has already received a copy of these
316
+ materials or that you have already sent this user a copy.
317
+
318
+ For an executable, the required form of the "work that uses the
319
+ Library" must include any data and utility programs needed for
320
+ reproducing the executable from it. However, as a special exception,
321
+ the materials to be distributed need not include anything that is
322
+ normally distributed (in either source or binary form) with the major
323
+ components (compiler, kernel, and so on) of the operating system on
324
+ which the executable runs, unless that component itself accompanies
325
+ the executable.
326
+
327
+ It may happen that this requirement contradicts the license
328
+ restrictions of other proprietary libraries that do not normally
329
+ accompany the operating system. Such a contradiction means you cannot
330
+ use both them and the Library together in an executable that you
331
+ distribute.
332
+
333
+ 7. You may place library facilities that are a work based on the
334
+ Library side-by-side in a single library together with other library
335
+ facilities not covered by this License, and distribute such a combined
336
+ library, provided that the separate distribution of the work based on
337
+ the Library and of the other library facilities is otherwise
338
+ permitted, and provided that you do these two things:
339
+
340
+ a) Accompany the combined library with a copy of the same work
341
+ based on the Library, uncombined with any other library
342
+ facilities. This must be distributed under the terms of the
343
+ Sections above.
344
+
345
+ b) Give prominent notice with the combined library of the fact
346
+ that part of it is a work based on the Library, and explaining
347
+ where to find the accompanying uncombined form of the same work.
348
+
349
+ 8. You may not copy, modify, sublicense, link with, or distribute
350
+ the Library except as expressly provided under this License. Any
351
+ attempt otherwise to copy, modify, sublicense, link with, or
352
+ distribute the Library is void, and will automatically terminate your
353
+ rights under this License. However, parties who have received copies,
354
+ or rights, from you under this License will not have their licenses
355
+ terminated so long as such parties remain in full compliance.
356
+
357
+ 9. You are not required to accept this License, since you have not
358
+ signed it. However, nothing else grants you permission to modify or
359
+ distribute the Library or its derivative works. These actions are
360
+ prohibited by law if you do not accept this License. Therefore, by
361
+ modifying or distributing the Library (or any work based on the
362
+ Library), you indicate your acceptance of this License to do so, and
363
+ all its terms and conditions for copying, distributing or modifying
364
+ the Library or works based on it.
365
+
366
+ 10. Each time you redistribute the Library (or any work based on the
367
+ Library), the recipient automatically receives a license from the
368
+ original licensor to copy, distribute, link with or modify the Library
369
+ subject to these terms and conditions. You may not impose any further
370
+ restrictions on the recipients' exercise of the rights granted herein.
371
+ You are not responsible for enforcing compliance by third parties with
372
+ this License.
373
+
374
+ 11. If, as a consequence of a court judgment or allegation of patent
375
+ infringement or for any other reason (not limited to patent issues),
376
+ conditions are imposed on you (whether by court order, agreement or
377
+ otherwise) that contradict the conditions of this License, they do not
378
+ excuse you from the conditions of this License. If you cannot
379
+ distribute so as to satisfy simultaneously your obligations under this
380
+ License and any other pertinent obligations, then as a consequence you
381
+ may not distribute the Library at all. For example, if a patent
382
+ license would not permit royalty-free redistribution of the Library by
383
+ all those who receive copies directly or indirectly through you, then
384
+ the only way you could satisfy both it and this License would be to
385
+ refrain entirely from distribution of the Library.
386
+
387
+ If any portion of this section is held invalid or unenforceable under any
388
+ particular circumstance, the balance of the section is intended to apply,
389
+ and the section as a whole is intended to apply in other circumstances.
390
+
391
+ It is not the purpose of this section to induce you to infringe any
392
+ patents or other property right claims or to contest validity of any
393
+ such claims; this section has the sole purpose of protecting the
394
+ integrity of the free software distribution system which is
395
+ implemented by public license practices. Many people have made
396
+ generous contributions to the wide range of software distributed
397
+ through that system in reliance on consistent application of that
398
+ system; it is up to the author/donor to decide if he or she is willing
399
+ to distribute software through any other system and a licensee cannot
400
+ impose that choice.
401
+
402
+ This section is intended to make thoroughly clear what is believed to
403
+ be a consequence of the rest of this License.
404
+
405
+ 12. If the distribution and/or use of the Library is restricted in
406
+ certain countries either by patents or by copyrighted interfaces, the
407
+ original copyright holder who places the Library under this License may add
408
+ an explicit geographical distribution limitation excluding those countries,
409
+ so that distribution is permitted only in or among countries not thus
410
+ excluded. In such case, this License incorporates the limitation as if
411
+ written in the body of this License.
412
+
413
+ 13. The Free Software Foundation may publish revised and/or new
414
+ versions of the Lesser General Public License from time to time.
415
+ Such new versions will be similar in spirit to the present version,
416
+ but may differ in detail to address new problems or concerns.
417
+
418
+ Each version is given a distinguishing version number. If the Library
419
+ specifies a version number of this License which applies to it and
420
+ "any later version", you have the option of following the terms and
421
+ conditions either of that version or of any later version published by
422
+ the Free Software Foundation. If the Library does not specify a
423
+ license version number, you may choose any version ever published by
424
+ the Free Software Foundation.
425
+
426
+ 14. If you wish to incorporate parts of the Library into other free
427
+ programs whose distribution conditions are incompatible with these,
428
+ write to the author to ask for permission. For software which is
429
+ copyrighted by the Free Software Foundation, write to the Free
430
+ Software Foundation; we sometimes make exceptions for this. Our
431
+ decision will be guided by the two goals of preserving the free status
432
+ of all derivatives of our free software and of promoting the sharing
433
+ and reuse of software generally.
434
+
435
+ NO WARRANTY
436
+
437
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
+ LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
+ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
+
447
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
+ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
+ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
+ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
+ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
+ DAMAGES.
457
+
458
+ END OF TERMS AND CONDITIONS
459
+
460
+ How to Apply These Terms to Your New Libraries
461
+
462
+ If you develop a new library, and you want it to be of the greatest
463
+ possible use to the public, we recommend making it free software that
464
+ everyone can redistribute and change. You can do so by permitting
465
+ redistribution under these terms (or, alternatively, under the terms of the
466
+ ordinary General Public License).
467
+
468
+ To apply these terms, attach the following notices to the library. It is
469
+ safest to attach them to the start of each source file to most effectively
470
+ convey the exclusion of warranty; and each file should have at least the
471
+ "copyright" line and a pointer to where the full notice is found.
472
+
473
+ <one line to give the library's name and a brief idea of what it does.>
474
+ Copyright (C) <year> <name of author>
475
+
476
+ This library is free software; you can redistribute it and/or
477
+ modify it under the terms of the GNU Lesser General Public
478
+ License as published by the Free Software Foundation; either
479
+ version 2.1 of the License, or (at your option) any later version.
480
+
481
+ This library is distributed in the hope that it will be useful,
482
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
483
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
+ Lesser General Public License for more details.
485
+
486
+ You should have received a copy of the GNU Lesser General Public
487
+ License along with this library; if not, write to the Free Software
488
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
489
+
490
+ Also add information on how to contact you by electronic and paper mail.
491
+
492
+ You should also get your employer (if you work as a programmer) or your
493
+ school, if any, to sign a "copyright disclaimer" for the library, if
494
+ necessary. Here is a sample; alter the names:
495
+
496
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
+
499
+ <signature of Ty Coon>, 1 April 1990
500
+ Ty Coon, President of Vice
501
+
502
+ That's all there is to it!
503
+
504
+
js/libraries/tiny_mce/plugins/advhr/css/advhr.css CHANGED
@@ -1,5 +1,5 @@
1
- input.radio {border:1px none #000; background:transparent; vertical-align:middle;}
2
- .panel_wrapper div.current {height:80px;}
3
- #width {width:50px; vertical-align:middle;}
4
- #width2 {width:50px; vertical-align:middle;}
5
- #size {width:100px;}
1
+ input.radio {border:1px none #000; background:transparent; vertical-align:middle;}
2
+ .panel_wrapper div.current {height:80px;}
3
+ #width {width:50px; vertical-align:middle;}
4
+ #width2 {width:50px; vertical-align:middle;}
5
+ #size {width:100px;}
js/libraries/tiny_mce/plugins/advhr/editor_plugin_src.js CHANGED
@@ -1,57 +1,57 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- tinymce.create('tinymce.plugins.AdvancedHRPlugin', {
13
- init : function(ed, url) {
14
- // Register commands
15
- ed.addCommand('mceAdvancedHr', function() {
16
- ed.windowManager.open({
17
- file : url + '/rule.htm',
18
- width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),
19
- height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),
20
- inline : 1
21
- }, {
22
- plugin_url : url
23
- });
24
- });
25
-
26
- // Register buttons
27
- ed.addButton('advhr', {
28
- title : 'advhr.advhr_desc',
29
- cmd : 'mceAdvancedHr'
30
- });
31
-
32
- ed.onNodeChange.add(function(ed, cm, n) {
33
- cm.setActive('advhr', n.nodeName == 'HR');
34
- });
35
-
36
- ed.onClick.add(function(ed, e) {
37
- e = e.target;
38
-
39
- if (e.nodeName === 'HR')
40
- ed.selection.select(e);
41
- });
42
- },
43
-
44
- getInfo : function() {
45
- return {
46
- longname : 'Advanced HR',
47
- author : 'Moxiecode Systems AB',
48
- authorurl : 'http://tinymce.moxiecode.com',
49
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',
50
- version : tinymce.majorVersion + "." + tinymce.minorVersion
51
- };
52
- }
53
- });
54
-
55
- // Register plugin
56
- tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);
57
  })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ tinymce.create('tinymce.plugins.AdvancedHRPlugin', {
13
+ init : function(ed, url) {
14
+ // Register commands
15
+ ed.addCommand('mceAdvancedHr', function() {
16
+ ed.windowManager.open({
17
+ file : url + '/rule.htm',
18
+ width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),
19
+ height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),
20
+ inline : 1
21
+ }, {
22
+ plugin_url : url
23
+ });
24
+ });
25
+
26
+ // Register buttons
27
+ ed.addButton('advhr', {
28
+ title : 'advhr.advhr_desc',
29
+ cmd : 'mceAdvancedHr'
30
+ });
31
+
32
+ ed.onNodeChange.add(function(ed, cm, n) {
33
+ cm.setActive('advhr', n.nodeName == 'HR');
34
+ });
35
+
36
+ ed.onClick.add(function(ed, e) {
37
+ e = e.target;
38
+
39
+ if (e.nodeName === 'HR')
40
+ ed.selection.select(e);
41
+ });
42
+ },
43
+
44
+ getInfo : function() {
45
+ return {
46
+ longname : 'Advanced HR',
47
+ author : 'Moxiecode Systems AB',
48
+ authorurl : 'http://tinymce.moxiecode.com',
49
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',
50
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
51
+ };
52
+ }
53
+ });
54
+
55
+ // Register plugin
56
+ tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);
57
  })();
js/libraries/tiny_mce/plugins/advhr/js/rule.js CHANGED
@@ -1,43 +1,43 @@
1
- var AdvHRDialog = {
2
- init : function(ed) {
3
- var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;
4
-
5
- w = dom.getAttrib(n, 'width');
6
- f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');
7
- f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';
8
- f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');
9
- selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');
10
- },
11
-
12
- update : function() {
13
- var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';
14
-
15
- h = '<hr';
16
-
17
- if (f.size.value) {
18
- h += ' size="' + f.size.value + '"';
19
- st += ' height:' + f.size.value + 'px;';
20
- }
21
-
22
- if (f.width.value) {
23
- h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';
24
- st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';
25
- }
26
-
27
- if (f.noshade.checked) {
28
- h += ' noshade="noshade"';
29
- st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';
30
- }
31
-
32
- if (ed.settings.inline_styles)
33
- h += ' style="' + tinymce.trim(st) + '"';
34
-
35
- h += ' />';
36
-
37
- ed.execCommand("mceInsertContent", false, h);
38
- tinyMCEPopup.close();
39
- }
40
- };
41
-
42
- tinyMCEPopup.requireLangPack();
43
- tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);
1
+ var AdvHRDialog = {
2
+ init : function(ed) {
3
+ var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;
4
+
5
+ w = dom.getAttrib(n, 'width');
6
+ f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');
7
+ f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';
8
+ f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');
9
+ selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');
10
+ },
11
+
12
+ update : function() {
13
+ var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';
14
+
15
+ h = '<hr';
16
+
17
+ if (f.size.value) {
18
+ h += ' size="' + f.size.value + '"';
19
+ st += ' height:' + f.size.value + 'px;';
20
+ }
21
+
22
+ if (f.width.value) {
23
+ h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';
24
+ st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';
25
+ }
26
+
27
+ if (f.noshade.checked) {
28
+ h += ' noshade="noshade"';
29
+ st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';
30
+ }
31
+
32
+ if (ed.settings.inline_styles)
33
+ h += ' style="' + tinymce.trim(st) + '"';
34
+
35
+ h += ' />';
36
+
37
+ ed.execCommand("mceInsertContent", false, h);
38
+ tinyMCEPopup.close();
39
+ }
40
+ };
41
+
42
+ tinyMCEPopup.requireLangPack();
43
+ tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);
js/libraries/tiny_mce/plugins/advhr/rule.htm CHANGED
@@ -1,58 +1,58 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#advhr.advhr_desc}</title>
5
- <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="js/rule.js"></script>
7
- <script type="text/javascript" src="../../utils/mctabs.js"></script>
8
- <script type="text/javascript" src="../../utils/form_utils.js"></script>
9
- <link href="css/advhr.css" rel="stylesheet" type="text/css" />
10
- </head>
11
- <body role="application">
12
- <form onsubmit="AdvHRDialog.update();return false;" action="#">
13
- <div class="tabs">
14
- <ul>
15
- <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>
16
- </ul>
17
- </div>
18
-
19
- <div class="panel_wrapper">
20
- <div id="general_panel" class="panel current">
21
- <table role="presentation" border="0" cellpadding="4" cellspacing="0">
22
- <tr role="group" aria-labelledby="width_label">
23
- <td><label id="width_label" for="width">{#advhr_dlg.width}</label></td>
24
- <td class="nowrap">
25
- <input id="width" name="width" type="text" value="" class="mceFocus" />
26
- <span style="display:none;" id="width_unit_label">{#advhr_dlg.widthunits}</span>
27
- <select name="width2" id="width2" aria-labelledby="width_unit_label">
28
- <option value="">px</option>
29
- <option value="%">%</option>
30
- </select>
31
- </td>
32
- </tr>
33
- <tr>
34
- <td><label for="size">{#advhr_dlg.size}</label></td>
35
- <td><select id="size" name="size">
36
- <option value="">{#advhr_dlg.normal}</option>
37
- <option value="1">1</option>
38
- <option value="2">2</option>
39
- <option value="3">3</option>
40
- <option value="4">4</option>
41
- <option value="5">5</option>
42
- </select></td>
43
- </tr>
44
- <tr>
45
- <td><label for="noshade">{#advhr_dlg.noshade}</label></td>
46
- <td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>
47
- </tr>
48
- </table>
49
- </div>
50
- </div>
51
-
52
- <div class="mceActionPanel">
53
- <input type="submit" id="insert" name="insert" value="{#insert}" />
54
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
55
- </div>
56
- </form>
57
- </body>
58
- </html>
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advhr.advhr_desc}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="js/rule.js"></script>
7
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
8
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
9
+ <link href="css/advhr.css" rel="stylesheet" type="text/css" />
10
+ </head>
11
+ <body role="application">
12
+ <form onsubmit="AdvHRDialog.update();return false;" action="#">
13
+ <div class="tabs">
14
+ <ul>
15
+ <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>
16
+ </ul>
17
+ </div>
18
+
19
+ <div class="panel_wrapper">
20
+ <div id="general_panel" class="panel current">
21
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
22
+ <tr role="group" aria-labelledby="width_label">
23
+ <td><label id="width_label" for="width">{#advhr_dlg.width}</label></td>
24
+ <td class="nowrap">
25
+ <input id="width" name="width" type="text" value="" class="mceFocus" />
26
+ <span style="display:none;" id="width_unit_label">{#advhr_dlg.widthunits}</span>
27
+ <select name="width2" id="width2" aria-labelledby="width_unit_label">
28
+ <option value="">px</option>
29
+ <option value="%">%</option>
30
+ </select>
31
+ </td>
32
+ </tr>
33
+ <tr>
34
+ <td><label for="size">{#advhr_dlg.size}</label></td>
35
+ <td><select id="size" name="size">
36
+ <option value="">{#advhr_dlg.normal}</option>
37
+ <option value="1">1</option>
38
+ <option value="2">2</option>
39
+ <option value="3">3</option>
40
+ <option value="4">4</option>
41
+ <option value="5">5</option>
42
+ </select></td>
43
+ </tr>
44
+ <tr>
45
+ <td><label for="noshade">{#advhr_dlg.noshade}</label></td>
46
+ <td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>
47
+ </tr>
48
+ </table>
49
+ </div>
50
+ </div>
51
+
52
+ <div class="mceActionPanel">
53
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
54
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
55
+ </div>
56
+ </form>
57
+ </body>
58
+ </html>
js/libraries/tiny_mce/plugins/advimage/css/advimage.css CHANGED
@@ -1,13 +1,13 @@
1
- #src_list, #over_list, #out_list {width:280px;}
2
- .mceActionPanel {margin-top:7px;}
3
- .alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}
4
- .checkbox {border:0;}
5
- .panel_wrapper div.current {height:305px;}
6
- #prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}
7
- #align, #classlist {width:150px;}
8
- #width, #height {vertical-align:middle; width:50px; text-align:center;}
9
- #vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}
10
- #class_list {width:180px;}
11
- input {width: 280px;}
12
- #constrain, #onmousemovecheck {width:auto;}
13
- #id, #dir, #lang, #usemap, #longdesc {width:200px;}
1
+ #src_list, #over_list, #out_list {width:280px;}
2
+ .mceActionPanel {margin-top:7px;}
3
+ .alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}
4
+ .checkbox {border:0;}
5
+ .panel_wrapper div.current {height:305px;}
6
+ #prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}
7
+ #align, #classlist {width:150px;}
8
+ #width, #height {vertical-align:middle; width:50px; text-align:center;}
9
+ #vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}
10
+ #class_list {width:180px;}
11
+ input {width: 280px;}
12
+ #constrain, #onmousemovecheck {width:auto;}
13
+ #id, #dir, #lang, #usemap, #longdesc {width:200px;}
js/libraries/tiny_mce/plugins/advimage/editor_plugin_src.js CHANGED
@@ -1,50 +1,50 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- tinymce.create('tinymce.plugins.AdvancedImagePlugin', {
13
- init : function(ed, url) {
14
- // Register commands
15
- ed.addCommand('mceAdvImage', function() {
16
- // Internal image object like a flash placeholder
17
- if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1)
18
- return;
19
-
20
- ed.windowManager.open({
21
- file : url + '/image.htm',
22
- width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),
23
- height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),
24
- inline : 1
25
- }, {
26
- plugin_url : url
27
- });
28
- });
29
-
30
- // Register buttons
31
- ed.addButton('image', {
32
- title : 'advimage.image_desc',
33
- cmd : 'mceAdvImage'
34
- });
35
- },
36
-
37
- getInfo : function() {
38
- return {
39
- longname : 'Advanced image',
40
- author : 'Moxiecode Systems AB',
41
- authorurl : 'http://tinymce.moxiecode.com',
42
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',
43
- version : tinymce.majorVersion + "." + tinymce.minorVersion
44
- };
45
- }
46
- });
47
-
48
- // Register plugin
49
- tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);
50
  })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ tinymce.create('tinymce.plugins.AdvancedImagePlugin', {
13
+ init : function(ed, url) {
14
+ // Register commands
15
+ ed.addCommand('mceAdvImage', function() {
16
+ // Internal image object like a flash placeholder
17
+ if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1)
18
+ return;
19
+
20
+ ed.windowManager.open({
21
+ file : url + '/image.htm',
22
+ width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),
23
+ height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),
24
+ inline : 1
25
+ }, {
26
+ plugin_url : url
27
+ });
28
+ });
29
+
30
+ // Register buttons
31
+ ed.addButton('image', {
32
+ title : 'advimage.image_desc',
33
+ cmd : 'mceAdvImage'
34
+ });
35
+ },
36
+
37
+ getInfo : function() {
38
+ return {
39
+ longname : 'Advanced image',
40
+ author : 'Moxiecode Systems AB',
41
+ authorurl : 'http://tinymce.moxiecode.com',
42
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',
43
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
44
+ };
45
+ }
46
+ });
47
+
48
+ // Register plugin
49
+ tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);
50
  })();
js/libraries/tiny_mce/plugins/advimage/image.htm CHANGED
@@ -1,235 +1,235 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#advimage_dlg.dialog_title}</title>
5
- <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
- <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
- <script type="text/javascript" src="../../utils/validate.js"></script>
9
- <script type="text/javascript" src="../../utils/editable_selects.js"></script>
10
- <script type="text/javascript" src="js/image.js"></script>
11
- <link href="css/advimage.css" rel="stylesheet" type="text/css" />
12
- </head>
13
- <body id="advimage" style="display: none" role="application" aria-labelledby="app_title">
14
- <span id="app_title" style="display:none">{#advimage_dlg.dialog_title}</span>
15
- <form onsubmit="ImageDialog.insert();return false;" action="#">
16
- <div class="tabs">
17
- <ul>
18
- <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>
19
- <li id="appearance_tab" aria-controls="appearance_panel"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>
20
- <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>
21
- </ul>
22
- </div>
23
-
24
- <div class="panel_wrapper">
25
- <div id="general_panel" class="panel current">
26
- <fieldset>
27
- <legend>{#advimage_dlg.general}</legend>
28
-
29
- <table role="presentation" class="properties">
30
- <tr>
31
- <td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>
32
- <td colspan="2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
33
- <tr>
34
- <td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td>
35
- <td id="srcbrowsercontainer">&nbsp;</td>
36
- </tr>
37
- </table></td>
38
- </tr>
39
- <tr>
40
- <td><label for="src_list">{#advimage_dlg.image_list}</label></td>
41
- <td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>
42
- </tr>
43
- <tr>
44
- <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td>
45
- <td colspan="2"><input id="alt" name="alt" type="text" value="" /></td>
46
- </tr>
47
- <tr>
48
- <td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td>
49
- <td colspan="2"><input id="title" name="title" type="text" value="" /></td>
50
- </tr>
51
- </table>
52
- </fieldset>
53
-
54
- <fieldset>
55
- <legend>{#advimage_dlg.preview}</legend>
56
- <div id="prev"></div>
57
- </fieldset>
58
- </div>
59
-
60
- <div id="appearance_panel" class="panel">
61
- <fieldset>
62
- <legend>{#advimage_dlg.tab_appearance}</legend>
63
-
64
- <table role="presentation" border="0" cellpadding="4" cellspacing="0">
65
- <tr>
66
- <td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td>
67
- <td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();">
68
- <option value="">{#not_set}</option>
69
- <option value="baseline">{#advimage_dlg.align_baseline}</option>
70
- <option value="top">{#advimage_dlg.align_top}</option>
71
- <option value="middle">{#advimage_dlg.align_middle}</option>
72
- <option value="bottom">{#advimage_dlg.align_bottom}</option>
73
- <option value="text-top">{#advimage_dlg.align_texttop}</option>
74
- <option value="text-bottom">{#advimage_dlg.align_textbottom}</option>
75
- <option value="left">{#advimage_dlg.align_left}</option>
76
- <option value="right">{#advimage_dlg.align_right}</option>
77
- </select>
78
- </td>
79
- <td rowspan="6" valign="top">
80
- <div class="alignPreview">
81
- <img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />
82
- Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam
83
- nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum
84
- edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam
85
- erat volutpat.
86
- </div>
87
- </td>
88
- </tr>
89
-
90
- <tr role="group" aria-labelledby="widthlabel">
91
- <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>
92
- <td class="nowrap">
93
- <span style="display:none" id="width_voiceLabel">{#advimage_dlg.width}</span>
94
- <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" aria-labelledby="width_voiceLabel" /> x
95
- <span style="display:none" id="height_voiceLabel">{#advimage_dlg.height}</span>
96
- <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" aria-labelledby="height_voiceLabel" /> px
97
- </td>
98
- </tr>
99
-
100
- <tr>
101
- <td>&nbsp;</td>
102
- <td><table role="presentation" border="0" cellpadding="0" cellspacing="0">
103
- <tr>
104
- <td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
105
- <td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>
106
- </tr>
107
- </table></td>
108
- </tr>
109
-
110
- <tr>
111
- <td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td>
112
- <td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" />
113
- </td>
114
- </tr>
115
-
116
- <tr>
117
- <td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td>
118
- <td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td>
119
- </tr>
120
-
121
- <tr>
122
- <td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td>
123
- <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td>
124
- </tr>
125
-
126
- <tr>
127
- <td><label for="class_list">{#class_name}</label></td>
128
- <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>
129
- </tr>
130
-
131
- <tr>
132
- <td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td>
133
- <td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td>
134
- </tr>
135
-
136
- <!-- <tr>
137
- <td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td>
138
- <td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
139
- </tr> -->
140
- </table>
141
- </fieldset>
142
- </div>
143
-
144
- <div id="advanced_panel" class="panel">
145
- <fieldset>
146
- <legend>{#advimage_dlg.swap_image}</legend>
147
-
148
- <input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" aria-controls="onmouseoversrc onmouseoutsrc" />
149
- <label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>
150
-
151
- <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
152
- <tr>
153
- <td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td>
154
- <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
155
- <tr>
156
- <td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td>
157
- <td id="onmouseoversrccontainer">&nbsp;</td>
158
- </tr>
159
- </table></td>
160
- </tr>
161
- <tr>
162
- <td><label for="over_list">{#advimage_dlg.image_list}</label></td>
163
- <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
164
- </tr>
165
- <tr>
166
- <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td>
167
- <td class="column2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
168
- <tr>
169
- <td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td>
170
- <td id="onmouseoutsrccontainer">&nbsp;</td>
171
- </tr>
172
- </table></td>
173
- </tr>
174
- <tr>
175
- <td><label for="out_list">{#advimage_dlg.image_list}</label></td>
176
- <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
177
- </tr>
178
- </table>
179
- </fieldset>
180
-
181
- <fieldset>
182
- <legend>{#advimage_dlg.misc}</legend>
183
-
184
- <table role="presentation" border="0" cellpadding="4" cellspacing="0">
185
- <tr>
186
- <td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td>
187
- <td><input id="id" name="id" type="text" value="" /></td>
188
- </tr>
189
-
190
- <tr>
191
- <td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td>
192
- <td>
193
- <select id="dir" name="dir" onchange="ImageDialog.changeAppearance();">
194
- <option value="">{#not_set}</option>
195
- <option value="ltr">{#advimage_dlg.ltr}</option>
196
- <option value="rtl">{#advimage_dlg.rtl}</option>
197
- </select>
198
- </td>
199
- </tr>
200
-
201
- <tr>
202
- <td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td>
203
- <td>
204
- <input id="lang" name="lang" type="text" value="" />
205
- </td>
206
- </tr>
207
-
208
- <tr>
209
- <td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td>
210
- <td>
211
- <input id="usemap" name="usemap" type="text" value="" />
212
- </td>
213
- </tr>
214
-
215
- <tr>
216
- <td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>
217
- <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
218
- <tr>
219
- <td><input id="longdesc" name="longdesc" type="text" value="" /></td>
220
- <td id="longdesccontainer">&nbsp;</td>
221
- </tr>
222
- </table></td>
223
- </tr>
224
- </table>
225
- </fieldset>
226
- </div>
227
- </div>
228
-
229
- <div class="mceActionPanel">
230
- <input type="submit" id="insert" name="insert" value="{#insert}" />
231
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
232
- </div>
233
- </form>
234
- </body>
235
- </html>
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advimage_dlg.dialog_title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../utils/validate.js"></script>
9
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
10
+ <script type="text/javascript" src="js/image.js"></script>
11
+ <link href="css/advimage.css" rel="stylesheet" type="text/css" />
12
+ </head>
13
+ <body id="advimage" style="display: none" role="application" aria-labelledby="app_title">
14
+ <span id="app_title" style="display:none">{#advimage_dlg.dialog_title}</span>
15
+ <form onsubmit="ImageDialog.insert();return false;" action="#">
16
+ <div class="tabs">
17
+ <ul>
18
+ <li id="general_tab" class="current" aria-controls="general_panel"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>
19
+ <li id="appearance_tab" aria-controls="appearance_panel"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>
20
+ <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>
21
+ </ul>
22
+ </div>
23
+
24
+ <div class="panel_wrapper">
25
+ <div id="general_panel" class="panel current">
26
+ <fieldset>
27
+ <legend>{#advimage_dlg.general}</legend>
28
+
29
+ <table role="presentation" class="properties">
30
+ <tr>
31
+ <td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>
32
+ <td colspan="2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
33
+ <tr>
34
+ <td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td>
35
+ <td id="srcbrowsercontainer">&nbsp;</td>
36
+ </tr>
37
+ </table></td>
38
+ </tr>
39
+ <tr>
40
+ <td><label for="src_list">{#advimage_dlg.image_list}</label></td>
41
+ <td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>
42
+ </tr>
43
+ <tr>
44
+ <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td>
45
+ <td colspan="2"><input id="alt" name="alt" type="text" value="" /></td>
46
+ </tr>
47
+ <tr>
48
+ <td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td>
49
+ <td colspan="2"><input id="title" name="title" type="text" value="" /></td>
50
+ </tr>
51
+ </table>
52
+ </fieldset>
53
+
54
+ <fieldset>
55
+ <legend>{#advimage_dlg.preview}</legend>
56
+ <div id="prev"></div>
57
+ </fieldset>
58
+ </div>
59
+
60
+ <div id="appearance_panel" class="panel">
61
+ <fieldset>
62
+ <legend>{#advimage_dlg.tab_appearance}</legend>
63
+
64
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
65
+ <tr>
66
+ <td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td>
67
+ <td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();">
68
+ <option value="">{#not_set}</option>
69
+ <option value="baseline">{#advimage_dlg.align_baseline}</option>
70
+ <option value="top">{#advimage_dlg.align_top}</option>
71
+ <option value="middle">{#advimage_dlg.align_middle}</option>
72
+ <option value="bottom">{#advimage_dlg.align_bottom}</option>
73
+ <option value="text-top">{#advimage_dlg.align_texttop}</option>
74
+ <option value="text-bottom">{#advimage_dlg.align_textbottom}</option>
75
+ <option value="left">{#advimage_dlg.align_left}</option>
76
+ <option value="right">{#advimage_dlg.align_right}</option>
77
+ </select>
78
+ </td>
79
+ <td rowspan="6" valign="top">
80
+ <div class="alignPreview">
81
+ <img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />
82
+ Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam
83
+ nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum
84
+ edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam
85
+ erat volutpat.
86
+ </div>
87
+ </td>
88
+ </tr>
89
+
90
+ <tr role="group" aria-labelledby="widthlabel">
91
+ <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>
92
+ <td class="nowrap">
93
+ <span style="display:none" id="width_voiceLabel">{#advimage_dlg.width}</span>
94
+ <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" aria-labelledby="width_voiceLabel" /> x
95
+ <span style="display:none" id="height_voiceLabel">{#advimage_dlg.height}</span>
96
+ <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" aria-labelledby="height_voiceLabel" /> px
97
+ </td>
98
+ </tr>
99
+
100
+ <tr>
101
+ <td>&nbsp;</td>
102
+ <td><table role="presentation" border="0" cellpadding="0" cellspacing="0">
103
+ <tr>
104
+ <td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
105
+ <td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>
106
+ </tr>
107
+ </table></td>
108
+ </tr>
109
+
110
+ <tr>
111
+ <td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td>
112
+ <td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" />
113
+ </td>
114
+ </tr>
115
+
116
+ <tr>
117
+ <td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td>
118
+ <td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td>
119
+ </tr>
120
+
121
+ <tr>
122
+ <td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td>
123
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td>
124
+ </tr>
125
+
126
+ <tr>
127
+ <td><label for="class_list">{#class_name}</label></td>
128
+ <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>
129
+ </tr>
130
+
131
+ <tr>
132
+ <td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td>
133
+ <td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td>
134
+ </tr>
135
+
136
+ <!-- <tr>
137
+ <td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td>
138
+ <td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
139
+ </tr> -->
140
+ </table>
141
+ </fieldset>
142
+ </div>
143
+
144
+ <div id="advanced_panel" class="panel">
145
+ <fieldset>
146
+ <legend>{#advimage_dlg.swap_image}</legend>
147
+
148
+ <input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" aria-controls="onmouseoversrc onmouseoutsrc" />
149
+ <label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>
150
+
151
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
152
+ <tr>
153
+ <td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td>
154
+ <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
155
+ <tr>
156
+ <td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td>
157
+ <td id="onmouseoversrccontainer">&nbsp;</td>
158
+ </tr>
159
+ </table></td>
160
+ </tr>
161
+ <tr>
162
+ <td><label for="over_list">{#advimage_dlg.image_list}</label></td>
163
+ <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
164
+ </tr>
165
+ <tr>
166
+ <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td>
167
+ <td class="column2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
168
+ <tr>
169
+ <td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td>
170
+ <td id="onmouseoutsrccontainer">&nbsp;</td>
171
+ </tr>
172
+ </table></td>
173
+ </tr>
174
+ <tr>
175
+ <td><label for="out_list">{#advimage_dlg.image_list}</label></td>
176
+ <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
177
+ </tr>
178
+ </table>
179
+ </fieldset>
180
+
181
+ <fieldset>
182
+ <legend>{#advimage_dlg.misc}</legend>
183
+
184
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
185
+ <tr>
186
+ <td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td>
187
+ <td><input id="id" name="id" type="text" value="" /></td>
188
+ </tr>
189
+
190
+ <tr>
191
+ <td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td>
192
+ <td>
193
+ <select id="dir" name="dir" onchange="ImageDialog.changeAppearance();">
194
+ <option value="">{#not_set}</option>
195
+ <option value="ltr">{#advimage_dlg.ltr}</option>
196
+ <option value="rtl">{#advimage_dlg.rtl}</option>
197
+ </select>
198
+ </td>
199
+ </tr>
200
+
201
+ <tr>
202
+ <td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td>
203
+ <td>
204
+ <input id="lang" name="lang" type="text" value="" />
205
+ </td>
206
+ </tr>
207
+
208
+ <tr>
209
+ <td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td>
210
+ <td>
211
+ <input id="usemap" name="usemap" type="text" value="" />
212
+ </td>
213
+ </tr>
214
+
215
+ <tr>
216
+ <td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>
217
+ <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
218
+ <tr>
219
+ <td><input id="longdesc" name="longdesc" type="text" value="" /></td>
220
+ <td id="longdesccontainer">&nbsp;</td>
221
+ </tr>
222
+ </table></td>
223
+ </tr>
224
+ </table>
225
+ </fieldset>
226
+ </div>
227
+ </div>
228
+
229
+ <div class="mceActionPanel">
230
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
231
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
232
+ </div>
233
+ </form>
234
+ </body>
235
+ </html>
js/libraries/tiny_mce/plugins/advimage/js/image.js CHANGED
@@ -1,464 +1,464 @@
1
- var ImageDialog = {
2
- preInit : function() {
3
- var url;
4
-
5
- tinyMCEPopup.requireLangPack();
6
-
7
- if (url = tinyMCEPopup.getParam("external_image_list_url"))
8
- document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
9
- },
10
-
11
- init : function(ed) {
12
- var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList');
13
-
14
- tinyMCEPopup.resizeToInnerSize();
15
- this.fillClassList('class_list');
16
- this.fillFileList('src_list', fl);
17
- this.fillFileList('over_list', fl);
18
- this.fillFileList('out_list', fl);
19
- TinyMCE_EditableSelects.init();
20
-
21
- if (n.nodeName == 'IMG') {
22
- nl.src.value = dom.getAttrib(n, 'src');
23
- nl.width.value = dom.getAttrib(n, 'width');
24
- nl.height.value = dom.getAttrib(n, 'height');
25
- nl.alt.value = dom.getAttrib(n, 'alt');
26
- nl.title.value = dom.getAttrib(n, 'title');
27
- nl.vspace.value = this.getAttrib(n, 'vspace');
28
- nl.hspace.value = this.getAttrib(n, 'hspace');
29
- nl.border.value = this.getAttrib(n, 'border');
30
- selectByValue(f, 'align', this.getAttrib(n, 'align'));
31
- selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);
32
- nl.style.value = dom.getAttrib(n, 'style');
33
- nl.id.value = dom.getAttrib(n, 'id');
34
- nl.dir.value = dom.getAttrib(n, 'dir');
35
- nl.lang.value = dom.getAttrib(n, 'lang');
36
- nl.usemap.value = dom.getAttrib(n, 'usemap');
37
- nl.longdesc.value = dom.getAttrib(n, 'longdesc');
38
- nl.insert.value = ed.getLang('update');
39
-
40
- if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))
41
- nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
42
-
43
- if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))
44
- nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
45
-
46
- if (ed.settings.inline_styles) {
47
- // Move attribs to styles
48
- if (dom.getAttrib(n, 'align'))
49
- this.updateStyle('align');
50
-
51
- if (dom.getAttrib(n, 'hspace'))
52
- this.updateStyle('hspace');
53
-
54
- if (dom.getAttrib(n, 'border'))
55
- this.updateStyle('border');
56
-
57
- if (dom.getAttrib(n, 'vspace'))
58
- this.updateStyle('vspace');
59
- }
60
- }
61
-
62
- // Setup browse button
63
- document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
64
- if (isVisible('srcbrowser'))
65
- document.getElementById('src').style.width = '260px';
66
-
67
- // Setup browse button
68
- document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');
69
- if (isVisible('overbrowser'))
70
- document.getElementById('onmouseoversrc').style.width = '260px';
71
-
72
- // Setup browse button
73
- document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');
74
- if (isVisible('outbrowser'))
75
- document.getElementById('onmouseoutsrc').style.width = '260px';
76
-
77
- // If option enabled default contrain proportions to checked
78
- if (ed.getParam("advimage_constrain_proportions", true))
79
- f.constrain.checked = true;
80
-
81
- // Check swap image if valid data
82
- if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)
83
- this.setSwapImage(true);
84
- else
85
- this.setSwapImage(false);
86
-
87
- this.changeAppearance();
88
- this.showPreviewImage(nl.src.value, 1);
89
- },
90
-
91
- insert : function(file, title) {
92
- var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];
93
-
94
- if (f.src.value === '') {
95
- if (ed.selection.getNode().nodeName == 'IMG') {
96
- ed.dom.remove(ed.selection.getNode());
97
- ed.execCommand('mceRepaint');
98
- }
99
-
100
- tinyMCEPopup.close();
101
- return;
102
- }
103
-
104
- if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {
105
- if (!f.alt.value) {
106
- tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {
107
- if (s)
108
- t.insertAndClose();
109
- });
110
-
111
- return;
112
- }
113
- }
114
-
115
- t.insertAndClose();
116
- },
117
-
118
- insertAndClose : function() {
119
- var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;
120
-
121
- tinyMCEPopup.restoreSelection();
122
-
123
- // Fixes crash in Safari
124
- if (tinymce.isWebKit)
125
- ed.getWin().focus();
126
-
127
- if (!ed.settings.inline_styles) {
128
- args = {
129
- vspace : nl.vspace.value,
130
- hspace : nl.hspace.value,
131
- border : nl.border.value,
132
- align : getSelectValue(f, 'align')
133
- };
134
- } else {
135
- // Remove deprecated values
136
- args = {
137
- vspace : '',
138
- hspace : '',
139
- border : '',
140
- align : ''
141
- };
142
- }
143
-
144
- tinymce.extend(args, {
145
- src : nl.src.value.replace(/ /g, '%20'),
146
- width : nl.width.value,
147
- height : nl.height.value,
148
- alt : nl.alt.value,
149
- title : nl.title.value,
150
- 'class' : getSelectValue(f, 'class_list'),
151
- style : nl.style.value,
152
- id : nl.id.value,
153
- dir : nl.dir.value,
154
- lang : nl.lang.value,
155
- usemap : nl.usemap.value,
156
- longdesc : nl.longdesc.value
157
- });
158
-
159
- args.onmouseover = args.onmouseout = '';
160
-
161
- if (f.onmousemovecheck.checked) {
162
- if (nl.onmouseoversrc.value)
163
- args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";
164
-
165
- if (nl.onmouseoutsrc.value)
166
- args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";
167
- }
168
-
169
- el = ed.selection.getNode();
170
-
171
- if (el && el.nodeName == 'IMG') {
172
- ed.dom.setAttribs(el, args);
173
- } else {
174
- tinymce.each(args, function(value, name) {
175
- if (value === "") {
176
- delete args[name];
177
- }
178
- });
179
-
180
- ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});
181
- ed.undoManager.add();
182
- }
183
-
184
- tinyMCEPopup.editor.execCommand('mceRepaint');
185
- tinyMCEPopup.editor.focus();
186
- tinyMCEPopup.close();
187
- },
188
-
189
- getAttrib : function(e, at) {
190
- var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
191
-
192
- if (ed.settings.inline_styles) {
193
- switch (at) {
194
- case 'align':
195
- if (v = dom.getStyle(e, 'float'))
196
- return v;
197
-
198
- if (v = dom.getStyle(e, 'vertical-align'))
199
- return v;
200
-
201
- break;
202
-
203
- case 'hspace':
204
- v = dom.getStyle(e, 'margin-left')
205
- v2 = dom.getStyle(e, 'margin-right');
206
-
207
- if (v && v == v2)
208
- return parseInt(v.replace(/[^0-9]/g, ''));
209
-
210
- break;
211
-
212
- case 'vspace':
213
- v = dom.getStyle(e, 'margin-top')
214
- v2 = dom.getStyle(e, 'margin-bottom');
215
- if (v && v == v2)
216
- return parseInt(v.replace(/[^0-9]/g, ''));
217
-
218
- break;
219
-
220
- case 'border':
221
- v = 0;
222
-
223
- tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
224
- sv = dom.getStyle(e, 'border-' + sv + '-width');
225
-
226
- // False or not the same as prev
227
- if (!sv || (sv != v && v !== 0)) {
228
- v = 0;
229
- return false;
230
- }
231
-
232
- if (sv)
233
- v = sv;
234
- });
235
-
236
- if (v)
237
- return parseInt(v.replace(/[^0-9]/g, ''));
238
-
239
- break;
240
- }
241
- }
242
-
243
- if (v = dom.getAttrib(e, at))
244
- return v;
245
-
246
- return '';
247
- },
248
-
249
- setSwapImage : function(st) {
250
- var f = document.forms[0];
251
-
252
- f.onmousemovecheck.checked = st;
253
- setBrowserDisabled('overbrowser', !st);
254
- setBrowserDisabled('outbrowser', !st);
255
-
256
- if (f.over_list)
257
- f.over_list.disabled = !st;
258
-
259
- if (f.out_list)
260
- f.out_list.disabled = !st;
261
-
262
- f.onmouseoversrc.disabled = !st;
263
- f.onmouseoutsrc.disabled = !st;
264
- },
265
-
266
- fillClassList : function(id) {
267
- var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
268
-
269
- if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
270
- cl = [];
271
-
272
- tinymce.each(v.split(';'), function(v) {
273
- var p = v.split('=');
274
-
275
- cl.push({'title' : p[0], 'class' : p[1]});
276
- });
277
- } else
278
- cl = tinyMCEPopup.editor.dom.getClasses();
279
-
280
- if (cl.length > 0) {
281
- lst.options.length = 0;
282
- lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
283
-
284
- tinymce.each(cl, function(o) {
285
- lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
286
- });
287
- } else
288
- dom.remove(dom.getParent(id, 'tr'));
289
- },
290
-
291
- fillFileList : function(id, l) {
292
- var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
293
-
294
- l = typeof(l) === 'function' ? l() : window[l];
295
- lst.options.length = 0;
296
-
297
- if (l && l.length > 0) {
298
- lst.options[lst.options.length] = new Option('', '');
299
-
300
- tinymce.each(l, function(o) {
301
- lst.options[lst.options.length] = new Option(o[0], o[1]);
302
- });
303
- } else
304
- dom.remove(dom.getParent(id, 'tr'));
305
- },
306
-
307
- resetImageData : function() {
308
- var f = document.forms[0];
309
-
310
- f.elements.width.value = f.elements.height.value = '';
311
- },
312
-
313
- updateImageData : function(img, st) {
314
- var f = document.forms[0];
315
-
316
- if (!st) {
317
- f.elements.width.value = img.width;
318
- f.elements.height.value = img.height;
319
- }
320
-
321
- this.preloadImg = img;
322
- },
323
-
324
- changeAppearance : function() {
325
- var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');
326
-
327
- if (img) {
328
- if (ed.getParam('inline_styles')) {
329
- ed.dom.setAttrib(img, 'style', f.style.value);
330
- } else {
331
- img.align = f.align.value;
332
- img.border = f.border.value;
333
- img.hspace = f.hspace.value;
334
- img.vspace = f.vspace.value;
335
- }
336
- }
337
- },
338
-
339
- changeHeight : function() {
340
- var f = document.forms[0], tp, t = this;
341
-
342
- if (!f.constrain.checked || !t.preloadImg) {
343
- return;
344
- }
345
-
346
- if (f.width.value == "" || f.height.value == "")
347
- return;
348
-
349
- tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;
350
- f.height.value = tp.toFixed(0);
351
- },
352
-
353
- changeWidth : function() {
354
- var f = document.forms[0], tp, t = this;
355
-
356
- if (!f.constrain.checked || !t.preloadImg) {
357
- return;
358
- }
359
-
360
- if (f.width.value == "" || f.height.value == "")
361
- return;
362
-
363
- tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;
364
- f.width.value = tp.toFixed(0);
365
- },
366
-
367
- updateStyle : function(ty) {
368
- var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});
369
-
370
- if (tinyMCEPopup.editor.settings.inline_styles) {
371
- // Handle align
372
- if (ty == 'align') {
373
- dom.setStyle(img, 'float', '');
374
- dom.setStyle(img, 'vertical-align', '');
375
-
376
- v = getSelectValue(f, 'align');
377
- if (v) {
378
- if (v == 'left' || v == 'right')
379
- dom.setStyle(img, 'float', v);
380
- else
381
- img.style.verticalAlign = v;
382
- }
383
- }
384
-
385
- // Handle border
386
- if (ty == 'border') {
387
- b = img.style.border ? img.style.border.split(' ') : [];
388
- bStyle = dom.getStyle(img, 'border-style');
389
- bColor = dom.getStyle(img, 'border-color');
390
-
391
- dom.setStyle(img, 'border', '');
392
-
393
- v = f.border.value;
394
- if (v || v == '0') {
395
- if (v == '0')
396
- img.style.border = isIE ? '0' : '0 none none';
397
- else {
398
- var isOldIE = tinymce.isIE && (!document.documentMode || document.documentMode < 9);
399
-
400
- if (b.length == 3 && b[isOldIE ? 2 : 1])
401
- bStyle = b[isOldIE ? 2 : 1];
402
- else if (!bStyle || bStyle == 'none')
403
- bStyle = 'solid';
404
- if (b.length == 3 && b[isIE ? 0 : 2])
405
- bColor = b[isOldIE ? 0 : 2];
406
- else if (!bColor || bColor == 'none')
407
- bColor = 'black';
408
- img.style.border = v + 'px ' + bStyle + ' ' + bColor;
409
- }
410
- }
411
- }
412
-
413
- // Handle hspace
414
- if (ty == 'hspace') {
415
- dom.setStyle(img, 'marginLeft', '');
416
- dom.setStyle(img, 'marginRight', '');
417
-
418
- v = f.hspace.value;
419
- if (v) {
420
- img.style.marginLeft = v + 'px';
421
- img.style.marginRight = v + 'px';
422
- }
423
- }
424
-
425
- // Handle vspace
426
- if (ty == 'vspace') {
427
- dom.setStyle(img, 'marginTop', '');
428
- dom.setStyle(img, 'marginBottom', '');
429
-
430
- v = f.vspace.value;
431
- if (v) {
432
- img.style.marginTop = v + 'px';
433
- img.style.marginBottom = v + 'px';
434
- }
435
- }
436
-
437
- // Merge
438
- dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');
439
- }
440
- },
441
-
442
- changeMouseMove : function() {
443
- },
444
-
445
- showPreviewImage : function(u, st) {
446
- if (!u) {
447
- tinyMCEPopup.dom.setHTML('prev', '');
448
- return;
449
- }
450
-
451
- if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))
452
- this.resetImageData();
453
-
454
- u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);
455
-
456
- if (!st)
457
- tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');
458
- else
459
- tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');
460
- }
461
- };
462
-
463
- ImageDialog.preInit();
464
- tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
1
+ var ImageDialog = {
2
+ preInit : function() {
3
+ var url;
4
+
5
+ tinyMCEPopup.requireLangPack();
6
+
7
+ if (url = tinyMCEPopup.getParam("external_image_list_url"))
8
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
9
+ },
10
+
11
+ init : function(ed) {
12
+ var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode(), fl = tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList');
13
+
14
+ tinyMCEPopup.resizeToInnerSize();
15
+ this.fillClassList('class_list');
16
+ this.fillFileList('src_list', fl);
17
+ this.fillFileList('over_list', fl);
18
+ this.fillFileList('out_list', fl);
19
+ TinyMCE_EditableSelects.init();
20
+
21
+ if (n.nodeName == 'IMG') {
22
+ nl.src.value = dom.getAttrib(n, 'src');
23
+ nl.width.value = dom.getAttrib(n, 'width');
24
+ nl.height.value = dom.getAttrib(n, 'height');
25
+ nl.alt.value = dom.getAttrib(n, 'alt');
26
+ nl.title.value = dom.getAttrib(n, 'title');
27
+ nl.vspace.value = this.getAttrib(n, 'vspace');
28
+ nl.hspace.value = this.getAttrib(n, 'hspace');
29
+ nl.border.value = this.getAttrib(n, 'border');
30
+ selectByValue(f, 'align', this.getAttrib(n, 'align'));
31
+ selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);
32
+ nl.style.value = dom.getAttrib(n, 'style');
33
+ nl.id.value = dom.getAttrib(n, 'id');
34
+ nl.dir.value = dom.getAttrib(n, 'dir');
35
+ nl.lang.value = dom.getAttrib(n, 'lang');
36
+ nl.usemap.value = dom.getAttrib(n, 'usemap');
37
+ nl.longdesc.value = dom.getAttrib(n, 'longdesc');
38
+ nl.insert.value = ed.getLang('update');
39
+
40
+ if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))
41
+ nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
42
+
43
+ if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))
44
+ nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
45
+
46
+ if (ed.settings.inline_styles) {
47
+ // Move attribs to styles
48
+ if (dom.getAttrib(n, 'align'))
49
+ this.updateStyle('align');
50
+
51
+ if (dom.getAttrib(n, 'hspace'))
52
+ this.updateStyle('hspace');
53
+
54
+ if (dom.getAttrib(n, 'border'))
55
+ this.updateStyle('border');
56
+
57
+ if (dom.getAttrib(n, 'vspace'))
58
+ this.updateStyle('vspace');
59
+ }
60
+ }
61
+
62
+ // Setup browse button
63
+ document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
64
+ if (isVisible('srcbrowser'))
65
+ document.getElementById('src').style.width = '260px';
66
+
67
+ // Setup browse button
68
+ document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');
69
+ if (isVisible('overbrowser'))
70
+ document.getElementById('onmouseoversrc').style.width = '260px';
71
+
72
+ // Setup browse button
73
+ document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');
74
+ if (isVisible('outbrowser'))
75
+ document.getElementById('onmouseoutsrc').style.width = '260px';
76
+
77
+ // If option enabled default contrain proportions to checked
78
+ if (ed.getParam("advimage_constrain_proportions", true))
79
+ f.constrain.checked = true;
80
+
81
+ // Check swap image if valid data
82
+ if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)
83
+ this.setSwapImage(true);
84
+ else
85
+ this.setSwapImage(false);
86
+
87
+ this.changeAppearance();
88
+ this.showPreviewImage(nl.src.value, 1);
89
+ },
90
+
91
+ insert : function(file, title) {
92
+ var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];
93
+
94
+ if (f.src.value === '') {
95
+ if (ed.selection.getNode().nodeName == 'IMG') {
96
+ ed.dom.remove(ed.selection.getNode());
97
+ ed.execCommand('mceRepaint');
98
+ }
99
+
100
+ tinyMCEPopup.close();
101
+ return;
102
+ }
103
+
104
+ if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {
105
+ if (!f.alt.value) {
106
+ tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {
107
+ if (s)
108
+ t.insertAndClose();
109
+ });
110
+
111
+ return;
112
+ }
113
+ }
114
+
115
+ t.insertAndClose();
116
+ },
117
+
118
+ insertAndClose : function() {
119
+ var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;
120
+
121
+ tinyMCEPopup.restoreSelection();
122
+
123
+ // Fixes crash in Safari
124
+ if (tinymce.isWebKit)
125
+ ed.getWin().focus();
126
+
127
+ if (!ed.settings.inline_styles) {
128
+ args = {
129
+ vspace : nl.vspace.value,
130
+ hspace : nl.hspace.value,
131
+ border : nl.border.value,
132
+ align : getSelectValue(f, 'align')
133
+ };
134
+ } else {
135
+ // Remove deprecated values
136
+ args = {
137
+ vspace : '',
138
+ hspace : '',
139
+ border : '',
140
+ align : ''
141
+ };
142
+ }
143
+
144
+ tinymce.extend(args, {
145
+ src : nl.src.value.replace(/ /g, '%20'),
146
+ width : nl.width.value,
147
+ height : nl.height.value,
148
+ alt : nl.alt.value,
149
+ title : nl.title.value,
150
+ 'class' : getSelectValue(f, 'class_list'),
151
+ style : nl.style.value,
152
+ id : nl.id.value,
153
+ dir : nl.dir.value,
154
+ lang : nl.lang.value,
155
+ usemap : nl.usemap.value,
156
+ longdesc : nl.longdesc.value
157
+ });
158
+
159
+ args.onmouseover = args.onmouseout = '';
160
+
161
+ if (f.onmousemovecheck.checked) {
162
+ if (nl.onmouseoversrc.value)
163
+ args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";
164
+
165
+ if (nl.onmouseoutsrc.value)
166
+ args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";
167
+ }
168
+
169
+ el = ed.selection.getNode();
170
+
171
+ if (el && el.nodeName == 'IMG') {
172
+ ed.dom.setAttribs(el, args);
173
+ } else {
174
+ tinymce.each(args, function(value, name) {
175
+ if (value === "") {
176
+ delete args[name];
177
+ }
178
+ });
179
+
180
+ ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});
181
+ ed.undoManager.add();
182
+ }
183
+
184
+ tinyMCEPopup.editor.execCommand('mceRepaint');
185
+ tinyMCEPopup.editor.focus();
186
+ tinyMCEPopup.close();
187
+ },
188
+
189
+ getAttrib : function(e, at) {
190
+ var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
191
+
192
+ if (ed.settings.inline_styles) {
193
+ switch (at) {
194
+ case 'align':
195
+ if (v = dom.getStyle(e, 'float'))
196
+ return v;
197
+
198
+ if (v = dom.getStyle(e, 'vertical-align'))
199
+ return v;
200
+
201
+ break;
202
+
203
+ case 'hspace':
204
+ v = dom.getStyle(e, 'margin-left')
205
+ v2 = dom.getStyle(e, 'margin-right');
206
+
207
+ if (v && v == v2)
208
+ return parseInt(v.replace(/[^0-9]/g, ''));
209
+
210
+ break;
211
+
212
+ case 'vspace':
213
+ v = dom.getStyle(e, 'margin-top')
214
+ v2 = dom.getStyle(e, 'margin-bottom');
215
+ if (v && v == v2)
216
+ return parseInt(v.replace(/[^0-9]/g, ''));
217
+
218
+ break;
219
+
220
+ case 'border':
221
+ v = 0;
222
+
223
+ tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
224
+ sv = dom.getStyle(e, 'border-' + sv + '-width');
225
+
226
+ // False or not the same as prev
227
+ if (!sv || (sv != v && v !== 0)) {
228
+ v = 0;
229
+ return false;
230
+ }
231
+
232
+ if (sv)
233
+ v = sv;
234
+ });
235
+
236
+ if (v)
237
+ return parseInt(v.replace(/[^0-9]/g, ''));
238
+
239
+ break;
240
+ }
241
+ }
242
+
243
+ if (v = dom.getAttrib(e, at))
244
+ return v;
245
+
246
+ return '';
247
+ },
248
+
249
+ setSwapImage : function(st) {
250
+ var f = document.forms[0];
251
+
252
+ f.onmousemovecheck.checked = st;
253
+ setBrowserDisabled('overbrowser', !st);
254
+ setBrowserDisabled('outbrowser', !st);
255
+
256
+ if (f.over_list)
257
+ f.over_list.disabled = !st;
258
+
259
+ if (f.out_list)
260
+ f.out_list.disabled = !st;
261
+
262
+ f.onmouseoversrc.disabled = !st;
263
+ f.onmouseoutsrc.disabled = !st;
264
+ },
265
+
266
+ fillClassList : function(id) {
267
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
268
+
269
+ if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
270
+ cl = [];
271
+
272
+ tinymce.each(v.split(';'), function(v) {
273
+ var p = v.split('=');
274
+
275
+ cl.push({'title' : p[0], 'class' : p[1]});
276
+ });
277
+ } else
278
+ cl = tinyMCEPopup.editor.dom.getClasses();
279
+
280
+ if (cl.length > 0) {
281
+ lst.options.length = 0;
282
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
283
+
284
+ tinymce.each(cl, function(o) {
285
+ lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
286
+ });
287
+ } else
288
+ dom.remove(dom.getParent(id, 'tr'));
289
+ },
290
+
291
+ fillFileList : function(id, l) {
292
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
293
+
294
+ l = typeof(l) === 'function' ? l() : window[l];
295
+ lst.options.length = 0;
296
+
297
+ if (l && l.length > 0) {
298
+ lst.options[lst.options.length] = new Option('', '');
299
+
300
+ tinymce.each(l, function(o) {
301
+ lst.options[lst.options.length] = new Option(o[0], o[1]);
302
+ });
303
+ } else
304
+ dom.remove(dom.getParent(id, 'tr'));
305
+ },
306
+
307
+ resetImageData : function() {
308
+ var f = document.forms[0];
309
+
310
+ f.elements.width.value = f.elements.height.value = '';
311
+ },
312
+
313
+ updateImageData : function(img, st) {
314
+ var f = document.forms[0];
315
+
316
+ if (!st) {
317
+ f.elements.width.value = img.width;
318
+ f.elements.height.value = img.height;
319
+ }
320
+
321
+ this.preloadImg = img;
322
+ },
323
+
324
+ changeAppearance : function() {
325
+ var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');
326
+
327
+ if (img) {
328
+ if (ed.getParam('inline_styles')) {
329
+ ed.dom.setAttrib(img, 'style', f.style.value);
330
+ } else {
331
+ img.align = f.align.value;
332
+ img.border = f.border.value;
333
+ img.hspace = f.hspace.value;
334
+ img.vspace = f.vspace.value;
335
+ }
336
+ }
337
+ },
338
+
339
+ changeHeight : function() {
340
+ var f = document.forms[0], tp, t = this;
341
+
342
+ if (!f.constrain.checked || !t.preloadImg) {
343
+ return;
344
+ }
345
+
346
+ if (f.width.value == "" || f.height.value == "")
347
+ return;
348
+
349
+ tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;
350
+ f.height.value = tp.toFixed(0);
351
+ },
352
+
353
+ changeWidth : function() {
354
+ var f = document.forms[0], tp, t = this;
355
+
356
+ if (!f.constrain.checked || !t.preloadImg) {
357
+ return;
358
+ }
359
+
360
+ if (f.width.value == "" || f.height.value == "")
361
+ return;
362
+
363
+ tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;
364
+ f.width.value = tp.toFixed(0);
365
+ },
366
+
367
+ updateStyle : function(ty) {
368
+ var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});
369
+
370
+ if (tinyMCEPopup.editor.settings.inline_styles) {
371
+ // Handle align
372
+ if (ty == 'align') {
373
+ dom.setStyle(img, 'float', '');
374
+ dom.setStyle(img, 'vertical-align', '');
375
+
376
+ v = getSelectValue(f, 'align');
377
+ if (v) {
378
+ if (v == 'left' || v == 'right')
379
+ dom.setStyle(img, 'float', v);
380
+ else
381
+ img.style.verticalAlign = v;
382
+ }
383
+ }
384
+
385
+ // Handle border
386
+ if (ty == 'border') {
387
+ b = img.style.border ? img.style.border.split(' ') : [];
388
+ bStyle = dom.getStyle(img, 'border-style');
389
+ bColor = dom.getStyle(img, 'border-color');
390
+
391
+ dom.setStyle(img, 'border', '');
392
+
393
+ v = f.border.value;
394
+ if (v || v == '0') {
395
+ if (v == '0')
396
+ img.style.border = isIE ? '0' : '0 none none';
397
+ else {
398
+ var isOldIE = tinymce.isIE && (!document.documentMode || document.documentMode < 9);
399
+
400
+ if (b.length == 3 && b[isOldIE ? 2 : 1])
401
+ bStyle = b[isOldIE ? 2 : 1];
402
+ else if (!bStyle || bStyle == 'none')
403
+ bStyle = 'solid';
404
+ if (b.length == 3 && b[isIE ? 0 : 2])
405
+ bColor = b[isOldIE ? 0 : 2];
406
+ else if (!bColor || bColor == 'none')
407
+ bColor = 'black';
408
+ img.style.border = v + 'px ' + bStyle + ' ' + bColor;
409
+ }
410
+ }
411
+ }
412
+
413
+ // Handle hspace
414
+ if (ty == 'hspace') {
415
+ dom.setStyle(img, 'marginLeft', '');
416
+ dom.setStyle(img, 'marginRight', '');
417
+
418
+ v = f.hspace.value;
419
+ if (v) {
420
+ img.style.marginLeft = v + 'px';
421
+ img.style.marginRight = v + 'px';
422
+ }
423
+ }
424
+
425
+ // Handle vspace
426
+ if (ty == 'vspace') {
427
+ dom.setStyle(img, 'marginTop', '');
428
+ dom.setStyle(img, 'marginBottom', '');
429
+
430
+ v = f.vspace.value;
431
+ if (v) {
432
+ img.style.marginTop = v + 'px';
433
+ img.style.marginBottom = v + 'px';
434
+ }
435
+ }
436
+
437
+ // Merge
438
+ dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');
439
+ }
440
+ },
441
+
442
+ changeMouseMove : function() {
443
+ },
444
+
445
+ showPreviewImage : function(u, st) {
446
+ if (!u) {
447
+ tinyMCEPopup.dom.setHTML('prev', '');
448
+ return;
449
+ }
450
+
451
+ if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))
452
+ this.resetImageData();
453
+
454
+ u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);
455
+
456
+ if (!st)
457
+ tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');
458
+ else
459
+ tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');
460
+ }
461
+ };
462
+
463
+ ImageDialog.preInit();
464
+ tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
js/libraries/tiny_mce/plugins/advlink/css/advlink.css CHANGED
@@ -1,8 +1,8 @@
1
- .mceLinkList, .mceAnchorList, #targetlist {width:280px;}
2
- .mceActionPanel {margin-top:7px;}
3
- .panel_wrapper div.current {height:320px;}
4
- #classlist, #title, #href {width:280px;}
5
- #popupurl, #popupname {width:200px;}
6
- #popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}
7
- #id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}
8
- #events_panel input {width:200px;}
1
+ .mceLinkList, .mceAnchorList, #targetlist {width:280px;}
2
+ .mceActionPanel {margin-top:7px;}
3
+ .panel_wrapper div.current {height:320px;}
4
+ #classlist, #title, #href {width:280px;}
5
+ #popupurl, #popupname {width:200px;}
6
+ #popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}
7
+ #id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}
8
+ #events_panel input {width:200px;}
js/libraries/tiny_mce/plugins/advlink/editor_plugin_src.js CHANGED
@@ -1,61 +1,61 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- tinymce.create('tinymce.plugins.AdvancedLinkPlugin', {
13
- init : function(ed, url) {
14
- this.editor = ed;
15
-
16
- // Register commands
17
- ed.addCommand('mceAdvLink', function() {
18
- var se = ed.selection;
19
-
20
- // No selection and not in link
21
- if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))
22
- return;
23
-
24
- ed.windowManager.open({
25
- file : url + '/link.htm',
26
- width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),
27
- height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),
28
- inline : 1
29
- }, {
30
- plugin_url : url
31
- });
32
- });
33
-
34
- // Register buttons
35
- ed.addButton('link', {
36
- title : 'advlink.link_desc',
37
- cmd : 'mceAdvLink'
38
- });
39
-
40
- ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');
41
-
42
- ed.onNodeChange.add(function(ed, cm, n, co) {
43
- cm.setDisabled('link', co && n.nodeName != 'A');
44
- cm.setActive('link', n.nodeName == 'A' && !n.name);
45
- });
46
- },
47
-
48
- getInfo : function() {
49
- return {
50
- longname : 'Advanced link',
51
- author : 'Moxiecode Systems AB',
52
- authorurl : 'http://tinymce.moxiecode.com',
53
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',
54
- version : tinymce.majorVersion + "." + tinymce.minorVersion
55
- };
56
- }
57
- });
58
-
59
- // Register plugin
60
- tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);
61
  })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ tinymce.create('tinymce.plugins.AdvancedLinkPlugin', {
13
+ init : function(ed, url) {
14
+ this.editor = ed;
15
+
16
+ // Register commands
17
+ ed.addCommand('mceAdvLink', function() {
18
+ var se = ed.selection;
19
+
20
+ // No selection and not in link
21
+ if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))
22
+ return;
23
+
24
+ ed.windowManager.open({
25
+ file : url + '/link.htm',
26
+ width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),
27
+ height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),
28
+ inline : 1
29
+ }, {
30
+ plugin_url : url
31
+ });
32
+ });
33
+
34
+ // Register buttons
35
+ ed.addButton('link', {
36
+ title : 'advlink.link_desc',
37
+ cmd : 'mceAdvLink'
38
+ });
39
+
40
+ ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');
41
+
42
+ ed.onNodeChange.add(function(ed, cm, n, co) {
43
+ cm.setDisabled('link', co && n.nodeName != 'A');
44
+ cm.setActive('link', n.nodeName == 'A' && !n.name);
45
+ });
46
+ },
47
+
48
+ getInfo : function() {
49
+ return {
50
+ longname : 'Advanced link',
51
+ author : 'Moxiecode Systems AB',
52
+ authorurl : 'http://tinymce.moxiecode.com',
53
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',
54
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
55
+ };
56
+ }
57
+ });
58
+
59
+ // Register plugin
60
+ tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);
61
  })();
js/libraries/tiny_mce/plugins/advlink/js/advlink.js CHANGED
@@ -1,543 +1,543 @@
1
- /* Functions for the advlink plugin popup */
2
-
3
- tinyMCEPopup.requireLangPack();
4
-
5
- var templates = {
6
- "window.open" : "window.open('${url}','${target}','${options}')"
7
- };
8
-
9
- function preinit() {
10
- var url;
11
-
12
- if (url = tinyMCEPopup.getParam("external_link_list_url"))
13
- document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
14
- }
15
-
16
- function changeClass() {
17
- var f = document.forms[0];
18
-
19
- f.classes.value = getSelectValue(f, 'classlist');
20
- }
21
-
22
- function init() {
23
- tinyMCEPopup.resizeToInnerSize();
24
-
25
- var formObj = document.forms[0];
26
- var inst = tinyMCEPopup.editor;
27
- var elm = inst.selection.getNode();
28
- var action = "insert";
29
- var html;
30
-
31
- document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');
32
- document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');
33
- document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');
34
-
35
- // Link list
36
- html = getLinkListHTML('linklisthref','href');
37
- if (html == "")
38
- document.getElementById("linklisthrefrow").style.display = 'none';
39
- else
40
- document.getElementById("linklisthrefcontainer").innerHTML = html;
41
-
42
- // Anchor list
43
- html = getAnchorListHTML('anchorlist','href');
44
- if (html == "")
45
- document.getElementById("anchorlistrow").style.display = 'none';
46
- else
47
- document.getElementById("anchorlistcontainer").innerHTML = html;
48
-
49
- // Resize some elements
50
- if (isVisible('hrefbrowser'))
51
- document.getElementById('href').style.width = '260px';
52
-
53
- if (isVisible('popupurlbrowser'))
54
- document.getElementById('popupurl').style.width = '180px';
55
-
56
- elm = inst.dom.getParent(elm, "A");
57
- if (elm == null) {
58
- var prospect = inst.dom.create("p", null, inst.selection.getContent());
59
- if (prospect.childNodes.length === 1) {
60
- elm = prospect.firstChild;
61
- }
62
- }
63
-
64
- if (elm != null && elm.nodeName == "A")
65
- action = "update";
66
-
67
- formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true);
68
-
69
- setPopupControlsDisabled(true);
70
-
71
- if (action == "update") {
72
- var href = inst.dom.getAttrib(elm, 'href');
73
- var onclick = inst.dom.getAttrib(elm, 'onclick');
74
- var linkTarget = inst.dom.getAttrib(elm, 'target') ? inst.dom.getAttrib(elm, 'target') : "_self";
75
-
76
- // Setup form data
77
- setFormValue('href', href);
78
- setFormValue('title', inst.dom.getAttrib(elm, 'title'));
79
- setFormValue('id', inst.dom.getAttrib(elm, 'id'));
80
- setFormValue('style', inst.dom.getAttrib(elm, "style"));
81
- setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));
82
- setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));
83
- setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));
84
- setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));
85
- setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));
86
- setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));
87
- setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
88
- setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
89
- setFormValue('type', inst.dom.getAttrib(elm, 'type'));
90
- setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));
91
- setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));
92
- setFormValue('onclick', onclick);
93
- setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));
94
- setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));
95
- setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));
96
- setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));
97
- setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));
98
- setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));
99
- setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));
100
- setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));
101
- setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));
102
- setFormValue('target', linkTarget);
103
- setFormValue('classes', inst.dom.getAttrib(elm, 'class'));
104
-
105
- // Parse onclick data
106
- if (onclick != null && onclick.indexOf('window.open') != -1)
107
- parseWindowOpen(onclick);
108
- else
109
- parseFunction(onclick);
110
-
111
- // Select by the values
112
- selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));
113
- selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));
114
- selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));
115
- selectByValue(formObj, 'linklisthref', href);
116
-
117
- if (href.charAt(0) == '#')
118
- selectByValue(formObj, 'anchorlist', href);
119
-
120
- addClassesToList('classlist', 'advlink_styles');
121
-
122
- selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);
123
- selectByValue(formObj, 'targetlist', linkTarget, true);
124
- } else
125
- addClassesToList('classlist', 'advlink_styles');
126
- }
127
-
128
- function checkPrefix(n) {
129
- if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))
130
- n.value = 'mailto:' + n.value;
131
-
132
- if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))
133
- n.value = 'http://' + n.value;
134
- }
135
-
136
- function setFormValue(name, value) {
137
- document.forms[0].elements[name].value = value;
138
- }
139
-
140
- function parseWindowOpen(onclick) {
141
- var formObj = document.forms[0];
142
-
143
- // Preprocess center code
144
- if (onclick.indexOf('return false;') != -1) {
145
- formObj.popupreturn.checked = true;
146
- onclick = onclick.replace('return false;', '');
147
- } else
148
- formObj.popupreturn.checked = false;
149
-
150
- var onClickData = parseLink(onclick);
151
-
152
- if (onClickData != null) {
153
- formObj.ispopup.checked = true;
154
- setPopupControlsDisabled(false);
155
-
156
- var onClickWindowOptions = parseOptions(onClickData['options']);
157
- var url = onClickData['url'];
158
-
159
- formObj.popupname.value = onClickData['target'];
160
- formObj.popupurl.value = url;
161
- formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');
162
- formObj.popupheight.value = getOption(onClickWindowOptions, 'height');
163
-
164
- formObj.popupleft.value = getOption(onClickWindowOptions, 'left');
165
- formObj.popuptop.value = getOption(onClickWindowOptions, 'top');
166
-
167
- if (formObj.popupleft.value.indexOf('screen') != -1)
168
- formObj.popupleft.value = "c";
169
-
170
- if (formObj.popuptop.value.indexOf('screen') != -1)
171
- formObj.popuptop.value = "c";
172
-
173
- formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";
174
- formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";
175
- formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";
176
- formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";
177
- formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";
178
- formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";
179
- formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";
180
-
181
- buildOnClick();
182
- }
183
- }
184
-
185
- function parseFunction(onclick) {
186
- var formObj = document.forms[0];
187
- var onClickData = parseLink(onclick);
188
-
189
- // TODO: Add stuff here
190
- }
191
-
192
- function getOption(opts, name) {
193
- return typeof(opts[name]) == "undefined" ? "" : opts[name];
194
- }
195
-
196
- function setPopupControlsDisabled(state) {
197
- var formObj = document.forms[0];
198
-
199
- formObj.popupname.disabled = state;
200
- formObj.popupurl.disabled = state;
201
- formObj.popupwidth.disabled = state;
202
- formObj.popupheight.disabled = state;
203
- formObj.popupleft.disabled = state;
204
- formObj.popuptop.disabled = state;
205
- formObj.popuplocation.disabled = state;
206
- formObj.popupscrollbars.disabled = state;
207
- formObj.popupmenubar.disabled = state;
208
- formObj.popupresizable.disabled = state;
209
- formObj.popuptoolbar.disabled = state;
210
- formObj.popupstatus.disabled = state;
211
- formObj.popupreturn.disabled = state;
212
- formObj.popupdependent.disabled = state;
213
-
214
- setBrowserDisabled('popupurlbrowser', state);
215
- }
216
-
217
- function parseLink(link) {
218
- link = link.replace(new RegExp('&#39;', 'g'), "'");
219
-
220
- var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");
221
-
222
- // Is function name a template function
223
- var template = templates[fnName];
224
- if (template) {
225
- // Build regexp
226
- var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));
227
- var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";
228
- var replaceStr = "";
229
- for (var i=0; i<variableNames.length; i++) {
230
- // Is string value
231
- if (variableNames[i].indexOf("'${") != -1)
232
- regExp += "'(.*)'";
233
- else // Number value
234
- regExp += "([0-9]*)";
235
-
236
- replaceStr += "$" + (i+1);
237
-
238
- // Cleanup variable name
239
- variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");
240
-
241
- if (i != variableNames.length-1) {
242
- regExp += "\\s*,\\s*";
243
- replaceStr += "<delim>";
244
- } else
245
- regExp += ".*";
246
- }
247
-
248
- regExp += "\\);?";
249
-
250
- // Build variable array
251
- var variables = [];
252
- variables["_function"] = fnName;
253
- var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');
254
- for (var i=0; i<variableNames.length; i++)
255
- variables[variableNames[i]] = variableValues[i];
256
-
257
- return variables;
258
- }
259
-
260
- return null;
261
- }
262
-
263
- function parseOptions(opts) {
264
- if (opts == null || opts == "")
265
- return [];
266
-
267
- // Cleanup the options
268
- opts = opts.toLowerCase();
269
- opts = opts.replace(/;/g, ",");
270
- opts = opts.replace(/[^0-9a-z=,]/g, "");
271
-
272
- var optionChunks = opts.split(',');
273
- var options = [];
274
-
275
- for (var i=0; i<optionChunks.length; i++) {
276
- var parts = optionChunks[i].split('=');
277
-
278
- if (parts.length == 2)
279
- options[parts[0]] = parts[1];
280
- }
281
-
282
- return options;
283
- }
284
-
285
- function buildOnClick() {
286
- var formObj = document.forms[0];
287
-
288
- if (!formObj.ispopup.checked) {
289
- formObj.onclick.value = "";
290
- return;
291
- }
292
-
293
- var onclick = "window.open('";
294
- var url = formObj.popupurl.value;
295
-
296
- onclick += url + "','";
297
- onclick += formObj.popupname.value + "','";
298
-
299
- if (formObj.popuplocation.checked)
300
- onclick += "location=yes,";
301
-
302
- if (formObj.popupscrollbars.checked)
303
- onclick += "scrollbars=yes,";
304
-
305
- if (formObj.popupmenubar.checked)
306
- onclick += "menubar=yes,";
307
-
308
- if (formObj.popupresizable.checked)
309
- onclick += "resizable=yes,";
310
-
311
- if (formObj.popuptoolbar.checked)
312
- onclick += "toolbar=yes,";
313
-
314
- if (formObj.popupstatus.checked)
315
- onclick += "status=yes,";
316
-
317
- if (formObj.popupdependent.checked)
318
- onclick += "dependent=yes,";
319
-
320
- if (formObj.popupwidth.value != "")
321
- onclick += "width=" + formObj.popupwidth.value + ",";
322
-
323
- if (formObj.popupheight.value != "")
324
- onclick += "height=" + formObj.popupheight.value + ",";
325
-
326
- if (formObj.popupleft.value != "") {
327
- if (formObj.popupleft.value != "c")
328
- onclick += "left=" + formObj.popupleft.value + ",";
329
- else
330
- onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";
331
- }
332
-
333
- if (formObj.popuptop.value != "") {
334
- if (formObj.popuptop.value != "c")
335
- onclick += "top=" + formObj.popuptop.value + ",";
336
- else
337
- onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";
338
- }
339
-
340
- if (onclick.charAt(onclick.length-1) == ',')
341
- onclick = onclick.substring(0, onclick.length-1);
342
-
343
- onclick += "');";
344
-
345
- if (formObj.popupreturn.checked)
346
- onclick += "return false;";
347
-
348
- // tinyMCE.debug(onclick);
349
-
350
- formObj.onclick.value = onclick;
351
-
352
- if (formObj.href.value == "")
353
- formObj.href.value = url;
354
- }
355
-
356
- function setAttrib(elm, attrib, value) {
357
- var formObj = document.forms[0];
358
- var valueElm = formObj.elements[attrib.toLowerCase()];
359
- var dom = tinyMCEPopup.editor.dom;
360
-
361
- if (typeof(value) == "undefined" || value == null) {
362
- value = "";
363
-
364
- if (valueElm)
365
- value = valueElm.value;
366
- }
367
-
368
- // Clean up the style
369
- if (attrib == 'style')
370
- value = dom.serializeStyle(dom.parseStyle(value), 'a');
371
-
372
- dom.setAttrib(elm, attrib, value);
373
- }
374
-
375
- function getAnchorListHTML(id, target) {
376
- var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";
377
-
378
- for (i=0, len=nodes.length; i<len; i++) {
379
- if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")
380
- html += '<option value="#' + name + '">' + name + '</option>';
381
-
382
- if ((name = nodes[i].id) != "" && !nodes[i].href)
383
- html += '<option value="#' + name + '">' + name + '</option>';
384
- }
385
-
386
- if (html == "")
387
- return "";
388
-
389
- html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"'
390
- + ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"'
391
- + '>'
392
- + '<option value="">---</option>'
393
- + html
394
- + '</select>';
395
-
396
- return html;
397
- }
398
-
399
- function insertAction() {
400
- var inst = tinyMCEPopup.editor;
401
- var elm, elementArray, i;
402
-
403
- elm = inst.selection.getNode();
404
- checkPrefix(document.forms[0].href);
405
-
406
- elm = inst.dom.getParent(elm, "A");
407
-
408
- // Remove element if there is no href
409
- if (!document.forms[0].href.value) {
410
- i = inst.selection.getBookmark();
411
- inst.dom.remove(elm, 1);
412
- inst.selection.moveToBookmark(i);
413
- tinyMCEPopup.execCommand("mceEndUndoLevel");
414
- tinyMCEPopup.close();
415
- return;
416
- }
417
-
418
- // Create new anchor elements
419
- if (elm == null) {
420
- inst.getDoc().execCommand("unlink", false, null);
421
- tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});
422
-
423
- elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});
424
- for (i=0; i<elementArray.length; i++)
425
- setAllAttribs(elm = elementArray[i]);
426
- } else
427
- setAllAttribs(elm);
428
-
429
- // Don't move caret if selection was image
430
- if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {
431
- inst.focus();
432
- inst.selection.select(elm);
433
- inst.selection.collapse(0);
434
- tinyMCEPopup.storeSelection();
435
- }
436
-
437
- tinyMCEPopup.execCommand("mceEndUndoLevel");
438
- tinyMCEPopup.close();
439
- }
440
-
441
- function setAllAttribs(elm) {
442
- var formObj = document.forms[0];
443
- var href = formObj.href.value.replace(/ /g, '%20');
444
- var target = getSelectValue(formObj, 'targetlist');
445
-
446
- setAttrib(elm, 'href', href);
447
- setAttrib(elm, 'title');
448
- setAttrib(elm, 'target', target == '_self' ? '' : target);
449
- setAttrib(elm, 'id');
450
- setAttrib(elm, 'style');
451
- setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
452
- setAttrib(elm, 'rel');
453
- setAttrib(elm, 'rev');
454
- setAttrib(elm, 'charset');
455
- setAttrib(elm, 'hreflang');
456
- setAttrib(elm, 'dir');
457
- setAttrib(elm, 'lang');
458
- setAttrib(elm, 'tabindex');
459
- setAttrib(elm, 'accesskey');
460
- setAttrib(elm, 'type');
461
- setAttrib(elm, 'onfocus');
462
- setAttrib(elm, 'onblur');
463
- setAttrib(elm, 'onclick');
464
- setAttrib(elm, 'ondblclick');
465
- setAttrib(elm, 'onmousedown');
466
- setAttrib(elm, 'onmouseup');
467
- setAttrib(elm, 'onmouseover');
468
- setAttrib(elm, 'onmousemove');
469
- setAttrib(elm, 'onmouseout');
470
- setAttrib(elm, 'onkeypress');
471
- setAttrib(elm, 'onkeydown');
472
- setAttrib(elm, 'onkeyup');
473
-
474
- // Refresh in old MSIE
475
- if (tinyMCE.isMSIE5)
476
- elm.outerHTML = elm.outerHTML;
477
- }
478
-
479
- function getSelectValue(form_obj, field_name) {
480
- var elm = form_obj.elements[field_name];
481
-
482
- if (!elm || elm.options == null || elm.selectedIndex == -1)
483
- return "";
484
-
485
- return elm.options[elm.selectedIndex].value;
486
- }
487
-
488
- function getLinkListHTML(elm_id, target_form_element, onchange_func) {
489
- if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)
490
- return "";
491
-
492
- var html = "";
493
-
494
- html += '<select id="' + elm_id + '" name="' + elm_id + '"';
495
- html += ' class="mceLinkList" onchange="this.form.' + target_form_element + '.value=';
496
- html += 'this.options[this.selectedIndex].value;';
497
-
498
- if (typeof(onchange_func) != "undefined")
499
- html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
500
-
501
- html += '"><option value="">---</option>';
502
-
503
- for (var i=0; i<tinyMCELinkList.length; i++)
504
- html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
505
-
506
- html += '</select>';
507
-
508
- return html;
509
-
510
- // tinyMCE.debug('-- image list start --', html, '-- image list end --');
511
- }
512
-
513
- function getTargetListHTML(elm_id, target_form_element) {
514
- var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');
515
- var html = '';
516
-
517
- html += '<select id="' + elm_id + '" name="' + elm_id + '" onchange="this.form.' + target_form_element + '.value=';
518
- html += 'this.options[this.selectedIndex].value;">';
519
- html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
520
- html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
521
- html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
522
- html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';
523
-
524
- for (var i=0; i<targets.length; i++) {
525
- var key, value;
526
-
527
- if (targets[i] == "")
528
- continue;
529
-
530
- key = targets[i].split('=')[0];
531
- value = targets[i].split('=')[1];
532
-
533
- html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';
534
- }
535
-
536
- html += '</select>';
537
-
538
- return html;
539
- }
540
-
541
- // While loading
542
- preinit();
543
- tinyMCEPopup.onInit.add(init);
1
+ /* Functions for the advlink plugin popup */
2
+
3
+ tinyMCEPopup.requireLangPack();
4
+
5
+ var templates = {
6
+ "window.open" : "window.open('${url}','${target}','${options}')"
7
+ };
8
+
9
+ function preinit() {
10
+ var url;
11
+
12
+ if (url = tinyMCEPopup.getParam("external_link_list_url"))
13
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
14
+ }
15
+
16
+ function changeClass() {
17
+ var f = document.forms[0];
18
+
19
+ f.classes.value = getSelectValue(f, 'classlist');
20
+ }
21
+
22
+ function init() {
23
+ tinyMCEPopup.resizeToInnerSize();
24
+
25
+ var formObj = document.forms[0];
26
+ var inst = tinyMCEPopup.editor;
27
+ var elm = inst.selection.getNode();
28
+ var action = "insert";
29
+ var html;
30
+
31
+ document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');
32
+ document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');
33
+ document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');
34
+
35
+ // Link list
36
+ html = getLinkListHTML('linklisthref','href');
37
+ if (html == "")
38
+ document.getElementById("linklisthrefrow").style.display = 'none';
39
+ else
40
+ document.getElementById("linklisthrefcontainer").innerHTML = html;
41
+
42
+ // Anchor list
43
+ html = getAnchorListHTML('anchorlist','href');
44
+ if (html == "")
45
+ document.getElementById("anchorlistrow").style.display = 'none';
46
+ else
47
+ document.getElementById("anchorlistcontainer").innerHTML = html;
48
+
49
+ // Resize some elements
50
+ if (isVisible('hrefbrowser'))
51
+ document.getElementById('href').style.width = '260px';
52
+
53
+ if (isVisible('popupurlbrowser'))
54
+ document.getElementById('popupurl').style.width = '180px';
55
+
56
+ elm = inst.dom.getParent(elm, "A");
57
+ if (elm == null) {
58
+ var prospect = inst.dom.create("p", null, inst.selection.getContent());
59
+ if (prospect.childNodes.length === 1) {
60
+ elm = prospect.firstChild;
61
+ }
62
+ }
63
+
64
+ if (elm != null && elm.nodeName == "A")
65
+ action = "update";
66
+
67
+ formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true);
68
+
69
+ setPopupControlsDisabled(true);
70
+
71
+ if (action == "update") {
72
+ var href = inst.dom.getAttrib(elm, 'href');
73
+ var onclick = inst.dom.getAttrib(elm, 'onclick');
74
+ var linkTarget = inst.dom.getAttrib(elm, 'target') ? inst.dom.getAttrib(elm, 'target') : "_self";
75
+
76
+ // Setup form data
77
+ setFormValue('href', href);
78
+ setFormValue('title', inst.dom.getAttrib(elm, 'title'));
79
+ setFormValue('id', inst.dom.getAttrib(elm, 'id'));
80
+ setFormValue('style', inst.dom.getAttrib(elm, "style"));
81
+ setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));
82
+ setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));
83
+ setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));
84
+ setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));
85
+ setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));
86
+ setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));
87
+ setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
88
+ setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
89
+ setFormValue('type', inst.dom.getAttrib(elm, 'type'));
90
+ setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));
91
+ setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));
92
+ setFormValue('onclick', onclick);
93
+ setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));
94
+ setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));
95
+ setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));
96
+ setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));
97
+ setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));
98
+ setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));
99
+ setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));
100
+ setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));
101
+ setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));
102
+ setFormValue('target', linkTarget);
103
+ setFormValue('classes', inst.dom.getAttrib(elm, 'class'));
104
+
105
+ // Parse onclick data
106
+ if (onclick != null && onclick.indexOf('window.open') != -1)
107
+ parseWindowOpen(onclick);
108
+ else
109
+ parseFunction(onclick);
110
+
111
+ // Select by the values
112
+ selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));
113
+ selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));
114
+ selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));
115
+ selectByValue(formObj, 'linklisthref', href);
116
+
117
+ if (href.charAt(0) == '#')
118
+ selectByValue(formObj, 'anchorlist', href);
119
+
120
+ addClassesToList('classlist', 'advlink_styles');
121
+
122
+ selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);
123
+ selectByValue(formObj, 'targetlist', linkTarget, true);
124
+ } else
125
+ addClassesToList('classlist', 'advlink_styles');
126
+ }
127
+
128
+ function checkPrefix(n) {
129
+ if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))
130
+ n.value = 'mailto:' + n.value;
131
+
132
+ if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))
133
+ n.value = 'http://' + n.value;
134
+ }
135
+
136
+ function setFormValue(name, value) {
137
+ document.forms[0].elements[name].value = value;
138
+ }
139
+
140
+ function parseWindowOpen(onclick) {
141
+ var formObj = document.forms[0];
142
+
143
+ // Preprocess center code
144
+ if (onclick.indexOf('return false;') != -1) {
145
+ formObj.popupreturn.checked = true;
146
+ onclick = onclick.replace('return false;', '');
147
+ } else
148
+ formObj.popupreturn.checked = false;
149
+
150
+ var onClickData = parseLink(onclick);
151
+
152
+ if (onClickData != null) {
153
+ formObj.ispopup.checked = true;
154
+ setPopupControlsDisabled(false);
155
+
156
+ var onClickWindowOptions = parseOptions(onClickData['options']);
157
+ var url = onClickData['url'];
158
+
159
+ formObj.popupname.value = onClickData['target'];
160
+ formObj.popupurl.value = url;
161
+ formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');
162
+ formObj.popupheight.value = getOption(onClickWindowOptions, 'height');
163
+
164
+ formObj.popupleft.value = getOption(onClickWindowOptions, 'left');
165
+ formObj.popuptop.value = getOption(onClickWindowOptions, 'top');
166
+
167
+ if (formObj.popupleft.value.indexOf('screen') != -1)
168
+ formObj.popupleft.value = "c";
169
+
170
+ if (formObj.popuptop.value.indexOf('screen') != -1)
171
+ formObj.popuptop.value = "c";
172
+
173
+ formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";
174
+ formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";
175
+ formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";
176
+ formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";
177
+ formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";
178
+ formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";
179
+ formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";
180
+
181
+ buildOnClick();
182
+ }
183
+ }
184
+
185
+ function parseFunction(onclick) {
186
+ var formObj = document.forms[0];
187
+ var onClickData = parseLink(onclick);
188
+
189
+ // TODO: Add stuff here
190
+ }
191
+
192
+ function getOption(opts, name) {
193
+ return typeof(opts[name]) == "undefined" ? "" : opts[name];
194
+ }
195
+
196
+ function setPopupControlsDisabled(state) {
197
+ var formObj = document.forms[0];
198
+
199
+ formObj.popupname.disabled = state;
200
+ formObj.popupurl.disabled = state;
201
+ formObj.popupwidth.disabled = state;
202
+ formObj.popupheight.disabled = state;
203
+ formObj.popupleft.disabled = state;
204
+ formObj.popuptop.disabled = state;
205
+ formObj.popuplocation.disabled = state;
206
+ formObj.popupscrollbars.disabled = state;
207
+ formObj.popupmenubar.disabled = state;
208
+ formObj.popupresizable.disabled = state;
209
+ formObj.popuptoolbar.disabled = state;
210
+ formObj.popupstatus.disabled = state;
211
+ formObj.popupreturn.disabled = state;
212
+ formObj.popupdependent.disabled = state;
213
+
214
+ setBrowserDisabled('popupurlbrowser', state);
215
+ }
216
+
217
+ function parseLink(link) {
218
+ link = link.replace(new RegExp('&#39;', 'g'), "'");
219
+
220
+ var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");
221
+
222
+ // Is function name a template function
223
+ var template = templates[fnName];
224
+ if (template) {
225
+ // Build regexp
226
+ var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));
227
+ var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";
228
+ var replaceStr = "";
229
+ for (var i=0; i<variableNames.length; i++) {
230
+ // Is string value
231
+ if (variableNames[i].indexOf("'${") != -1)
232
+ regExp += "'(.*)'";
233
+ else // Number value
234
+ regExp += "([0-9]*)";
235
+
236
+ replaceStr += "$" + (i+1);
237
+
238
+ // Cleanup variable name
239
+ variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");
240
+
241
+ if (i != variableNames.length-1) {
242
+ regExp += "\\s*,\\s*";
243
+ replaceStr += "<delim>";
244
+ } else
245
+ regExp += ".*";
246
+ }
247
+
248
+ regExp += "\\);?";
249
+
250
+ // Build variable array
251
+ var variables = [];
252
+ variables["_function"] = fnName;
253
+ var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');
254
+ for (var i=0; i<variableNames.length; i++)
255
+ variables[variableNames[i]] = variableValues[i];
256
+
257
+ return variables;
258
+ }
259
+
260
+ return null;
261
+ }
262
+
263
+ function parseOptions(opts) {
264
+ if (opts == null || opts == "")
265
+ return [];
266
+
267
+ // Cleanup the options
268
+ opts = opts.toLowerCase();
269
+ opts = opts.replace(/;/g, ",");
270
+ opts = opts.replace(/[^0-9a-z=,]/g, "");
271
+
272
+ var optionChunks = opts.split(',');
273
+ var options = [];
274
+
275
+ for (var i=0; i<optionChunks.length; i++) {
276
+ var parts = optionChunks[i].split('=');
277
+
278
+ if (parts.length == 2)
279
+ options[parts[0]] = parts[1];
280
+ }
281
+
282
+ return options;
283
+ }
284
+
285
+ function buildOnClick() {
286
+ var formObj = document.forms[0];
287
+
288
+ if (!formObj.ispopup.checked) {
289
+ formObj.onclick.value = "";
290
+ return;
291
+ }
292
+
293
+ var onclick = "window.open('";
294
+ var url = formObj.popupurl.value;
295
+
296
+ onclick += url + "','";
297
+ onclick += formObj.popupname.value + "','";
298
+
299
+ if (formObj.popuplocation.checked)
300
+ onclick += "location=yes,";
301
+
302
+ if (formObj.popupscrollbars.checked)
303
+ onclick += "scrollbars=yes,";
304
+
305
+ if (formObj.popupmenubar.checked)
306
+ onclick += "menubar=yes,";
307
+
308
+ if (formObj.popupresizable.checked)
309
+ onclick += "resizable=yes,";
310
+
311
+ if (formObj.popuptoolbar.checked)
312
+ onclick += "toolbar=yes,";
313
+
314
+ if (formObj.popupstatus.checked)
315
+ onclick += "status=yes,";
316
+
317
+ if (formObj.popupdependent.checked)
318
+ onclick += "dependent=yes,";
319
+
320
+ if (formObj.popupwidth.value != "")
321
+ onclick += "width=" + formObj.popupwidth.value + ",";
322
+
323
+ if (formObj.popupheight.value != "")
324
+ onclick += "height=" + formObj.popupheight.value + ",";
325
+
326
+ if (formObj.popupleft.value != "") {
327
+ if (formObj.popupleft.value != "c")
328
+ onclick += "left=" + formObj.popupleft.value + ",";
329
+ else
330
+ onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";
331
+ }
332
+
333
+ if (formObj.popuptop.value != "") {
334
+ if (formObj.popuptop.value != "c")
335
+ onclick += "top=" + formObj.popuptop.value + ",";
336
+ else
337
+ onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";
338
+ }
339
+
340
+ if (onclick.charAt(onclick.length-1) == ',')
341
+ onclick = onclick.substring(0, onclick.length-1);
342
+
343
+ onclick += "');";
344
+
345
+ if (formObj.popupreturn.checked)
346
+ onclick += "return false;";
347
+
348
+ // tinyMCE.debug(onclick);
349
+
350
+ formObj.onclick.value = onclick;
351
+
352
+ if (formObj.href.value == "")
353
+ formObj.href.value = url;
354
+ }
355
+
356
+ function setAttrib(elm, attrib, value) {
357
+ var formObj = document.forms[0];
358
+ var valueElm = formObj.elements[attrib.toLowerCase()];
359
+ var dom = tinyMCEPopup.editor.dom;
360
+
361
+ if (typeof(value) == "undefined" || value == null) {
362
+ value = "";
363
+
364
+ if (valueElm)
365
+ value = valueElm.value;
366
+ }
367
+
368
+ // Clean up the style
369
+ if (attrib == 'style')
370
+ value = dom.serializeStyle(dom.parseStyle(value), 'a');
371
+
372
+ dom.setAttrib(elm, attrib, value);
373
+ }
374
+
375
+ function getAnchorListHTML(id, target) {
376
+ var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";
377
+
378
+ for (i=0, len=nodes.length; i<len; i++) {
379
+ if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")
380
+ html += '<option value="#' + name + '">' + name + '</option>';
381
+
382
+ if ((name = nodes[i].id) != "" && !nodes[i].href)
383
+ html += '<option value="#' + name + '">' + name + '</option>';
384
+ }
385
+
386
+ if (html == "")
387
+ return "";
388
+
389
+ html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"'
390
+ + ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"'
391
+ + '>'
392
+ + '<option value="">---</option>'
393
+ + html
394
+ + '</select>';
395
+
396
+ return html;
397
+ }
398
+
399
+ function insertAction() {
400
+ var inst = tinyMCEPopup.editor;
401
+ var elm, elementArray, i;
402
+
403
+ elm = inst.selection.getNode();
404
+ checkPrefix(document.forms[0].href);
405
+
406
+ elm = inst.dom.getParent(elm, "A");
407
+
408
+ // Remove element if there is no href
409
+ if (!document.forms[0].href.value) {
410
+ i = inst.selection.getBookmark();
411
+ inst.dom.remove(elm, 1);
412
+ inst.selection.moveToBookmark(i);
413
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
414
+ tinyMCEPopup.close();
415
+ return;
416
+ }
417
+
418
+ // Create new anchor elements
419
+ if (elm == null) {
420
+ inst.getDoc().execCommand("unlink", false, null);
421
+ tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});
422
+
423
+ elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});
424
+ for (i=0; i<elementArray.length; i++)
425
+ setAllAttribs(elm = elementArray[i]);
426
+ } else
427
+ setAllAttribs(elm);
428
+
429
+ // Don't move caret if selection was image
430
+ if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {
431
+ inst.focus();
432
+ inst.selection.select(elm);
433
+ inst.selection.collapse(0);
434
+ tinyMCEPopup.storeSelection();
435
+ }
436
+
437
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
438
+ tinyMCEPopup.close();
439
+ }
440
+
441
+ function setAllAttribs(elm) {
442
+ var formObj = document.forms[0];
443
+ var href = formObj.href.value.replace(/ /g, '%20');
444
+ var target = getSelectValue(formObj, 'targetlist');
445
+
446
+ setAttrib(elm, 'href', href);
447
+ setAttrib(elm, 'title');
448
+ setAttrib(elm, 'target', target == '_self' ? '' : target);
449
+ setAttrib(elm, 'id');
450
+ setAttrib(elm, 'style');
451
+ setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
452
+ setAttrib(elm, 'rel');
453
+ setAttrib(elm, 'rev');
454
+ setAttrib(elm, 'charset');
455
+ setAttrib(elm, 'hreflang');
456
+ setAttrib(elm, 'dir');
457
+ setAttrib(elm, 'lang');
458
+ setAttrib(elm, 'tabindex');
459
+ setAttrib(elm, 'accesskey');
460
+ setAttrib(elm, 'type');
461
+ setAttrib(elm, 'onfocus');
462
+ setAttrib(elm, 'onblur');
463
+ setAttrib(elm, 'onclick');
464
+ setAttrib(elm, 'ondblclick');
465
+ setAttrib(elm, 'onmousedown');
466
+ setAttrib(elm, 'onmouseup');
467
+ setAttrib(elm, 'onmouseover');
468
+ setAttrib(elm, 'onmousemove');
469
+ setAttrib(elm, 'onmouseout');
470
+ setAttrib(elm, 'onkeypress');
471
+ setAttrib(elm, 'onkeydown');
472
+ setAttrib(elm, 'onkeyup');
473
+
474
+ // Refresh in old MSIE
475
+ if (tinyMCE.isMSIE5)
476
+ elm.outerHTML = elm.outerHTML;
477
+ }
478
+
479
+ function getSelectValue(form_obj, field_name) {
480
+ var elm = form_obj.elements[field_name];
481
+
482
+ if (!elm || elm.options == null || elm.selectedIndex == -1)
483
+ return "";
484
+
485
+ return elm.options[elm.selectedIndex].value;
486
+ }
487
+
488
+ function getLinkListHTML(elm_id, target_form_element, onchange_func) {
489
+ if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)
490
+ return "";
491
+
492
+ var html = "";
493
+
494
+ html += '<select id="' + elm_id + '" name="' + elm_id + '"';
495
+ html += ' class="mceLinkList" onchange="this.form.' + target_form_element + '.value=';
496
+ html += 'this.options[this.selectedIndex].value;';
497
+
498
+ if (typeof(onchange_func) != "undefined")
499
+ html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
500
+
501
+ html += '"><option value="">---</option>';
502
+
503
+ for (var i=0; i<tinyMCELinkList.length; i++)
504
+ html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
505
+
506
+ html += '</select>';
507
+
508
+ return html;
509
+
510
+ // tinyMCE.debug('-- image list start --', html, '-- image list end --');
511
+ }
512
+
513
+ function getTargetListHTML(elm_id, target_form_element) {
514
+ var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');
515
+ var html = '';
516
+
517
+ html += '<select id="' + elm_id + '" name="' + elm_id + '" onchange="this.form.' + target_form_element + '.value=';
518
+ html += 'this.options[this.selectedIndex].value;">';
519
+ html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
520
+ html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
521
+ html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
522
+ html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';
523
+
524
+ for (var i=0; i<targets.length; i++) {
525
+ var key, value;
526
+
527
+ if (targets[i] == "")
528
+ continue;
529
+
530
+ key = targets[i].split('=')[0];
531
+ value = targets[i].split('=')[1];
532
+
533
+ html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';
534
+ }
535
+
536
+ html += '</select>';
537
+
538
+ return html;
539
+ }
540
+
541
+ // While loading
542
+ preinit();
543
+ tinyMCEPopup.onInit.add(init);
js/libraries/tiny_mce/plugins/advlink/link.htm CHANGED
@@ -1,338 +1,338 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#advlink_dlg.title}</title>
5
- <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
- <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
- <script type="text/javascript" src="../../utils/validate.js"></script>
9
- <script type="text/javascript" src="js/advlink.js"></script>
10
- <link href="css/advlink.css" rel="stylesheet" type="text/css" />
11
- </head>
12
- <body id="advlink" style="display: none" role="application" onload="javascript:mcTabs.displayTab('general_tab','general_panel', true);" aria-labelledby="app_label">
13
- <span class="mceVoiceLabel" id="app_label" style="display:none;">{#advlink_dlg.title}</span>
14
- <form onsubmit="insertAction();return false;" action="#">
15
- <div class="tabs" role="presentation">
16
- <ul>
17
- <li id="general_tab" class="current" aria-controls="general_panel" ><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>
18
- <li id="popup_tab" aria-controls="popup_panel" ><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>
19
- <li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>
20
- <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>
21
- </ul>
22
- </div>
23
-
24
- <div class="panel_wrapper" role="presentation">
25
- <div id="general_panel" class="panel current">
26
- <fieldset>
27
- <legend>{#advlink_dlg.general_props}</legend>
28
-
29
- <table border="0" cellpadding="4" cellspacing="0" role="presentation">
30
- <tr>
31
- <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>
32
- <td><table border="0" cellspacing="0" cellpadding="0">
33
- <tr>
34
- <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" aria-required="true" /></td>
35
- <td id="hrefbrowsercontainer">&nbsp;</td>
36
- </tr>
37
- </table></td>
38
- </tr>
39
- <tr id="linklisthrefrow">
40
- <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>
41
- <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>
42
- </tr>
43
- <tr id="anchorlistrow">
44
- <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>
45
- <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>
46
- </tr>
47
- <tr>
48
- <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>
49
- <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>
50
- </tr>
51
- <tr>
52
- <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>
53
- <td><input id="title" name="title" type="text" value="" /></td>
54
- </tr>
55
- <tr>
56
- <td><label id="classlabel" for="classlist">{#class_name}</label></td>
57
- <td>
58
- <select id="classlist" name="classlist" onchange="changeClass();">
59
- <option value="" selected="selected">{#not_set}</option>
60
- </select>
61
- </td>
62
- </tr>
63
- </table>
64
- </fieldset>
65
- </div>
66
-
67
- <div id="popup_panel" class="panel">
68
- <fieldset>
69
- <legend>{#advlink_dlg.popup_props}</legend>
70
-
71
- <input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />
72
- <label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>
73
-
74
- <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
75
- <tr>
76
- <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>
77
- <td>
78
- <table border="0" cellspacing="0" cellpadding="0">
79
- <tr>
80
- <td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>
81
- <td id="popupurlbrowsercontainer">&nbsp;</td>
82
- </tr>
83
- </table>
84
- </td>
85
- </tr>
86
- <tr>
87
- <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>
88
- <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>
89
- </tr>
90
- <tr role="group" aria-labelledby="popup_size_label">
91
- <td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label>&nbsp;</td>
92
- <td class="nowrap">
93
- <span style="display:none" id="width_voiceLabel">{#advlink_dlg.width}</span>
94
- <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" aria-labelledby="width_voiceLabel" /> x
95
- <span style="display:none" id="height_voiceLabel">{#advlink_dlg.height}</span>
96
- <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" aria-labelledby="height_voiceLabel" /> px
97
- </td>
98
- </tr>
99
- <tr role="group" aria-labelledby="popup_position_label center_hint">
100
- <td class="nowrap" id="labelleft"><label id="popup_position_label">{#advlink_dlg.popup_position}</label>&nbsp;</td>
101
- <td class="nowrap">
102
- <span style="display:none" id="x_voiceLabel">X</span>
103
- <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" aria-labelledby="x_voiceLabel" /> /
104
- <span style="display:none" id="y_voiceLabel">Y</span>
105
- <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" aria-labelledby="y_voiceLabel" /> <span id="center_hint">(c /c = center)</span>
106
- </td>
107
- </tr>
108
- </table>
109
-
110
- <fieldset>
111
- <legend>{#advlink_dlg.popup_opts}</legend>
112
-
113
- <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
114
- <tr>
115
- <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>
116
- <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>
117
- <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>
118
- <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>
119
- </tr>
120
- <tr>
121
- <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>
122
- <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>
123
- <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>
124
- <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>
125
- </tr>
126
- <tr>
127
- <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>
128
- <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>
129
- <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>
130
- <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>
131
- </tr>
132
- <tr>
133
- <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>
134
- <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>
135
- <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>
136
- <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>
137
- </tr>
138
- </table>
139
- </fieldset>
140
- </fieldset>
141
- </div>
142
-
143
- <div id="advanced_panel" class="panel">
144
- <fieldset>
145
- <legend>{#advlink_dlg.advanced_props}</legend>
146
-
147
- <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
148
- <tr>
149
- <td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td>
150
- <td><input id="id" name="id" type="text" value="" /></td>
151
- </tr>
152
-
153
- <tr>
154
- <td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>
155
- <td><input type="text" id="style" name="style" value="" /></td>
156
- </tr>
157
-
158
- <tr>
159
- <td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>
160
- <td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
161
- </tr>
162
-
163
- <tr>
164
- <td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>
165
- <td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>
166
- </tr>
167
-
168
- <tr>
169
- <td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td>
170
- <td>
171
- <select id="dir" name="dir">
172
- <option value="">{#not_set}</option>
173
- <option value="ltr">{#advlink_dlg.ltr}</option>
174
- <option value="rtl">{#advlink_dlg.rtl}</option>
175
- </select>
176
- </td>
177
- </tr>
178
-
179
- <tr>
180
- <td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>
181
- <td><input type="text" id="hreflang" name="hreflang" value="" /></td>
182
- </tr>
183
-
184
- <tr>
185
- <td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td>
186
- <td>
187
- <input id="lang" name="lang" type="text" value="" />
188
- </td>
189
- </tr>
190
-
191
- <tr>
192
- <td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>
193
- <td><input type="text" id="charset" name="charset" value="" /></td>
194
- </tr>
195
-
196
- <tr>
197
- <td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>
198
- <td><input type="text" id="type" name="type" value="" /></td>
199
- </tr>
200
-
201
- <tr>
202
- <td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>
203
- <td><select id="rel" name="rel">
204
- <option value="">{#not_set}</option>
205
- <option value="lightbox">Lightbox</option>
206
- <option value="alternate">Alternate</option>
207
- <option value="designates">Designates</option>
208
- <option value="stylesheet">Stylesheet</option>
209
- <option value="start">Start</option>
210
- <option value="next">Next</option>
211
- <option value="prev">Prev</option>
212
- <option value="contents">Contents</option>
213
- <option value="index">Index</option>
214
- <option value="glossary">Glossary</option>
215
- <option value="copyright">Copyright</option>
216
- <option value="chapter">Chapter</option>
217
- <option value="subsection">Subsection</option>
218
- <option value="appendix">Appendix</option>
219
- <option value="help">Help</option>
220
- <option value="bookmark">Bookmark</option>
221
- <option value="nofollow">No Follow</option>
222
- <option value="tag">Tag</option>
223
- </select>
224
- </td>
225
- </tr>
226
-
227
- <tr>
228
- <td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>
229
- <td><select id="rev" name="rev">
230
- <option value="">{#not_set}</option>
231
- <option value="alternate">Alternate</option>
232
- <option value="designates">Designates</option>
233
- <option value="stylesheet">Stylesheet</option>
234
- <option value="start">Start</option>
235
- <option value="next">Next</option>
236
- <option value="prev">Prev</option>
237
- <option value="contents">Contents</option>
238
- <option value="index">Index</option>
239
- <option value="glossary">Glossary</option>
240
- <option value="copyright">Copyright</option>
241
- <option value="chapter">Chapter</option>
242
- <option value="subsection">Subsection</option>
243
- <option value="appendix">Appendix</option>
244
- <option value="help">Help</option>
245
- <option value="bookmark">Bookmark</option>
246
- </select>
247
- </td>
248
- </tr>
249
-
250
- <tr>
251
- <td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>
252
- <td><input type="text" id="tabindex" name="tabindex" value="" /></td>
253
- </tr>
254
-
255
- <tr>
256
- <td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td>
257
- <td><input type="text" id="accesskey" name="accesskey" value="" /></td>
258
- </tr>
259
- </table>
260
- </fieldset>
261
- </div>
262
-
263
- <div id="events_panel" class="panel">
264
- <fieldset>
265
- <legend>{#advlink_dlg.event_props}</legend>
266
-
267
- <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
268
- <tr>
269
- <td class="column1"><label for="onfocus">onfocus</label></td>
270
- <td><input id="onfocus" name="onfocus" type="text" value="" /></td>
271
- </tr>
272
-
273
- <tr>
274
- <td class="column1"><label for="onblur">onblur</label></td>
275
- <td><input id="onblur" name="onblur" type="text" value="" /></td>
276
- </tr>
277
-
278
- <tr>
279
- <td class="column1"><label for="onclick">onclick</label></td>
280
- <td><input id="onclick" name="onclick" type="text" value="" /></td>
281
- </tr>
282
-
283
- <tr>
284
- <td class="column1"><label for="ondblclick">ondblclick</label></td>
285
- <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td>
286
- </tr>
287
-
288
- <tr>
289
- <td class="column1"><label for="onmousedown">onmousedown</label></td>
290
- <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td>
291
- </tr>
292
-
293
- <tr>
294
- <td class="column1"><label for="onmouseup">onmouseup</label></td>
295
- <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td>
296
- </tr>
297
-
298
- <tr>
299
- <td class="column1"><label for="onmouseover">onmouseover</label></td>
300
- <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td>
301
- </tr>
302
-
303
- <tr>
304
- <td class="column1"><label for="onmousemove">onmousemove</label></td>
305
- <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td>
306
- </tr>
307
-
308
- <tr>
309
- <td class="column1"><label for="onmouseout">onmouseout</label></td>
310
- <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td>
311
- </tr>
312
-
313
- <tr>
314
- <td class="column1"><label for="onkeypress">onkeypress</label></td>
315
- <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td>
316
- </tr>
317
-
318
- <tr>
319
- <td class="column1"><label for="onkeydown">onkeydown</label></td>
320
- <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td>
321
- </tr>
322
-
323
- <tr>
324
- <td class="column1"><label for="onkeyup">onkeyup</label></td>
325
- <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td>
326
- </tr>
327
- </table>
328
- </fieldset>
329
- </div>
330
- </div>
331
-
332
- <div class="mceActionPanel">
333
- <input type="submit" id="insert" name="insert" value="{#insert}" />
334
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
335
- </div>
336
- </form>
337
- </body>
338
- </html>
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#advlink_dlg.title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
+ <script type="text/javascript" src="../../utils/validate.js"></script>
9
+ <script type="text/javascript" src="js/advlink.js"></script>
10
+ <link href="css/advlink.css" rel="stylesheet" type="text/css" />
11
+ </head>
12
+ <body id="advlink" style="display: none" role="application" onload="javascript:mcTabs.displayTab('general_tab','general_panel', true);" aria-labelledby="app_label">
13
+ <span class="mceVoiceLabel" id="app_label" style="display:none;">{#advlink_dlg.title}</span>
14
+ <form onsubmit="insertAction();return false;" action="#">
15
+ <div class="tabs" role="presentation">
16
+ <ul>
17
+ <li id="general_tab" class="current" aria-controls="general_panel" ><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>
18
+ <li id="popup_tab" aria-controls="popup_panel" ><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>
19
+ <li id="events_tab" aria-controls="events_panel"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>
20
+ <li id="advanced_tab" aria-controls="advanced_panel"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>
21
+ </ul>
22
+ </div>
23
+
24
+ <div class="panel_wrapper" role="presentation">
25
+ <div id="general_panel" class="panel current">
26
+ <fieldset>
27
+ <legend>{#advlink_dlg.general_props}</legend>
28
+
29
+ <table border="0" cellpadding="4" cellspacing="0" role="presentation">
30
+ <tr>
31
+ <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>
32
+ <td><table border="0" cellspacing="0" cellpadding="0">
33
+ <tr>
34
+ <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" aria-required="true" /></td>
35
+ <td id="hrefbrowsercontainer">&nbsp;</td>
36
+ </tr>
37
+ </table></td>
38
+ </tr>
39
+ <tr id="linklisthrefrow">
40
+ <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>
41
+ <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>
42
+ </tr>
43
+ <tr id="anchorlistrow">
44
+ <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>
45
+ <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>
46
+ </tr>
47
+ <tr>
48
+ <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>
49
+ <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>
50
+ </tr>
51
+ <tr>
52
+ <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>
53
+ <td><input id="title" name="title" type="text" value="" /></td>
54
+ </tr>
55
+ <tr>
56
+ <td><label id="classlabel" for="classlist">{#class_name}</label></td>
57
+ <td>
58
+ <select id="classlist" name="classlist" onchange="changeClass();">
59
+ <option value="" selected="selected">{#not_set}</option>
60
+ </select>
61
+ </td>
62
+ </tr>
63
+ </table>
64
+ </fieldset>
65
+ </div>
66
+
67
+ <div id="popup_panel" class="panel">
68
+ <fieldset>
69
+ <legend>{#advlink_dlg.popup_props}</legend>
70
+
71
+ <input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />
72
+ <label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>
73
+
74
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
75
+ <tr>
76
+ <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>
77
+ <td>
78
+ <table border="0" cellspacing="0" cellpadding="0">
79
+ <tr>
80
+ <td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>
81
+ <td id="popupurlbrowsercontainer">&nbsp;</td>
82
+ </tr>
83
+ </table>
84
+ </td>
85
+ </tr>
86
+ <tr>
87
+ <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>
88
+ <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>
89
+ </tr>
90
+ <tr role="group" aria-labelledby="popup_size_label">
91
+ <td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label>&nbsp;</td>
92
+ <td class="nowrap">
93
+ <span style="display:none" id="width_voiceLabel">{#advlink_dlg.width}</span>
94
+ <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" aria-labelledby="width_voiceLabel" /> x
95
+ <span style="display:none" id="height_voiceLabel">{#advlink_dlg.height}</span>
96
+ <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" aria-labelledby="height_voiceLabel" /> px
97
+ </td>
98
+ </tr>
99
+ <tr role="group" aria-labelledby="popup_position_label center_hint">
100
+ <td class="nowrap" id="labelleft"><label id="popup_position_label">{#advlink_dlg.popup_position}</label>&nbsp;</td>
101
+ <td class="nowrap">
102
+ <span style="display:none" id="x_voiceLabel">X</span>
103
+ <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" aria-labelledby="x_voiceLabel" /> /
104
+ <span style="display:none" id="y_voiceLabel">Y</span>
105
+ <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" aria-labelledby="y_voiceLabel" /> <span id="center_hint">(c /c = center)</span>
106
+ </td>
107
+ </tr>
108
+ </table>
109
+
110
+ <fieldset>
111
+ <legend>{#advlink_dlg.popup_opts}</legend>
112
+
113
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
114
+ <tr>
115
+ <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>
116
+ <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>
117
+ <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>
118
+ <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>
119
+ </tr>
120
+ <tr>
121
+ <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>
122
+ <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>
123
+ <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>
124
+ <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>
125
+ </tr>
126
+ <tr>
127
+ <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>
128
+ <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>
129
+ <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>
130
+ <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>
131
+ </tr>
132
+ <tr>
133
+ <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>
134
+ <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>
135
+ <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>
136
+ <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>
137
+ </tr>
138
+ </table>
139
+ </fieldset>
140
+ </fieldset>
141
+ </div>
142
+
143
+ <div id="advanced_panel" class="panel">
144
+ <fieldset>
145
+ <legend>{#advlink_dlg.advanced_props}</legend>
146
+
147
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
148
+ <tr>
149
+ <td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td>
150
+ <td><input id="id" name="id" type="text" value="" /></td>
151
+ </tr>
152
+
153
+ <tr>
154
+ <td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>
155
+ <td><input type="text" id="style" name="style" value="" /></td>
156
+ </tr>
157
+
158
+ <tr>
159
+ <td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>
160
+ <td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
161
+ </tr>
162
+
163
+ <tr>
164
+ <td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>
165
+ <td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>
166
+ </tr>
167
+
168
+ <tr>
169
+ <td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td>
170
+ <td>
171
+ <select id="dir" name="dir">
172
+ <option value="">{#not_set}</option>
173
+ <option value="ltr">{#advlink_dlg.ltr}</option>
174
+ <option value="rtl">{#advlink_dlg.rtl}</option>
175
+ </select>
176
+ </td>
177
+ </tr>
178
+
179
+ <tr>
180
+ <td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>
181
+ <td><input type="text" id="hreflang" name="hreflang" value="" /></td>
182
+ </tr>
183
+
184
+ <tr>
185
+ <td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td>
186
+ <td>
187
+ <input id="lang" name="lang" type="text" value="" />
188
+ </td>
189
+ </tr>
190
+
191
+ <tr>
192
+ <td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>
193
+ <td><input type="text" id="charset" name="charset" value="" /></td>
194
+ </tr>
195
+
196
+ <tr>
197
+ <td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>
198
+ <td><input type="text" id="type" name="type" value="" /></td>
199
+ </tr>
200
+
201
+ <tr>
202
+ <td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>
203
+ <td><select id="rel" name="rel">
204
+ <option value="">{#not_set}</option>
205
+ <option value="lightbox">Lightbox</option>
206
+ <option value="alternate">Alternate</option>
207
+ <option value="designates">Designates</option>
208
+ <option value="stylesheet">Stylesheet</option>
209
+ <option value="start">Start</option>
210
+ <option value="next">Next</option>
211
+ <option value="prev">Prev</option>
212
+ <option value="contents">Contents</option>
213
+ <option value="index">Index</option>
214
+ <option value="glossary">Glossary</option>
215
+ <option value="copyright">Copyright</option>
216
+ <option value="chapter">Chapter</option>
217
+ <option value="subsection">Subsection</option>
218
+ <option value="appendix">Appendix</option>
219
+ <option value="help">Help</option>
220
+ <option value="bookmark">Bookmark</option>
221
+ <option value="nofollow">No Follow</option>
222
+ <option value="tag">Tag</option>
223
+ </select>
224
+ </td>
225
+ </tr>
226
+
227
+ <tr>
228
+ <td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>
229
+ <td><select id="rev" name="rev">
230
+ <option value="">{#not_set}</option>
231
+ <option value="alternate">Alternate</option>
232
+ <option value="designates">Designates</option>
233
+ <option value="stylesheet">Stylesheet</option>
234
+ <option value="start">Start</option>
235
+ <option value="next">Next</option>
236
+ <option value="prev">Prev</option>
237
+ <option value="contents">Contents</option>
238
+ <option value="index">Index</option>
239
+ <option value="glossary">Glossary</option>
240
+ <option value="copyright">Copyright</option>
241
+ <option value="chapter">Chapter</option>
242
+ <option value="subsection">Subsection</option>
243
+ <option value="appendix">Appendix</option>
244
+ <option value="help">Help</option>
245
+ <option value="bookmark">Bookmark</option>
246
+ </select>
247
+ </td>
248
+ </tr>
249
+
250
+ <tr>
251
+ <td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>
252
+ <td><input type="text" id="tabindex" name="tabindex" value="" /></td>
253
+ </tr>
254
+
255
+ <tr>
256
+ <td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td>
257
+ <td><input type="text" id="accesskey" name="accesskey" value="" /></td>
258
+ </tr>
259
+ </table>
260
+ </fieldset>
261
+ </div>
262
+
263
+ <div id="events_panel" class="panel">
264
+ <fieldset>
265
+ <legend>{#advlink_dlg.event_props}</legend>
266
+
267
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
268
+ <tr>
269
+ <td class="column1"><label for="onfocus">onfocus</label></td>
270
+ <td><input id="onfocus" name="onfocus" type="text" value="" /></td>
271
+ </tr>
272
+
273
+ <tr>
274
+ <td class="column1"><label for="onblur">onblur</label></td>
275
+ <td><input id="onblur" name="onblur" type="text" value="" /></td>
276
+ </tr>
277
+
278
+ <tr>
279
+ <td class="column1"><label for="onclick">onclick</label></td>
280
+ <td><input id="onclick" name="onclick" type="text" value="" /></td>
281
+ </tr>
282
+
283
+ <tr>
284
+ <td class="column1"><label for="ondblclick">ondblclick</label></td>
285
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td>
286
+ </tr>
287
+
288
+ <tr>
289
+ <td class="column1"><label for="onmousedown">onmousedown</label></td>
290
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td>
291
+ </tr>
292
+
293
+ <tr>
294
+ <td class="column1"><label for="onmouseup">onmouseup</label></td>
295
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td>
296
+ </tr>
297
+
298
+ <tr>
299
+ <td class="column1"><label for="onmouseover">onmouseover</label></td>
300
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td>
301
+ </tr>
302
+
303
+ <tr>
304
+ <td class="column1"><label for="onmousemove">onmousemove</label></td>
305
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td>
306
+ </tr>
307
+
308
+ <tr>
309
+ <td class="column1"><label for="onmouseout">onmouseout</label></td>
310
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td>
311
+ </tr>
312
+
313
+ <tr>
314
+ <td class="column1"><label for="onkeypress">onkeypress</label></td>
315
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td>
316
+ </tr>
317
+
318
+ <tr>
319
+ <td class="column1"><label for="onkeydown">onkeydown</label></td>
320
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td>
321
+ </tr>
322
+
323
+ <tr>
324
+ <td class="column1"><label for="onkeyup">onkeyup</label></td>
325
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td>
326
+ </tr>
327
+ </table>
328
+ </fieldset>
329
+ </div>
330
+ </div>
331
+
332
+ <div class="mceActionPanel">
333
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
334
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
335
+ </div>
336
+ </form>
337
+ </body>
338
+ </html>
js/libraries/tiny_mce/plugins/advlist/editor_plugin_src.js CHANGED
@@ -1,176 +1,176 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- var each = tinymce.each;
13
-
14
- tinymce.create('tinymce.plugins.AdvListPlugin', {
15
- init : function(ed, url) {
16
- var t = this;
17
-
18
- t.editor = ed;
19
-
20
- function buildFormats(str) {
21
- var formats = [];
22
-
23
- each(str.split(/,/), function(type) {
24
- formats.push({
25
- title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),
26
- styles : {
27
- listStyleType : type == 'default' ? '' : type
28
- }
29
- });
30
- });
31
-
32
- return formats;
33
- };
34
-
35
- // Setup number formats from config or default
36
- t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");
37
- t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");
38
-
39
- if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent))
40
- t.isIE7 = true;
41
- },
42
-
43
- createControl: function(name, cm) {
44
- var t = this, btn, format, editor = t.editor;
45
-
46
- if (name == 'numlist' || name == 'bullist') {
47
- // Default to first item if it's a default item
48
- if (t[name][0].title == 'advlist.def')
49
- format = t[name][0];
50
-
51
- function hasFormat(node, format) {
52
- var state = true;
53
-
54
- each(format.styles, function(value, name) {
55
- // Format doesn't match
56
- if (editor.dom.getStyle(node, name) != value) {
57
- state = false;
58
- return false;
59
- }
60
- });
61
-
62
- return state;
63
- };
64
-
65
- function applyListFormat() {
66
- var list, dom = editor.dom, sel = editor.selection;
67
-
68
- // Check for existing list element
69
- list = dom.getParent(sel.getNode(), 'ol,ul');
70
-
71
- // Switch/add list type if needed
72
- if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))
73
- editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');
74
-
75
- // Append styles to new list element
76
- if (format) {
77
- list = dom.getParent(sel.getNode(), 'ol,ul');
78
- if (list) {
79
- dom.setStyles(list, format.styles);
80
- list.removeAttribute('data-mce-style');
81
- }
82
- }
83
-
84
- editor.focus();
85
- };
86
-
87
- btn = cm.createSplitButton(name, {
88
- title : 'advanced.' + name + '_desc',
89
- 'class' : 'mce_' + name,
90
- onclick : function() {
91
- applyListFormat();
92
- }
93
- });
94
-
95
- btn.onRenderMenu.add(function(btn, menu) {
96
- menu.onHideMenu.add(function() {
97
- if (t.bookmark) {
98
- editor.selection.moveToBookmark(t.bookmark);
99
- t.bookmark = 0;
100
- }
101
- });
102
-
103
- menu.onShowMenu.add(function() {
104
- var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList;
105
-
106
- if (list || format) {
107
- fmtList = t[name];
108
-
109
- // Unselect existing items
110
- each(menu.items, function(item) {
111
- var state = true;
112
-
113
- item.setSelected(0);
114
-
115
- if (list && !item.isDisabled()) {
116
- each(fmtList, function(fmt) {
117
- if (fmt.id == item.id) {
118
- if (!hasFormat(list, fmt)) {
119
- state = false;
120
- return false;
121
- }
122
- }
123
- });
124
-
125
- if (state)
126
- item.setSelected(1);
127
- }
128
- });
129
-
130
- // Select the current format
131
- if (!list)
132
- menu.items[format.id].setSelected(1);
133
- }
134
-
135
- editor.focus();
136
-
137
- // IE looses it's selection so store it away and restore it later
138
- if (tinymce.isIE) {
139
- t.bookmark = editor.selection.getBookmark(1);
140
- }
141
- });
142
-
143
- menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);
144
-
145
- each(t[name], function(item) {
146
- // IE<8 doesn't support lower-greek, skip it
147
- if (t.isIE7 && item.styles.listStyleType == 'lower-greek')
148
- return;
149
-
150
- item.id = editor.dom.uniqueId();
151
-
152
- menu.add({id : item.id, title : item.title, onclick : function() {
153
- format = item;
154
- applyListFormat();
155
- }});
156
- });
157
- });
158
-
159
- return btn;
160
- }
161
- },
162
-
163
- getInfo : function() {
164
- return {
165
- longname : 'Advanced lists',
166
- author : 'Moxiecode Systems AB',
167
- authorurl : 'http://tinymce.moxiecode.com',
168
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',
169
- version : tinymce.majorVersion + "." + tinymce.minorVersion
170
- };
171
- }
172
- });
173
-
174
- // Register plugin
175
- tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);
176
  })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ var each = tinymce.each;
13
+
14
+ tinymce.create('tinymce.plugins.AdvListPlugin', {
15
+ init : function(ed, url) {
16
+ var t = this;
17
+
18
+ t.editor = ed;
19
+
20
+ function buildFormats(str) {
21
+ var formats = [];
22
+
23
+ each(str.split(/,/), function(type) {
24
+ formats.push({
25
+ title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),
26
+ styles : {
27
+ listStyleType : type == 'default' ? '' : type
28
+ }
29
+ });
30
+ });
31
+
32
+ return formats;
33
+ };
34
+
35
+ // Setup number formats from config or default
36
+ t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");
37
+ t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");
38
+
39
+ if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent))
40
+ t.isIE7 = true;
41
+ },
42
+
43
+ createControl: function(name, cm) {
44
+ var t = this, btn, format, editor = t.editor;
45
+
46
+ if (name == 'numlist' || name == 'bullist') {
47
+ // Default to first item if it's a default item
48
+ if (t[name][0].title == 'advlist.def')
49
+ format = t[name][0];
50
+
51
+ function hasFormat(node, format) {
52
+ var state = true;
53
+
54
+ each(format.styles, function(value, name) {
55
+ // Format doesn't match
56
+ if (editor.dom.getStyle(node, name) != value) {
57
+ state = false;
58
+ return false;
59
+ }
60
+ });
61
+
62
+ return state;
63
+ };
64
+
65
+ function applyListFormat() {
66
+ var list, dom = editor.dom, sel = editor.selection;
67
+
68
+ // Check for existing list element
69
+ list = dom.getParent(sel.getNode(), 'ol,ul');
70
+
71
+ // Switch/add list type if needed
72
+ if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))
73
+ editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');
74
+
75
+ // Append styles to new list element
76
+ if (format) {
77
+ list = dom.getParent(sel.getNode(), 'ol,ul');
78
+ if (list) {
79
+ dom.setStyles(list, format.styles);
80
+ list.removeAttribute('data-mce-style');
81
+ }
82
+ }
83
+
84
+ editor.focus();
85
+ };
86
+
87
+ btn = cm.createSplitButton(name, {
88
+ title : 'advanced.' + name + '_desc',
89
+ 'class' : 'mce_' + name,
90
+ onclick : function() {
91
+ applyListFormat();
92
+ }
93
+ });
94
+
95
+ btn.onRenderMenu.add(function(btn, menu) {
96
+ menu.onHideMenu.add(function() {
97
+ if (t.bookmark) {
98
+ editor.selection.moveToBookmark(t.bookmark);
99
+ t.bookmark = 0;
100
+ }
101
+ });
102
+
103
+ menu.onShowMenu.add(function() {
104
+ var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList;
105
+
106
+ if (list || format) {
107
+ fmtList = t[name];
108
+
109
+ // Unselect existing items
110
+ each(menu.items, function(item) {
111
+ var state = true;
112
+
113
+ item.setSelected(0);
114
+
115
+ if (list && !item.isDisabled()) {
116
+ each(fmtList, function(fmt) {
117
+ if (fmt.id == item.id) {
118
+ if (!hasFormat(list, fmt)) {
119
+ state = false;
120
+ return false;
121
+ }
122
+ }
123
+ });
124
+
125
+ if (state)
126
+ item.setSelected(1);
127
+ }
128
+ });
129
+
130
+ // Select the current format
131
+ if (!list)
132
+ menu.items[format.id].setSelected(1);
133
+ }
134
+
135
+ editor.focus();
136
+
137
+ // IE looses it's selection so store it away and restore it later
138
+ if (tinymce.isIE) {
139
+ t.bookmark = editor.selection.getBookmark(1);
140
+ }
141
+ });
142
+
143
+ menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);
144
+
145
+ each(t[name], function(item) {
146
+ // IE<8 doesn't support lower-greek, skip it
147
+ if (t.isIE7 && item.styles.listStyleType == 'lower-greek')
148
+ return;
149
+
150
+ item.id = editor.dom.uniqueId();
151
+
152
+ menu.add({id : item.id, title : item.title, onclick : function() {
153
+ format = item;
154
+ applyListFormat();
155
+ }});
156
+ });
157
+ });
158
+
159
+ return btn;
160
+ }
161
+ },
162
+
163
+ getInfo : function() {
164
+ return {
165
+ longname : 'Advanced lists',
166
+ author : 'Moxiecode Systems AB',
167
+ authorurl : 'http://tinymce.moxiecode.com',
168
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',
169
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
170
+ };
171
+ }
172
+ });
173
+
174
+ // Register plugin
175
+ tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);
176
  })();
js/libraries/tiny_mce/plugins/autolink/editor_plugin_src.js CHANGED
@@ -1,184 +1,184 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2011, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- tinymce.create('tinymce.plugins.AutolinkPlugin', {
13
- /**
14
- * Initializes the plugin, this will be executed after the plugin has been created.
15
- * This call is done before the editor instance has finished it's initialization so use the onInit event
16
- * of the editor instance to intercept that event.
17
- *
18
- * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
19
- * @param {string} url Absolute URL to where the plugin is located.
20
- */
21
-
22
- init : function(ed, url) {
23
- var t = this;
24
-
25
- // Add a key down handler
26
- ed.onKeyDown.addToTop(function(ed, e) {
27
- if (e.keyCode == 13)
28
- return t.handleEnter(ed);
29
- });
30
-
31
- // Internet Explorer has built-in automatic linking for most cases
32
- if (tinyMCE.isIE)
33
- return;
34
-
35
- ed.onKeyPress.add(function(ed, e) {
36
- if (e.which == 41)
37
- return t.handleEclipse(ed);
38
- });
39
-
40
- // Add a key up handler
41
- ed.onKeyUp.add(function(ed, e) {
42
- if (e.keyCode == 32)
43
- return t.handleSpacebar(ed);
44
- });
45
- },
46
-
47
- handleEclipse : function(ed) {
48
- this.parseCurrentLine(ed, -1, '(', true);
49
- },
50
-
51
- handleSpacebar : function(ed) {
52
- this.parseCurrentLine(ed, 0, '', true);
53
- },
54
-
55
- handleEnter : function(ed) {
56
- this.parseCurrentLine(ed, -1, '', false);
57
- },
58
-
59
- parseCurrentLine : function(ed, end_offset, delimiter, goback) {
60
- var r, end, start, endContainer, bookmark, text, matches, prev, len;
61
-
62
- // We need at least five characters to form a URL,
63
- // hence, at minimum, five characters from the beginning of the line.
64
- r = ed.selection.getRng(true).cloneRange();
65
- if (r.startOffset < 5) {
66
- // During testing, the caret is placed inbetween two text nodes.
67
- // The previous text node contains the URL.
68
- prev = r.endContainer.previousSibling;
69
- if (prev == null) {
70
- if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
71
- return;
72
-
73
- prev = r.endContainer.firstChild.nextSibling;
74
- }
75
- len = prev.length;
76
- r.setStart(prev, len);
77
- r.setEnd(prev, len);
78
-
79
- if (r.endOffset < 5)
80
- return;
81
-
82
- end = r.endOffset;
83
- endContainer = prev;
84
- } else {
85
- endContainer = r.endContainer;
86
-
87
- // Get a text node
88
- if (endContainer.nodeType != 3 && endContainer.firstChild) {
89
- while (endContainer.nodeType != 3 && endContainer.firstChild)
90
- endContainer = endContainer.firstChild;
91
-
92
- // Move range to text node
93
- if (endContainer.nodeType == 3) {
94
- r.setStart(endContainer, 0);
95
- r.setEnd(endContainer, endContainer.nodeValue.length);
96
- }
97
- }
98
-
99
- if (r.endOffset == 1)
100
- end = 2;
101
- else
102
- end = r.endOffset - 1 - end_offset;
103
- }
104
-
105
- start = end;
106
-
107
- do
108
- {
109
- // Move the selection one character backwards.
110
- r.setStart(endContainer, end - 2);
111
- r.setEnd(endContainer, end - 1);
112
- end -= 1;
113
-
114
- // Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
115
- } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
116
-
117
- if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
118
- r.setStart(endContainer, end);
119
- r.setEnd(endContainer, start);
120
- end += 1;
121
- } else if (r.startOffset == 0) {
122
- r.setStart(endContainer, 0);
123
- r.setEnd(endContainer, start);
124
- }
125
- else {
126
- r.setStart(endContainer, end);
127
- r.setEnd(endContainer, start);
128
- }
129
-
130
- // Exclude last . from word like "www.site.com."
131
- var text = r.toString();
132
- if (text.charAt(text.length - 1) == '.') {
133
- r.setEnd(endContainer, start - 1);
134
- }
135
-
136
- text = r.toString();
137
- matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);
138
-
139
- if (matches) {
140
- if (matches[1] == 'www.') {
141
- matches[1] = 'http://www.';
142
- } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {
143
- matches[1] = 'mailto:' + matches[1];
144
- }
145
-
146
- bookmark = ed.selection.getBookmark();
147
-
148
- ed.selection.setRng(r);
149
- tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
150
- ed.selection.moveToBookmark(bookmark);
151
- ed.nodeChanged();
152
-
153
- // TODO: Determine if this is still needed.
154
- if (tinyMCE.isWebKit) {
155
- // move the caret to its original position
156
- ed.selection.collapse(false);
157
- var max = Math.min(endContainer.length, start + 1);
158
- r.setStart(endContainer, max);
159
- r.setEnd(endContainer, max);
160
- ed.selection.setRng(r);
161
- }
162
- }
163
- },
164
-
165
- /**
166
- * Returns information about the plugin as a name/value array.
167
- * The current keys are longname, author, authorurl, infourl and version.
168
- *
169
- * @return {Object} Name/value array containing information about the plugin.
170
- */
171
- getInfo : function() {
172
- return {
173
- longname : 'Autolink',
174
- author : 'Moxiecode Systems AB',
175
- authorurl : 'http://tinymce.moxiecode.com',
176
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
177
- version : tinymce.majorVersion + "." + tinymce.minorVersion
178
- };
179
- }
180
- });
181
-
182
- // Register plugin
183
- tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
184
- })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2011, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ tinymce.create('tinymce.plugins.AutolinkPlugin', {
13
+ /**
14
+ * Initializes the plugin, this will be executed after the plugin has been created.
15
+ * This call is done before the editor instance has finished it's initialization so use the onInit event
16
+ * of the editor instance to intercept that event.
17
+ *
18
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
19
+ * @param {string} url Absolute URL to where the plugin is located.
20
+ */
21
+
22
+ init : function(ed, url) {
23
+ var t = this;
24
+
25
+ // Add a key down handler
26
+ ed.onKeyDown.addToTop(function(ed, e) {
27
+ if (e.keyCode == 13)
28
+ return t.handleEnter(ed);
29
+ });
30
+
31
+ // Internet Explorer has built-in automatic linking for most cases
32
+ if (tinyMCE.isIE)
33
+ return;
34
+
35
+ ed.onKeyPress.add(function(ed, e) {
36
+ if (e.which == 41)
37
+ return t.handleEclipse(ed);
38
+ });
39
+
40
+ // Add a key up handler
41
+ ed.onKeyUp.add(function(ed, e) {
42
+ if (e.keyCode == 32)
43
+ return t.handleSpacebar(ed);
44
+ });
45
+ },
46
+
47
+ handleEclipse : function(ed) {
48
+ this.parseCurrentLine(ed, -1, '(', true);
49
+ },
50
+
51
+ handleSpacebar : function(ed) {
52
+ this.parseCurrentLine(ed, 0, '', true);
53
+ },
54
+
55
+ handleEnter : function(ed) {
56
+ this.parseCurrentLine(ed, -1, '', false);
57
+ },
58
+
59
+ parseCurrentLine : function(ed, end_offset, delimiter, goback) {
60
+ var r, end, start, endContainer, bookmark, text, matches, prev, len;
61
+
62
+ // We need at least five characters to form a URL,
63
+ // hence, at minimum, five characters from the beginning of the line.
64
+ r = ed.selection.getRng(true).cloneRange();
65
+ if (r.startOffset < 5) {
66
+ // During testing, the caret is placed inbetween two text nodes.
67
+ // The previous text node contains the URL.
68
+ prev = r.endContainer.previousSibling;
69
+ if (prev == null) {
70
+ if (r.endContainer.firstChild == null || r.endContainer.firstChild.nextSibling == null)
71
+ return;
72
+
73
+ prev = r.endContainer.firstChild.nextSibling;
74
+ }
75
+ len = prev.length;
76
+ r.setStart(prev, len);
77
+ r.setEnd(prev, len);
78
+
79
+ if (r.endOffset < 5)
80
+ return;
81
+
82
+ end = r.endOffset;
83
+ endContainer = prev;
84
+ } else {
85
+ endContainer = r.endContainer;
86
+
87
+ // Get a text node
88
+ if (endContainer.nodeType != 3 && endContainer.firstChild) {
89
+ while (endContainer.nodeType != 3 && endContainer.firstChild)
90
+ endContainer = endContainer.firstChild;
91
+
92
+ // Move range to text node
93
+ if (endContainer.nodeType == 3) {
94
+ r.setStart(endContainer, 0);
95
+ r.setEnd(endContainer, endContainer.nodeValue.length);
96
+ }
97
+ }
98
+
99
+ if (r.endOffset == 1)
100
+ end = 2;
101
+ else
102
+ end = r.endOffset - 1 - end_offset;
103
+ }
104
+
105
+ start = end;
106
+
107
+ do
108
+ {
109
+ // Move the selection one character backwards.
110
+ r.setStart(endContainer, end - 2);
111
+ r.setEnd(endContainer, end - 1);
112
+ end -= 1;
113
+
114
+ // Loop until one of the following is found: a blank space, &nbsp;, delimeter, (end-2) >= 0
115
+ } while (r.toString() != ' ' && r.toString() != '' && r.toString().charCodeAt(0) != 160 && (end -2) >= 0 && r.toString() != delimiter);
116
+
117
+ if (r.toString() == delimiter || r.toString().charCodeAt(0) == 160) {
118
+ r.setStart(endContainer, end);
119
+ r.setEnd(endContainer, start);
120
+ end += 1;
121
+ } else if (r.startOffset == 0) {
122
+ r.setStart(endContainer, 0);
123
+ r.setEnd(endContainer, start);
124
+ }
125
+ else {
126
+ r.setStart(endContainer, end);
127
+ r.setEnd(endContainer, start);
128
+ }
129
+
130
+ // Exclude last . from word like "www.site.com."
131
+ var text = r.toString();
132
+ if (text.charAt(text.length - 1) == '.') {
133
+ r.setEnd(endContainer, start - 1);
134
+ }
135
+
136
+ text = r.toString();
137
+ matches = text.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+-]+@)(.+)$/i);
138
+
139
+ if (matches) {
140
+ if (matches[1] == 'www.') {
141
+ matches[1] = 'http://www.';
142
+ } else if (/@$/.test(matches[1]) && !/^mailto:/.test(matches[1])) {
143
+ matches[1] = 'mailto:' + matches[1];
144
+ }
145
+
146
+ bookmark = ed.selection.getBookmark();
147
+
148
+ ed.selection.setRng(r);
149
+ tinyMCE.execCommand('createlink',false, matches[1] + matches[2]);
150
+ ed.selection.moveToBookmark(bookmark);
151
+ ed.nodeChanged();
152
+
153
+ // TODO: Determine if this is still needed.
154
+ if (tinyMCE.isWebKit) {
155
+ // move the caret to its original position
156
+ ed.selection.collapse(false);
157
+ var max = Math.min(endContainer.length, start + 1);
158
+ r.setStart(endContainer, max);
159
+ r.setEnd(endContainer, max);
160
+ ed.selection.setRng(r);
161
+ }
162
+ }
163
+ },
164
+
165
+ /**
166
+ * Returns information about the plugin as a name/value array.
167
+ * The current keys are longname, author, authorurl, infourl and version.
168
+ *
169
+ * @return {Object} Name/value array containing information about the plugin.
170
+ */
171
+ getInfo : function() {
172
+ return {
173
+ longname : 'Autolink',
174
+ author : 'Moxiecode Systems AB',
175
+ authorurl : 'http://tinymce.moxiecode.com',
176
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autolink',
177
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
178
+ };
179
+ }
180
+ });
181
+
182
+ // Register plugin
183
+ tinymce.PluginManager.add('autolink', tinymce.plugins.AutolinkPlugin);
184
+ })();
js/libraries/tiny_mce/plugins/autoresize/editor_plugin_src.js CHANGED
@@ -1,119 +1,119 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- /**
13
- * Auto Resize
14
- *
15
- * This plugin automatically resizes the content area to fit its content height.
16
- * It will retain a minimum height, which is the height of the content area when
17
- * it's initialized.
18
- */
19
- tinymce.create('tinymce.plugins.AutoResizePlugin', {
20
- /**
21
- * Initializes the plugin, this will be executed after the plugin has been created.
22
- * This call is done before the editor instance has finished it's initialization so use the onInit event
23
- * of the editor instance to intercept that event.
24
- *
25
- * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
26
- * @param {string} url Absolute URL to where the plugin is located.
27
- */
28
- init : function(ed, url) {
29
- var t = this, oldSize = 0;
30
-
31
- if (ed.getParam('fullscreen_is_enabled'))
32
- return;
33
-
34
- /**
35
- * This method gets executed each time the editor needs to resize.
36
- */
37
- function resize() {
38
- var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
39
-
40
- // Get height differently depending on the browser used
41
- myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight);
42
-
43
- // Don't make it smaller than the minimum height
44
- if (myHeight > t.autoresize_min_height)
45
- resizeHeight = myHeight;
46
-
47
- // If a maximum height has been defined don't exceed this height
48
- if (t.autoresize_max_height && myHeight > t.autoresize_max_height) {
49
- resizeHeight = t.autoresize_max_height;
50
- body.style.overflowY = "auto";
51
- de.style.overflowY = "auto"; // Old IE
52
- } else {
53
- body.style.overflowY = "hidden";
54
- de.style.overflowY = "hidden"; // Old IE
55
- body.scrollTop = 0;
56
- }
57
-
58
- // Resize content element
59
- if (resizeHeight !== oldSize) {
60
- deltaSize = resizeHeight - oldSize;
61
- DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
62
- oldSize = resizeHeight;
63
-
64
- // WebKit doesn't decrease the size of the body element until the iframe gets resized
65
- // So we need to continue to resize the iframe down until the size gets fixed
66
- if (tinymce.isWebKit && deltaSize < 0)
67
- resize();
68
- }
69
- };
70
-
71
- t.editor = ed;
72
-
73
- // Define minimum height
74
- t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight));
75
-
76
- // Define maximum height
77
- t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0));
78
-
79
- // Add padding at the bottom for better UX
80
- ed.onInit.add(function(ed){
81
- ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px');
82
- });
83
-
84
- // Add appropriate listeners for resizing content area
85
- ed.onChange.add(resize);
86
- ed.onSetContent.add(resize);
87
- ed.onPaste.add(resize);
88
- ed.onKeyUp.add(resize);
89
- ed.onPostRender.add(resize);
90
-
91
- if (ed.getParam('autoresize_on_init', true)) {
92
- ed.onLoad.add(resize);
93
- ed.onLoadContent.add(resize);
94
- }
95
-
96
- // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
97
- ed.addCommand('mceAutoResize', resize);
98
- },
99
-
100
- /**
101
- * Returns information about the plugin as a name/value array.
102
- * The current keys are longname, author, authorurl, infourl and version.
103
- *
104
- * @return {Object} Name/value array containing information about the plugin.
105
- */
106
- getInfo : function() {
107
- return {
108
- longname : 'Auto Resize',
109
- author : 'Moxiecode Systems AB',
110
- authorurl : 'http://tinymce.moxiecode.com',
111
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
112
- version : tinymce.majorVersion + "." + tinymce.minorVersion
113
- };
114
- }
115
- });
116
-
117
- // Register plugin
118
- tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
119
- })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ /**
13
+ * Auto Resize
14
+ *
15
+ * This plugin automatically resizes the content area to fit its content height.
16
+ * It will retain a minimum height, which is the height of the content area when
17
+ * it's initialized.
18
+ */
19
+ tinymce.create('tinymce.plugins.AutoResizePlugin', {
20
+ /**
21
+ * Initializes the plugin, this will be executed after the plugin has been created.
22
+ * This call is done before the editor instance has finished it's initialization so use the onInit event
23
+ * of the editor instance to intercept that event.
24
+ *
25
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
26
+ * @param {string} url Absolute URL to where the plugin is located.
27
+ */
28
+ init : function(ed, url) {
29
+ var t = this, oldSize = 0;
30
+
31
+ if (ed.getParam('fullscreen_is_enabled'))
32
+ return;
33
+
34
+ /**
35
+ * This method gets executed each time the editor needs to resize.
36
+ */
37
+ function resize() {
38
+ var deltaSize, d = ed.getDoc(), body = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
39
+
40
+ // Get height differently depending on the browser used
41
+ myHeight = tinymce.isIE ? body.scrollHeight : (tinymce.isWebKit && body.clientHeight == 0 ? 0 : body.offsetHeight);
42
+
43
+ // Don't make it smaller than the minimum height
44
+ if (myHeight > t.autoresize_min_height)
45
+ resizeHeight = myHeight;
46
+
47
+ // If a maximum height has been defined don't exceed this height
48
+ if (t.autoresize_max_height && myHeight > t.autoresize_max_height) {
49
+ resizeHeight = t.autoresize_max_height;
50
+ body.style.overflowY = "auto";
51
+ de.style.overflowY = "auto"; // Old IE
52
+ } else {
53
+ body.style.overflowY = "hidden";
54
+ de.style.overflowY = "hidden"; // Old IE
55
+ body.scrollTop = 0;
56
+ }
57
+
58
+ // Resize content element
59
+ if (resizeHeight !== oldSize) {
60
+ deltaSize = resizeHeight - oldSize;
61
+ DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
62
+ oldSize = resizeHeight;
63
+
64
+ // WebKit doesn't decrease the size of the body element until the iframe gets resized
65
+ // So we need to continue to resize the iframe down until the size gets fixed
66
+ if (tinymce.isWebKit && deltaSize < 0)
67
+ resize();
68
+ }
69
+ };
70
+
71
+ t.editor = ed;
72
+
73
+ // Define minimum height
74
+ t.autoresize_min_height = parseInt(ed.getParam('autoresize_min_height', ed.getElement().offsetHeight));
75
+
76
+ // Define maximum height
77
+ t.autoresize_max_height = parseInt(ed.getParam('autoresize_max_height', 0));
78
+
79
+ // Add padding at the bottom for better UX
80
+ ed.onInit.add(function(ed){
81
+ ed.dom.setStyle(ed.getBody(), 'paddingBottom', ed.getParam('autoresize_bottom_margin', 50) + 'px');
82
+ });
83
+
84
+ // Add appropriate listeners for resizing content area
85
+ ed.onChange.add(resize);
86
+ ed.onSetContent.add(resize);
87
+ ed.onPaste.add(resize);
88
+ ed.onKeyUp.add(resize);
89
+ ed.onPostRender.add(resize);
90
+
91
+ if (ed.getParam('autoresize_on_init', true)) {
92
+ ed.onLoad.add(resize);
93
+ ed.onLoadContent.add(resize);
94
+ }
95
+
96
+ // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
97
+ ed.addCommand('mceAutoResize', resize);
98
+ },
99
+
100
+ /**
101
+ * Returns information about the plugin as a name/value array.
102
+ * The current keys are longname, author, authorurl, infourl and version.
103
+ *
104
+ * @return {Object} Name/value array containing information about the plugin.
105
+ */
106
+ getInfo : function() {
107
+ return {
108
+ longname : 'Auto Resize',
109
+ author : 'Moxiecode Systems AB',
110
+ authorurl : 'http://tinymce.moxiecode.com',
111
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
112
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
113
+ };
114
+ }
115
+ });
116
+
117
+ // Register plugin
118
+ tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
119
+ })();
js/libraries/tiny_mce/plugins/autosave/editor_plugin_src.js CHANGED
@@ -1,433 +1,433 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- *
10
- * Adds auto-save capability to the TinyMCE text editor to rescue content
11
- * inadvertently lost. This plugin was originally developed by Speednet
12
- * and that project can be found here: http://code.google.com/p/tinyautosave/
13
- *
14
- * TECHNOLOGY DISCUSSION:
15
- *
16
- * The plugin attempts to use the most advanced features available in the current browser to save
17
- * as much content as possible. There are a total of four different methods used to autosave the
18
- * content. In order of preference, they are:
19
- *
20
- * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain
21
- * on the client computer. Data stored in the localStorage area has no expiration date, so we must
22
- * manage expiring the data ourselves. localStorage is fully supported by IE8, and it is supposed
23
- * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers. As
24
- * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,
25
- * localStorage is stored in the following folder:
26
- * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]
27
- *
28
- * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,
29
- * except it is designed to expire after a certain amount of time. Because the specification
30
- * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and
31
- * manage the expiration ourselves. sessionStorage has similar storage characteristics to
32
- * localStorage, although it seems to have better support by Firefox 3 at the moment. (That will
33
- * certainly change as Firefox continues getting better at HTML 5 adoption.)
34
- *
35
- * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a
36
- * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client
37
- * computer. The feature is available for IE 5+, which makes it available for every version of IE
38
- * supported by TinyMCE. The content is persistent across browser restarts and expires on the
39
- * date/time specified, just like a cookie. However, the data is not cleared when the user clears
40
- * cookies on the browser, which makes it well-suited for rescuing autosaved content. UserData,
41
- * like other Microsoft IE browser technologies, is implemented as a behavior attached to a
42
- * specific DOM object, so in this case we attach the behavior to the same DOM element that the
43
- * TinyMCE editor instance is attached to.
44
- */
45
-
46
- (function(tinymce) {
47
- // Setup constants to help the compressor to reduce script size
48
- var PLUGIN_NAME = 'autosave',
49
- RESTORE_DRAFT = 'restoredraft',
50
- TRUE = true,
51
- undefined,
52
- unloadHandlerAdded,
53
- Dispatcher = tinymce.util.Dispatcher;
54
-
55
- /**
56
- * This plugin adds auto-save capability to the TinyMCE text editor to rescue content
57
- * inadvertently lost. By using localStorage.
58
- *
59
- * @class tinymce.plugins.AutoSave
60
- */
61
- tinymce.create('tinymce.plugins.AutoSave', {
62
- /**
63
- * Initializes the plugin, this will be executed after the plugin has been created.
64
- * This call is done before the editor instance has finished it's initialization so use the onInit event
65
- * of the editor instance to intercept that event.
66
- *
67
- * @method init
68
- * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
69
- * @param {string} url Absolute URL to where the plugin is located.
70
- */
71
- init : function(ed, url) {
72
- var self = this, settings = ed.settings;
73
-
74
- self.editor = ed;
75
-
76
- // Parses the specified time string into a milisecond number 10m, 10s etc.
77
- function parseTime(time) {
78
- var multipels = {
79
- s : 1000,
80
- m : 60000
81
- };
82
-
83
- time = /^(\d+)([ms]?)$/.exec('' + time);
84
-
85
- return (time[2] ? multipels[time[2]] : 1) * parseInt(time);
86
- };
87
-
88
- // Default config
89
- tinymce.each({
90
- ask_before_unload : TRUE,
91
- interval : '30s',
92
- retention : '20m',
93
- minlength : 50
94
- }, function(value, key) {
95
- key = PLUGIN_NAME + '_' + key;
96
-
97
- if (settings[key] === undefined)
98
- settings[key] = value;
99
- });
100
-
101
- // Parse times
102
- settings.autosave_interval = parseTime(settings.autosave_interval);
103
- settings.autosave_retention = parseTime(settings.autosave_retention);
104
-
105
- // Register restore button
106
- ed.addButton(RESTORE_DRAFT, {
107
- title : PLUGIN_NAME + ".restore_content",
108
- onclick : function() {
109
- if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {
110
- // Show confirm dialog if the editor isn't empty
111
- ed.windowManager.confirm(
112
- PLUGIN_NAME + ".warning_message",
113
- function(ok) {
114
- if (ok)
115
- self.restoreDraft();
116
- }
117
- );
118
- } else
119
- self.restoreDraft();
120
- }
121
- });
122
-
123
- // Enable/disable restoredraft button depending on if there is a draft stored or not
124
- ed.onNodeChange.add(function() {
125
- var controlManager = ed.controlManager;
126
-
127
- if (controlManager.get(RESTORE_DRAFT))
128
- controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());
129
- });
130
-
131
- ed.onInit.add(function() {
132
- // Check if the user added the restore button, then setup auto storage logic
133
- if (ed.controlManager.get(RESTORE_DRAFT)) {
134
- // Setup storage engine
135
- self.setupStorage(ed);
136
-
137
- // Auto save contents each interval time
138
- setInterval(function() {
139
- if (!ed.removed) {
140
- self.storeDraft();
141
- ed.nodeChanged();
142
- }
143
- }, settings.autosave_interval);
144
- }
145
- });
146
-
147
- /**
148
- * This event gets fired when a draft is stored to local storage.
149
- *
150
- * @event onStoreDraft
151
- * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
152
- * @param {Object} draft Draft object containing the HTML contents of the editor.
153
- */
154
- self.onStoreDraft = new Dispatcher(self);
155
-
156
- /**
157
- * This event gets fired when a draft is restored from local storage.
158
- *
159
- * @event onStoreDraft
160
- * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
161
- * @param {Object} draft Draft object containing the HTML contents of the editor.
162
- */
163
- self.onRestoreDraft = new Dispatcher(self);
164
-
165
- /**
166
- * This event gets fired when a draft removed/expired.
167
- *
168
- * @event onRemoveDraft
169
- * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
170
- * @param {Object} draft Draft object containing the HTML contents of the editor.
171
- */
172
- self.onRemoveDraft = new Dispatcher(self);
173
-
174
- // Add ask before unload dialog only add one unload handler
175
- if (!unloadHandlerAdded) {
176
- window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;
177
- unloadHandlerAdded = TRUE;
178
- }
179
- },
180
-
181
- /**
182
- * Returns information about the plugin as a name/value array.
183
- * The current keys are longname, author, authorurl, infourl and version.
184
- *
185
- * @method getInfo
186
- * @return {Object} Name/value array containing information about the plugin.
187
- */
188
- getInfo : function() {
189
- return {
190
- longname : 'Auto save',
191
- author : 'Moxiecode Systems AB',
192
- authorurl : 'http://tinymce.moxiecode.com',
193
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',
194
- version : tinymce.majorVersion + "." + tinymce.minorVersion
195
- };
196
- },
197
-
198
- /**
199
- * Returns an expiration date UTC string.
200
- *
201
- * @method getExpDate
202
- * @return {String} Expiration date UTC string.
203
- */
204
- getExpDate : function() {
205
- return new Date(
206
- new Date().getTime() + this.editor.settings.autosave_retention
207
- ).toUTCString();
208
- },
209
-
210
- /**
211
- * This method will setup the storage engine. If the browser has support for it.
212
- *
213
- * @method setupStorage
214
- */
215
- setupStorage : function(ed) {
216
- var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";
217
-
218
- self.key = PLUGIN_NAME + ed.id;
219
-
220
- // Loop though each storage engine type until we find one that works
221
- tinymce.each([
222
- function() {
223
- // Try HTML5 Local Storage
224
- if (localStorage) {
225
- localStorage.setItem(testKey, testVal);
226
-
227
- if (localStorage.getItem(testKey) === testVal) {
228
- localStorage.removeItem(testKey);
229
-
230
- return localStorage;
231
- }
232
- }
233
- },
234
-
235
- function() {
236
- // Try HTML5 Session Storage
237
- if (sessionStorage) {
238
- sessionStorage.setItem(testKey, testVal);
239
-
240
- if (sessionStorage.getItem(testKey) === testVal) {
241
- sessionStorage.removeItem(testKey);
242
-
243
- return sessionStorage;
244
- }
245
- }
246
- },
247
-
248
- function() {
249
- // Try IE userData
250
- if (tinymce.isIE) {
251
- ed.getElement().style.behavior = "url('#default#userData')";
252
-
253
- // Fake localStorage on old IE
254
- return {
255
- autoExpires : TRUE,
256
-
257
- setItem : function(key, value) {
258
- var userDataElement = ed.getElement();
259
-
260
- userDataElement.setAttribute(key, value);
261
- userDataElement.expires = self.getExpDate();
262
-
263
- try {
264
- userDataElement.save("TinyMCE");
265
- } catch (e) {
266
- // Ignore, saving might fail if "Userdata Persistence" is disabled in IE
267
- }
268
- },
269
-
270
- getItem : function(key) {
271
- var userDataElement = ed.getElement();
272
-
273
- try {
274
- userDataElement.load("TinyMCE");
275
- return userDataElement.getAttribute(key);
276
- } catch (e) {
277
- // Ignore, loading might fail if "Userdata Persistence" is disabled in IE
278
- return null;
279
- }
280
- },
281
-
282
- removeItem : function(key) {
283
- ed.getElement().removeAttribute(key);
284
- }
285
- };
286
- }
287
- },
288
- ], function(setup) {
289
- // Try executing each function to find a suitable storage engine
290
- try {
291
- self.storage = setup();
292
-
293
- if (self.storage)
294
- return false;
295
- } catch (e) {
296
- // Ignore
297
- }
298
- });
299
- },
300
-
301
- /**
302
- * This method will store the current contents in the the storage engine.
303
- *
304
- * @method storeDraft
305
- */
306
- storeDraft : function() {
307
- var self = this, storage = self.storage, editor = self.editor, expires, content;
308
-
309
- // Is the contents dirty
310
- if (storage) {
311
- // If there is no existing key and the contents hasn't been changed since
312
- // it's original value then there is no point in saving a draft
313
- if (!storage.getItem(self.key) && !editor.isDirty())
314
- return;
315
-
316
- // Store contents if the contents if longer than the minlength of characters
317
- content = editor.getContent({draft: true});
318
- if (content.length > editor.settings.autosave_minlength) {
319
- expires = self.getExpDate();
320
-
321
- // Store expiration date if needed IE userData has auto expire built in
322
- if (!self.storage.autoExpires)
323
- self.storage.setItem(self.key + "_expires", expires);
324
-
325
- self.storage.setItem(self.key, content);
326
- self.onStoreDraft.dispatch(self, {
327
- expires : expires,
328
- content : content
329
- });
330
- }
331
- }
332
- },
333
-
334
- /**
335
- * This method will restore the contents from the storage engine back to the editor.
336
- *
337
- * @method restoreDraft
338
- */
339
- restoreDraft : function() {
340
- var self = this, storage = self.storage, content;
341
-
342
- if (storage) {
343
- content = storage.getItem(self.key);
344
-
345
- if (content) {
346
- self.editor.setContent(content);
347
- self.onRestoreDraft.dispatch(self, {
348
- content : content
349
- });
350
- }
351
- }
352
- },
353
-
354
- /**
355
- * This method will return true/false if there is a local storage draft available.
356
- *
357
- * @method hasDraft
358
- * @return {boolean} true/false state if there is a local draft.
359
- */
360
- hasDraft : function() {
361
- var self = this, storage = self.storage, expDate, exists;
362
-
363
- if (storage) {
364
- // Does the item exist at all
365
- exists = !!storage.getItem(self.key);
366
- if (exists) {
367
- // Storage needs autoexpire
368
- if (!self.storage.autoExpires) {
369
- expDate = new Date(storage.getItem(self.key + "_expires"));
370
-
371
- // Contents hasn't expired
372
- if (new Date().getTime() < expDate.getTime())
373
- return TRUE;
374
-
375
- // Remove it if it has
376
- self.removeDraft();
377
- } else
378
- return TRUE;
379
- }
380
- }
381
-
382
- return false;
383
- },
384
-
385
- /**
386
- * Removes the currently stored draft.
387
- *
388
- * @method removeDraft
389
- */
390
- removeDraft : function() {
391
- var self = this, storage = self.storage, key = self.key, content;
392
-
393
- if (storage) {
394
- // Get current contents and remove the existing draft
395
- content = storage.getItem(key);
396
- storage.removeItem(key);
397
- storage.removeItem(key + "_expires");
398
-
399
- // Dispatch remove event if we had any contents
400
- if (content) {
401
- self.onRemoveDraft.dispatch(self, {
402
- content : content
403
- });
404
- }
405
- }
406
- },
407
-
408
- "static" : {
409
- // Internal unload handler will be called before the page is unloaded
410
- _beforeUnloadHandler : function(e) {
411
- var msg;
412
-
413
- tinymce.each(tinyMCE.editors, function(ed) {
414
- // Store a draft for each editor instance
415
- if (ed.plugins.autosave)
416
- ed.plugins.autosave.storeDraft();
417
-
418
- // Never ask in fullscreen mode
419
- if (ed.getParam("fullscreen_is_enabled"))
420
- return;
421
-
422
- // Setup a return message if the editor is dirty
423
- if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))
424
- msg = ed.getLang("autosave.unload_msg");
425
- });
426
-
427
- return msg;
428
- }
429
- }
430
- });
431
-
432
- tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);
433
- })(tinymce);
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ *
10
+ * Adds auto-save capability to the TinyMCE text editor to rescue content
11
+ * inadvertently lost. This plugin was originally developed by Speednet
12
+ * and that project can be found here: http://code.google.com/p/tinyautosave/
13
+ *
14
+ * TECHNOLOGY DISCUSSION:
15
+ *
16
+ * The plugin attempts to use the most advanced features available in the current browser to save
17
+ * as much content as possible. There are a total of four different methods used to autosave the
18
+ * content. In order of preference, they are:
19
+ *
20
+ * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain
21
+ * on the client computer. Data stored in the localStorage area has no expiration date, so we must
22
+ * manage expiring the data ourselves. localStorage is fully supported by IE8, and it is supposed
23
+ * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers. As
24
+ * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,
25
+ * localStorage is stored in the following folder:
26
+ * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]
27
+ *
28
+ * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,
29
+ * except it is designed to expire after a certain amount of time. Because the specification
30
+ * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and
31
+ * manage the expiration ourselves. sessionStorage has similar storage characteristics to
32
+ * localStorage, although it seems to have better support by Firefox 3 at the moment. (That will
33
+ * certainly change as Firefox continues getting better at HTML 5 adoption.)
34
+ *
35
+ * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a
36
+ * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client
37
+ * computer. The feature is available for IE 5+, which makes it available for every version of IE
38
+ * supported by TinyMCE. The content is persistent across browser restarts and expires on the
39
+ * date/time specified, just like a cookie. However, the data is not cleared when the user clears
40
+ * cookies on the browser, which makes it well-suited for rescuing autosaved content. UserData,
41
+ * like other Microsoft IE browser technologies, is implemented as a behavior attached to a
42
+ * specific DOM object, so in this case we attach the behavior to the same DOM element that the
43
+ * TinyMCE editor instance is attached to.
44
+ */
45
+
46
+ (function(tinymce) {
47
+ // Setup constants to help the compressor to reduce script size
48
+ var PLUGIN_NAME = 'autosave',
49
+ RESTORE_DRAFT = 'restoredraft',
50
+ TRUE = true,
51
+ undefined,
52
+ unloadHandlerAdded,
53
+ Dispatcher = tinymce.util.Dispatcher;
54
+
55
+ /**
56
+ * This plugin adds auto-save capability to the TinyMCE text editor to rescue content
57
+ * inadvertently lost. By using localStorage.
58
+ *
59
+ * @class tinymce.plugins.AutoSave
60
+ */
61
+ tinymce.create('tinymce.plugins.AutoSave', {
62
+ /**
63
+ * Initializes the plugin, this will be executed after the plugin has been created.
64
+ * This call is done before the editor instance has finished it's initialization so use the onInit event
65
+ * of the editor instance to intercept that event.
66
+ *
67
+ * @method init
68
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
69
+ * @param {string} url Absolute URL to where the plugin is located.
70
+ */
71
+ init : function(ed, url) {
72
+ var self = this, settings = ed.settings;
73
+
74
+ self.editor = ed;
75
+
76
+ // Parses the specified time string into a milisecond number 10m, 10s etc.
77
+ function parseTime(time) {
78
+ var multipels = {
79
+ s : 1000,
80
+ m : 60000
81
+ };
82
+
83
+ time = /^(\d+)([ms]?)$/.exec('' + time);
84
+
85
+ return (time[2] ? multipels[time[2]] : 1) * parseInt(time);
86
+ };
87
+
88
+ // Default config
89
+ tinymce.each({
90
+ ask_before_unload : TRUE,
91
+ interval : '30s',
92
+ retention : '20m',
93
+ minlength : 50
94
+ }, function(value, key) {
95
+ key = PLUGIN_NAME + '_' + key;
96
+
97
+ if (settings[key] === undefined)
98
+ settings[key] = value;
99
+ });
100
+
101
+ // Parse times
102
+ settings.autosave_interval = parseTime(settings.autosave_interval);
103
+ settings.autosave_retention = parseTime(settings.autosave_retention);
104
+
105
+ // Register restore button
106
+ ed.addButton(RESTORE_DRAFT, {
107
+ title : PLUGIN_NAME + ".restore_content",
108
+ onclick : function() {
109
+ if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {
110
+ // Show confirm dialog if the editor isn't empty
111
+ ed.windowManager.confirm(
112
+ PLUGIN_NAME + ".warning_message",
113
+ function(ok) {
114
+ if (ok)
115
+ self.restoreDraft();
116
+ }
117
+ );
118
+ } else
119
+ self.restoreDraft();
120
+ }
121
+ });
122
+
123
+ // Enable/disable restoredraft button depending on if there is a draft stored or not
124
+ ed.onNodeChange.add(function() {
125
+ var controlManager = ed.controlManager;
126
+
127
+ if (controlManager.get(RESTORE_DRAFT))
128
+ controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());
129
+ });
130
+
131
+ ed.onInit.add(function() {
132
+ // Check if the user added the restore button, then setup auto storage logic
133
+ if (ed.controlManager.get(RESTORE_DRAFT)) {
134
+ // Setup storage engine
135
+ self.setupStorage(ed);
136
+
137
+ // Auto save contents each interval time
138
+ setInterval(function() {
139
+ if (!ed.removed) {
140
+ self.storeDraft();
141
+ ed.nodeChanged();
142
+ }
143
+ }, settings.autosave_interval);
144
+ }
145
+ });
146
+
147
+ /**
148
+ * This event gets fired when a draft is stored to local storage.
149
+ *
150
+ * @event onStoreDraft
151
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
152
+ * @param {Object} draft Draft object containing the HTML contents of the editor.
153
+ */
154
+ self.onStoreDraft = new Dispatcher(self);
155
+
156
+ /**
157
+ * This event gets fired when a draft is restored from local storage.
158
+ *
159
+ * @event onStoreDraft
160
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
161
+ * @param {Object} draft Draft object containing the HTML contents of the editor.
162
+ */
163
+ self.onRestoreDraft = new Dispatcher(self);
164
+
165
+ /**
166
+ * This event gets fired when a draft removed/expired.
167
+ *
168
+ * @event onRemoveDraft
169
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
170
+ * @param {Object} draft Draft object containing the HTML contents of the editor.
171
+ */
172
+ self.onRemoveDraft = new Dispatcher(self);
173
+
174
+ // Add ask before unload dialog only add one unload handler
175
+ if (!unloadHandlerAdded) {
176
+ window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;
177
+ unloadHandlerAdded = TRUE;
178
+ }
179
+ },
180
+
181
+ /**
182
+ * Returns information about the plugin as a name/value array.
183
+ * The current keys are longname, author, authorurl, infourl and version.
184
+ *
185
+ * @method getInfo
186
+ * @return {Object} Name/value array containing information about the plugin.
187
+ */
188
+ getInfo : function() {
189
+ return {
190
+ longname : 'Auto save',
191
+ author : 'Moxiecode Systems AB',
192
+ authorurl : 'http://tinymce.moxiecode.com',
193
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',
194
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
195
+ };
196
+ },
197
+
198
+ /**
199
+ * Returns an expiration date UTC string.
200
+ *
201
+ * @method getExpDate
202
+ * @return {String} Expiration date UTC string.
203
+ */
204
+ getExpDate : function() {
205
+ return new Date(
206
+ new Date().getTime() + this.editor.settings.autosave_retention
207
+ ).toUTCString();
208
+ },
209
+
210
+ /**
211
+ * This method will setup the storage engine. If the browser has support for it.
212
+ *
213
+ * @method setupStorage
214
+ */
215
+ setupStorage : function(ed) {
216
+ var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";
217
+
218
+ self.key = PLUGIN_NAME + ed.id;
219
+
220
+ // Loop though each storage engine type until we find one that works
221
+ tinymce.each([
222
+ function() {
223
+ // Try HTML5 Local Storage
224
+ if (localStorage) {
225
+ localStorage.setItem(testKey, testVal);
226
+
227
+ if (localStorage.getItem(testKey) === testVal) {
228
+ localStorage.removeItem(testKey);
229
+
230
+ return localStorage;
231
+ }
232
+ }
233
+ },
234
+
235
+ function() {
236
+ // Try HTML5 Session Storage
237
+ if (sessionStorage) {
238
+ sessionStorage.setItem(testKey, testVal);
239
+
240
+ if (sessionStorage.getItem(testKey) === testVal) {
241
+ sessionStorage.removeItem(testKey);
242
+
243
+ return sessionStorage;
244
+ }
245
+ }
246
+ },
247
+
248
+ function() {
249
+ // Try IE userData
250
+ if (tinymce.isIE) {
251
+ ed.getElement().style.behavior = "url('#default#userData')";
252
+
253
+ // Fake localStorage on old IE
254
+ return {
255
+ autoExpires : TRUE,
256
+
257
+ setItem : function(key, value) {
258
+ var userDataElement = ed.getElement();
259
+
260
+ userDataElement.setAttribute(key, value);
261
+ userDataElement.expires = self.getExpDate();
262
+
263
+ try {
264
+ userDataElement.save("TinyMCE");
265
+ } catch (e) {
266
+ // Ignore, saving might fail if "Userdata Persistence" is disabled in IE
267
+ }
268
+ },
269
+
270
+ getItem : function(key) {
271
+ var userDataElement = ed.getElement();
272
+
273
+ try {
274
+ userDataElement.load("TinyMCE");
275
+ return userDataElement.getAttribute(key);
276
+ } catch (e) {
277
+ // Ignore, loading might fail if "Userdata Persistence" is disabled in IE
278
+ return null;
279
+ }
280
+ },
281
+
282
+ removeItem : function(key) {
283
+ ed.getElement().removeAttribute(key);
284
+ }
285
+ };
286
+ }
287
+ },
288
+ ], function(setup) {
289
+ // Try executing each function to find a suitable storage engine
290
+ try {
291
+ self.storage = setup();
292
+
293
+ if (self.storage)
294
+ return false;
295
+ } catch (e) {
296
+ // Ignore
297
+ }
298
+ });
299
+ },
300
+
301
+ /**
302
+ * This method will store the current contents in the the storage engine.
303
+ *
304
+ * @method storeDraft
305
+ */
306
+ storeDraft : function() {
307
+ var self = this, storage = self.storage, editor = self.editor, expires, content;
308
+
309
+ // Is the contents dirty
310
+ if (storage) {
311
+ // If there is no existing key and the contents hasn't been changed since
312
+ // it's original value then there is no point in saving a draft
313
+ if (!storage.getItem(self.key) && !editor.isDirty())
314
+ return;
315
+
316
+ // Store contents if the contents if longer than the minlength of characters
317
+ content = editor.getContent({draft: true});
318
+ if (content.length > editor.settings.autosave_minlength) {
319
+ expires = self.getExpDate();
320
+
321
+ // Store expiration date if needed IE userData has auto expire built in
322
+ if (!self.storage.autoExpires)
323
+ self.storage.setItem(self.key + "_expires", expires);
324
+
325
+ self.storage.setItem(self.key, content);
326
+ self.onStoreDraft.dispatch(self, {
327
+ expires : expires,
328
+ content : content
329
+ });
330
+ }
331
+ }
332
+ },
333
+
334
+ /**
335
+ * This method will restore the contents from the storage engine back to the editor.
336
+ *
337
+ * @method restoreDraft
338
+ */
339
+ restoreDraft : function() {
340
+ var self = this, storage = self.storage, content;
341
+
342
+ if (storage) {
343
+ content = storage.getItem(self.key);
344
+
345
+ if (content) {
346
+ self.editor.setContent(content);
347
+ self.onRestoreDraft.dispatch(self, {
348
+ content : content
349
+ });
350
+ }
351
+ }
352
+ },
353
+
354
+ /**
355
+ * This method will return true/false if there is a local storage draft available.
356
+ *
357
+ * @method hasDraft
358
+ * @return {boolean} true/false state if there is a local draft.
359
+ */
360
+ hasDraft : function() {
361
+ var self = this, storage = self.storage, expDate, exists;
362
+
363
+ if (storage) {
364
+ // Does the item exist at all
365
+ exists = !!storage.getItem(self.key);
366
+ if (exists) {
367
+ // Storage needs autoexpire
368
+ if (!self.storage.autoExpires) {
369
+ expDate = new Date(storage.getItem(self.key + "_expires"));
370
+
371
+ // Contents hasn't expired
372
+ if (new Date().getTime() < expDate.getTime())
373
+ return TRUE;
374
+
375
+ // Remove it if it has
376
+ self.removeDraft();
377
+ } else
378
+ return TRUE;
379
+ }
380
+ }
381
+
382
+ return false;
383
+ },
384
+
385
+ /**
386
+ * Removes the currently stored draft.
387
+ *
388
+ * @method removeDraft
389
+ */
390
+ removeDraft : function() {
391
+ var self = this, storage = self.storage, key = self.key, content;
392
+
393
+ if (storage) {
394
+ // Get current contents and remove the existing draft
395
+ content = storage.getItem(key);
396
+ storage.removeItem(key);
397
+ storage.removeItem(key + "_expires");
398
+
399
+ // Dispatch remove event if we had any contents
400
+ if (content) {
401
+ self.onRemoveDraft.dispatch(self, {
402
+ content : content
403
+ });
404
+ }
405
+ }
406
+ },
407
+
408
+ "static" : {
409
+ // Internal unload handler will be called before the page is unloaded
410
+ _beforeUnloadHandler : function(e) {
411
+ var msg;
412
+
413
+ tinymce.each(tinyMCE.editors, function(ed) {
414
+ // Store a draft for each editor instance
415
+ if (ed.plugins.autosave)
416
+ ed.plugins.autosave.storeDraft();
417
+
418
+ // Never ask in fullscreen mode
419
+ if (ed.getParam("fullscreen_is_enabled"))
420
+ return;
421
+
422
+ // Setup a return message if the editor is dirty
423
+ if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))
424
+ msg = ed.getLang("autosave.unload_msg");
425
+ });
426
+
427
+ return msg;
428
+ }
429
+ }
430
+ });
431
+
432
+ tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);
433
+ })(tinymce);
js/libraries/tiny_mce/plugins/autosave/langs/en.js CHANGED
@@ -1,4 +1,4 @@
1
- tinyMCE.addI18n('en.autosave',{
2
- restore_content: "Restore auto-saved content",
3
- warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?"
4
  });
1
+ tinyMCE.addI18n('en.autosave',{
2
+ restore_content: "Restore auto-saved content",
3
+ warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?"
4
  });
js/libraries/tiny_mce/plugins/bbcode/editor_plugin_src.js CHANGED
@@ -1,120 +1,120 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- tinymce.create('tinymce.plugins.BBCodePlugin', {
13
- init : function(ed, url) {
14
- var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();
15
-
16
- ed.onBeforeSetContent.add(function(ed, o) {
17
- o.content = t['_' + dialect + '_bbcode2html'](o.content);
18
- });
19
-
20
- ed.onPostProcess.add(function(ed, o) {
21
- if (o.set)
22
- o.content = t['_' + dialect + '_bbcode2html'](o.content);
23
-
24
- if (o.get)
25
- o.content = t['_' + dialect + '_html2bbcode'](o.content);
26
- });
27
- },
28
-
29
- getInfo : function() {
30
- return {
31
- longname : 'BBCode Plugin',
32
- author : 'Moxiecode Systems AB',
33
- authorurl : 'http://tinymce.moxiecode.com',
34
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',
35
- version : tinymce.majorVersion + "." + tinymce.minorVersion
36
- };
37
- },
38
-
39
- // Private methods
40
-
41
- // HTML -> BBCode in PunBB dialect
42
- _punbb_html2bbcode : function(s) {
43
- s = tinymce.trim(s);
44
-
45
- function rep(re, str) {
46
- s = s.replace(re, str);
47
- };
48
-
49
- // example: <strong> to [b]
50
- rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
51
- rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
52
- rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
53
- rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
54
- rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
55
- rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");
56
- rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");
57
- rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");
58
- rep(/<font>(.*?)<\/font>/gi,"$1");
59
- rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");
60
- rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");
61
- rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");
62
- rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");
63
- rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");
64
- rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");
65
- rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");
66
- rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");
67
- rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");
68
- rep(/<\/(strong|b)>/gi,"[/b]");
69
- rep(/<(strong|b)>/gi,"[b]");
70
- rep(/<\/(em|i)>/gi,"[/i]");
71
- rep(/<(em|i)>/gi,"[i]");
72
- rep(/<\/u>/gi,"[/u]");
73
- rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");
74
- rep(/<u>/gi,"[u]");
75
- rep(/<blockquote[^>]*>/gi,"[quote]");
76
- rep(/<\/blockquote>/gi,"[/quote]");
77
- rep(/<br \/>/gi,"\n");
78
- rep(/<br\/>/gi,"\n");
79
- rep(/<br>/gi,"\n");
80
- rep(/<p>/gi,"");
81
- rep(/<\/p>/gi,"\n");
82
- rep(/&nbsp;|\u00a0/gi," ");
83
- rep(/&quot;/gi,"\"");
84
- rep(/&lt;/gi,"<");
85
- rep(/&gt;/gi,">");
86
- rep(/&amp;/gi,"&");
87
-
88
- return s;
89
- },
90
-
91
- // BBCode -> HTML from PunBB dialect
92
- _punbb_bbcode2html : function(s) {
93
- s = tinymce.trim(s);
94
-
95
- function rep(re, str) {
96
- s = s.replace(re, str);
97
- };
98
-
99
- // example: [b] to <strong>
100
- rep(/\n/gi,"<br />");
101
- rep(/\[b\]/gi,"<strong>");
102
- rep(/\[\/b\]/gi,"</strong>");
103
- rep(/\[i\]/gi,"<em>");
104
- rep(/\[\/i\]/gi,"</em>");
105
- rep(/\[u\]/gi,"<u>");
106
- rep(/\[\/u\]/gi,"</u>");
107
- rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
108
- rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
109
- rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
110
- rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");
111
- rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");
112
- rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");
113
-
114
- return s;
115
- }
116
- });
117
-
118
- // Register plugin
119
- tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
120
  })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ tinymce.create('tinymce.plugins.BBCodePlugin', {
13
+ init : function(ed, url) {
14
+ var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();
15
+
16
+ ed.onBeforeSetContent.add(function(ed, o) {
17
+ o.content = t['_' + dialect + '_bbcode2html'](o.content);
18
+ });
19
+
20
+ ed.onPostProcess.add(function(ed, o) {
21
+ if (o.set)
22
+ o.content = t['_' + dialect + '_bbcode2html'](o.content);
23
+
24
+ if (o.get)
25
+ o.content = t['_' + dialect + '_html2bbcode'](o.content);
26
+ });
27
+ },
28
+
29
+ getInfo : function() {
30
+ return {
31
+ longname : 'BBCode Plugin',
32
+ author : 'Moxiecode Systems AB',
33
+ authorurl : 'http://tinymce.moxiecode.com',
34
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',
35
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
36
+ };
37
+ },
38
+
39
+ // Private methods
40
+
41
+ // HTML -> BBCode in PunBB dialect
42
+ _punbb_html2bbcode : function(s) {
43
+ s = tinymce.trim(s);
44
+
45
+ function rep(re, str) {
46
+ s = s.replace(re, str);
47
+ };
48
+
49
+ // example: <strong> to [b]
50
+ rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
51
+ rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
52
+ rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
53
+ rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
54
+ rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
55
+ rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");
56
+ rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");
57
+ rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");
58
+ rep(/<font>(.*?)<\/font>/gi,"$1");
59
+ rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");
60
+ rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");
61
+ rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");
62
+ rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");
63
+ rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");
64
+ rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");
65
+ rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");
66
+ rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");
67
+ rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");
68
+ rep(/<\/(strong|b)>/gi,"[/b]");
69
+ rep(/<(strong|b)>/gi,"[b]");
70
+ rep(/<\/(em|i)>/gi,"[/i]");
71
+ rep(/<(em|i)>/gi,"[i]");
72
+ rep(/<\/u>/gi,"[/u]");
73
+ rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");
74
+ rep(/<u>/gi,"[u]");
75
+ rep(/<blockquote[^>]*>/gi,"[quote]");
76
+ rep(/<\/blockquote>/gi,"[/quote]");
77
+ rep(/<br \/>/gi,"\n");
78
+ rep(/<br\/>/gi,"\n");
79
+ rep(/<br>/gi,"\n");
80
+ rep(/<p>/gi,"");
81
+ rep(/<\/p>/gi,"\n");
82
+ rep(/&nbsp;|\u00a0/gi," ");
83
+ rep(/&quot;/gi,"\"");
84
+ rep(/&lt;/gi,"<");
85
+ rep(/&gt;/gi,">");
86
+ rep(/&amp;/gi,"&");
87
+
88
+ return s;
89
+ },
90
+
91
+ // BBCode -> HTML from PunBB dialect
92
+ _punbb_bbcode2html : function(s) {
93
+ s = tinymce.trim(s);
94
+
95
+ function rep(re, str) {
96
+ s = s.replace(re, str);
97
+ };
98
+
99
+ // example: [b] to <strong>
100
+ rep(/\n/gi,"<br />");
101
+ rep(/\[b\]/gi,"<strong>");
102
+ rep(/\[\/b\]/gi,"</strong>");
103
+ rep(/\[i\]/gi,"<em>");
104
+ rep(/\[\/i\]/gi,"</em>");
105
+ rep(/\[u\]/gi,"<u>");
106
+ rep(/\[\/u\]/gi,"</u>");
107
+ rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
108
+ rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
109
+ rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
110
+ rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");
111
+ rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");
112
+ rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");
113
+
114
+ return s;
115
+ }
116
+ });
117
+
118
+ // Register plugin
119
+ tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
120
  })();
js/libraries/tiny_mce/plugins/contextmenu/editor_plugin_src.js CHANGED
@@ -1,163 +1,163 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;
13
-
14
- /**
15
- * This plugin a context menu to TinyMCE editor instances.
16
- *
17
- * @class tinymce.plugins.ContextMenu
18
- */
19
- tinymce.create('tinymce.plugins.ContextMenu', {
20
- /**
21
- * Initializes the plugin, this will be executed after the plugin has been created.
22
- * This call is done before the editor instance has finished it's initialization so use the onInit event
23
- * of the editor instance to intercept that event.
24
- *
25
- * @method init
26
- * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
27
- * @param {string} url Absolute URL to where the plugin is located.
28
- */
29
- init : function(ed) {
30
- var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey, hideMenu;
31
-
32
- t.editor = ed;
33
-
34
- contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;
35
-
36
- /**
37
- * This event gets fired when the context menu is shown.
38
- *
39
- * @event onContextMenu
40
- * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.
41
- * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.
42
- */
43
- t.onContextMenu = new tinymce.util.Dispatcher(this);
44
-
45
- hideMenu = function(e) {
46
- hide(ed, e);
47
- };
48
-
49
- showMenu = ed.onContextMenu.add(function(ed, e) {
50
- // Block TinyMCE menu on ctrlKey and work around Safari issue
51
- if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative)
52
- return;
53
-
54
- Event.cancel(e);
55
-
56
- // Select the image if it's clicked. WebKit would other wise expand the selection
57
- if (e.target.nodeName == 'IMG')
58
- ed.selection.select(e.target);
59
-
60
- t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY);
61
- Event.add(ed.getDoc(), 'click', hideMenu);
62
-
63
- ed.nodeChanged();
64
- });
65
-
66
- ed.onRemove.add(function() {
67
- if (t._menu)
68
- t._menu.removeAll();
69
- });
70
-
71
- function hide(ed, e) {
72
- realCtrlKey = 0;
73
-
74
- // Since the contextmenu event moves
75
- // the selection we need to store it away
76
- if (e && e.button == 2) {
77
- realCtrlKey = e.ctrlKey;
78
- return;
79
- }
80
-
81
- if (t._menu) {
82
- t._menu.removeAll();
83
- t._menu.destroy();
84
- Event.remove(ed.getDoc(), 'click', hideMenu);
85
- t._menu = null;
86
- }
87
- };
88
-
89
- ed.onMouseDown.add(hide);
90
- ed.onKeyDown.add(hide);
91
- ed.onKeyDown.add(function(ed, e) {
92
- if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) {
93
- Event.cancel(e);
94
- showMenu(ed, e);
95
- }
96
- });
97
- },
98
-
99
- /**
100
- * Returns information about the plugin as a name/value array.
101
- * The current keys are longname, author, authorurl, infourl and version.
102
- *
103
- * @method getInfo
104
- * @return {Object} Name/value array containing information about the plugin.
105
- */
106
- getInfo : function() {
107
- return {
108
- longname : 'Contextmenu',
109
- author : 'Moxiecode Systems AB',
110
- authorurl : 'http://tinymce.moxiecode.com',
111
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',
112
- version : tinymce.majorVersion + "." + tinymce.minorVersion
113
- };
114
- },
115
-
116
- _getMenu : function(ed) {
117
- var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p;
118
-
119
- if (m) {
120
- m.removeAll();
121
- m.destroy();
122
- }
123
-
124
- p = DOM.getPos(ed.getContentAreaContainer());
125
-
126
- m = ed.controlManager.createDropMenu('contextmenu', {
127
- offset_x : p.x + ed.getParam('contextmenu_offset_x', 0),
128
- offset_y : p.y + ed.getParam('contextmenu_offset_y', 0),
129
- constrain : 1,
130
- keyboard_focus: true
131
- });
132
-
133
- t._menu = m;
134
-
135
- m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);
136
- m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);
137
- m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});
138
-
139
- if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {
140
- m.addSeparator();
141
- m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
142
- m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
143
- }
144
-
145
- m.addSeparator();
146
- m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
147
-
148
- m.addSeparator();
149
- am = m.addMenu({title : 'contextmenu.align'});
150
- am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});
151
- am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});
152
- am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});
153
- am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});
154
-
155
- t.onContextMenu.dispatch(t, m, el, col);
156
-
157
- return m;
158
- }
159
- });
160
-
161
- // Register plugin
162
- tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);
163
- })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;
13
+
14
+ /**
15
+ * This plugin a context menu to TinyMCE editor instances.
16
+ *
17
+ * @class tinymce.plugins.ContextMenu
18
+ */
19
+ tinymce.create('tinymce.plugins.ContextMenu', {
20
+ /**
21
+ * Initializes the plugin, this will be executed after the plugin has been created.
22
+ * This call is done before the editor instance has finished it's initialization so use the onInit event
23
+ * of the editor instance to intercept that event.
24
+ *
25
+ * @method init
26
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
27
+ * @param {string} url Absolute URL to where the plugin is located.
28
+ */
29
+ init : function(ed) {
30
+ var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey, hideMenu;
31
+
32
+ t.editor = ed;
33
+
34
+ contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;
35
+
36
+ /**
37
+ * This event gets fired when the context menu is shown.
38
+ *
39
+ * @event onContextMenu
40
+ * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.
41
+ * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.
42
+ */
43
+ t.onContextMenu = new tinymce.util.Dispatcher(this);
44
+
45
+ hideMenu = function(e) {
46
+ hide(ed, e);
47
+ };
48
+
49
+ showMenu = ed.onContextMenu.add(function(ed, e) {
50
+ // Block TinyMCE menu on ctrlKey and work around Safari issue
51
+ if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative)
52
+ return;
53
+
54
+ Event.cancel(e);
55
+
56
+ // Select the image if it's clicked. WebKit would other wise expand the selection
57
+ if (e.target.nodeName == 'IMG')
58
+ ed.selection.select(e.target);
59
+
60
+ t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY);
61
+ Event.add(ed.getDoc(), 'click', hideMenu);
62
+
63
+ ed.nodeChanged();
64
+ });
65
+
66
+ ed.onRemove.add(function() {
67
+ if (t._menu)
68
+ t._menu.removeAll();
69
+ });
70
+
71
+ function hide(ed, e) {
72
+ realCtrlKey = 0;
73
+
74
+ // Since the contextmenu event moves
75
+ // the selection we need to store it away
76
+ if (e && e.button == 2) {
77
+ realCtrlKey = e.ctrlKey;
78
+ return;
79
+ }
80
+
81
+ if (t._menu) {
82
+ t._menu.removeAll();
83
+ t._menu.destroy();
84
+ Event.remove(ed.getDoc(), 'click', hideMenu);
85
+ t._menu = null;
86
+ }
87
+ };
88
+
89
+ ed.onMouseDown.add(hide);
90
+ ed.onKeyDown.add(hide);
91
+ ed.onKeyDown.add(function(ed, e) {
92
+ if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) {
93
+ Event.cancel(e);
94
+ showMenu(ed, e);
95
+ }
96
+ });
97
+ },
98
+
99
+ /**
100
+ * Returns information about the plugin as a name/value array.
101
+ * The current keys are longname, author, authorurl, infourl and version.
102
+ *
103
+ * @method getInfo
104
+ * @return {Object} Name/value array containing information about the plugin.
105
+ */
106
+ getInfo : function() {
107
+ return {
108
+ longname : 'Contextmenu',
109
+ author : 'Moxiecode Systems AB',
110
+ authorurl : 'http://tinymce.moxiecode.com',
111
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',
112
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
113
+ };
114
+ },
115
+
116
+ _getMenu : function(ed) {
117
+ var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p;
118
+
119
+ if (m) {
120
+ m.removeAll();
121
+ m.destroy();
122
+ }
123
+
124
+ p = DOM.getPos(ed.getContentAreaContainer());
125
+
126
+ m = ed.controlManager.createDropMenu('contextmenu', {
127
+ offset_x : p.x + ed.getParam('contextmenu_offset_x', 0),
128
+ offset_y : p.y + ed.getParam('contextmenu_offset_y', 0),
129
+ constrain : 1,
130
+ keyboard_focus: true
131
+ });
132
+
133
+ t._menu = m;
134
+
135
+ m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);
136
+ m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);
137
+ m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});
138
+
139
+ if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {
140
+ m.addSeparator();
141
+ m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
142
+ m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
143
+ }
144
+
145
+ m.addSeparator();
146
+ m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
147
+
148
+ m.addSeparator();
149
+ am = m.addMenu({title : 'contextmenu.align'});
150
+ am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});
151
+ am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});
152
+ am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});
153
+ am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});
154
+
155
+ t.onContextMenu.dispatch(t, m, el, col);
156
+
157
+ return m;
158
+ }
159
+ });
160
+
161
+ // Register plugin
162
+ tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);
163
+ })();
js/libraries/tiny_mce/plugins/directionality/editor_plugin_src.js CHANGED
@@ -1,85 +1,85 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- tinymce.create('tinymce.plugins.Directionality', {
13
- init : function(ed, url) {
14
- var t = this;
15
-
16
- t.editor = ed;
17
-
18
- function setDir(dir) {
19
- var dom = ed.dom, curDir, blocks = ed.selection.getSelectedBlocks();
20
-
21
- if (blocks.length) {
22
- curDir = dom.getAttrib(blocks[0], "dir");
23
-
24
- tinymce.each(blocks, function(block) {
25
- // Add dir to block if the parent block doesn't already have that dir
26
- if (!dom.getParent(block.parentNode, "*[dir='" + dir + "']", dom.getRoot())) {
27
- if (curDir != dir) {
28
- dom.setAttrib(block, "dir", dir);
29
- } else {
30
- dom.setAttrib(block, "dir", null);
31
- }
32
- }
33
- });
34
-
35
- ed.nodeChanged();
36
- }
37
- }
38
-
39
- ed.addCommand('mceDirectionLTR', function() {
40
- setDir("ltr");
41
- });
42
-
43
- ed.addCommand('mceDirectionRTL', function() {
44
- setDir("rtl");
45
- });
46
-
47
- ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});
48
- ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});
49
-
50
- ed.onNodeChange.add(t._nodeChange, t);
51
- },
52
-
53
- getInfo : function() {
54
- return {
55
- longname : 'Directionality',
56
- author : 'Moxiecode Systems AB',
57
- authorurl : 'http://tinymce.moxiecode.com',
58
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',
59
- version : tinymce.majorVersion + "." + tinymce.minorVersion
60
- };
61
- },
62
-
63
- // Private methods
64
-
65
- _nodeChange : function(ed, cm, n) {
66
- var dom = ed.dom, dir;
67
-
68
- n = dom.getParent(n, dom.isBlock);
69
- if (!n) {
70
- cm.setDisabled('ltr', 1);
71
- cm.setDisabled('rtl', 1);
72
- return;
73
- }
74
-
75
- dir = dom.getAttrib(n, 'dir');
76
- cm.setActive('ltr', dir == "ltr");
77
- cm.setDisabled('ltr', 0);
78
- cm.setActive('rtl', dir == "rtl");
79
- cm.setDisabled('rtl', 0);
80
- }
81
- });
82
-
83
- // Register plugin
84
- tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);
85
  })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ tinymce.create('tinymce.plugins.Directionality', {
13
+ init : function(ed, url) {
14
+ var t = this;
15
+
16
+ t.editor = ed;
17
+
18
+ function setDir(dir) {
19
+ var dom = ed.dom, curDir, blocks = ed.selection.getSelectedBlocks();
20
+
21
+ if (blocks.length) {
22
+ curDir = dom.getAttrib(blocks[0], "dir");
23
+
24
+ tinymce.each(blocks, function(block) {
25
+ // Add dir to block if the parent block doesn't already have that dir
26
+ if (!dom.getParent(block.parentNode, "*[dir='" + dir + "']", dom.getRoot())) {
27
+ if (curDir != dir) {
28
+ dom.setAttrib(block, "dir", dir);
29
+ } else {
30
+ dom.setAttrib(block, "dir", null);
31
+ }
32
+ }
33
+ });
34
+
35
+ ed.nodeChanged();
36
+ }
37
+ }
38
+
39
+ ed.addCommand('mceDirectionLTR', function() {
40
+ setDir("ltr");
41
+ });
42
+
43
+ ed.addCommand('mceDirectionRTL', function() {
44
+ setDir("rtl");
45
+ });
46
+
47
+ ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});
48
+ ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});
49
+
50
+ ed.onNodeChange.add(t._nodeChange, t);
51
+ },
52
+
53
+ getInfo : function() {
54
+ return {
55
+ longname : 'Directionality',
56
+ author : 'Moxiecode Systems AB',
57
+ authorurl : 'http://tinymce.moxiecode.com',
58
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',
59
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
60
+ };
61
+ },
62
+
63
+ // Private methods
64
+
65
+ _nodeChange : function(ed, cm, n) {
66
+ var dom = ed.dom, dir;
67
+
68
+ n = dom.getParent(n, dom.isBlock);
69
+ if (!n) {
70
+ cm.setDisabled('ltr', 1);
71
+ cm.setDisabled('rtl', 1);
72
+ return;
73
+ }
74
+
75
+ dir = dom.getAttrib(n, 'dir');
76
+ cm.setActive('ltr', dir == "ltr");
77
+ cm.setDisabled('ltr', 0);
78
+ cm.setActive('rtl', dir == "rtl");
79
+ cm.setDisabled('rtl', 0);
80
+ }
81
+ });
82
+
83
+ // Register plugin
84
+ tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);
85
  })();
js/libraries/tiny_mce/plugins/emotions/editor_plugin_src.js CHANGED
@@ -1,43 +1,43 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function(tinymce) {
12
- tinymce.create('tinymce.plugins.EmotionsPlugin', {
13
- init : function(ed, url) {
14
- // Register commands
15
- ed.addCommand('mceEmotion', function() {
16
- ed.windowManager.open({
17
- file : url + '/emotions.htm',
18
- width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),
19
- height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),
20
- inline : 1
21
- }, {
22
- plugin_url : url
23
- });
24
- });
25
-
26
- // Register buttons
27
- ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});
28
- },
29
-
30
- getInfo : function() {
31
- return {
32
- longname : 'Emotions',
33
- author : 'Moxiecode Systems AB',
34
- authorurl : 'http://tinymce.moxiecode.com',
35
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',
36
- version : tinymce.majorVersion + "." + tinymce.minorVersion
37
- };
38
- }
39
- });
40
-
41
- // Register plugin
42
- tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);
43
  })(tinymce);
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function(tinymce) {
12
+ tinymce.create('tinymce.plugins.EmotionsPlugin', {
13
+ init : function(ed, url) {
14
+ // Register commands
15
+ ed.addCommand('mceEmotion', function() {
16
+ ed.windowManager.open({
17
+ file : url + '/emotions.htm',
18
+ width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),
19
+ height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),
20
+ inline : 1
21
+ }, {
22
+ plugin_url : url
23
+ });
24
+ });
25
+
26
+ // Register buttons
27
+ ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});
28
+ },
29
+
30
+ getInfo : function() {
31
+ return {
32
+ longname : 'Emotions',
33
+ author : 'Moxiecode Systems AB',
34
+ authorurl : 'http://tinymce.moxiecode.com',
35
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',
36
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
37
+ };
38
+ }
39
+ });
40
+
41
+ // Register plugin
42
+ tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);
43
  })(tinymce);
js/libraries/tiny_mce/plugins/emotions/emotions.htm CHANGED
@@ -1,42 +1,42 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#emotions_dlg.title}</title>
5
- <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="js/emotions.js"></script>
7
- </head>
8
- <body style="display: none" role="application" aria-labelledby="app_title">
9
- <span style="display:none;" id="app_title">{#emotions_dlg.title}</span>
10
- <div align="center">
11
- <div class="title">{#emotions_dlg.title}:<br /><br /></div>
12
-
13
- <table id="emoticon_table" role="presentation" border="0" cellspacing="0" cellpadding="4">
14
- <tr>
15
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cool}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}. {#emotions_dlg.usage}" /></a></td>
16
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cry}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}. {#emotions_dlg.usage}" /></a></td>
17
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" /></a></td>
18
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" /></a></td>
19
- </tr>
20
- <tr>
21
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.frown}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}. {#emotions_dlg.usage}" /></a></td>
22
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" /></a></td>
23
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" /></a></td>
24
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" /></a></td>
25
- </tr>
26
- <tr>
27
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}"/></a></td>
28
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" /></a></td>
29
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.smile}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}. {#emotions_dlg.usage}" /></a></td>
30
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" /></a></td>
31
- </tr>
32
- <tr>
33
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.tongue_out}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}. {#emotions_dlg.usage}" /></a></td>
34
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" /></a></td>
35
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.wink}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}. {#emotions_dlg.usage}" /></a></td>
36
- <td><a class="emoticon_link" role="button" title="{#emotions_dlg.yell}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}. {#emotions_dlg.usage}" /></a></td>
37
- </tr>
38
- </table>
39
- <div>{#emotions_dlg.usage}</div>
40
- </div>
41
- </body>
42
- </html>
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#emotions_dlg.title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="js/emotions.js"></script>
7
+ </head>
8
+ <body style="display: none" role="application" aria-labelledby="app_title">
9
+ <span style="display:none;" id="app_title">{#emotions_dlg.title}</span>
10
+ <div align="center">
11
+ <div class="title">{#emotions_dlg.title}:<br /><br /></div>
12
+
13
+ <table id="emoticon_table" role="presentation" border="0" cellspacing="0" cellpadding="4">
14
+ <tr>
15
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cool}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}. {#emotions_dlg.usage}" /></a></td>
16
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cry}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}. {#emotions_dlg.usage}" /></a></td>
17
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" /></a></td>
18
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" /></a></td>
19
+ </tr>
20
+ <tr>
21
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.frown}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}. {#emotions_dlg.usage}" /></a></td>
22
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" /></a></td>
23
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" /></a></td>
24
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" /></a></td>
25
+ </tr>
26
+ <tr>
27
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}"/></a></td>
28
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" /></a></td>
29
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.smile}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}. {#emotions_dlg.usage}" /></a></td>
30
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" /></a></td>
31
+ </tr>
32
+ <tr>
33
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.tongue_out}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}. {#emotions_dlg.usage}" /></a></td>
34
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" /></a></td>
35
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.wink}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}. {#emotions_dlg.usage}" /></a></td>
36
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.yell}. {#emotions_dlg.usage}" href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}. {#emotions_dlg.usage}" /></a></td>
37
+ </tr>
38
+ </table>
39
+ <div>{#emotions_dlg.usage}</div>
40
+ </div>
41
+ </body>
42
+ </html>
js/libraries/tiny_mce/plugins/emotions/js/emotions.js CHANGED
@@ -1,43 +1,43 @@
1
- tinyMCEPopup.requireLangPack();
2
-
3
- var EmotionsDialog = {
4
- addKeyboardNavigation: function(){
5
- var tableElm, cells, settings;
6
-
7
- cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table");
8
-
9
- settings ={
10
- root: "emoticon_table",
11
- items: cells
12
- };
13
- cells[0].tabindex=0;
14
- tinyMCEPopup.dom.addClass(cells[0], "mceFocus");
15
- if (tinymce.isGecko) {
16
- cells[0].focus();
17
- } else {
18
- setTimeout(function(){
19
- cells[0].focus();
20
- }, 100);
21
- }
22
- tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);
23
- },
24
- init : function(ed) {
25
- tinyMCEPopup.resizeToInnerSize();
26
- this.addKeyboardNavigation();
27
- },
28
-
29
- insert : function(file, title) {
30
- var ed = tinyMCEPopup.editor, dom = ed.dom;
31
-
32
- tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {
33
- src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,
34
- alt : ed.getLang(title),
35
- title : ed.getLang(title),
36
- border : 0
37
- }));
38
-
39
- tinyMCEPopup.close();
40
- }
41
- };
42
-
43
- tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var EmotionsDialog = {
4
+ addKeyboardNavigation: function(){
5
+ var tableElm, cells, settings;
6
+
7
+ cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table");
8
+
9
+ settings ={
10
+ root: "emoticon_table",
11
+ items: cells
12
+ };
13
+ cells[0].tabindex=0;
14
+ tinyMCEPopup.dom.addClass(cells[0], "mceFocus");
15
+ if (tinymce.isGecko) {
16
+ cells[0].focus();
17
+ } else {
18
+ setTimeout(function(){
19
+ cells[0].focus();
20
+ }, 100);
21
+ }
22
+ tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);
23
+ },
24
+ init : function(ed) {
25
+ tinyMCEPopup.resizeToInnerSize();
26
+ this.addKeyboardNavigation();
27
+ },
28
+
29
+ insert : function(file, title) {
30
+ var ed = tinyMCEPopup.editor, dom = ed.dom;
31
+
32
+ tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {
33
+ src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,
34
+ alt : ed.getLang(title),
35
+ title : ed.getLang(title),
36
+ border : 0
37
+ }));
38
+
39
+ tinyMCEPopup.close();
40
+ }
41
+ };
42
+
43
+ tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);
js/libraries/tiny_mce/plugins/emotions/langs/en_dlg.js CHANGED
@@ -1 +1 @@
1
- tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"});
1
+ tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",usage:"Use left and right arrows to navigate.",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed"});
js/libraries/tiny_mce/plugins/example/dialog.htm CHANGED
@@ -1,22 +1,22 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#example_dlg.title}</title>
5
- <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="js/dialog.js"></script>
7
- </head>
8
- <body>
9
-
10
- <form onsubmit="ExampleDialog.insert();return false;" action="#">
11
- <p>Here is a example dialog.</p>
12
- <p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>
13
- <p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>
14
-
15
- <div class="mceActionPanel">
16
- <input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />
17
- <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
18
- </div>
19
- </form>
20
-
21
- </body>
22
- </html>
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>{#example_dlg.title}</title>
5
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
+ <script type="text/javascript" src="js/dialog.js"></script>
7
+ </head>
8
+ <body>
9
+
10
+ <form onsubmit="ExampleDialog.insert();return false;" action="#">
11
+ <p>Here is a example dialog.</p>
12
+ <p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>
13
+ <p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>
14
+
15
+ <div class="mceActionPanel">
16
+ <input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />
17
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
18
+ </div>
19
+ </form>
20
+
21
+ </body>
22
+ </html>
js/libraries/tiny_mce/plugins/example/editor_plugin_src.js CHANGED
@@ -1,84 +1,84 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- // Load plugin specific language pack
13
- tinymce.PluginManager.requireLangPack('example');
14
-
15
- tinymce.create('tinymce.plugins.ExamplePlugin', {
16
- /**
17
- * Initializes the plugin, this will be executed after the plugin has been created.
18
- * This call is done before the editor instance has finished it's initialization so use the onInit event
19
- * of the editor instance to intercept that event.
20
- *
21
- * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
22
- * @param {string} url Absolute URL to where the plugin is located.
23
- */
24
- init : function(ed, url) {
25
- // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
26
- ed.addCommand('mceExample', function() {
27
- ed.windowManager.open({
28
- file : url + '/dialog.htm',
29
- width : 320 + parseInt(ed.getLang('example.delta_width', 0)),
30
- height : 120 + parseInt(ed.getLang('example.delta_height', 0)),
31
- inline : 1
32
- }, {
33
- plugin_url : url, // Plugin absolute URL
34
- some_custom_arg : 'custom arg' // Custom argument
35
- });
36
- });
37
-
38
- // Register example button
39
- ed.addButton('example', {
40
- title : 'example.desc',
41
- cmd : 'mceExample',
42
- image : url + '/img/example.gif'
43
- });
44
-
45
- // Add a node change handler, selects the button in the UI when a image is selected
46
- ed.onNodeChange.add(function(ed, cm, n) {
47
- cm.setActive('example', n.nodeName == 'IMG');
48
- });
49
- },
50
-
51
- /**
52
- * Creates control instances based in the incomming name. This method is normally not
53
- * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
54
- * but you sometimes need to create more complex controls like listboxes, split buttons etc then this
55
- * method can be used to create those.
56
- *
57
- * @param {String} n Name of the control to create.
58
- * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
59
- * @return {tinymce.ui.Control} New control instance or null if no control was created.
60
- */
61
- createControl : function(n, cm) {
62
- return null;
63
- },
64
-
65
- /**
66
- * Returns information about the plugin as a name/value array.
67
- * The current keys are longname, author, authorurl, infourl and version.
68
- *
69
- * @return {Object} Name/value array containing information about the plugin.
70
- */
71
- getInfo : function() {
72
- return {
73
- longname : 'Example plugin',
74
- author : 'Some author',
75
- authorurl : 'http://tinymce.moxiecode.com',
76
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',
77
- version : "1.0"
78
- };
79
- }
80
- });
81
-
82
- // Register plugin
83
- tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);
84
  })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ // Load plugin specific language pack
13
+ tinymce.PluginManager.requireLangPack('example');
14
+
15
+ tinymce.create('tinymce.plugins.ExamplePlugin', {
16
+ /**
17
+ * Initializes the plugin, this will be executed after the plugin has been created.
18
+ * This call is done before the editor instance has finished it's initialization so use the onInit event
19
+ * of the editor instance to intercept that event.
20
+ *
21
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
22
+ * @param {string} url Absolute URL to where the plugin is located.
23
+ */
24
+ init : function(ed, url) {
25
+ // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
26
+ ed.addCommand('mceExample', function() {
27
+ ed.windowManager.open({
28
+ file : url + '/dialog.htm',
29
+ width : 320 + parseInt(ed.getLang('example.delta_width', 0)),
30
+ height : 120 + parseInt(ed.getLang('example.delta_height', 0)),
31
+ inline : 1
32
+ }, {
33
+ plugin_url : url, // Plugin absolute URL
34
+ some_custom_arg : 'custom arg' // Custom argument
35
+ });
36
+ });
37
+
38
+ // Register example button
39
+ ed.addButton('example', {
40
+ title : 'example.desc',
41
+ cmd : 'mceExample',
42
+ image : url + '/img/example.gif'
43
+ });
44
+
45
+ // Add a node change handler, selects the button in the UI when a image is selected
46
+ ed.onNodeChange.add(function(ed, cm, n) {
47
+ cm.setActive('example', n.nodeName == 'IMG');
48
+ });
49
+ },
50
+
51
+ /**
52
+ * Creates control instances based in the incomming name. This method is normally not
53
+ * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
54
+ * but you sometimes need to create more complex controls like listboxes, split buttons etc then this
55
+ * method can be used to create those.
56
+ *
57
+ * @param {String} n Name of the control to create.
58
+ * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
59
+ * @return {tinymce.ui.Control} New control instance or null if no control was created.
60
+ */
61
+ createControl : function(n, cm) {
62
+ return null;
63
+ },
64
+
65
+ /**
66
+ * Returns information about the plugin as a name/value array.
67
+ * The current keys are longname, author, authorurl, infourl and version.
68
+ *
69
+ * @return {Object} Name/value array containing information about the plugin.
70
+ */
71
+ getInfo : function() {
72
+ return {
73
+ longname : 'Example plugin',
74
+ author : 'Some author',
75
+ authorurl : 'http://tinymce.moxiecode.com',
76
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',
77
+ version : "1.0"
78
+ };
79
+ }
80
+ });
81
+
82
+ // Register plugin
83
+ tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);
84
  })();
js/libraries/tiny_mce/plugins/example/js/dialog.js CHANGED
@@ -1,19 +1,19 @@
1
- tinyMCEPopup.requireLangPack();
2
-
3
- var ExampleDialog = {
4
- init : function() {
5
- var f = document.forms[0];
6
-
7
- // Get the selected contents as text and place it in the input
8
- f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});
9
- f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');
10
- },
11
-
12
- insert : function() {
13
- // Insert the contents from the input into the document
14
- tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);
15
- tinyMCEPopup.close();
16
- }
17
- };
18
-
19
- tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);
1
+ tinyMCEPopup.requireLangPack();
2
+
3
+ var ExampleDialog = {
4
+ init : function() {
5
+ var f = document.forms[0];
6
+
7
+ // Get the selected contents as text and place it in the input
8
+ f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});
9
+ f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');
10
+ },
11
+
12
+ insert : function() {
13
+ // Insert the contents from the input into the document
14
+ tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);
15
+ tinyMCEPopup.close();
16
+ }
17
+ };
18
+
19
+ tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);
js/libraries/tiny_mce/plugins/example/langs/en.js CHANGED
@@ -1,3 +1,3 @@
1
- tinyMCE.addI18n('en.example',{
2
- desc : 'This is just a template button'
3
- });
1
+ tinyMCE.addI18n('en.example',{
2
+ desc : 'This is just a template button'
3
+ });
js/libraries/tiny_mce/plugins/example/langs/en_dlg.js CHANGED
@@ -1,3 +1,3 @@
1
- tinyMCE.addI18n('en.example_dlg',{
2
- title : 'This is just a example title'
3
- });
1
+ tinyMCE.addI18n('en.example_dlg',{
2
+ title : 'This is just a example title'
3
+ });
js/libraries/tiny_mce/plugins/example_dependency/editor_plugin_src.js CHANGED
@@ -1,50 +1,50 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
-
13
- tinymce.create('tinymce.plugins.ExampleDependencyPlugin', {
14
- /**
15
- * Initializes the plugin, this will be executed after the plugin has been created.
16
- * This call is done before the editor instance has finished it's initialization so use the onInit event
17
- * of the editor instance to intercept that event.
18
- *
19
- * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
20
- * @param {string} url Absolute URL to where the plugin is located.
21
- */
22
- init : function(ed, url) {
23
- },
24
-
25
-
26
- /**
27
- * Returns information about the plugin as a name/value array.
28
- * The current keys are longname, author, authorurl, infourl and version.
29
- *
30
- * @return {Object} Name/value array containing information about the plugin.
31
- */
32
- getInfo : function() {
33
- return {
34
- longname : 'Example Dependency plugin',
35
- author : 'Some author',
36
- authorurl : 'http://tinymce.moxiecode.com',
37
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency',
38
- version : "1.0"
39
- };
40
- }
41
- });
42
-
43
- /**
44
- * Register the plugin, specifying the list of the plugins that this plugin depends on. They are specified in a list, with the list loaded in order.
45
- * plugins in this list will be initialised when this plugin is initialized. (before the init method is called).
46
- * plugins in a depends list should typically be specified using the short name). If neccesary this can be done
47
- * with an object which has the url to the plugin and the shortname.
48
- */
49
- tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']);
50
- })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+
13
+ tinymce.create('tinymce.plugins.ExampleDependencyPlugin', {
14
+ /**
15
+ * Initializes the plugin, this will be executed after the plugin has been created.
16
+ * This call is done before the editor instance has finished it's initialization so use the onInit event
17
+ * of the editor instance to intercept that event.
18
+ *
19
+ * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
20
+ * @param {string} url Absolute URL to where the plugin is located.
21
+ */
22
+ init : function(ed, url) {
23
+ },
24
+
25
+
26
+ /**
27
+ * Returns information about the plugin as a name/value array.
28
+ * The current keys are longname, author, authorurl, infourl and version.
29
+ *
30
+ * @return {Object} Name/value array containing information about the plugin.
31
+ */
32
+ getInfo : function() {
33
+ return {
34
+ longname : 'Example Dependency plugin',
35
+ author : 'Some author',
36
+ authorurl : 'http://tinymce.moxiecode.com',
37
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example_dependency',
38
+ version : "1.0"
39
+ };
40
+ }
41
+ });
42
+
43
+ /**
44
+ * Register the plugin, specifying the list of the plugins that this plugin depends on. They are specified in a list, with the list loaded in order.
45
+ * plugins in this list will be initialised when this plugin is initialized. (before the init method is called).
46
+ * plugins in a depends list should typically be specified using the short name). If neccesary this can be done
47
+ * with an object which has the url to the plugin and the shortname.
48
+ */
49
+ tinymce.PluginManager.add('example_dependency', tinymce.plugins.ExampleDependencyPlugin, ['example']);
50
+ })();
js/libraries/tiny_mce/plugins/fullpage/css/fullpage.css CHANGED
@@ -1,143 +1,143 @@
1
- /* Hide the advanced tab */
2
- #advanced_tab {
3
- display: none;
4
- }
5
-
6
- #metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {
7
- width: 280px;
8
- }
9
-
10
- #doctype, #docencoding {
11
- width: 200px;
12
- }
13
-
14
- #langcode {
15
- width: 30px;
16
- }
17
-
18
- #bgimage {
19
- width: 220px;
20
- }
21
-
22
- #fontface {
23
- width: 240px;
24
- }
25
-
26
- #leftmargin, #rightmargin, #topmargin, #bottommargin {
27
- width: 50px;
28
- }
29
-
30
- .panel_wrapper div.current {
31
- height: 400px;
32
- }
33
-
34
- #stylesheet, #style {
35
- width: 240px;
36
- }
37
-
38
- #doctypes {
39
- width: 200px;
40
- }
41
-
42
- /* Head list classes */
43
-
44
- .headlistwrapper {
45
- width: 100%;
46
- }
47
-
48
- .selected {
49
- border: 1px solid #0A246A;
50
- background-color: #B6BDD2;
51
- }
52
-
53
- .toolbar {
54
- width: 100%;
55
- }
56
-
57
- #headlist {
58
- width: 100%;
59
- margin-top: 3px;
60
- font-size: 11px;
61
- }
62
-
63
- #info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {
64
- display: none;
65
- }
66
-
67
- #addmenu {
68
- position: absolute;
69
- border: 1px solid gray;
70
- display: none;
71
- z-index: 100;
72
- background-color: white;
73
- }
74
-
75
- #addmenu a {
76
- display: block;
77
- width: 100%;
78
- line-height: 20px;
79
- text-decoration: none;
80
- background-color: white;
81
- }
82
-
83
- #addmenu a:hover {
84
- background-color: #B6BDD2;
85
- color: black;
86
- }
87
-
88
- #addmenu span {
89
- padding-left: 10px;
90
- padding-right: 10px;
91
- }
92
-
93
- #updateElementPanel {
94
- display: none;
95
- }
96
-
97
- #script_element .panel_wrapper div.current {
98
- height: 108px;
99
- }
100
-
101
- #style_element .panel_wrapper div.current {
102
- height: 108px;
103
- }
104
-
105
- #link_element .panel_wrapper div.current {
106
- height: 140px;
107
- }
108
-
109
- #element_script_value {
110
- width: 100%;
111
- height: 100px;
112
- }
113
-
114
- #element_comment_value {
115
- width: 100%;
116
- height: 120px;
117
- }
118
-
119
- #element_style_value {
120
- width: 100%;
121
- height: 100px;
122
- }
123
-
124
- #element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {
125
- width: 250px;
126
- }
127
-
128
- .updateElementButton {
129
- margin-top: 3px;
130
- }
131
-
132
- /* MSIE specific styles */
133
-
134
- * html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {
135
- width: 22px;
136
- height: 22px;
137
- }
138
-
139
- textarea {
140
- height: 55px;
141
- }
142
-
143
  .panel_wrapper div.current {height:420px;}
1
+ /* Hide the advanced tab */
2
+ #advanced_tab {
3
+ display: none;
4
+ }
5
+
6
+ #metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {
7
+ width: 280px;
8
+ }
9
+
10
+ #doctype, #docencoding {
11
+ width: 200px;
12
+ }
13
+
14
+ #langcode {
15
+ width: 30px;
16
+ }
17
+
18
+ #bgimage {
19
+ width: 220px;
20
+ }
21
+
22
+ #fontface {
23
+ width: 240px;
24
+ }
25
+
26
+ #leftmargin, #rightmargin, #topmargin, #bottommargin {
27
+ width: 50px;
28
+ }
29
+
30
+ .panel_wrapper div.current {
31
+ height: 400px;
32
+ }
33
+
34
+ #stylesheet, #style {
35
+ width: 240px;
36
+ }
37
+
38
+ #doctypes {
39
+ width: 200px;
40
+ }
41
+
42
+ /* Head list classes */
43
+
44
+ .headlistwrapper {
45
+ width: 100%;
46
+ }
47
+
48
+ .selected {
49
+ border: 1px solid #0A246A;
50
+ background-color: #B6BDD2;
51
+ }
52
+
53
+ .toolbar {
54
+ width: 100%;
55
+ }
56
+
57
+ #headlist {
58
+ width: 100%;
59
+ margin-top: 3px;
60
+ font-size: 11px;
61
+ }
62
+
63
+ #info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {
64
+ display: none;
65
+ }
66
+
67
+ #addmenu {
68
+ position: absolute;
69
+ border: 1px solid gray;
70
+ display: none;
71
+ z-index: 100;
72
+ background-color: white;
73
+ }
74
+
75
+ #addmenu a {
76
+ display: block;
77
+ width: 100%;
78
+ line-height: 20px;
79
+ text-decoration: none;
80
+ background-color: white;
81
+ }
82
+
83
+ #addmenu a:hover {
84
+ background-color: #B6BDD2;
85
+ color: black;
86
+ }
87
+
88
+ #addmenu span {
89
+ padding-left: 10px;
90
+ padding-right: 10px;
91
+ }
92
+
93
+ #updateElementPanel {
94
+ display: none;
95
+ }
96
+
97
+ #script_element .panel_wrapper div.current {
98
+ height: 108px;
99
+ }
100
+
101
+ #style_element .panel_wrapper div.current {
102
+ height: 108px;
103
+ }
104
+
105
+ #link_element .panel_wrapper div.current {
106
+ height: 140px;
107
+ }
108
+
109
+ #element_script_value {
110
+ width: 100%;
111
+ height: 100px;
112
+ }
113
+
114
+ #element_comment_value {
115
+ width: 100%;
116
+ height: 120px;
117
+ }
118
+
119
+ #element_style_value {
120
+ width: 100%;
121
+ height: 100px;
122
+ }
123
+
124
+ #element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {
125
+ width: 250px;
126
+ }
127
+
128
+ .updateElementButton {
129
+ margin-top: 3px;
130
+ }
131
+
132
+ /* MSIE specific styles */
133
+
134
+ * html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {
135
+ width: 22px;
136
+ height: 22px;
137
+ }
138
+
139
+ textarea {
140
+ height: 55px;
141
+ }
142
+
143
  .panel_wrapper div.current {height:420px;}
js/libraries/tiny_mce/plugins/fullpage/editor_plugin_src.js CHANGED
@@ -1,405 +1,405 @@
1
- /**
2
- * editor_plugin_src.js
3
- *
4
- * Copyright 2009, Moxiecode Systems AB
5
- * Released under LGPL License.
6
- *
7
- * License: http://tinymce.moxiecode.com/license
8
- * Contributing: http://tinymce.moxiecode.com/contributing
9
- */
10
-
11
- (function() {
12
- var each = tinymce.each, Node = tinymce.html.Node;
13
-
14
- tinymce.create('tinymce.plugins.FullPagePlugin', {
15
- init : function(ed, url) {
16
- var t = this;
17
-
18
- t.editor = ed;
19
-
20
- // Register commands
21
- ed.addCommand('mceFullPageProperties', function() {
22
- ed.windowManager.open({
23
- file : url + '/fullpage.htm',
24
- width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),
25
- height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),
26
- inline : 1
27
- }, {
28
- plugin_url : url,
29
- data : t._htmlToData()
30
- });
31
- });
32
-
33
- // Register buttons
34
- ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});
35
-
36
- ed.onBeforeSetContent.add(t._setContent, t);
37
- ed.onGetContent.add(t._getContent, t);
38
- },
39
-
40
- getInfo : function() {
41
- return {
42
- longname : 'Fullpage',
43
- author : 'Moxiecode Systems AB',
44
- authorurl : 'http://tinymce.moxiecode.com',
45
- infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',
46
- version : tinymce.majorVersion + "." + tinymce.minorVersion
47
- };
48
- },
49
-
50
- // Private plugin internal methods
51
-
52
- _htmlToData : function() {
53
- var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;
54
-
55
- function getAttr(elm, name) {
56
- var value = elm.attr(name);
57
-
58
- return value || '';
59
- };
60
-
61
- // Default some values
62
- data.fontface = editor.getParam("fullpage_default_fontface", "");
63
- data.fontsize = editor.getParam("fullpage_default_fontsize", "");
64
-
65
- // Parse XML PI
66
- elm = headerFragment.firstChild;
67
- if (elm.type == 7) {
68
- data.xml_pi = true;
69
- matches = /encoding="([^"]+)"/.exec(elm.value);
70
- if (matches)
71
- data.docencoding = matches[1];
72
- }
73
-
74
- // Parse doctype
75
- elm = headerFragment.getAll('#doctype')[0];
76
- if (elm)
77
- data.doctype = '<!DOCTYPE' + elm.value + ">";
78
-
79
- // Parse title element
80
- elm = headerFragment.getAll('title')[0];
81
- if (elm && elm.firstChild) {
82
- data.metatitle = elm.firstChild.value;
83
- }
84
-
85
- // Parse meta elements
86
- each(headerFragment.getAll('meta'), function(meta) {
87
- var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches;
88
-
89
- if (name)
90
- data['meta' + name.toLowerCase()] = meta.attr('content');
91
- else if (httpEquiv == "Content-Type") {
92
- matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content'));
93
-
94
- if (matches)
95
- data.docencoding = matches[1];
96
- }
97
- });
98
-
99
- // Parse html attribs
100
- elm = headerFragment.getAll('html')[0];
101
- if (elm)
102
- data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');
103
-
104
- // Parse stylesheet
105
- elm = headerFragment.getAll('link')[0];
106
- if (elm && elm.attr('rel') == 'stylesheet')
107
- data.stylesheet = elm.attr('href');
108
-
109
- // Parse body parts
110
- elm = headerFragment.getAll('body')[0];
111
- if (elm) {
112
- data.langdir = getAttr(elm, 'dir');
113
- data.style = getAttr(elm, 'style');
114
- data.visited_color = getAttr(elm, 'vlink');
115
- data.link_color = getAttr(elm, 'link');
116
- data.active_color = getAttr(elm, 'alink');
117
- }
118
-
119
- return data;
120
- },
121
-
122
- _dataToHtml : function(data) {
123
- var headerFragment, headElement, html, elm, value, dom = this.editor.dom;
124
-
125
- function setAttr(elm, name, value) {
126
- elm.attr(name, value ? value : undefined);
127
- };
128
-
129
- function addHeadNode(node) {
130
- if (headElement.firstChild)
131
- headElement.insert(node, headElement.firstChild);
132
- else
133
- headElement.append(node);
134
- };
135
-
136
- headerFragment = this._parseHeader();
137
- headElement = headerFragment.getAll('head')[0];
138
- if (!headElement) {
139
- elm = headerFragment.getAll('html')[0];
140
- headElement = new Node('head', 1);
141
-
142
- if (elm.firstChild)
143
- elm.insert(headElement, elm.firstChild, true);
144
- else
145
- elm.append(headElement);
146
- }
147
-
148
- // Add/update/remove XML-PI
149
- elm = headerFragment.firstChild;
150
- if (data.xml_pi) {
151
- value = 'version="1.0"';
152
-
153
- if (data.docencoding)
154
- value += ' encoding="' + data.docencoding + '"';
155
-
156
- if (elm.type != 7) {
157
- elm = new Node('xml', 7);
158
- headerFragment.insert(elm, headerFragment.firstChild, true);
159
- }
160
-
161
- elm.value = value;
162
- } else if (elm && elm.type == 7)
163
- elm.remove();
164
-
165
- // Add/update/remove doctype
166
- elm = headerFragment.getAll('#doctype')[0];
167
- if (data.doctype) {
168
- if (!elm) {
169
- elm = new Node('#doctype', 10);
170
-
171
- if (data.xml_pi)
172
- headerFragment.insert(elm, headerFragment.firstChild);
173
- else
174
- addHeadNode(elm);
175
- }
176
-
177
- elm.value = data.doctype.substring(9, data.doctype.length - 1);
178
- } else if (elm)
179
- elm.remove();
180
-
181
- // Add/update/remove title
182
- elm = headerFragment.getAll('title')[0];
183
- if (data.metatitle) {
184
- if (!elm) {
185
- elm = new Node('title', 1);
186
- elm.append(new Node('#text', 3)).value = data.metatitle;
187
- addHeadNode(elm);
188
- }
189
- }
190
-
191
- // Add meta encoding
192
- if (data.docencoding) {
193
- elm = null;
194
- each(headerFragment.getAll('meta'), function(meta) {
195
- if (meta.attr('http-equiv') == 'Content-Type')
196
- elm = meta;
197
- });
198
-
199
- if (!elm) {
200
- elm = new Node('meta', 1);
201
- elm.attr('http-equiv', 'Content-Type');
202
- elm.shortEnded = true;
203
- addHeadNode(elm);
204
- }
205
-
206
- elm.attr('content', 'text/html; charset=' + data.docencoding);
207
- }
208
-
209
- // Add/update/remove meta
210
- each('keywords,description,author,copyright,robots'.split(','), function(name) {
211
- var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];
212
-
213
- for (i = 0; i < nodes.length; i++) {
214
- meta = nodes[i];
215
-
216
- if (meta.attr('name') == name) {
217
- if (value)
218
- meta.attr('content', value);
219
- else
220
- meta.remove();
221
-
222
- return;
223
- }
224
- }
225
-
226
- if (value) {
227
- elm = new Node('meta', 1);
228
- elm.attr('name', name);
229
- elm.attr('content', value);
230
- elm.shortEnded = true;
231
-
232
- addHeadNode(elm);
233
- }
234
- });
235
-
236
- // Add/update/delete link
237
- elm = headerFragment.getAll('link')[0];
238
- if (elm && elm.attr('rel') == 'stylesheet') {
239
- if (data.stylesheet)
240
- elm.attr('href', data.stylesheet);
241
- else
242
- elm.remove();
243
- } else if (data.stylesheet) {
244
- elm = new Node('link', 1);
245
- elm.attr({
246
- rel : 'stylesheet',
247
- text : 'text/css',
248
- href : data.stylesheet
249
- });
250
- elm.shortEnded = true;
251
-
252
- addHeadNode(elm);
253
- }
254
-
255
- // Update body attributes
256
- elm = headerFragment.getAll('body')[0];
257
- if (elm) {
258
- setAttr(elm, 'dir', data.langdir);
259
- setAttr(elm, 'style', data.style);
260
- setAttr(elm, 'vlink', data.visited_color);
261
- setAttr(elm, 'link', data.link_color);
262
- setAttr(elm, 'alink', data.active_color);
263
-
264
- // Update iframe body as well
265
- dom.setAttribs(this.editor.getBody(), {
266
- style : data.style,
267
- dir : data.dir,
268
- vLink : data.visited_color,
269
- link : data.link_color,
270
- aLink : data.active_color
271
- });
272
- }
273
-
274
- // Set html attributes
275
- elm = headerFragment.getAll('html')[0];
276
- if (elm) {
277
- setAttr(elm, 'lang', data.langcode);
278
- setAttr(elm, 'xml:lang', data.langcode);
279
- }
280
-
281
- // Serialize header fragment and crop away body part
282
- html = new tinymce.html.Serializer({
283
- validate: false,
284
- indent: true,
285
- apply_source_formatting : true,
286
- indent_before: 'head,html,body,meta,title,script,link,style',
287
- indent_after: 'head,html,body,meta,title,script,link,style'
288
- }).serialize(headerFragment);
289
-
290
- this.head = html.substring(0, html.indexOf('</body>'));
291
- },
292
-
293
- _parseHeader : function() {
294
- // Parse the contents with a DOM parser
295
- return new tinymce.html.DomParser({
296
- validate: false,
297
- root_name: '#document'
298
- }).parse(this.head);
299
- },
300
-
301
- _setContent : function(ed, o) {
302
- var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm;
303
-
304
- function low(s) {
305
- return s.replace(/<\/?[A-Z]+/g, function(a) {
306
- return a.toLowerCase();
307
- })
308
- };
309
-
310
- // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate
311
- if (o.format == 'raw' && self.head)
312
- return;
313
-
314
- if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))
315
- return;
316
-
317
- // Parse out head, body and footer
318
- content = content.replace(/<(\/?)BODY/gi, '<$1body');
319
- startPos = content.indexOf('<body');
320
-
321
- if (startPos != -1) {
322
- startPos = content.indexOf('>', startPos);
323
- self.head = low(content.substring(0, startPos + 1));
324
-
325
- endPos = content.indexOf('</body', startPos);
326
- if (endPos == -1)
327
- endPos = content.length;
328
-
329
- o.content = content.substring(startPos + 1, endPos);
330
- self.foot = low(content.substring(endPos));
331
- } else {
332
- self.head = this._getDefaultHeader();
333
- self.foot = '\n</body>\n</html>';
334
- }
335
-
336
- // Parse header and update iframe
337
- headerFragment = self._parseHeader();
338
- each(headerFragment.getAll('style'), function(node) {
339
- if (node.firstChild)
340
- styles += node.firstChild.value;
341
- });
342
-
343
- elm = headerFragment.getAll('body')[0];
344
- if (elm) {
345
- dom.setAttribs(self.editor.getBody(), {
346
- style : elm.attr('style') || '',
347
- dir : elm.attr('dir') || '',
348
- vLink : elm.attr('vlink') || '',
349
- link : elm.attr('link') || '',
350
- aLink : elm.attr('alink') || ''
351
- });
352
- }
353
-
354
- dom.remove('fullpage_styles');
355
-
356
- if (styles) {
357
- dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);
358
-
359
- // Needed for IE 6/7
360
- elm = dom.get('fullpage_styles');
361
- if (elm.styleSheet)
362
- elm.styleSheet.cssText = styles;
363
- }
364
- },
365
-
366
- _getDefaultHeader : function() {
367
- var header = '', editor = this.editor, value, styles = '';
368
-
369
- if (editor.getParam('fullpage_default_xml_pi'))
370
- header += '<?xml version="1.0" encoding="' + editor.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';
371
-
372
- header += editor.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
373
- header += '\n<html>\n<head>\n';
374
-
375
- if (value = editor.getParam('fullpage_default_title'))
376
- header += '<title>' + value + '</title>\n';
377
-
378
- if (value = editor.getParam('fullpage_default_encoding'))
379
- header += '<meta http-equiv="Content-Type" content="text/html; charset=' + value + '" />\n';
380
-
381
- if (value = editor.getParam('fullpage_default_font_family'))
382
- styles += 'font-family: ' + value + ';';
383
-
384
- if (value = editor.getParam('fullpage_default_font_size'))
385
- styles += 'font-size: ' + value + ';';
386
-
387
- if (value = editor.getParam('fullpage_default_text_color'))
388
- styles += 'color: ' + value + ';';
389
-
390
- header += '</head>\n<body' + (styles ? ' style="' + styles + '"' : '') + '>\n';
391
-
392
- return header;
393
- },
394
-
395
- _getContent : function(ed, o) {
396
- var self = this;
397
-
398
- if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))
399
- o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);
400
- }
401
- });
402
-
403
- // Register plugin
404
- tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);
405
- })();
1
+ /**
2
+ * editor_plugin_src.js
3
+ *
4
+ * Copyright 2009, Moxiecode Systems AB
5
+ * Released under LGPL License.
6
+ *
7
+ * License: http://tinymce.moxiecode.com/license
8
+ * Contributing: http://tinymce.moxiecode.com/contributing
9
+ */
10
+
11
+ (function() {
12
+ var each = tinymce.each, Node = tinymce.html.Node;
13
+
14
+ tinymce.create('tinymce.plugins.FullPagePlugin', {
15
+ init : function(ed, url) {
16
+ var t = this;
17
+
18
+ t.editor = ed;
19
+
20
+ // Register commands
21
+ ed.addCommand('mceFullPageProperties', function() {
22
+ ed.windowManager.open({
23
+ file : url + '/fullpage.htm',
24
+ width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),
25
+ height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),
26
+ inline : 1
27
+ }, {
28
+ plugin_url : url,
29
+ data : t._htmlToData()
30
+ });
31
+ });
32
+
33
+ // Register buttons
34
+ ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});
35
+
36
+ ed.onBeforeSetContent.add(t._setContent, t);
37
+ ed.onGetContent.add(t._getContent, t);
38
+ },
39
+
40
+ getInfo : function() {
41
+ return {
42
+ longname : 'Fullpage',
43
+ author : 'Moxiecode Systems AB',
44
+ authorurl : 'http://tinymce.moxiecode.com',
45
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',
46
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
47
+ };
48
+ },
49
+
50
+ // Private plugin internal methods
51
+
52
+ _htmlToData : function() {
53
+ var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;
54
+
55
+ function getAttr(elm, name) {
56
+ var value = elm.attr(name);
57
+
58
+ return value || '';
59
+ };
60
+
61
+ // Default some values
62
+ data.fontface = editor.getParam("fullpage_default_fontface", "");
63
+ data.fontsize = editor.getParam("fullpage_default_fontsize", "");
64
+
65
+ // Parse XML PI
66
+ elm = headerFragment.firstChild;
67
+ if (elm.type == 7) {
68
+ data.xml_pi = true;
69
+ matches = /encoding="([^"]+)"/.exec(elm.value);
70
+ if (matches)
71
+ data.docencoding = matches[1];
72
+ }
73
+
74
+ // Parse doctype
75
+ elm = headerFragment.getAll('#doctype')[0];
76
+ if (elm)
77
+ data.doctype = '<!DOCTYPE' + elm.value + ">";
78
+
79
+ // Parse title element
80
+ elm = headerFragment.getAll('title')[0];
81
+ if (elm && elm.firstChild) {
82
+ data.metatitle = elm.firstChild.value;
83
+ }
84
+
85
+ // Parse meta elements
86
+ each(headerFragment.getAll('meta'), function(meta) {
87
+ var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches;
88
+
89
+ if (name)
90
+ data['meta' + name.toLowerCase()] = meta.attr('content');
91
+ else if (httpEquiv == "Content-Type") {
92
+ matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content'));
93
+
94
+ if (matches)
95
+ data.docencoding = matches[1];
96
+ }
97
+ });
98
+
99
+ // Parse html attribs
100
+ elm = headerFragment.getAll('html')[0];
101
+ if (elm)
102
+ data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');
103
+
104
+ // Parse stylesheet
105
+ elm = headerFragment.getAll('link')[0];
106
+ if (elm && elm.attr('rel') == 'stylesheet')
107
+ data.stylesheet = elm.attr('href');
108
+
109
+ // Parse body parts
110
+ elm = headerFragment.getAll('body')[0];
111
+ if (elm) {
112
+ data.langdir = getAttr(elm, 'dir');
113
+ data.style = getAttr(elm, 'style');
114
+ data.visited_color = getAttr(elm, 'vlink');
115
+ data.link_color = getAttr(elm, 'link');
116
+ data.active_color = getAttr(elm, 'alink');
117
+ }
118
+
119
+ return data;
120
+ },
121
+
122
+ _dataToHtml : function(data) {
123
+ var headerFragment, headElement, html, elm, value, dom = this.editor.dom;
124
+
125
+ function setAttr(elm, name, value) {
126
+ elm.attr(name, value ? value : undefined);
127
+ };
128
+
129
+ function addHeadNode(node) {
130
+ if (headElement.firstChild)
131
+ headElement.insert(node, headElement.firstChild);
132
+ else
133
+ headElement.append(node);
134
+ };
135
+
136
+ headerFragment = this._parseHeader();
137
+ headElement = headerFragment.getAll('head')[0];
138
+ if (!headElement) {
139
+ elm = headerFragment.getAll('html')[0];
140
+ headElement = new Node('head', 1);
141
+
142
+ if (elm.firstChild)
143
+ elm.insert(headElement, elm.firstChild, true);
144
+ else
145
+ elm.append(headElement);
146
+ }
147
+
148
+ // Add/update/remove XML-PI
149
+ elm = headerFragment.firstChild;
150
+ if (data.xml_pi) {
151
+ value = 'version="1.0"';
152
+
153
+ if (data.docencoding)
154
+ value += ' encoding="' + data.docencoding + '"';
155
+
156
+ if (elm.type != 7) {
157
+ elm = new Node('xml', 7);
158
+ headerFragment.insert(elm, headerFragment.firstChild, true);
159
+ }
160
+
161
+ elm.value = value;
162
+ } else if (elm && elm.type == 7)
163
+ elm.remove();
164
+
165
+ // Add/update/remove doctype
166
+ elm = headerFragment.getAll('#doctype')[0];
167
+ if (data.doctype) {
168
+ if (!elm) {
169
+ elm = new Node('#doctype', 10);
170
+
171
+ if (data.xml_pi)
172
+ headerFragment.insert(elm, headerFragment.firstChild);
173
+ else
174
+ addHeadNode(elm);
175
+ }
176
+
177
+ elm.value = data.doctype.substring(9, data.doctype.length - 1);
178
+ } else if (elm)
179
+ elm.remove();
180
+
181
+ // Add/update/remove title
182
+ elm = headerFragment.getAll('title')[0];
183
+ if (data.metatitle) {
184
+ if (!elm) {
185
+ elm = new Node('title', 1);
186
+ elm.append(new Node('#text', 3)).value = data.metatitle;
187
+ addHeadNode(elm);
188
+ }
189
+ }
190
+
191
+ // Add meta encoding
192
+ if (data.docencoding) {
193
+ elm = null;
194
+ each(headerFragment.getAll('meta'), function(meta) {
195
+ if (meta.attr('http-equiv') == 'Content-Type')
196
+ elm = meta;
197
+ });
198
+
199
+ if (!elm) {
200
+ elm = new Node('meta', 1);
201
+ elm.attr('http-equiv', 'Content-Type');
202
+ elm.shortEnded = true;
203
+ addHeadNode(elm);
204
+ }
205
+
206
+ elm.attr('content', 'text/html; charset=' + data.docencoding);
207
+ }
208
+
209
+ // Add/update/remove meta
210
+ each('keywords,description,author,copyright,robots'.split(','), function(name) {
211
+ var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];
212
+
213
+ for (i = 0; i < nodes.length; i++) {
214
+ meta = nodes[i];
215
+
216
+ if (meta.attr('name') == name) {
217
+ if (value)
218
+ meta.attr('content', value);
219
+ else
220
+ meta.remove();
221
+
222
+ return;
223
+ }
224
+ }
225
+
226
+ if (value) {
227
+ elm = new Node('meta', 1);
228
+ elm.attr('name', name);
229
+ elm.attr('content', value);
230
+ elm.shortEnded = true;
231
+
232
+ addHeadNode(elm);
233
+ }
234
+ });
235
+
236
+ // Add/update/delete link
237
+ elm = headerFragment.getAll('link')[0];
238
+ if (elm && elm.attr('rel') == 'stylesheet') {
239
+ if (data.stylesheet)
240
+ elm.attr('href', data.stylesheet);
241
+ else
242
+ elm.remove();
243
+ } else if (data.stylesheet) {
244
+ elm = new Node('link', 1);
245
+ elm.attr({
246
+ rel : 'stylesheet',
247
+ text : 'text/css',
248
+ href : data.stylesheet
249
+ });
250
+ elm.shortEnded = true;
251
+
252
+ addHeadNode(elm);
253
+ }
254
+
255
+ // Update body attributes
256
+ elm = headerFragment.getAll('body')[0];
257
+ if (elm) {
258
+ setAttr(elm, 'dir', data.langdir);
259
+ setAttr(elm, 'style', data.style);
260
+ setAttr(elm, 'vlink', data.visited_color);
261
+ setAttr(elm, 'link', data.link_color);
262
+ setAttr(elm, 'alink', data.active_color);
263
+
264
+ // Update iframe body as well
265
+ dom.setAttribs(this.editor.getBody(), {
266
+ style : data.style,
267
+ dir : data.dir,
268
+ vLink : data.visited_color,
269
+ link : data.link_color,
270
+ aLink : data.active_color
271
+ });
272
+ }
273
+
274
+ // Set html attributes
275
+ elm = headerFragment.getAll('html')[0];
276
+ if (elm) {
277
+ setAttr(elm, 'lang', data.langcode);
278
+ setAttr(elm, 'xml:lang', data.langcode);
279
+ }
280
+
281
+ // Serialize header fragment and crop away body part
282
+ html = new tinymce.html.Serializer({
283
+ validate: false,
284
+ indent: true,
285
+ apply_source_formatting : true,
286
+ indent_before: 'head,html,body,meta,title,script,link,style',
287
+ indent_after: 'head,html,body,meta,title,script,link,style'
288
+ }).serialize(headerFragment);
289
+
290
+ this.head = html.substring(0, html.indexOf('</body>'));
291
+ },
292
+
293
+ _parseHeader : function() {
294
+ // Parse the contents with a DOM parser
295
+ return new tinymce.html.DomParser({
296
+ validate: false,
297
+ root_name: '#document'
298
+ }).parse(this.head);
299
+ },
300
+
301
+ _setContent : function(ed, o) {
302
+ var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm;
303
+
304
+ function low(s) {
305
+ return s.replace(/<\/?[A-Z]+/g, function(a) {
306
+ return a.toLowerCase();
307
+ })
308
+ };
309
+
310
+ // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate
311
+ if (o.format == 'raw' && self.head)
312
+ return;
313
+
314
+ if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))
315
+ return;
316
+
317
+ // Parse out head, body and footer
318
+ content = content.replace(/<(\/?)BODY/gi, '<$1body');
319
+ startPos = content.indexOf('<body');
320
+
321
+ if (startPos != -1) {
322
+ startPos = content.indexOf('>', startPos);
323
+ self.head = low(content.substring(0, startPos + 1));
324
+
325
+ endPos = content.indexOf('</body', startPos);
326
+ if (endPos == -1)
327
+ endPos = content.length;
328
+
329
+ o.content = content.substring(startPos + 1, endPos);
330
+ self.foot = low(content.substring(endPos));
331
+ } else {
332
+ self.head = this._getDefaultHeader();
333
+ self.foot = '\n</body>\n</html>';
334
+ }
335
+
336
+ // Parse header and update iframe
337
+ headerFragment = self._parseHeader();
338
+ each(headerFragment.getAll('style'), function(node) {
339
+ if (node.firstChild)
340
+ styles += node.firstChild.value;
341
+ });
342
+
343
+ elm = headerFragment.getAll('body')[0];
344
+ if (elm) {
345
+ dom.setAttribs(self.editor.getBody(), {
346
+ style : elm.attr('style') || '',
347
+ dir : elm.attr('dir') || '',
348
+ vLink : elm.attr('vlink') || '',
349
+ link : elm.attr('link') || '',
350
+ aLink : elm.attr('alink') || ''
351
+ });
352
+ }
353
+
354
+ dom.remove('fullpage_styles');
355
+
356
+ if (styles) {
357
+ dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);
358
+
359
+ // Needed for IE 6/7
360
+ elm = dom.get('fullpage_styles');
361
+ if (elm.styleSheet)
362
+ elm.styleSheet.cssText = styles;
363
+ }
364
+ },
365
+
366
+ _getDefaultHeader : function() {
367
+ var header = '', editor = this.editor, value, styles = '';
368
+
369
+ if (editor.getParam('fullpage_default_xml_pi'))
370
+ header += '<?xml version="1.0" encoding="' + editor.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';
371
+
372
+ header += editor.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
373
+ header += '\n<html>\n<head>\n';
374
+
375
+ if (value = editor.getParam('fullpage_default_title'))
376
+ header += '<title>' + value + '</title>\n';
377
+
378
+ if (value = editor.getParam('fullpage_default_encoding'))
379
+ header += '<meta http-equiv="Content-Type" content="text/html; charset=' + value + '" />\n';
380
+
381
+ if (value = editor.getParam('fullpage_default_font_family'))
382
+ styles += 'font-family: ' + value + ';';
383
+
384
+ if (value = editor.getParam('fullpage_default_font_size'))
385
+ styles += 'font-size: ' + value + ';';
386
+
387
+ if (value = editor.getParam('fullpage_default_text_color'))
388
+ styles += 'color: ' + value + ';';
389
+
390
+ header += '</head>\n<body' + (styles ? ' style="' + styles + '"' : '') + '>\n';
391
+
392
+ return header;
393
+ },
394
+
395
+ _getContent : function(ed, o) {
396
+ var self = this;
397
+
398
+ if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))
399
+ o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);
400
+ }
401
+ });
402
+
403
+ // Register plugin
404
+ tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);
405
+ })();
js/libraries/tiny_mce/plugins/fullpage/fullpage.htm CHANGED
@@ -1,259 +1,259 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
- <html xmlns="http://www.w3.org/1999/xhtml">
3
- <head>
4
- <title>{#fullpage_dlg.title}</title>
5
- <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6
- <script type="text/javascript" src="../../utils/mctabs.js"></script>
7
- <script type="text/javascript" src="../../utils/form_utils.js"></script>
8
- <script type="text/javascript" src="js/fullpage.js"></script>
9
- <link href="css/fullpage.css" rel="stylesheet" type="text/css" />
10
- </head>
11
- <body id="fullpage" style="display: none">
12
- <form onsubmit="FullPageDialog.update();return false;" name="fullpage" action="#">
13
- <div class="tabs">
14
- <ul>
15
- <li id="meta_tab" class="current"><span><a href="javascript:mcTabs.displayTab('meta_tab','meta_panel');" onmousedown="return false;">{#fullpage_dlg.meta_tab}</a></span></li>
16
- <li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#fullpage_dlg.appearance_tab}</a></span></li>
17
- </ul>
18
- </div>
19
-
20
- <div class="panel_wrapper">
21
- <div id="meta_panel" class="panel current">
22
- <fieldset>
23
- <legend>{#fullpage_dlg.meta_props}</legend>
24
-
25
- <table border="0" cellpadding="4" cellspacing="0">
26
- <tr>
27
- <td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>
28
- <td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>
29
- </tr>
30
- <tr>
31
- <td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>
32
- <td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>
33
- </tr>
34
- <tr>
35
- <td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>
36
- <td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>
37
- </tr>
38
- <tr>
39
- <td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>
40
- <td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>
41
- </tr>
42
- <tr>
43
- <td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>
44
- <td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>
45
- </tr>
46
- <tr>
47
- <td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>
48
- <td>
49
- <select id="metarobots" name="metarobots">
50
- <option value="">{#not_set}</option>
51
- <option value="index,follow">{#fullpage_dlg.meta_index_follow}</option>
52
- <option value="index,nofollow">{#fullpage_dlg.meta_index_nofollow}</option>
53
- <option value="noindex,follow">{#fullpage_dlg.meta_noindex_follow}</option>
54
- <option value="noindex,nofollow">{#fullpage_dlg.meta_noindex_nofollow}</option>
55
- </select>
56
- </td>
57
- </tr>
58
- </table>
59
- </fieldset>
60
-
61
- <fieldset>
62
- <legend>{#fullpage_dlg.langprops}</legend>
63
-
64
- <table border="0" cellpadding="4" cellspacing="0">
65
- <tr>
66
- <td class="column1"><label for="docencoding">{#fullpage_dlg.encoding}</label></td>
67
- <td>
68
- <select id="docencoding" name="docencoding">
69
- <option value="">{#not_set}</option>
70
- </select>
71
- </td>
72
- </tr>
73
- <tr>
74
- <td class="nowrap"><label for="doctype">{#fullpage_dlg.doctypes}</label>&nbsp;</td>
75
- <td>
76
- <select id="doctype" name="doctype">
77
- <option value="">{#not_set}</option>
78
- </select>
79
- </td>
80
- </tr>
81
- <tr>
82
- <td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>
83
- <td><input type="text" id="langcode" name="langcode" value="" /></td>
84
- </tr>
85
- <tr>
86
- <td class="column1"><label for="langdir">{#fullpage_dlg.langdir}</label></td>
87
- <td>
88
- <select id="langdir" name="langdir">
89
- <option value="">{#not_set}</option>
90
- <option value="ltr">{#fullpage_dlg.ltr}</option>
91
- <option value="rtl">{#fullpage_dlg.rtl}</option>
92
-