diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..60ed8a6e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,33 @@ +# Change Log + +Below you will find all the different changes that have been added since the first introduction of versioning for the bbUI toolkit. + +## Version 0.9.1 + +* First version number provided for the toolkit +* Modified menus to require both a caption and an image for PlayBook 2.x and BlackBerry 10 to follow UX guidelines +* Image List item text will now add an Ellipsis "..." to the end of text that is too long for the list item on devices that support it +* Merged the Inbox style list into the Image List control +* Removed the tall list layout... This will be merging into a feature of the Image List in a upcoming release +* Added sub title text to the image list control +* JS and CSS files now renamed to match the toolkit version +* Updated all the samples to show how to handle BB10 color themes while supporting non-BB10 devices at the same time +* New **manditory bb.int(options)** function to initialize the toolkit allowing for overrides of properties and events +* bb.onscreenready has now been removed and added as an option for the bb.init() function +* New header item support for the image list +* New grid view for BlackBerry 10 +* New action bar for BlackBerry 10 with dark and light themes. Support for back button, highlight tabs, and action buttons +* New highlight and accent colors for BlackBerry 10 +* New BlackBerry 10 button & pill button styling with dark and light themes +* New BlackBerry 10 swipe down menu styling +* New BlackBerry 10 Context Menu +* New BlackBerry 10 Press and hold Context Menu integration into Image Lists +* New BlackBerry 10 styled inputs with "delete" button and styled placeholder text +* Added screen and list coloring for BB10 with dark and light themes +* New **ondomready** event which fires after your screen has been loaded into the DOM +* Changed all of the isBB5/isBB6/etc functions to boolean properties. This avoids a scenario where these may evaluate to true simply because the function was assigned +* Sample: Added a fun random color changer for highlight and accent colors on BlackBerry 10 +* Sample: Added BlackBerry 10 grid +* Sample: Added BlackBerry 10 action bar +* Sample: Grouped items on main menu screen + \ No newline at end of file diff --git a/Jakefile b/Jakefile index a7b71bfb..cbf67efe 100644 --- a/Jakefile +++ b/Jakefile @@ -52,12 +52,12 @@ task('build', ['clean'], function () { }); output += "bb.assignBackHandler(bb.popScreen);"; - fs.writeFileSync(__dirname + "/pkg/bbUI.js", output); - fs.writeFileSync(__dirname + "/samples/bbUI.js", output); + fs.writeFileSync(__dirname + "/pkg/bbui-0.9.1.js", output); + fs.writeFileSync(__dirname + "/samples/bbui-0.9.1.js", output); css += include("src/bbUI.css"); - fs.writeFileSync(__dirname + "/pkg/bbUI.css", css); - fs.writeFileSync(__dirname + "/samples/bbUI.css", css); + fs.writeFileSync(__dirname + "/pkg/bbui-0.9.1.css", css); + fs.writeFileSync(__dirname + "/samples/bbui-0.9.1.css", css); console.log("Prepare ship for ludicrous speed!"); }); diff --git a/LICENSE b/LICENSE index 7b57bab2..6a6b0d43 100644 --- a/LICENSE +++ b/LICENSE @@ -1,15 +1,307 @@ -/* -* Copyright 2010-2012 Research In Motion Limited. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + ========================================================== + IScroll.js + ========================================================== + + Copyright (c) 2009-2010 Matteo Spinelli, http://cubiq.org/ + + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following + conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + ========================================================== + Plastique Icons + ========================================================== + + Plastique Icon Set by Iconify.it, LLC is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License. + + By downloading and using these files, you are agreeing to be bound by the + terms of the license corresponding to each package. If you do not agree to the terms of any of the enclosed licenses you must delete all copies of these files from your computer or computers. + + Additionally, please provide a credit line and link back to my site at: + + http://iconify.it + + I hope you find the files useful. If you would like to help support my work, you + can make a donation to my PayPal account - scott.catalyst@gmail.com + + Thank You, + Scott Lewis + Iconify.it, LLC + + + Creative Commons Attribution 3.0 Unported + http://creativecommons.org/licenses/by/3.0/legalcode + + THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + + BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + + 1. Definitions + + "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + + 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + to Distribute and Publicly Perform Adaptations. + For the avoidance of doubt: + + Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + + 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. + If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + 5. Representations, Warranties and Disclaimer + + UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + + 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 7. Termination + + This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + 8. Miscellaneous + + Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. + This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. + The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. + \ No newline at end of file diff --git a/README.md b/README.md index 705dc510..aab27cb8 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,17 @@ -![Image List](bbUI.js/raw/master/logos/bbUI_100x403.png) +![logo](bbUI.js/raw/master/logos/bbUI_100x403.png) + +_**Current version: 0.9.1 BETA**_ The goal of the bbUI toolkit is to provide a BlackBerry® look and feel for HTML5 applications using the [BlackBerry WebWorks](http://developer.blackberry.com/html5) framework. It provides common UI constructs that are found on the BlackBerry operating system so that you can create an application that follows the UI guidelines and looks at home on a BlackBerry with very little effort. -All changes can be found in the [Commit History](https://github.com/blackberry/bbUI.js/commits/master) for this repo. +All changes can be found in the [Commit History](https://github.com/blackberry/bbUI.js/commits/master) for this repo or in the [Change Log](bbUI.js/blob/master/CHANGELOG.md). _**NOTE: bbUI DropDowns on BB5/BB6/B7 require BlackBerry WebWorks SDK v2.3 for Smartphones or higher**_ -This toolkit is currently in an incubation stage and we're working on getting things up and going. Focus is on BB6/BB7 and then back-port for BB5. We'll also be adding some PlayBook look and feel +This toolkit is currently in an incubation stage and we're working on getting things up and going. Focus is on BB6/BB7/PlayBook/BB10 and then back-port for BB5. **Author(s)** @@ -19,8 +21,12 @@ This toolkit is currently in an incubation stage and we're working on getting th * [David Sosby](https://github.com/dsosby) follow me on Twitter [@ramdump](https://twitter.com/#!/ramdump) * [Rory Craig-Barnes](https://github.com/glasspear) follow me on Twitter [@roryboy](https://twitter.com/#!/roryboy) +Icons in "samples/images/icons" are [Plastique Icons by Scott Lewis](http://iconify.it/) under the [Creative Commons Attribution-Share Alike 3.0 Unported License](http://creativecommons.org/licenses/by-sa/3.0/legalcode) as +[specified here](http://www.iconfinder.com/browse/iconset/plastique-icons/#readme). + ## Tested On +* BlackBerry Dev Alpha * BlackBerry Torch 9860 v7.0.0.x * BlackBerry Curve 9360 v7.0.0.x * BlackBerry Bold 9700 v6.0.0.546 @@ -67,7 +73,7 @@ To properly use the functionality of bbUI in your application, you will need at -Additionally, if you use dropdowns in your application, you will need to include the additional feature: +Additionally, if you use dropdowns in your application, you will need to include the additional feature: @@ -75,66 +81,97 @@ For menus to work on Smartphones you will need to include the feature: -For menus to work on PlayBook you will need to include the feature: +For menus to work on PlayBook and BlackBerry 10 you will need to include the feature: -## Managing Screens +## Toolkit Initialization -the bbUI toolkit builds the application's UI in the most optimized fashion for the target operating system. It follows a methodology of -a single web page that has screens loaded into it as HTML fragments. Each screen is its own HTML fragment file. The toolkit then -uses AJAX to **push** and **pop** screens off of the stack. The toolkilt manages the screen stack and loading the content. This ensures -the best use of device memory. +To initialize bbUI you need to call the **bb.init()** function before you start loading UI elements into your application. **THIS IS MANDITORY** The bb.int() function takes one parameter which is a JSON +structure containing any of the options you wish to override. If you want to simply use the default configuration call the initialization function with no parameters _bb.init()_. -To open a new screen in an appliction using bbUI you simply call **bb.pushScreen('mypage.htm', 'mypagename')**. To close the top screen -you simply call **bb.popScreen()**. The toolkit is designed to use the [Application Event](http://developer.blackberry.com/html5/apis/blackberry.app.event.html) -WebWorks API so that it can trap the "back" hardware key and automatically handle popping the last screen off of the stack. +The default values of the options which can be overriden are: -If you want to override the back button handling, and substitute it with your own handler, you can simply call **bb.assignBackHandler(callback)** and your **callback** function will now -be invoked when the back button is clicked. It is then up to you to handle all back button navigation. + { + onbackkey: null, // Custom handler for back key on BlackBerry 5/6/7 smartphones + onscreenready: null, // Manipulate your screen before it's inserted into the DOM + ondomready: null, // Manipulate your screen after it's inserted into the DOM + bb10ActionBarDark: true, // If set to true, the action bar will use the dark theme + bb10ControlsDark: true, // If set to true, the controls will use the dark theme + bb10ListsDark: false, // If set to true, lists will use the dark theme (you need a dark background) + bb10ForPlayBook: false, // If set to true, PlayBook will be considered a BB10 device + bb10AccentColor: '#2D566F', // An accent color to be used for headers and other areas + bb10HighlightColor: '#00A8DF' // A highlight color to use when a user selects an item + } + +You can be notified when your screen, and all associated <script> tags, are loaded and ready for manipulation before styling is applied using the **onscreenready** event. The screen is still not +contained in the DOM of the page at this point, but can be manipulated to modify its contents before the bbUI styling is applied. This allows you to perform your data manipulation **before** the screen has +been displayed to the user and minimizes rendering engine layouts which are very expensive. + +You can also be notified when your screen, and all associated <script> tags, have been inserted into the DOM using the **ondomready** event. This allows you to perform your data manipulation **after** +the screen has been displayed to the user. + +To subscribe to this event simply assign a function to the **onscreenready** parameter of the init function. The function will be called with the DOM element of your screen, and +the id you have specified for that screen so that you can apply any screen specific changes. + +Since all of the script files for the specific screen are loaded before the **onscreenready** or **ondomready* events are fired, you can place all your screen specific logic in those files +and only have one **onscreenready** and **ondomready** global handler to act as the "traffic cop". + +The **getElementById()** function has been added to the element object that is passed into **onscreenready** and **ondomready* events so that you can manipulate the DOM of the element passed into the event. - - + + + -You can also be notified when your screen, and all associated <script>> tags, are loaded and ready for manipulation. The screen is still not contained in the DOM of the page -at this point, but can be manipulated to modify its contents before the bbUI styling is applied. This minimizes layouts which are very expensive. -To subscribe to this event simply assign a function to the **bb.onscreenready** event. You should make this subscription globally in your application and assign it only once. The -function will be called with the DOM element of your screen, and the id you have specified for that screen so that you can apply any screen specific changes. + + + + +## Managing Screens + +the bbUI toolkit builds the application's UI in the most optimized fashion for the target operating system. It follows a methodology of +a single web page that has screens loaded into it as HTML fragments. Each screen is its own HTML fragment file. The toolkit then +uses AJAX to **push** and **pop** screens off of the stack. The toolkilt manages the screen stack and loading the content. This ensures +the best use of device memory. + +To open a new screen in an appliction using bbUI you simply call **bb.pushScreen('mypage.htm', 'mypagename')**. To close the top screen +you simply call **bb.popScreen()**. The toolkit is designed to use the [Application Event](http://developer.blackberry.com/html5/apis/blackberry.app.event.html) +WebWorks API so that it can trap the "back" hardware key and automatically handle popping the last screen off of the stack. + +If you want to override the back button handling, and substitute it with your own handler, you can simply call **bb.assignBackHandler(callback)** and your **callback** function will now +be invoked when the back button is clicked. It is then up to you to handle all back button navigation. - - - + + -Since all of the script files for the specific screen are loaded before the **onscreenready** event is fired, you can place all your screen specific logic in those files -and only have one **onscreenready** global handler to act as the "traffic cop". - -The **getElementById()** function has been added to the element object that is passed into **onscreenready** so that you can manipulate the DOM of the element before it is inserted -into the document. ## Defining a Screen @@ -142,24 +179,26 @@ Creating a screen to be used with bbUI is as simple as creating an HTML file and is simply a <div> with an attribute **data-bb-type="screen"**. You then place all the contents for your screen inside this <div>. A display effect can also be declared on your screen. Currently only **data-bb-effect="fade"** is supported. This will fade in your screen when it displays. This is -supported both on BB6 & BB7. However, if your screen has <input> controls on it and you declare the "fade" effect, BB6 will not fade in the page. This -has been disabled on purpose in bbUI because the fade effect doesn't perform well on BB6 when input controls are on the screen. +supported both on BB7 and up. This has been disabled on purpose in bbUI because the fade effect doesn't perform well on devices below BB7. You can also create a nested **data-bb-type="title"** <div> in your screen to declare a title bar. If defined, a standard black screen title bar will appear showing the declared text. The **data-bb-caption** attribute defines the text to show in this title area. +_NOTE: Title bars are not available for BlackBerry 10 yet for bbUI_ +
You can also add a **back** button to your title bar that will **ONLY** appear when you display your content on a PlayBook. To define a back button in your title bar, add the caption of your back button to the -**data-bb-back-caption** attribute. +**data-bb-back-caption** attribute. When running on BlackBerry 10, if you provide a back button in your title bar it will automatically create an action bar with a back button on it "if" there are no tabs on your action +bar.
This will appear as the standard back button in your UI as seen below: -![Image List](bbUI.js/raw/master/screenshots/backBtn.png) +![Back Button](bbUI.js/raw/master/screenshots/backBtn.png) ## Screen Scrolling Effects @@ -229,53 +268,213 @@ You can also use in-line script tags with your screen. The bbUI framework will l + +## BlackBerry 10 Grid Layouts + +Grid layouts allow you to present your information in a graphical and cinematic way. **Grid layouts are currently only supported on PlayBook and BB10 devices**. + +![Grid Layout](bbUI.js/raw/master/screenshots/grid.png) + +If you have multiple images to show you can arrange them in groups and rows. A grouping of information can have a header title which will be the color provided by the **bb10AccentColor** property +used in the **bb.init()** function. Highlights of items will use the **bb10HighlightColor**. + +Each group has one or more rows. Each row can have up to 3 items. Currently the layout assumes that images are a 16:9 aspect ratio. For example if a row has only one item in it, it's width will be the full width of +the size of the grid. A row with 2 items will be 1/6, and 3 items will be 1/9 the height of the screen. All images are currently set to be stretched to the size of their container. + +Every item in the grid has an image, a title and a sub-title which is provided as the contents of the <div>. Each item can also provide an **onclick** handler for when the user +selects the item. + +
+
+
+
World
+
+
+
World
+
World
+
+
+
+
+
World
+
World
+
World
+
+
+
+ + +## BlackBerry 10 Action Bar + +The BlackBerry 10 action bar allow for a combination of buttons and tabs. **Action Bars are currently only supported on PlayBook and BB10 devices**. It is essentially a toolbar that appears at the bottom of the screen +allowing for scrolling content above it. + +![Action Bar](bbUI.js/raw/master/screenshots/actionBar.png) + +If you have a title bar with a back button specified for PlayBook, and an action bar is not already specified for your screen, an action bar will be created with a back button as long as you don't already have an +action bar defined with tabs. Action bars allow you to both navigate back to the previous screen but also provide tabs and/or buttons for your user. + +_NOTE: Combining a back button and tabs on an action bar is not allowed_ + +If you provide a **data-bb-back-caption** attribute on the action bar, a back button will automatically be created. If +you are using tabs on your screen, you can specify their tab styles using the **data-bb-tab-style** attribute. Currently only "highlight" is supported. Each item on the bar is defined as a **data-bb-type="action"** and its +type is defined by the **data-bb-style** attribute which can either be a "tab" or a "button". Tabs automatically handle the highlighting of the selected tab. it is recommended that you group your tabs and buttons together +to provide a clean user interface. + +You can handle the selection of the action by assigning an **onclick** event handler. + +The color style of the action bar is either a dark or light theme. This is applied using the **bb10ActionBarDark** property in the **bb.int()** function. Simply set bb10ActionBarDark to true/false to have the dark or light theme. This +theme will be carried over for the entire application to ensure a consistent look and feel. + +
+
Library
+
Smart
+
Find
+
+ +### Action Item Image Sizes + +Images used for Actions will be scaled to the following resolutions and centered on the action bar items. + +* BlackBerry PlayBook - 40 x 40 pixels +* BlackBerry 10 - 80 x 80 pixels + +### Action Overflow Menu + +If there are more than 5 total actions that are added to the action bar (including the back button) an overflow action menu will be created on the far right of the action bar. This button will trigger a slide in overflow menu +that will contain the remaining items that were defined on the action bar. + ## Loading Screen Specific Menus -bbUI handles loading of screen specific menus on both PlayBook and Smartphones with the same code. Each screen must have a menu defined if you want it displayed. Clean-up occurs on bb.popScreen and bb.pushScreen. - -**Smartphone** - -![Image List](bbUI.js/raw/master/screenshots/menuBar-phone.png) - -**PlayBook** - -![Image List](bbUI.js/raw/master/screenshots/menuBar-playbook.png) - - -Creating a menu is straight forward. Start by creating a <div> that has the attribute **data-bb-type=“menu”**. Each item in the menu is another <div> that has the attribute **data-bb-type=“menu-item”**. For a menu item to appear on the PlayBook it must have at least one of: an image (data-bb-img) or a caption (data-bb-caption). The on a Smartphone it must have a caption (data-bb-caption). For an icon only menu item that will be used on both Smartphone and PlayBook add **data-bb-icon-only="true"** to all menu items to have the caption left off on the PlayBook. In both cases the *onclick()* event is the function that will fire when the menu item is selected. +bbUI handles loading of screen specific menus on both PlayBook, BlackBerry 10 and Smartphones with the same code. Each screen must have a menu defined if you want it displayed. Clean-up occurs on bb.popScreen and bb.pushScreen. + +**Smartphone** + +![Menu Phone](bbUI.js/raw/master/screenshots/menuBar-phone.png) + +**PlayBook** + +![Menu PlayBook](bbUI.js/raw/master/screenshots/menuBar-playbook.png) + +Creating a menu is straight forward. Start by creating a <div> that has the attribute **data-bb-type="menu"**. Each item in the menu is another <div> that has the attribute **data-bb-type="menu-item"**. For a menu item +to appear on PlayBook 2.x or BlackBerry 10 it must have **both** an image (data-bb-img) and a caption (data-bb-caption) or it will be ignored. The on a Smartphone it must have a caption (data-bb-caption). In both cases the _onclick()_ event is the function +that will fire when the menu item is selected. On BlackBerry 5/6/7 smartphones you can add the attribute **data-bb-selected="true"** which makes that the default item when the menu is displayed. + +There is an additional type of item you can use **data-bb-type="menu-separator"** which creates a menu separator on PlayBook 2.x and BlackBerry 5/6/7 smartphones. + +_NOTE: BlackBerry 10 will ignore separators and will only allow a maximum of 5 menu items_
-
-
-
+
Foo
+
Bar
+
FooBar
-
+
BarFoo
-There is an additional type of item you can use **data-bb-type="menu-separator"** which creates a menu separator. +### PlayBook and BlackBerry 10 menu image sizes + +When styling is applied to menus on **BlackBerry 10** the images used for menus will be scaled to the following resolutions and centered on the menu items. + +* BlackBerry PlayBook - 40 x 40 pixels +* BlackBerry 10 - 80 x 80 pixels + +When styling is applied to menus on PlayBook 2.x with BlackBerry 10 styling turned off images will be scaled to the following resolutions and centered on the menu items. + +* BlackBerry PlayBook 2.x - 65 x 65 pixels + + +## BlackBerry 10 Context Menu + +BlackBerry 10 allows for a press and hold context menu that is very similar to the action bar overflow menu. If you add one of these menus to your screen you can also automatically +wire up your image lists to the control. _**NOTE: You can only have one context menu on a screen**_ + +When wired to an image list, pressing and holding on the image list item will "peek" the context menu and passing it the selected element. Peeking the +context menu will show the row of action icons that can be clicked and part of the context information in the header of the menu. + +When the user swipes from right to left it will pull the full menu into view if they want to see the text labels for all the items. + +Markup for the context menu looks a lot like the action bar markup. You are able to create a **data-bb-type="context-menu"** that has a series of **data-bb-type="action"** elements. An action item consists +of an image and text. To react to the clicking of an action simply assign an **onclick** handler to the action element. + +
+
Email Work
+
Invite to Meeting
+
Call Work
+
View details
+
Delete
+
+ + +### Interacting with the context menu from JavaScript + +![Context Menu](bbUI.js/raw/master/screenshots/contextMenu.png) + +Each context menu has the ability to be both **peeked** and **shown** using JavaScript. These methods are called with a parameter that contains a title, description and selected DOM element. + +To **peek** the icons on the context menu use the following code: + + var context = document.getElementById('mycontextmenu'); + context.menu.peek({title:'My Title', description: 'My Description', selected: mySelectedDOMElement}); + +To **show** the full context menu use the following code: + + var context = document.getElementById('mycontextmenu'); + context.menu.show({title:'My Title', description: 'My Description', selected: mySelectedDOMElement}); + +To grab the item that was selected from within your **onclick** of an action item. This selected object is the one that was passed into the peek or show functions. You can refer to the **selected** property of the menu like in the following code: + + function myclick() { + var selectedItem, + context = document.getElementById('mycontextmenu'); + selectedItem = context.menu.selected; + if (selectedItem) { + //... do something + } + } + + +### Image Sizes + +Images for actions on the context menu will be scaled the same as the action bar. + +* BlackBerry PlayBook - 40 x 40 pixels +* BlackBerry 10 - 80 x 80 pixels -Also on Smartphones you can add the attribute **data-bb-selected="true"** which makes that the default item when the menu is displayed. ## Image Lists Image lists give the user different options that they can choose. This user interface can seen in the BlackBerry options area. -![Image List](bbUI.js/raw/master/screenshots/imageList.png) +![Image List](bbUI.js/raw/master/screenshots/imageList.png) ![Image List](bbUI.js/raw/master/screenshots/inboxList.png) Creating an image list is really simple and begins with creating a <div> that has the attribute **data-bb-type="image-list"**. Each item in the list is another -<div> that has the attribute **data-bb-type="item"**. Each item has an image (**data-bb-img**), a title (**data-bb-title**), and a description which is the inner contents -of the <div>. +<div> that has the attribute **data-bb-type="item"**. Each item has an image (**data-bb-img**), a title (**data-bb-title**), accent text that floats in the top right (**data-bb-accent-text**), and a description which is the inner contents +of the <div>. An image list can have both headers and line items. A header is declared by creating a <div> with a **data-bb-type="header"** attribute and the contents of the header are displayed as the label. +Headers have their text centered by default. To left justify your header text add the **data-bb-justify="left"** or to right justify your text add the **data-bb-justify="right"**attribute to your header. + +### Image Sizes + +* BlackBerry 5 & 6 - 60 x 60 pixels +* BlackBerry PlayBook & BlackBerry 7 - 70 x 70 pixels +* BlackBerry PlayBook with BB10 styling - 64 x 64 pixels +* BlackBerry 10 - 119 x 119 pixels + + +If you want to attach a BlackBerry 10 context menu to your image list you can add the **data-bb-context="true"** attribute. This will automatically hook up your image list to the +press and hold context menu that you have declared for the screen. When the image list item is pressed and held for 667ms it will **peek** the screen's context menu passing the +title and description of the list item along with a handle to the item element. See the Context Menu area for mor details of interacting with the menu. -On High-Resolution screens, the image size is 48x48 pixels. On a low resolution screen it is sized down to 32x32 pixels. So it is best to create your image artwork at -the 48x48 pixel size since downscaling typically looks better than stretching. +**NOTE: The context menu integration with the image list only works on BlackBerry 10**
-
+
+
My sample header
Use native looking input controls
Style your list like the BlackBerry Inbox
Create native looking options screens
-
Add some height to your list items
+
Look at me
Generate a chat window like BBM
Use pill buttons to organize your data
Add charts to your application
@@ -380,6 +579,8 @@ selected item when the control first shows you can can use the **selected="true"
+ +BlackBerry 10 has an additional feature where you can specify a **data-bb-label="my label"** to have the label text appear in the dropdown control. To select an item in a dropdown from JavaScript you can use the **setSelectedItem()** function that has been added to the <select> object. In many browsers, the **onchange** event is not fired on a <select> if the value is set from JavaScript. Only if it is set from the interaction with the UI. Because of this bbUI cannot listen to the change made @@ -419,31 +620,6 @@ Much like the Image List, the Arrow list is a <div> that has the attribute
-## Inbox Style Lists - -The Inbox Sytle List is pretty self explainatory. It provides the ability to create a list much like that of the email application -found on a BlackBerry Smartphone. - -![Control Panel](bbUI.js/raw/master/screenshots/inboxList.png) - -The inbox list is again a <div> with an **data-bb-type="inbox-list"** attribute. An inbox list can have both headers and line items. A header -is declared by creating a <div> with a **data-bb-type="header"** attribute and the contents of the header are displayed as the label. - -Each line item is created with a **data-bb-type="item"** attribute and has values for an image to be displayed (**data-bb-img**), a title (**data-bb-title**), a -time (**data-bb-time**) and the inner contents of the <div> are displayed as the description. - -The line item image is displayed as a 32x32 pixel image on a High-Resolution screen. - -
-
-
Thu 27 May 2010
-
My car just broke down
-
Need to pick up Milk
-
Thu 28 May 2010
-
Where do I find the new Document
-
-
- ## BBM Bubbles The BBM Bubbles UI format allows you to create chat bubbles that look like the ones in BBM. This is a great option for any BBM connected application. @@ -471,32 +647,6 @@ image to appear beside the line item by using the **data-bb-img** attribute. The - -## Tall Lists - -Tall lists are similar to those that you would find in the BlackBerry Twitter® and Facebook® applications. - -![Control Panel](bbUI.js/raw/master/screenshots/tallList.png) - -Tall lists are a <div> with a **data-bb-type="tall-list"** attribute. Each line item is a <div> with an **data-bb-type="item"** attribute which allows for -a display image (**data-bb-img**), a title (**data-bb-title**), a time (**data-bb-time**) and the inner contents of the <div> are the description that appears. - -
- -
-
My car just broke down and I have one million things to do!!
-
Need to pick up Milk. Add one more thing to the "Honey Do" list!
-
Time for some BBQ Ribs!!
-
Has anyone seen a good movie lately? We're looking for something to do this weekend and I figured a movie would be good
-
Yes, I do Love BlackBerry! Check out BlackBerry App World
-
Blogging for BlackBerry is a ton of fun.
-
Gotta love BlackBerry WebWorks!
-
-
## Pill Buttons diff --git a/pkg/bbui-0.9.1.css b/pkg/bbui-0.9.1.css new file mode 100644 index 00000000..7b9a1475 --- /dev/null +++ b/pkg/bbui-0.9.1.css @@ -0,0 +1,3073 @@ +/* +* Copyright 2010-2011 Research In Motion Limited. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +body, html { + padding:0; + margin:0; + font-family: Slate,Myriad Pro,BBAlpha Sans; + font-size: 12pt; + overflow:visible; + /*background-color:#DDDDDD;*/ + user-select: none; + -webkit-user-select: none; +} + +@-webkit-keyframes bbUI-fade-in { 0% { opacity: 0; } 100% { opacity: 1; } } + +::-webkit-scrollbar { + width: 0px; + height: 0px; +} + +.bb-hires-screen { + font-size: 16pt; +} + +.bb-bb10-hires-screen { + font-size: 30pt; +} + +.bb-bb10-background-dark +{ + background-color: #121212; +} + +/* ================================================= + PlayBook Swipe Menu + =================================================*/ +.pb-menu-bar { + font-family: "Myriad Pro", sans serif; + position: fixed; + left: 0px; + width: 100%; + clear: both; + margin: 0; + padding: 0; + line-height: 1; + border: 0; + font-size: 100%; + background: #181818; + border-bottom: solid #626262 1px; + box-shadow: 0px 2px 2px #888; + color: white; + z-index:1002; + height: 100px; + top: -104px; +} + +.pb-menu-bar ul { + float: right; + list-style: none; + margin: 0; + padding-left: 15px; + border: 0; + position: relative; + border-left: solid #626262 1px; +} + +.pb-menu-bar ul li { + margin: 0 2px 0 2px; + border: 0; + cursor: pointer; + text-align: center; + float: left; + font-size: 16pt; + padding-right: 15px; +} + +.pb-menu-bar img +{ + height: 65px; + width: 65px; +} + +.pb-menu-bar-caption +{ + padding-top: 10px; + +} + +/* ================================================= + BB10 Swipe Menu + =================================================*/ +.bb-bb10-menu-bar-lowres { + position: fixed; + left: 0px; + width: 100%; + clear: both; + margin: 0; + padding: 0; + border: 0; + top: -103px; + font-size: 100%; + z-index:1002; + height: 100px; + border-bottom-style: solid; + border-bottom-width: 1px; +} + +.bb-bb10-menu-bar-hires { + position: fixed; + left: 0px; + width: 100%; + clear: both; + margin: 0; + padding: 0; + border: 0; + top: -143px; + font-size: 100%; + z-index:1002; + height: 140px; + border-bottom-style: solid; + border-bottom-width: 2px; +} + +.bb-bb10-menu-bar-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#323232), to(#272727)); + border-bottom-color: #626262; + color: white; +} + +.bb-bb10-menu-bar-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#FAFAFA), to(#E0E0E0)); + border-bottom-color: #CFCFCF; + color: black; +} + +.bb-bb10-menu-bar-item-lowres +{ + text-align: center; + cursor: pointer; + float: left; + height: 88px; +} + +.bb-bb10-menu-bar-item-hires +{ + text-align: center; + cursor: pointer; + float: left; + height: 88px; +} + +.bb-bb10-menu-bar-item-lowres img +{ + height: 40px; + width: 40px; + margin-top: 15px; +} + +.bb-bb10-menu-bar-item-hires img +{ + height: 80px; + width: 80px; + margin-top: 10px; +} + +.bb-bb10-menu-bar-item-caption-lowres +{ + font-size: 16pt; + padding-top: 10px; +} + +.bb-bb10-menu-bar-item-caption-hires +{ + font-size: 20pt; + padding-top: 10px; +} + + +/* ================================================= + BB7 Screen Title + =================================================*/ +.bb-hires-screen-title { + position:absolute; + top:0px; + left:0px; + right:0px; + background-color:black; + color:white; + padding:4px; + height: 25px; + z-index: 100; +} + +.bb-lowres-screen-title { + position:absolute; + top:0px; + left:0px; + right:0px; + background-color:black; + color:white; + padding:4px; + height: 20px; +} + +/* ================================================= + BB7 Input Box + =================================================*/ + +.bb-bb7-input { + border-radius:5px; + border-width: 1px; + border-style: solid; + border-color: #C6C6C6; + height:41px; + background-color:#FAFAFA; + width: 100%; +} + +.bb-bb7-input-hires { + height:41px; +} + +.bb-bb7-input-lowres { + height:33px; +} + +/* ================================================= + BB7 Input Box + =================================================*/ + +.bb-bb10-input { + color: black; + border-style: solid; + background-color:#F9F9F9; + width: 100%; + border-top-color: #ACACAC; + border-left-color: #BEBEBE; + border-right-color: #BDBDBD; + border-bottom-color:#C7C7C7; +} + +.bb-bb10-input::-webkit-input-placeholder +{ + color:#4A4A4A; + font-style:italic; +} + +.bb-bb10-input-focused +{ + color: black; + border-style: solid; + background-color:#F9F9F9; + width: 100%; + background-repeat: no-repeat; + background-position: center right; +} + +.bb-bb10-input-focused-hires +{ + border-width: 4px; + background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAVCAYAAAAuJkyQAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFRALG07YxM4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADbUlEQVRIx7WW3VNTRxjGnz1n94Qkaq/ITbXXRUJiPk4I6LQD4bOUJgW1OozTv64EPUCohnw3IR9EFBNwnPZvsBdt5apy9uS8vejoDNNAhYTnaq92frv7e59ZVqlUCQDC4SDTNA0XiWmaaLcPyCZCRNcZ5youGl6t1/H27e84Ojqi2NQk04Q4N0y5skO5fBEezyBCwSB6AVKmYjFYto1soYByZYdM0zwXTLVWp2y+CGlZiE1OQAiOXqL4fV7246MVKIqKTDaPnWqNTCk/CabWaFA6kwUAPFpZQeCWnymK0huQpmkI+H3s4YMfoCgqtp6mUd9tkjwDSkqJ5t4LSv2chqKoePjgPkJB/4UdPAEEAEIIhAJ+dv/u93AMDGB9I4WXr1pdoaSUeNVq0xNjE5qmYXkpgXAwwMQ53TtV6o8LzqGHQ8zq2PQsvY3kmgGFMQoFAx9PLqVE++CQVpMGXC4Xvl2Yx6geZpxz9CsndhJCYGxUZ0RE2Wweq2sGAFAoGGCMMbQPDumn5GO43E7Mz81gPBrp2810BfoANR6NMLJtyhdKSK4ZIJtIURWsJg243C7Mzczg9tho32EAgB0fH58iroXm8z3K5Yv4+/17MMbgcDgwNzuNO+PRvj7Tf6TuFiH+derGFzdgE0FaHVy//jki4dClwZwJJKXEfqtFf/z5DoODg/B4PPjr3RH2W60zK+FSgExTolbfpWJpBx27g4X5WSQWv4Ft2ygUK6jWGpcGxbs1cL3RpEKpDFVVEV/4Dt7hIcYYg002PTFSKJTKICL6+qs7fSnDU2/INCV2m3uUK5bAFAXLS3F4h4eYEAKcc9wc+pLdu5uAqnLkS2XU/qfRewKSUuLFy31KZ3JQVY7lpTh83uETo60JAe/NIXZvOQHBObYzOTSf7/UVSvkw4u2D15TaegZNcyC+uICAb6Rrzwgh4BsZZon4IpwDTmw93UarfUhSWv1xSEqJw9dvyFjfhNPlwvzsFMKhwJmjzTlHMOBnnY5FmWwBxnoKjDEK3PL17BR/8+tv9NjYgNPtxsz0BCJ6mIlP6BnBOfRQkJFNlC/9AmNjEypXKdjjF0Sp1Ru4evUKZqcmENX1c/0YhRCI6CE2HZvEtc+uobHbhGX19nT89tgYVFWBb8R7oQYWQiA6qrMrbhdZVgeqqvYE9A8Ey3jZunas2AAAAABJRU5ErkJggg=="); +} + +.bb-bb10-input-focused-lowres +{ + border-width: 4px; + background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAANCAYAAACtpZ5jAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFREGHoreJDsAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACIklEQVQ4y2NctXrtf14eHm9PT/dtDHjA4SNHFZ49e36fiZmJPTQ46BcDAcD05+9fho1btmzdt/9A+ObNWzEUbN2+nYGBgYFh/4GD969cvcYgLibGQAxg8fX1Evzx4+f7bdt3rggLD+FnYGCYBZPcf/AQo5SUpFJHd+8dRgYGhqiIKGcVFYVfxBjMdP78pQ9JCbGMCooKDIuXLJ956PARY5ikg50ty969+++8ffeewd3N1eTJs8f7GUgB+/YfYPjw6TPXwsXL/heWVPy/dv16zP///5nbOrv/N7d1/D9y7IQGA4mAEcbYtWcfo5a6GueGTVu+vn37jkFWVobhybNnDN4enmGv375e7eHmQp7ByKCmvvn/m7fvGDQ11PTyczIvM5AB4AZv276TUUtTnXPLtp1f//z7xyAtJcVw585dBkc767DXb9+t9vX2JMlgJgYGBobde/YxmJuacO47cOjry1evGHw83GNDAv1YuLm4GHbu2beKl4+X5DBmOHT4KAMDAwPDpCnT/1fXN/0/fuo0PFX8//+fdeGipf9LKqr+nz5zxvjgoSOMRLtYX1dXYP6Cxf/fvfvAEB4akm5pZnoWJnni5Kk/9g52KkoKigwHDh45IyUl6Ui0wbv27n1/4/YdBg9P54hXL1/OQpa0tDD/f//+vbtZGamMrGxsDCtXr9l79PgJNqJM3rR56/8jR456EVJ37sIlhc1btv3ftHkrUQYDAIiA4Za6H4vLAAAAAElFTkSuQmCC"); +} + +.bb-bb10-input-hires { + height:79px; + border-radius:4px; + border-width: 2px; + font-size: 27pt; +} + +.bb-bb10-input-lowres { + height:45px; + border-radius:4px; + border-width: 1px; + font-size: 16pt; +} + + + +/* ================================================= + BB7 Round panels + =================================================*/ +.bb-playbook-round-panel { + border-radius:3px; + border-width: 1px; + border-style: solid; + border-color: #C6C6C6; + box-shadow:1px 0px 2px #D7D7D7; + background-color: white; + margin-left: 5px; + margin-right: 5px; + margin-bottom: 3px; + margin-top: 3px; + padding: 5px; +} + +/* ================================================= + BB10 Round panels + =================================================*/ +.bb-bb10-round-panel-lowres { + border-radius:5px; + border-width: 1px; + border-style: solid; + margin-left: 5px; + margin-right: 5px; + margin-bottom: 3px; + margin-top: 3px; + padding: 5px; +} + +.bb-bb10-round-panel-hires { + border-radius:10px; + border-width: 2px; + border-style: solid; + margin-left: 10px; + margin-right: 10px; + margin-bottom: 8px; + margin-top: 8px; + padding: 10px; +} + +.bb-bb10-round-panel-light { + border-color: #C6C6C6; + color: Black; + background-color: white; +} + +.bb-bb10-panel-header-lowres +{ + padding-top:5px; + margin-bottom: 5px; + padding-bottom: 3px; + font-size: 14pt; + font-weight: bold; +} + +.bb-bb10-panel-header-hires +{ + padding-top:10px; + margin-bottom: 10px; + padding-bottom: 6px; + font-size: 24pt; + font-weight: bold; +} + +.bb-bb10-panel-header-lowres-light { + border-bottom: solid 1px #DCDBDB; + color: #7C7E80; +} + +.bb-bb10-panel-header-hires-light { + border-bottom: solid 2px #DCDBDB; + color: #7C7E80; +} + + +/* ================================================= + BB7 Buttons + =================================================*/ + +.bb-bb7-button { + border-width:1px; + border-color:#BCBEC2; + border-style: solid; + color: black; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 15px; + padding-right: 15px; + display: table-cell; + border-radius:5px; + box-shadow:1px 1px 1px #DCDCDC; + background-clip: padding-box; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#D0D2D4)); +} + +.bb-bb7-button-disabled { + border-width:1px; + border-color:#BDBEBD; + border-style: solid; + color: #636563; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 15px; + padding-right: 15px; + display: table-cell; + border-radius:5px; + background-color: #BDBEBD; +} + +.bb-bb7-button-hires { + line-height:54px; + height:54px; +} + +.bb-bb7-button-lowres { + line-height:40px; + height:40px; +} + +.bb-bb7-button-highlight{ + border-width:1px; + border-color:#0060E6; + border-style: solid; + color: White; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 15px; + padding-right: 15px; + display: table-cell; + border-radius:5px; + box-shadow:2px 2px 2px #DCDCDC; + background-clip: padding-box; + background-image: -webkit-gradient(linear, center top, center bottom, from(#098CEE), to(#1766DB)); +} + +.button-stretch{ + display:block; +} + +/* ================================================= + BB10 Buttons + =================================================*/ + +.bb-bb10-button-container-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#BDBDBD), to(#D4D4D4)); + color: black; + border-top-color: #A3A3A3; + border-bottom-color: #CECECE; + border-left-color: #C3C3C3; + border-right-color: #C4C4C4; +} + +.bb-bb10-button-container-dark +{ + background-color: #0B0B0B; + color: white; + border-color: #333333; +} + +.bb-bb10-button-container-hires +{ + border-width:4px; + border-style: solid; + border-radius:10px; + padding: 2px; + margin: 20px; +} + +.bb-bb10-button-container-lowres +{ + border-width:2px; + border-style: solid; + border-radius:4px; + padding: 1px; + margin: 16px; +} + +.bb-bb10-button { + border-style: solid; + text-align:center; + white-space:nowrap; + vertical-align: middle; + display: block; + background-clip: padding-box; +} + +.bb-bb10-button-light { + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DDDDDD)); +} + +.bb-bb10-button-dark { + border-color:#5C5C5C; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#262626)); +} + +.bb-bb10-button-disabled-dark { + border-color:#262626; + background-color: #262626; + color: #666666; + +} + +.bb-bb10-button-disabled-light { + border-color: #D4D4D4; + background-color: #C1C1C1; + color: #838383; +} + +.bb-bb10-button-hires { + border-width:1px; + border-radius:5px; + line-height:75px; + height:75px; + padding-top:12px; + padding-left: 35px; + padding-right: 35px; + font-size:28pt; +} + +.bb-bb10-button-lowres { + border-width:1px; + border-radius:2px; + line-height:46px; + height:46px; + padding-top:5px; + padding-left: 15px; + padding-right: 15px; + font-size:16pt; +} + + +.bb-bb10-button-stretch{ + display:block; +} + +/* ================================================= + PlayBook Title Bar + =================================================*/ +.pb-title-bar { + height:54px; + border-bottom:solid #626262 1px; + position:absolute; + top:0px; + left:0px; + right:0px; + background-color:#181818; + text-align:center; + color:#626262; + line-height:54px; + font-size: 14pt; + z-index:1000; +} + +.pb-title-bar-back { + position: absolute; + border:solid black 1px; + top:8px; + left:11px; + height:37px; + line-height:35px; + font-size: 14pt; + box-shadow: 0px 2px 0px #2E2E2E; + border-radius:4px; + color:white; + z-index:1001; +} + +.pb-title-bar-back-inner { + border-top: 2px solid #2E2E2E; + padding-left:35px; + padding-right:12px; + padding-top: 3px; + border-radius:4px; + background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAARCAYAAADpPU2iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sMCQ4AGWIgYQ0AAAE0SURBVCjPhZI9joJQEIAnewXPY+FVLIwxFsbeRRC5gCYGGwtvY28wUplYgQYiiuLL49tiw2Z3FZhpZjLzzV9GkGq1LIv5fE7h1yafTifu9zuWZYEgH1IixqdBr9eTRqMhcRxLlmXfgXeVbdsmjmMAjscjjuOUj2QYBtfrFa01YRgyGo34Hf+TbJomURQBcD6fGY/H/C/4Y0ynU5IkQWv9MsYLYNs2l8uF5/NJFEWYpknZ5aTVahEEAUoptNZsNhuqTi0IslqteDwe5HnOfr+n2+1SCSDIbDYjz3MAdrsd/X6fSgBBXNclTVO01vi+T7vdphJAkOVyCYBSisPhQKfToRIoOt1uNwC22y2DwaD++RaLBWmaAuB5HsPhkNpvdV2XLMtQSjGZTOqBYqf1ek2z2QRBvgC36+O26W6RWQAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: 13px 8px; +} + +/* ================================================= + BB10 DropDown Buttons + =================================================*/ + +.bb-bb10-dropdown-container-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#C0C0C0), to(#D9D9D9)); + color: black; + border-top-color: #B2B2B2; + border-bottom-color: #B2B2B2; + border-left-color: #BFBEBF; + border-right-color: #BFBFBF; + margin:20px; +} + +.bb-bb10-dropdown-container-dark +{ + color: white; + border-top-color: #232323; + border-left-color: #2A2A2A; + border-right-color: #292929; + border-bottom-color: #5A5A5A; + background-image: -webkit-gradient(linear, center top, center bottom, from(#050505), to(#161616)); + margin:20px; +} + +.bb-bb10-dropdown-container-inner-dark +{ + border-color: #070707; +} + +.bb-bb10-dropdown-container-inner-light +{ + border-color: #CECECE; +} + +.bb-bb10-dropdown-items +{ + margin-top: 5px; +} + +.bb-bb10-dropdown-item-lowres +{ + height: 53px; + line-height: 60px; + border-bottom-width: 1px; + border-bottom-style: solid; + font-size: 16pt; + padding-left: 10px; + padding-right: 10px; + vertical-align: center; +} + +.bb-bb10-dropdown-item-hires +{ + height: 97px; + line-height: 97px; + border-bottom-width: 2px; + border-bottom-style: solid; + font-size: 28pt; + padding-left: 10px; + padding-right: 10px; + vertical-align: center; +} + +.bb-bb10-dropdown-selected-image-lowres-dark +{ + float:right; + height:20px; + width:20px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhInKjcG1NoAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACr0lEQVQ4y82UMUgbYRTH/9cLmhKxadImUKlYIWigxJwSCMahkiHgnG6uXRJE5wSCUQyVDoKIi+jqIAgOQveAa0iRkCqECxjuLn53R2hMuORyr5OWYlrQFto3Pd73+L3H9/78gf8tEokEACAQCPw9aCAQmLnN+ccApqenIUkSnE7nSCaTOV5YWPg4Pz8fIaL8nyzmXltbqzHGyDAMuri4oO3t7eiThxCCwSAAwOl0jmaz2S9LS0uvHA4H9Xo9dLtdtFqtR202nMvlviqKQs1m02o2m6RpmpXNZqVwODz6UBifTqd1WZap0WhYjUaDGGNWMpkkAPa7rqGhobtcEIS+JI/H83xjY6NUr9dJ13VL0zS6urqi1dVV6RYWDoeBaDR6x/X5fJ8AYG5u7h4wnU7LoigSY4wYY6Sqam9lZUXz+/1uAAiFQj+aY7HYyf7+Pp2cnFA8Hm96vd6nt28ul+tZKpWSJUmy6vU6KYpCoihSKpVqAnDcmxyJRF7s7u5WVFUlxphVLBYpkUhUXS7XJACsr68XLy8vSZZlkiSJarWalclkSmNjY6/7fZFNlmVD0zRmmuYbwzA4t9uNZDI52m63j71e7/Di4uKIzWZDt9sFANrZ2cHm5uY7AHUAKBQKP19N1/UOY+xbp9OJC4JAvV4PdrsdgiC8DIVCw4ODg0REnGEYODg4KOdyubcA6lNTU1AU5b4MYrEYzs7OzlVV/dzpdD4IgsCZpomBgQGO53kQEcfzvLW3t9c6PDwM67ouBYNBFIvFX4vL4/EAACYmJt5vbW1Z1WqVKpWKValUqFwu0/Lystb3AP2ECgA3NzcAAFVVS6IolkzTfD8+Ps61220cHR1Jp6en/uvr68atKfwuuH7FmZmZidnZWR/Hcd18Pn9eKBRqj7aQycnJftL6dw7+He+cXXbTjGkZAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:15px; +} + +.bb-bb10-dropdown-selected-image-hires-dark +{ + float:right; + height:38px; + width:38px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ4K4nWlmAAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADuElEQVRYw+3YO08qWxgG4HcNxFEBZWaIaGDCzQItxRhpjMolsfEW8PIH/B37dOcvuAs7vMTCGGNlAQhojLUSY6zETIE5RuQmKus0QhjALdsNugu/ZKo1mXnyfmutrBlisVjwNxaDv7S+Yd+wZpRSqYQgCP8aDAaq0WjkY1+F4jjO7XA4DhwOBzQaDSRJorFYDGdnZ+Tp6elrYDzPr3i93lWfzwe73Q6FQoFcLgeLxYK1tTV6fn5OmK9CLS8vY2BgAAqFAgDQ0dEBp9OJoaGhz28lz/MrHo9ndWlpCTabDYQQUErL411dXeju7v5c2HsoAJAkCZIkfR6shFpcXHwTlUqlEA6HcXp6+jkwnudXXC7X6sLCAmw2GwCgWCyWxwkhSKVSCIVC2NnZQSKRIC2HcRzndrvdq36/H1arFQBqknp4eEAoFEIgEEA8HielcWWLUQd+v//N9qXTaYTD4RpUy2Acx7ldLtdBZVLV7ctkMggGgwgEAri4uCDVaGWrUD6fD6WzXuVLCSFIp9MIBoNYX1+vi2o6rBJltVpr2ldChUKhX6Lqwtrb26HVaimlFHd3d6RQKDSMmpycPJifny8nVd2+bDbbEKoGZjKZ6OjoKPr7+1EsFhGPx+nJyQkkSSLvoSYmJmSo6qQymQwODw8bQslgPT09/3m9XszMzEAQBADA8PAwent7sb+/T6+vr0mjqMqkGIYpozY2NhpCyc5jNpuNGxkZAc/zoJSCUoq+vj5MTU1henoaoijWPE2r1VrHx8cP5ubmYDaby0mVLgAfQskSU6vV0Gg0NXuNTqeDx+MBAOzu7tLSzvyKupqdnYXZbK470XO5HCKRyG+jZLBkMonb21uYTCY8Pz/LbhIEAS6XC8ViEXt7ezSdTttKqLfal8vlEI1GP4SSwa6urkgsFqOiKEKn0+Hl5aUmObfbDZZlcX9/fzU2NiZrX3VS0WgUm5ubH0IBgILjOABAoVBAMpn8AQBGoxEqlUqWAgB0dnbCYDDAbrdDr9eDYeTnTIZhkM/nEYvF/gglg71O1H9ubm5+EEJgNBqhVqtrcCzLgmVZEEJqUI+Pj01B1cDq4eolV7O0X1FHR0dNQdWF/S6uErW1tdUU1JuwRnEMw6BQKDQd9UtYNU4URahUqvJqLaGOj4+bjnoXVomjlEIURQiCAJZly6tve3u76SgAII3+H9Pr9dTpdGJwcBBtbW1IJBKIRCK4vLwk7y2OlsIAQKFQQKVSQalUrmSz2Z/5fL5l3wvk+4/iN6zF9T/sykhzncwdXQAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:15px; +} + +.bb-bb10-dropdown-selected-image-lowres-light +{ + float:right; + height:20px; + width:20px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQzKPMrHhEAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACaElEQVQ4y82UTWvUQBjH/5MsWbKZySjarbToTd1CbdPI4kJ7a2FvnuxXkBDSl+/hraVljh716Fm8eCortLRKWz+ALLsIZZOZZFdLxkObsrSr0CLonIaZZ37zPP/nBfjfVhiGAICZmZm/B11ZWXla7MlNAL7vY3d3F2EYTjLGXpdKpaU8z99nWfaS3NSrIAjucM4PKKUThmHg9PQU/X5/ybgOxPO8QrcHnPMDxtiEYRi6uNdaXz/kIAhczvknSukjQog+l00nSdLJsuwZuSbMdF33O2PsVgHTWuter0eklLYQom8AAKX04tHc3NzvyuM25/zzMCzPc0gpOwWs0WjAWFxchJQSQRDQKIpe7e3tYWFh4QqQUnrkOM7UuVYEQJ4kyUmaptNCiH69XsfOzs6Zhuvr6+8qlcpz0zShlFKDwWBsa2srO/eMU0q/MsaqRZlprSGlVHEcjwsh1PDHxtra2l3btp9UKhVYlqVd13Vs2z4Ow7AGAIyxj47jjA/VrFZKHaVpOiWEUJclIlEUMcdxPlBK61rri/THcXxkmqZLKZ0cstdSSsRxfE8I0R2ltdlqtX74vp9orV9YlqUBgBCCcrk8ZlmWO5RNKKWO4zieFkJ0Z2dn0el0rgCNZrOJzc3NN2maNpRSpAiNEAJCSNGeuVJKpWnaFEJ0Pc/D/v7+yGogAFCtVtHtdhFF0TJj7K1t2wTAhWdSypMkSe5fTsDIkAFAqTO7Vqt16HneIYDlUqlEtNbIsqydZdnU9vZ2z/d9tNvtPwJHdsrq6urjcrn8EMDPwWDwZWNj49uNZ1utVrtyNj8//+8m+C/+2RCtLAkgFQAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:15px; +} + +.bb-bb10-dropdown-selected-image-hires-light +{ + float:right; + height:38px; + width:38px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ5CDKq1lMAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACN0lEQVRYw+3YT/KaMBQH8G/4lwR00SPYHsTNz41DOIZn6RXaY8i4cBiP4hW6cQQihnRRoaCg1hL9LcwMMw5k9DMv7+UFyWQywWccFj7peMPesCGG4zgQQnyPokiPx+PWM/KqqgzD8INSmnieB0IIlFKQUmK1WpGiKF4TMSHEgnOejEYjBEEA3/dRfZ7P5/olSymEWDDGfvi+D9d1/y4dIaCUwvO85+dYH6qJsyzrubAmynGczjlKKSilngc7RxFCLuaUZQkpJQ6Hw5+KfUWktNatOVpr5HmONE0RxzExHrEwDD9uLV+F2u/3WC6XpEJbJlGc8+QRlDHYKVIPo4zAmijbth9CDZ7855G6Vn3XUJ0wxhhms5kGgPV6TaryfWT5uqrvHtRFE4+iSFNK6y8uigJSyrqE/zen7kW1ckwI8YsxhiAIwDkH57xusFEU6WeiWjDHcb5QSuteBQC2bYMxBs55Jy4Mw68mUC2YZVmdydqHO6G2JlCt5FdKoSzLzkkVrsrDsiy/Mca2nPOrW8KjqFbENpsNkVLW3V1r3bosywJjDL7vw/f9Lee8VX3VNQSqFbHdboc8z0EIQRWJi934hKvOTl3nqSFQFzt/HMckyzJkWQalVO+Pd90fKlK9LekenGlUb688xz0bdbWJN3F91dpEpWk6GOrm6eIWzhTqrmPPOa6Z/KZQ//QmLoTQlFK4rgtCCI7HY93gry21cVjVAYIgwHQ6XSRJ8jPPc2PvC+T9j+IbZnj8BjBO/sXL4BuuAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:20px; +} + +.bb-bb10-dropdown-item-dark +{ + border-bottom-color: #373737; +} + +.bb-bb10-dropdown-item-light +{ + border-bottom-color: #B4B4B4; +} + +.bb-bb10-dropdown-item-selected-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#252525)); +} + +.bb-bb10-dropdown-item-selected-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#EAEAEA), to(#EDEDED)); +} + +.bb-bb10-dropdown-container-hires +{ + border-width:2px; + border-style: solid; + border-radius:4px; + padding: 0px; + height: 95px; + overflow:hidden; +} + +.bb-bb10-dropdown-container-lowres +{ + border-width:1px; + border-style: solid; + border-radius:4px; + padding: 0px; + height: 59px; + overflow:hidden; +} + +.bb-bb10-dropdown-container-inner-lowres +{ + z-index: 10; + border-style: solid; + border-width: 1px; + border-radius: 4px; + padding: 1px; +} + +.bb-bb10-dropdown-container-inner-hires +{ + z-index: 10; + border-style: solid; + border-width: 2px; + border-radius: 4px; + padding: 2px; +} + +.bb-bb10-dropdown-caption-lowres { + position:relative; + display:block; + float: right; + z-index:1; + margin-right:-22px; +} + +.bb-bb10-dropdown-caption-hires { + position:relative; + display:block; + float: right; + z-index:1; + margin-right:-38px; +} + +.bb-bb10-dropdown-label { + display:table-cell; + float: left; +} + +.bb-bb10-dropdown { + border-style: solid; + white-space:nowrap; + vertical-align: middle; + display: block; + background-clip: padding-box; +} + +.bb-bb10-dropdown-light { + border-top-color: #B1B1B1; + border-left-color: #BFBFBF; + border-bottom-color: #B4B4B4; + border-right-color: #949494; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#E1E1E1)); +} + +.bb-bb10-dropdown-dark { + border-color:#040404; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#252525)); +} + +.bb-bb10-dropdown-inner-light { + border-top-color: #FFFFFF; + border-left-color: #DBDBDB; + border-right-color: #EFEFEF; + border-bottom-color: #E0E0E0; +} + +.bb-bb10-dropdown-inner-dark { + border-top-color: #5D5D5D; + border-left-color: #575757; + border-right-color: #545454; + border-bottom-color: #474747; +} + +.bb-bb10-dropdown-arrow-lowres-dark +{ + position:relative; + float:right; + z-index:2; + display:block; + top: 10px; + height:22px; + width:22px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhI3LeOgUygAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB2klEQVQ4y+2TP4saQRiHf2PiBkFFBREUQmJzyNYGLYQ0URYWLXTjf5ANAUFB8ANobCyvSxO09QOktrEzjZVhYyEJamOjgmy3O2+aCOflPM1dF+4HDwwz8748vMwA/2Xq9To7rJvNJruk5qJLoii+KpfLP61WK3q93mtN0349ylSSJABAu91u7XY72u121O12WwAgy/LjxiCKojQcDknXddJ1nUajEcVisS/n6p6dOojH4xBF0ZrJZL4lk8kXpmkyzjn8fj8BeGm3268DgQDN5/N/t63Vau8WiwVtNpsjlsslqar68UHGsiy/z+fzX4PBIBERIyIcEASBXC5Xcr/f/5jNZt/vqrfc3sjlcgCARCLxIRqNwjAMZpombmIYBguHw5AkSQWAYrF43ng6nUJRFK1SqbwRBOHI9CamacLn8wW3221uMBh8vtc4nU4DAEql0pXH42Gcc9yH2+1mhULhCgAURTltrGkaGo0GpVIp3J7rXXDO4fV6YbFYPvX7/c7JxqqqtqrV6lubzXa26QHGGAuFQmQYBk0mk9HRKKrVKgAgEol0nE4n45zj0sacczgcDhaJRDp/nigA4DkArFYr1ul0eDabBRE96IcqioL1ek3j8dgCgPCUp/yV37GLSoxuRECwAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-arrow-hires-dark +{ + position:relative; + float:right; + z-index:2; + display:block; + top:11px; + float:right; + height:37px; + width:37px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAYAAADFniADAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhI2NnDeq4UAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACd0lEQVRYw+2YzW7aQBSFjy2bCCRjMBDECgtFchLzZxLwzHjALLqJlPfII/QV+k59lTTyBsGqGzZICG43dSRoRE0MlEoc6Ww80mj8nXtnxlY45zg3qThDXRaVVBoRpZ9E06BpGlarFZbL5XmQ8jyPXl5eqN/v00FIpZ2gWq1SGIZ4enpCLpfD29sbzWYzJRUpIsJnraoqOOcIggCKosD3fYRhCE3TkGreNG/U6XRoPB4jn8+DiGAYBqSU6Ha79E9IWZb1TUqJ+/v7jeeO42A0GqFSqfw8KSlFUSCE+CqlBACs1+t3AwBjDFLKoqqqpyPlui4Nh0MUCoUPx03ThJQS7XabTkKqWCw2pJRoNpsbhLZ9e3uL4XAIy7K+HJUUAAwGgx9SSqiqmqgzhRDfARyP1N3dHY1GI1iWtZNS7EKhgCAI4LouHWVHNwwDnHO0Wq1EC4rtui6klDBN87Dx/Y6NksT2UYyMMTDGKGmMiUjd3NxQEAQol8t7UYpdKpUghIDjOHSQs88wDAgh3mP7rFzXRRAEmEwmmM/n6Wqq1+uREAK6rqc6zzRNg+/7GAwGf6W18z7VaDSIc47r6+tUlGJVKhVwzhFFEb2+vip7k8pms/B9H91uNxWhbTebTTDGkM1m9+8+z/MOEtu2dV0HYwyPj4+0V/fV63XinKNWqx10QbFrtRqEELBtmxLV1NXVFfr9Pnq9HuJ95Rhqt9uIogjT6RSLxWJ3TXmeR5xzZDKZo1CKnclkwBjDw8MD7dyn6vU6PT8/IwzDk3xK2baNxWKByWRCURS9d6PS6XQ2Lm+xT6Xt4+wPUtuD//XH6OVfwmVRl5q6xHdE/QJaEjMvW5ot6AAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-arrow-lowres-light +{ + position:relative; + float:right; + z-index:2; + display:block; + top: 10px; + height:22px; + width:22px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ1ExR6ULMAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABmUlEQVQ4y+2UsWoCQRCG/11zt6u7F7FIkSqkkmB5L5BKECSNGATBwkAQxOLUA6uAtaBY5y1SBLRLpS8gSaqkT5rjRFSImyZHoonnmXTBqRZ25uefb2YX+JdRr9eJd7ZtmwSp2QuSNJvNjhqNxhMAjMfjYwDPm2qo32UqlQIARCKRgpQSUkoIIQoAkE6nfYU3tlWpVFKxWOyWMea5h+M4191u9/JXwslkEolEQuOcvwgh9r/kqslk8jqdTg9Ho9Fbr9fbDkW/30coFDoNh8PRFQOEc35ACCmuEwWA0LoLy7LOhRA3mqYppdRSZ5RSRSk9M03zYTgcjgI5zuVyAADO+QVjDKuiAKCUIrqug3NeBIB8Ph+McbVavY9Go3FKqe9wF4uFchznsd1un/g6zmQy3nptFP1AQoQQcQDIZrP+jm3bVoZhqCCr6JFxXZe0Wi2ydni1Wu1KSnlKCCFbvHiiaZoyTVMNBoO7JRSlUgkAwBhrBkHwExLGWBMAyuXyJwrLsoiu6wvDMP70Wbmui/l8TjudjsIudvEt3gGChHNZioZMCgAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-arrow-hires-light +{ + position:relative; + float:right; + z-index:2; + display:block; + top:11px; + float:right; + height:37px; + width:37px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAYAAADFniADAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ2FdY0pkUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB7ElEQVRYw+2YTY6bQBCFXzdNv8YSsnKFXMALC4sGzI+UO+UKuVMWXvgcucIcwMauWSRYskceYzAzE8kl9Qakovp9r/oH5b3HVwuNLxjPovqGEZHxSYyBMQaHwwH7/X58vkfMLE1TIYndboftdqs+HZ/3XpxzmM1mIAnvvXwqviAIQBIkAQAk0bYtjDGjMI5SKssyIQmt/6bRWsM5hzRNR6mlRQRDhvf+F0mEYXj23BgD5xyyLHsZmnuQ0ZVSIPmzw3YZ1lq0bftNa43j8fgxShVFcYbtTVKtQRJFUciQ/Hd7Ks/z7x22W2sXSeR5/mPS7lNKwVr7hySUUn0Qo23b3wDUPd+5S6myLMU5B611LwxdYWVZyiRLQhzHsNbexHYZYRiCJObz+WONDgBJkohzbtC6QxLL5VIAPM7oZVm+2203Z/6vG/ti1H2w9em2vhjjOB5fVJIk0qfbei64WK1WMspTVVWdsA3dMs68ojWstaiqSgZ5KoqiQd3WB6O1FlEU3a+U9/4h2K5hzLJM7lKqrmshiSAIJjmDd+ewuq6ll1LW2tOYMrpuJHlbqfV6PQm2K/soiqKQdy8OTdNIFEW4dk6aAqOIoGka2Ww2JxXUYrE4q74bHxWX29kbpS5f/teX0ee/hGdRT0898U0Yr14ND1sa1m9mAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-hires { + border-width:2px; + border-radius:5px; + padding:0px; + border-style:solid; +} + +.bb-bb10-dropdown-inner-hires { + border-width:2px; + border-radius:5px; + line-height:71px; + height:71px; + padding-top:12px; + padding-left: 35px; + padding-right: 35px; + font-size:28pt; +} + +.bb-bb10-dropdown-lowres { + border-width:1px; + border-radius:2px; + padding:0px; + border-style: solid; +} + +.bb-bb10-dropdown-inner-lowres { + border-width:1px; + border-radius:2px; + line-height:46px; + height:46px; + padding-top:5px; + padding-left: 15px; + padding-right: 15px; + font-size:16pt; + border-style:solid; +} + +.bb-bb10-dropdown-stretch{ + display:block; +} + + +/* ================================================= + BB7 DropDown Buttons + =================================================*/ + +.bb-bb7-dropdown { + border-width:1px; + border-color:#BCBEC2; + border-style: solid; + color: black; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 15px; + padding-right: 15px; + display: table-cell; + border-radius:5px; + box-shadow:1px 1px 1px #DCDCDC; + background-clip: padding-box; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#D0D2D4)); +} + +.bb-bb7-dropdown.dropdown-stretch div[data-bb-type="caption"] span { + overflow: hidden; + padding-right:40px; + display: block; +} + +.bb-bb7-dropdown div { + padding-right: 25px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAHCAYAAAA8sqwkAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sLDg41JLeOCwMAAACLSURBVBjTjY1NCsIwFITn1d27QigEs60niI10pW4UvKf0CMWgJ2i3kdxkXFloQOk3u/lh5Hg6cxonrKHZNahUFWtRVQhBHELHlNLfsnMOjziIEAQAhNDx/WO0dQ4xDgIA8wAA9j4w57woW2vxfEWZDRbyvqUxNY2p6X3LMl88fLlebqw2gr6/S5l9AEmQPAvlqOifAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center right; +} + +.bb-bb7-dropdown-hires { + line-height:54px; + height:54px; +} + +.bb-bb7-dropdown-lowres { + line-height:40px; + height:40px; +} + +.bb-bb7-dropdown-highlight{ + border-width:1px; + border-color:#0060E6; + border-style: solid; + color: White; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 15px; + padding-right: 15px; + display: table-cell; + border-radius:5px; + box-shadow:2px 2px 2px #DCDCDC; + background-clip: padding-box; + background-image: -webkit-gradient(linear, center top, center bottom, from(#098CEE), to(#1766DB)); +} + +.bb-bb7-dropdown-highlight div { + padding-right: 25px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAHCAYAAAA8sqwkAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sLDg41LyBc0osAAACaSURBVBjTjY0hC8JgGITv1emCVcaSTQcLNrFZNPoX/RGCVYNNZliQwRQWTGPYBvIy8TuTg32I7K7dc8fJZntm6L3QRknRg1OxD9fttBpUdCAEsTumHHv/y7cCWC8CEYIAgH10Z+D/fkpzg+VsJABQDwDglDw48buN8jV/Yx4OpQ5oOc5KqipVlXFW0uaNh68OlyeNIVbTgdjsA+l3TCWqdAgEAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center right; +} + +.bb-bb7-dropdown-highlight.dropdown-stretch div[data-bb-type="caption"] span { + overflow: hidden; + padding-right:40px; + display: block; + } + +.dropdown-stretch{ + display:block; + +} + + +/* ================================================= + BB5 Buttons + =================================================*/ + +.bb-bb5-button { + display: table-cell; +} + +a.bb5-button { + background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABOCAYAAAAZ+4fHAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oGCRM7GcuAdRIAAAMDSURBVEjH5Ze/ihxHEMZ/M3RQAxv0wQU7cAYN+EB7oOAOlBicbOBgM194qR7Bod7C+BXkwIEfQYlAiWEVGM6BghHYcAYdbIMWuuAaVsH82e7Znds1OBEqWGqmu7rqq5qqr9ns9s/bDZGICMWkYFpOs3jdvH7zOn7nxJ5gJ5byXbkpp2V/wIgIALpWZCKs7ld49dQfaq6eX+Frv6mqKsudczjnemMA5xwalOUfy37PqDabiiJG0NBoAKeO+n2Nre3G+E++x+dpnr1ptKpSf6ipziuMBmVHAr3X+u8aQhR6KMp2XYNieEzCVpv+ZUQ6aPlBo9bR/mQi8aGpgDmID/AP/jDGTvJjwhJaw25hqOOkch88hSkY00noMY8++D6p/GAWJsJ4zGfMjymNBj3O8GiPR2E8qnuAfo7+P4z/KfSX4zHsznCvQ9pEO0Yxe4gRRIS8w6BB+193yDlH9W1F9U3VYExmuzXoaPpidsHl88ssd/eu2ey0c9iJRYNy/eM1Nzc3DTX7B4//2M7InacsS2ZPZ1w8u2B6Ou0DZa9+fbUZlsNay/yHeXorLLlGTFdcEKAMMB/UM1vWm8Tj3RruPip/3cPsFF7MJQPIfvrNJ4blRChPFDsR3r5XKtsYG7cWOgIpALeG5b/C/InyXdUYA2SLn9PQ3cADLJ46wCJGMasBjxYRY777xzKfKbd3YIaXgvYeldUaFs+a4TL6MKhD/y4JjxvtusZst7X1GOPO6bulOZkYhe1hQ5DotA6oWQFBgdy3mzEZ+z3cYwjbjdR4exlh+hT00Xum9agHRlWarPeloWEE466xknyxcYySro1j7EbYA/YRjPuzpi+5UsRVTOqYb0tdtLp93vUYG8XGox4HH3HQRePJxGsGckn6OX2W+Ob6uj3u86RJP46Mggbl8kxYfVIEwQxDakQIV+cWt4ZyAkbVRS0vdBFefC/MzgpWKrxcSNZ2Twfac3lWcHUuzJ5YVmqpTlsO/+X39L+CIignrIIkHG7qUG3ZLIAIlAIvF5JcH58BCYLFNhLtScoAAAAASUVORK5CYII=") no-repeat scroll top right; + color: White; + display: block; + float: left; + height: 39px; + margin-right: 6px; + padding-right: 10px; /* sliding doors padding */ + text-decoration: none; +} + +a.bb5-button span { + background: transparent url("data:image/png;base64,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") no-repeat; + display: block; + line-height: 29px; + padding: 5px 0px 5px 10px; + +} + +a.bb5-button-highlight { + background: transparent url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABOCAYAAAAZ+4fHAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oGCRM7GcuAdRIAAAMDSURBVEjH5Ze/ihxHEMZ/M3RQAxv0wQU7cAYN+EB7oOAOlBicbOBgM194qR7Bod7C+BXkwIEfQYlAiWEVGM6BghHYcAYdbIMWuuAaVsH82e7Znds1OBEqWGqmu7rqq5qqr9ns9s/bDZGICMWkYFpOs3jdvH7zOn7nxJ5gJ5byXbkpp2V/wIgIALpWZCKs7ld49dQfaq6eX+Frv6mqKsudczjnemMA5xwalOUfy37PqDabiiJG0NBoAKeO+n2Nre3G+E++x+dpnr1ptKpSf6ipziuMBmVHAr3X+u8aQhR6KMp2XYNieEzCVpv+ZUQ6aPlBo9bR/mQi8aGpgDmID/AP/jDGTvJjwhJaw25hqOOkch88hSkY00noMY8++D6p/GAWJsJ4zGfMjymNBj3O8GiPR2E8qnuAfo7+P4z/KfSX4zHsznCvQ9pEO0Yxe4gRRIS8w6BB+193yDlH9W1F9U3VYExmuzXoaPpidsHl88ssd/eu2ey0c9iJRYNy/eM1Nzc3DTX7B4//2M7InacsS2ZPZ1w8u2B6Ou0DZa9+fbUZlsNay/yHeXorLLlGTFdcEKAMMB/UM1vWm8Tj3RruPip/3cPsFF7MJQPIfvrNJ4blRChPFDsR3r5XKtsYG7cWOgIpALeG5b/C/InyXdUYA2SLn9PQ3cADLJ46wCJGMasBjxYRY777xzKfKbd3YIaXgvYeldUaFs+a4TL6MKhD/y4JjxvtusZst7X1GOPO6bulOZkYhe1hQ5DotA6oWQFBgdy3mzEZ+z3cYwjbjdR4exlh+hT00Xum9agHRlWarPeloWEE466xknyxcYySro1j7EbYA/YRjPuzpi+5UsRVTOqYb0tdtLp93vUYG8XGox4HH3HQRePJxGsGckn6OX2W+Ob6uj3u86RJP46Mggbl8kxYfVIEwQxDakQIV+cWt4ZyAkbVRS0vdBFefC/MzgpWKrxcSNZ2Twfac3lWcHUuzJ5YVmqpTlsO/+X39L+CIignrIIkHG7qUG3ZLIAIlAIvF5JcH58BCYLFNhLtScoAAAAASUVORK5CYII=") no-repeat scroll top right; + background-position: right -39px; + color: White; + display: block; + float: left; + height: 39px; + margin-right: 6px; + padding-right: 10px; /* sliding doors padding */ + text-decoration: none; +} + +a.bb5-button-highlight span { + background: transparent url("data:image/png;base64,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") no-repeat; + background-position: left -39px; + display: block; + line-height: 29px; + padding: 5px 0px 5px 10px; + +} + +/* ================================================= + Round Panel + =================================================*/ +.bb-round-panel +{ + margin: 8px; + position:relative; +} + +.bb-round-panel-background { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAAQCAYAAADu4htYAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFDA0UC0zjOK8AAAFMSURBVHja7d0hi9xAGAbgN0tEREUWKlY24kRE//8PKVzEiZyMOEjEiYjAVCwJe9QtaaHwPGpmGPW6lxn4qpKSR+PbWNZtTbYAAAA8p06aukn30lWPx9VjARmGoSgeAADAmUWk7/vqjwIy/BrKfuHaXtO2rbAAAICnLMuSeZmPn1X9z3sJqUrKUT6u36+53W7SAgAATjFNU+aP+Sgh1evwWrIlzbcm3Y9OQgAAwKnG9zHr55rUyWV/ElE+AACAv+HoGltyEQcAAPCvKCAAAIACAgAAKCAAAAAKCAAA8D8UkPq+GN9HaQAAAKc7ukadXPax6OvnmmmapAMAAJxmmqb7DJAkfd9XVUlJkmMaenKfiN62rbQAAICnLMtyTEBP7lPQk+wfsB5WWzJ/zF8uAwAAPKX+uj1eQJJkfBvLuq1CAgAATtHUTbqXrtr3vwHOgmRaTerV1wAAAABJRU5ErkJggg=="); +} + +.bb-round-panel-top-left { + margin-right: 9px; + height: 9px; +} + +.bb-round-panel-top-right { + margin-top: -9px; + margin-left: 9px; + background-position: 100% 0; + height: 9px; + font-size: 2px; +} + +.bb-round-panel-bottom-left { + margin-right: 9px; + background-position: 0 -7px; + height: 9px; + font-size: 2px; +} + +.bb-round-panel-bottom-right { + margin-top: -9px; + margin-left: 9px; + background-position: 100% -7px; + height: 9px; + font-size: 2px; +} + +.bb-round-panel-inside { + border-left: 2px solid #D6D3D6; + border-right: 2px solid #D6D3D6; + background: White; + padding-left: 3px; + padding-right: 3px; + overflow:auto; +} + +/* ================================================= + Label Control Row + =================================================*/ + +.bb-label { + margin-top: 5px; + margin-bottom: 5px; +} +.bb-label-control-horizontal-row .bb-label { + float:left; + position:relative; + top:10px; +} + +.bb-label-control-horizontal-row { + height:56px; + /*border:1px solid black;*/ + margin-bottom:4px; +} + +.bb-label-control-horizontal-row .bb-bb7-button { + float:right; +} + +.bb-label-control-horizontal-row .bb-bb7-button-highlight { + float:right; +} + +.bb-label-control-horizontal-row .bb-bb5-button { + float:right; +} + + +/* ================================================= + Label Control Rows + =================================================*/ + +.bb-bb7-label-control-rows { + margin:0px; + padding:0px; + width:100%; +} + +/* ================================================= + BB10 Label Control Rows + =================================================*/ + +.bb-bb10-label-control-rows { + margin:0px; + padding:0px; + width:100%; +} + +.bb-bb10-label-control-label-row-hires +{ + vertical-align: text-bottom; + height:38px; +} + +.bb-bb10-label-control-label-row-lowres +{ + vertical-align: text-bottom; + height:22px; +} + +.bb-bb10-label-control-label-lowres +{ + position:relative; + top: 7px; + bottom:0px; + left:0px; + font-size: 12pt; + height:15px; + vertical-align: text-bottom; +} + +.bb-bb10-label-control-label-hires +{ + position:relative; + top: 10px; + bottom:0px; + left:0px; + font-size: 21pt; + height:30px; + vertical-align: text-bottom; +} + + +/* ================================================= + Arrow List + =================================================*/ +.bb-text-arrow-list { + margin-top: -3; + margin-bottom: -3; +} + +.bb-text-arrow-list-item +{ + vertical-align: middle; + height: 40px; + width:100%; +} + +.bb-text-arrow-list-item-hover +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); + background-color:#2175F7; +} + +.bb-text-arrow-list-item-value +{ + line-height:40px; + padding-left:7px; + display:inline; + text-overflow: ellipsis; +} + +.bb-text-arrow-list-item-hover .bb-text-arrow-list-item-value +{ + color:White; +} + +.bb-arrow-list-separator +{ + border-bottom: solid 1px Silver; + margin: 1px; +} + +.bb-arrow-list-arrow +{ + position:relative; + float:right; + display:inline; + margin-right: 5px; + top: 15px; + width: 20px; + height: 20px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAALCAYAAACzkJeoAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFGxUUItGqPS0AAABBSURBVBjTdcxBDgAhCATBlo87vnz2siYICidSHTBGkk3f4J+lZcpEPmoQtc5BwxxccQdPnJojXnB9u6FhhgMrAHy5yiKIJPT0DgAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: top right; +} + +/* ================================================= + Arrow List BB10 + =================================================*/ +.bb-bb10-text-arrow-list-lowres +{ + margin-top: -3; + margin-bottom: -3; + font-size: 20pt; +} + +.bb-bb10-text-arrow-list-hires +{ + margin-top: -3; + margin-bottom: -3; + font-size: 40pt; +} + +.bb-bb10-text-arrow-list-item-lowres +{ + vertical-align: middle; + height: 50px; + width:100%; + padding-top: 7px; +} + +.bb-bb10-text-arrow-list-item-hires +{ + vertical-align: middle; + height: 100px; + width:100%; + padding-top: 14px; +} + +.bb-bb10-text-arrow-list-item-dark +{ + color: White; +} + +.bb-bb10-text-arrow-list-item-light +{ + color: Black; +} + +.bb-bb10-text-arrow-list-item-hover +{ + color: White; +} + +.bb-bb10-text-arrow-list-item-value-lowres +{ + line-height:50px; + padding-left:7px; + display:inline; + overflow: hidden; + text-overflow: ellipsis; +} + +.bb-bb10-text-arrow-list-item-value-hires +{ + line-height:100px; + padding-left:14px; + height: 100px; + display:inline; + text-overflow: ellipsis; + overflow:hidden; +} + +.bb-bb10-arrow-list-separator-lowres-light +{ + border-bottom: solid 1px Silver; + margin: 1px; +} + +.bb-bb10-arrow-list-separator-hires-light +{ + border-bottom: solid 2px Silver; + margin: 2px; +} + +.bb-bb10-arrow-list-separator-lowres-dark +{ + border-bottom: solid 1px #3A3A3A; + margin: 1px; +} + +.bb-bb10-arrow-list-separator-hires-dark +{ + border-bottom: solid 2px #3A3A3A; + margin: 2px; +} + + +.bb-bb10-arrow-list-arrow-lowres +{ + position:relative; + float:right; + display:inline; + margin-right: 5px; + top: 17px; + width: 20px; + height: 20px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAALCAYAAACzkJeoAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFGxUUItGqPS0AAABBSURBVBjTdcxBDgAhCATBlo87vnz2siYICidSHTBGkk3f4J+lZcpEPmoQtc5BwxxccQdPnJojXnB9u6FhhgMrAHy5yiKIJPT0DgAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: top right; +} + +.bb-bb10-arrow-list-arrow-hires +{ + position:relative; + float:right; + display:inline; + margin-right: 10px; + top: 28px; + width: 51px; + height: 51px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAeCAYAAADzXER0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFBckHH9TGOAAAACRSURBVDjLndNBDoAgDETRYS4OnLyuMIhQ2jExUcj7QUW01szMoJwEgN67QTg4LpQA55tsgOtAJsDdYDTA00QkQG/yFuCt7gUYebZTgNE3uwsw813XALO7ag5Q2dMjIOERkHGttVCF0rIHTOMZpvAKw3gHQ/gEr9iDLr7BI47ALY7CH87AD87CFysQAIqZqT8WHrs4Z4yW5p4FAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: top right; +} + + +/* ================================================= + Image List BB10 + =================================================*/ + +.bb-bb10-image-list +{ + margin:0px; + padding:0px; +} + +.bb-bb10-image-list-header +{ + vertical-align:middle; + font-weight: bold; +} + +.bb-bb10-image-list-header-hires +{ + height:47px; + line-height:47px; + font-size: 28pt; + padding-top:5px; +} + +.bb-bb10-image-list-header-lowres +{ + height:30px; + line-height:30px; + font-size: 16pt; +} + +.bb-bb10-image-list-header p +{ + color: White; + margin:0px; + padding:0px; + padding-top:4px; +} + +.bb-bb10-image-list-header-left-lowres +{ + text-align:left; + padding-left: 10px; +} + +.bb-bb10-image-list-header-right-lowres +{ + text-align:right; + padding-right: 10px; +} + +.bb-bb10-image-list-header-left-hires +{ + text-align:left; + padding-left: 20px; +} + +.bb-bb10-image-list-header-right-hires +{ + text-align:right; + padding-right: 20px; +} + +.bb-bb10-image-list-header-center +{ + text-align:center; +} + +.bb-bb10-image-list-item +{ + padding-bottom: 0px; + overflow:hidden; +} + +.bb-bb10-image-list-item-lowres +{ + padding-top: 8px; + padding-left: 5px; + height: 56px; + border-bottom-width: 1px; +} + +.bb-bb10-image-list-item-hires +{ + padding-top: 10px; + padding-left: 5px; + height: 109px; + border-bottom-width: 2px; +} + +.bb-bb10-image-list-item-lowres .details +{ + position:relative; + margin-left:70px; + margin-bottom: 0px; + margin-top:8px; +} + +.bb-bb10-image-list-item-hires .details +{ + position:relative; + margin-left:130px; + margin-bottom: 0px; + margin-top:17px; +} + +.bb-bb10-image-list-item-dark +{ + color:White; + border-bottom-style: solid; + border-bottom-color: #3A3A3A; +} + +.bb-bb10-image-list-item-light +{ + color:Black; + border-bottom-style: solid; + border-bottom-color: #D9DCDE; +} + +.bb-bb10-image-list-item-lowres .title +{ + overflow: hidden; + font-size: 20pt; + line-height:20px; + text-overflow: ellipsis; +} + +.bb-bb10-image-list-item-hires .title +{ + overflow: hidden; + font-size: 40pt; + line-height:45px; + text-overflow: ellipsis; +} + +.bb-bb10-image-list-item-hover +{ + /*placeholder to signify hover*/ +} + +.bb-bb10-image-list-item-hover .title +{ + color:White; +} + +.bb-bb10-image-list-item-lowres img +{ + position:relative; + left: -5px; + float:left; + height:64px; + width:64px; + top:-8px; +} + +.bb-bb10-image-list-item-hires img +{ + position:relative; + left: -5px; + top: -10px; + float:left; + height:119px; + width:119px; +} + +.bb-bb10-image-list-item-lowres .description +{ + color:#606060; + overflow: hidden; + white-space:nowrap; + font-size: 14pt; + margin-bottom: 0px; + margin-top: 2px; + text-overflow: ellipsis; +} + +.bb-bb10-image-list-item-hires .description +{ + color:#606060; + overflow: hidden; + white-space:nowrap; + font-size: 28pt; + margin-bottom: 0px; + margin-top:-6px; + text-overflow: ellipsis; +} + +.bb-bb10-image-list-item-hover .description +{ + color: White; +/* overflow: hidden; + white-space:nowrap; + font-size: 15pt; + margin-bottom: 0px;*/ +} + +.bb-bb10-image-list-item-lowres .accent-text +{ + position:relative; + float:right; + color:#606060; + font-size:14pt; + margin-right: 5px; +} + +.bb-bb10-image-list-item-hires .accent-text +{ + position:relative; + float:right; + color:#606060; + font-size:22pt; + margin-right: 10px; + margin-top:5px; +} + +.bb-bb10-image-list-item-hover .accent-text +{ + color:White; +} + + + +/* ================================================= + Image List High-Resolution + =================================================*/ + + +.bb-hires-image-list +{ + margin:0px; + padding:0px; +} + +.bb-hires-image-list-item +{ + border-bottom: solid 1px #D9DCDE; + padding-top: 10px; + padding-left: 5px; + padding-bottom: 0px; + overflow:hidden; + height: 60px; +} + +.bb-hires-image-list-item-hover +{ + /*background-color:#2175F7;*/ + background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); + border-bottom: solid 1px #D9DCDE; + padding-top: 10px; + padding-left: 5px; + padding-bottom: 0px; + overflow:hidden; + height: 60px; +} + +.bb-hires-image-list .details +{ + position:relative; + margin-left:74px; + margin-bottom: 0px; +} + +.bb-hires-image-list-item .title +{ + color:Black; + overflow: hidden; + text-overflow: ellipsis; +} + +.bb-hires-image-list-item-hover .title +{ + color:White; + overflow: hidden; + text-overflow: ellipsis; +} + +.bb-hires-image-list img +{ + position:relative; + left: -5px; + float:left; + height:70px; + width:70px; + top:-10px; +} + +.bb-hires-image-list .description +{ + color:#737173; + overflow: hidden; + white-space:nowrap; + font-size: 14pt; + margin-bottom: 0px; + text-overflow: ellipsis; +} + +.bb-hires-image-list-item-hover .description +{ + color: White; + overflow: hidden; + white-space:nowrap; + font-size: 14pt; + margin-bottom: 0px; + text-overflow: ellipsis; +} + +.bb-hires-image-list-item .accent-text +{ + position:relative; + float:right; + font-size:14pt; + margin-right: 5px; + color: Black; +} + +.bb-hires-image-list-item-hover .accent-text +{ + position:relative; + float:right; + font-size:14pt; + margin-right: 5px; + color:White; +} + +.bb-hires-image-list-header +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#D5D6D7), to(#9E9F9F)); + height:56px; + vertical-align:middle; + border-bottom: solid 1px #D9DCDE; +} + +.bb-hires-image-list-header-right +{ + text-align:right; + padding-right: 10px; +} + +.bb-hires-image-list-header-left +{ + text-align:left; + padding-left: 10px; +} + +.bb-hires-image-list-header-center +{ + text-align:center; +} + +.bb-hires-image-list-header-hover +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#088FF0), to(#1666DC)); + height:56px; + vertical-align:middle; + border-bottom: solid 1px #D9DCDE; +} + +.bb-hires-image-list-header-hover p +{ + color:White; + line-height:56px; + margin:0px; + padding:0px; +} + +.bb-hires-image-list-header p +{ + color: Black; + line-height:56px; + margin:0px; + padding:0px; +} + +/* ================================================= + Image List Low-Resolution + =================================================*/ + + +.bb-lowres-image-list +{ + margin:0px; + padding:0px; +} + +.bb-lowres-image-list-item +{ + border-bottom: solid 1px #D9DCDE; + padding-bottom: 0px; + overflow:hidden; + height:60px; +} + +.bb-lowres-image-list-item-hover +{ + background-color:#2175F7; + border-bottom: solid 1px #D9DCDE; + padding-bottom: 0px; + overflow:hidden; + height: 60px; +} + +.bb-lowres-image-list .details +{ + position:relative; + margin-left:68px; + margin-bottom: 0px; + margin-top:8px; +} + +.bb-lowres-image-list-item .title +{ + color:Black; + overflow: hidden; + font-size:14pt; +} + +.bb-lowres-image-list-item-hover .title +{ + color:White; + overflow: hidden; + font-size:14pt; +} + +.bb-lowres-image-list img +{ + position:relative; + left:0px; + float:left; + height:60px; + width:60px; +} + +.bb-lowres-image-list .description +{ + color:#737173; + overflow: hidden; + white-space:nowrap; + font-size: 12pt; + margin-bottom: 0px; +} + +.bb-lowres-image-list-item-hover .description +{ + color: White; + overflow: hidden; + white-space:nowrap; + font-size: 12pt; + margin-bottom: 0px; +} + +.bb-lowres-image-list-item .accent-text +{ + position:relative; + float:right; + font-size:10pt; + margin-right: 5px; + color:#696969; + margin-top:5px; +} + +.bb-lowres-image-list-item-hover .accent-text +{ + position:relative; + float:right; + font-size:10pt; + margin-right: 5px; + color:White; + margin-top:5px; +} + +.bb-lowres-image-list-header +{ + background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAAbCAIAAAArlMusAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAblJREFUeF7t2CFuw0AQBVD3/mcK6j1SUGAQYBAQEODOOmlZUaTor+ZZ1rqss29mv6187Pu+uAgQIEAgUKAC2kWAAAECgQLLs6b78bSGCISUYSRaCbTa7CRHbAT07XazRglEFWM8mgg02eY0h6teIfd9GV/NdxmdJeCoEHi/wDTJ1eeb8hHQNQpjGh4xbQ0Q0AgC7xdw9tMEagaWvzl4/0D4j/8JpA2KejoIOI+BAiOgXQQIECAQKCCgA5uiJAIECAwBAW0OCBAgECrwG9DXoz5riEBIGUailUCrzU5yxEZAb9tmjRKIKsZ4NBFoss1pDle9Qq71E8fx0JsogahiphlonxqvCWh0nEAFdGWBiwABAgQCBQR0YFOURIAAgSEgoM0BAQIEQgUEdGhjlEWAAIER0Ou6WqMEoooxHk0EmmxzmsN12bZL/cRxPPQmSiCqmGkG2qfGawIaHSdQAV1Z4CJAgACBQAEBHdgUJREgQGAICGhzQIAAgVABAR3aGGURIEBgWb9XNwECBAgECiznr7ObAAECBNIE6oXxDOj6q4qzhgiElGEkWgm02uwsR2w5fZ7cBAgQIBAo8AP5Rl6LQeuAZgAAAABJRU5ErkJggg=='); + + height:27px; + background-color:silver; +} + +.bb-lowres-image-list-header-right +{ + text-align:right; + padding-right: 10px; +} + +.bb-lowres-image-list-header-left +{ + text-align:left; + padding-left: 10px; +} + +.bb-lowres-image-list-header-center +{ + text-align:center; +} + +.bb-lowres-image-list-header-hover +{ + height:27px; + background-image: none; + background-color: #2175F7; +} + +.bb-lowres-image-list-header-hover p +{ + color:White; + line-height:27px; + margin:0px; + padding:0px; +} + +.bb-lowres-image-list-header p +{ + color: Black; + line-height:27px; + margin:0px; + padding:0px; +} + + + + +/* ================================================= + BBM Bubbles + =================================================*/ + +.bb-bbm-bubble-left +{ + margin-left: 8px; + margin-right:20px; + position:relative; + margin-top: 10px; +} + +.bb-bbm-bubble-left img +{ + position:relative; + float:left; +} + +.bb-bbm-bubble-left .details +{ + position:relative; + margin-left:25px; +} + +.bb-bbm-bubble-left .image { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAAdCAYAAABSfAiGAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBUjB5d+cecAAAI0SURBVHja7dw9a1t3GMbh+5gz/A0apM1jD3TR6K/h8QwZ/PEyZNSoMauGDIZCMSUFFdJQhwTsQdBnOHA6uCktNfQllknCdS3nRqDl2X4SUjdnTpJsN9u5pkqmpKYKAADAp2h9S/r758V40SVJN2fOZrOZ61BpraUtWlpbJfk1yel/fMa2bfsr2m5gfy47bmHb9he5q25Th0pVpS1axnHs+u1mO9ehsjw7y3oYZBoAAPBIzpIk1/t97m5u8t33P8x9TffffIgPAADgGNbDkB+TvHv7NidVlfPzc1cBAACO5tthyPsPNzlxCgAA4ElMESAAAMDTESAAAIAAAQAABAgAAIAAAQAABAgAAIAAAQAABAgAACBAAAAABAgAACBAAAAAHgqQ3hEAAIAn0CcnrW/ZvbpyDAAA4Gh2r3ZpaTlpfZIqFwEAAI7i+vV1MiWttXRz5mw2m7nuKmnJcrHMer1+8I3TNOXNL2+SKUmfvz9j27b9FW03sD+XHbewbfvL3FWVu0MlU6W1lvHZ2HVz5iTJdrOda6rc3t1m+GbIMAx/iY/9fp/9T/uctlMJBwAA/LM+aX1L61suxovuz5+n/PHCi+cv5od+mL7/+Sar5Srjs7FzSQAA4P/4V3/D+3K3y+r3r0ycDAAAOFqA7Ha7rPpkvBQfAADAEQPk49/zjpeX4gMAADhegFxdXSVTZblYuhIAAHCcAGl9Sx0qVffx8fHH6QAAAI8eIGktVZW2aOIDAAB4VL8B1hmhz0JjeFQAAAAASUVORK5CYII="); +} + +.bb-bbm-bubble-left .top-left { + margin-right: 9px; + height: 9px; +} + +.bb-bbm-bubble-left .top-right { + margin-top: -9px; + margin-left: 9px; + background-position: 100% 0; + height: 9px; + font-size: 2px; +} +.bb-bbm-bubble-left .bottom-left { + margin-right: 18px; + background-position: 0 -11px; + height: 18px; + font-size: 2px; +} +.bb-bbm-bubble-left .bottom-right { + margin-top: -18px; + margin-left: 18px; + background-position: 100% -11px; + height: 18px; + font-size: 2px; +} +.bb-bbm-bubble-left .inside { + border-left: 1px solid #A5A2A5; + border-right: 1px solid #A5A2A5; + background-color: #DEDBDE; + padding-left: 3px; + padding-right: 3px; + overflow:auto; +} +.bb-bbm-bubble-left .nogap { + margin-top: -3; + margin-bottom: -3; + padding-left: 10px; + padding-right: 10px; +} + +.bb-bbm-bubble-right +{ + margin-top: 10px; + margin-right: 8px; + margin-left: 20px; + position:relative; +} + + +.bb-bbm-bubble-right .image { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAAdCAYAAABSfAiGAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBUgJ4c9AuwAAAJNSURBVHja7dyxa1tXGMbh95o7fIYOEmSIoIUIumjIkLEaM3rUkCFD/8AOd7NHj+pgiIcMHRpohoICCUjQgM4guB3clgZMSRorQ/w8i16MpiOd4YcldWPGJMnFcDG2Q0trLQAAAJ+r+kr6m8ez1VmXJN2YMcMwjNuWtMk8NZsnSU7Tsk/Z9r3ZzsJ2B+KO296Ttrtmf/T+78fkNJVt2yZ/7FLvfsu0T1bPVl13PpyPm/ctWSwzf1iZVUk1AADgzqxf75Jf15lV5aQdWtrDeZaPJuIDAAC4c8tHk7QH87RDy0lrLU+fLJwKAABwNE+fLG4CxFEAAABfxCECBAAA+HIECAAAIEAAAAABAgAAIEAAAAABAgAAIEAAAAABAgAACBAAAAABAgAACBAAAAABAgAACBAAAOCr1ycnVZXLq2uHAQAAHM3l1XUqlZPqK/Vuk/XrjVMBAADu3PrVJrXbpKrSjRkzDMO4fZ+0ySz13TynqSQt+8S279GOs7Dv9d6nueO296Ttrtmf/BpXJYsHdft/PV5tkrdvUrtNpt8kq9Wq68aMSZKL4WJsh5bWmkQDAAA+yvaQ1OKHLL+fffD369932V+dZzqZpvrkbLXqkuSfAAEAAPhUw0/DuG1JHi+z/HbyQYDk5WWe//i8+/fz/QoWAADwv62erbppJe3l+iY6/tbf/rEsAQIAAHx2hMwq2f7yIru/vtKxPzQBAgAAHDFC+pb1z+vsWnLaR4AAAADHjZD5oeXF1To5JOkFCAAAcERVlWl7k+3bTeqW74H8CX8ZrQX6MdddAAAAAElFTkSuQmCC"); +} + +.bb-bbm-bubble-right .details +{ + position:relative; + margin-left:25px; +} + +.bb-bbm-bubble-right img +{ + position:relative; + float:left; +} + +.bb-bbm-bubble-right .top-left { + margin-right: 9px; + height: 9px; +} +.bb-bbm-bubble-right .top-right { + margin-top: -9px; + margin-left: 9px; + background-position: 100% 0; + height: 9px; + font-size: 2px; +} +.bb-bbm-bubble-right .bottom-left { + margin-right: 18px; + background-position: 0 -11px; + height: 18px; + font-size: 2px; +} +.bb-bbm-bubble-right .bottom-right { + margin-top: -18px; + margin-left: 18px; + background-position: 100% -11px; + height: 18px; + font-size: 2px; +} +.bb-bbm-bubble-right .inside { + border-left: 1px solid #A5A2A5; + border-right: 1px solid #A5A2A5; + background: #D6EBF7; + padding-left: 3px; + padding-right: 3px; + overflow:auto; +} +.bb-bbm-bubble-right .nogap { + margin-top: -3; + margin-bottom: -3; + padding-left: 10px; + padding-right: 10px; +} + + + + +/* ================================================= + Panel Header - High Resolution + =================================================*/ + +.bb-hires-panel-header { + border-bottom: solid 1px #DCDBDB; + margin-bottom: 5px; + padding-bottom: 3px; + font-size: 14pt; + color: #7C7E80; + font-weight: bold; +} + +/* ================================================= + Panel Header - Low Resolution + =================================================*/ + +.bb-lowres-panel-header { + border-bottom: solid 1px #DCDBDB; + margin-bottom: 5px; + padding-bottom: 3px; + font-size: 12pt; + color: #7C7E80; + font-weight: bold; +} + +/* ================================================= + Pill Buttons + =================================================*/ + +.bb-pill-buttons +{ + margin: 8px; + margin-bottom: 0px; + text-align:center; + /*position:relative;*/ + +} + +.bb-pill-buttons .buttonLeft { + background: transparent url('../images/button/pillButtonRight.png') no-repeat scroll top right; + color: White; + display: block; + float: left; + height: 39px; + margin-right: 0px; + padding-right: 10px; + text-decoration: none; + width: 30%; +} + +.bb-pill-buttons .buttonLeft span { + background: transparent url('../images/button/button.png') no-repeat; + display: block; + line-height: 39px; + padding: 0px 0px 0px 10px; + text-align:center; +} + +.bb-pill-buttons .buttonRight { + background: transparent url('../images/button/btnRight.png') no-repeat scroll top right; + color: White; + display: block; + float: left; + height: 39px; + margin-right: 0px; + padding-right: 10px; + text-decoration: none; + width: 30%; +} + +.bb-pill-buttons .buttonRight span { + background: transparent url('../images/button/button.png') no-repeat; + background-position: -10px 0px; + display: block; + line-height: 39px; + padding: 0px 0px 0px 10px; + text-align:center; +} + +.bb-pill-buttons .buttonMiddle { + background: transparent url('../images/button/pillButtonRight.png') no-repeat scroll top right; + color: White; + display: block; + float: left; + height: 39px; + margin-right: 0px; + padding-right: 10px; + text-decoration: none; + width: 30%; +} + +.bb-pill-buttons .buttonMiddle span { + background: transparent url('../images/button/button.png') no-repeat; + display: block; + line-height: 39px; + padding: 0px 0px 0px 10px; + text-align:center; + background-position: -10px 0px; +} + +/* ================================================= + BB7 Pill Buttons + =================================================*/ + +.bb-bb7-pill-buttons { + padding-top: 5px; +} + +.bb-bb7-pill-buttons-hires { + height:59px; +} + +.bb-bb7-pill-buttons-lowres { + height:45px; +} + +.bb-bb7-pill-button { + float: left; + border-width:1px; + border-color:#BCBEC2; + border-style: solid; + color: black; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 0px; + padding-right: 0px; + display: table-cell; + box-shadow:1px 1px 1px #DCDCDC; + background-clip: padding-box; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#D0D2D4)); +} + +.bb-bb7-pill-button-highlight{ + float: left; + border-width:1px; + border-color:#0060E6; + border-style: solid; + color: White; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 0px; + padding-right: 0px; + display: table-cell; + box-shadow:2px 2px 2px #DCDCDC; + background-clip: padding-box; + background-image: -webkit-gradient(linear, center top, center bottom, from(#098CEE), to(#1766DB)); +} + +.bb-bb7-pill-button-lowres { + height:40px; + line-height:40px; +} + +.bb-bb7-pill-button-hires { + height:54px; + line-height:54px; +} + +.bb-bb7-pill-button-left{ + border-top-left-radius:5px; + border-bottom-left-radius:5px; +} + +.bb-bb7-pill-button-right{ + border-top-right-radius:5px; + border-bottom-right-radius:5px; +} + +/* ================================================= + BB10 Pill Buttons + =================================================*/ + +.bb-bb10-pill-buttons-lowres { + padding-top:5px; +} + +.bb-bb10-pill-buttons-hires { + padding-top:10px; +} + +.bb-bb10-pill-buttons-container-lowres { + border-width:1px; + border-style: solid; + border-radius:3px; + padding: 2px; + font-size: 16pt; + height:46px; +} + +.bb-bb10-pill-buttons-container-hires { + border-width:2px; + border-style: solid; + border-radius:5px; + padding: 2px; + font-size: 27pt; + height:89px; +} + +.bb-bb10-pill-buttons-container-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#BDBDBD), to(#D4D4D4)); + color: #5D5D5D; + border-top-color: #A3A3A3; + border-bottom-color: #CECECE; + border-left-color: #C3C3C3; + border-right-color: #C4C4C4; +} + +.bb-bb10-pill-buttons-container-dark +{ + color: #8D8D8D; + border-top-color: #262626; + border-left-color: #2A2A2A; + border-right-color: #2A2A2A; + border-bottom-color: #2E2E2E; + background-image: -webkit-gradient(linear, center top, center bottom, from(#292929), to(#333333)); +} + +.bb-bb10-pill-button-lowres { + float: left; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 0px; + padding-right: 0px; + border-width: 1px; + border-style: solid; + border-color: transparent; + display: table-cell; + background-clip: padding-box; + height:43px; + border-radius: 3px; +} + +.bb-bb10-pill-button-hires { + float: left; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 0px; + padding-right: 0px; + border-width: 2px; + border-style: solid; + border-color: transparent; + display: table-cell; + background-clip: padding-box; + height:85px; + border-radius: 5px; +} + +.bb-bb10-pill-button-inner-lowres +{ + margin:0px; + border-width:1px; + border-style: solid; + border-radius: 3px; + height:36px; + line-height:36px; + z-index:10; + border-color: transparent; + padding-top: 5px; +} + +.bb-bb10-pill-button-inner-hires +{ + margin:0px; + border-width:2px; + border-style: solid; + border-radius: 5px; + height:76px; + line-height:76px; + z-index:10; + border-color: transparent; + padding-top: 5px; +} + +.bb-bb10-pill-button-inner-selected-lowres-dark +{ + border-color: #4F4F4F; +} + +.bb-bb10-pill-button-inner-selected-hires-dark +{ + border-color: #4F4F4F; +} + +.bb-bb10-pill-button-inner-selected-lowres-light +{ + border-color: transparent; +} + +.bb-bb10-pill-button-inner-selected-hires-light +{ + border-color: transparent; +} + +.bb-bb10-pill-button-selected-lowres-light{ + color: black; + border-width:1px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DDDDDD)); +} + +.bb-bb10-pill-button-selected-hires-light{ + color: black; + border-width:2px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DDDDDD)); +} + +.bb-bb10-pill-button-highlight-lowres-light{ + color: white; + border-width:1px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; +} + +.bb-bb10-pill-button-highlight-hires-light{ + color: white; + border-width:1px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; +} + +.bb-bb10-pill-button-selected-lowres-dark +{ + color: white; + border-width:1px; + border-style: solid; + border-color:#090909; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#262626)); +} + +.bb-bb10-pill-button-selected-hires-dark +{ + color: white; + border-width:2px; + border-style: solid; + border-color:#090909; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#262626)); +} + +.bb-bb10-pill-button-highlight-lowres-dark +{ + color: white; + border-width:1px; + border-style: solid; + border-color:#333333; +} + +.bb-bb10-pill-button-highlight-hires-dark +{ + color: white; + border-width:2px; + border-style: solid; + border-color:#333333; +} + + + +/* ================================================= + Ripple Drop-Down dialog + =================================================*/ + +.ripple-dropdown-dialog { + position:absolute; + background-color:black; + left:10px; + padding-top:10px; + padding-bottom:10px; + right:10px; + border-radius:10px; + padding: 15px; + overflow:auto; +} + + +.ripple-dropdown-dialog .backgroundHighlight:hover { + background-image: -webkit-gradient(linear, center top, center bottom, from(#098CEE), to(#1766DB)); +} + +.ripple-dropdown-dialog .backgroundSelected{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#098CEE), to(#1766DB)); +} + +.ripple-dropdown-dialog .item { + color:white; + padding-left:35px; + height:45px; + line-height:45px; + vertical-align:center; +} + +.ripple-dropdown-dialog .item span { + overflow: hidden; + height: 45px; + display: block; +} + +.ripple-dropdown-dialog .selected { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAYAAAAGRPQsAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sLDhI4FDHFH/YAAAEJSURBVDjLrdO9SsNQFMDx/w3euSUkDxApltLsUnURfQuxOHSQUmJQfA9BxMEPpOCouKlFaDvVtVhfwa52sMslXCdLbgTxNj3TmX6cTxGUKuSJ5SDQtdoqd/cPLOWByuUVfdu+xnVdfN/DWQSUJAnD4dt8WBaK4iO6vb5wFgE9PnUEYFdZGlJKGZAVloXiw2MDAnCklEStpt5YX9N5IACnvruj44MWVxfnbG9t6nkhAGcweOVzMkFKydnpiQHaQAAiKFUIw6pu31xSLBRQSrHfjPgYj8kO+7nzIv6aq/h5pyz4NZ3O8v9AxjZHo3dR32vMWraFfp1GGrSFjDbTEYZV7Xse3V5f2Bz1N0W6rXbndMo2AAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: 10px center; +} + + +/* ================================================= + BB10 Grid + =================================================*/ + +.bb-bb10-grid-lowres +{ + margin:0px; + padding:0px; +} + +.bb-bb10-grid-hires +{ + margin:0px; + padding:0px; +} + +.bb-bb10-grid-header-lowres +{ + height:30px; + line-height:30px; + vertical-align:middle; +} + +.bb-bb10-grid-header-hires +{ + height:46px; + line-height:46px; + padding-top:5px; + vertical-align:middle; + padding-left: 10px; +} + +.bb-bb10-grid-header-lowres p +{ + color: White; + font-size: 16pt; + font-weight: bold; + line-height:30px; + margin:0px; + padding:0px; + padding-top:4px; + margin-left: 10px; +} + +.bb-bb10-grid-header-hires p +{ + color: White; + font-size: 28pt; + font-weight: bold; + line-height:46px; + margin:0px; + padding:0px; + padding-top:4px; + margin-left: 10px; +} + +.bb-bb10-grid-row-lowres +{ + padding:1px; +} + +.bb-bb10-grid-row-hires +{ + padding:1px; +} + +.bb-bb10-grid-item +{ + display:inline-block; +} + +.bb-bb10-grid-item-col-1-lowres +{ + margin:1px; +} + +.bb-bb10-grid-item-col-1-hires +{ + margin:1px; +} + +.bb-bb10-grid-item-col-2-lowres +{ + margin-left: 1px; +} + +.bb-bb10-grid-item-col-2-hires +{ + margin-left: 1px; +} + +.bb-bb10-grid-item-col-3-lowres +{ + margin-left: -3px; +} + +.bb-bb10-grid-item-col-3-hires +{ + margin-left: -3px; +} + +.bb-bb10-grid-item-overlay-lowres +{ + position:relative; + height: 40px; + top:-40px; + right:0px; + left: 0px; + background-color: black; + opacity: 0.7; +} + +.bb-bb10-grid-item-overlay-hires +{ + position:relative; + height: 70px; + top:-70px; + right:0px; + left: 0px; + background-color: black; + opacity: 0.7; +} + +.bb-bb10-grid-item-overlay-lowres .title +{ + text-align:center; + right:0px; + left:0px; + padding:0px; + margin:0px; + padding-top: 3px; + line-height:20px; + height:37px; + opacity:1.0; + color:white; + font-size: 13pt; +} + +.bb-bb10-grid-item-overlay-hires .title +{ + text-align:center; + right:0px; + left:0px; + padding:0px; + margin:0px; + padding-top: 10px; + line-height:30px; + height:37px; + opacity:1.0; + color:white; + font-size: 22pt; +} + +/* ================================================= + BB10 Action Bar + =================================================*/ + +.bb-bb10-action-bar-table +{ + margin:0px; + margin-top:0px; + padding:0px; + width:100%; + border-collapse:collapse; +} + +.bb-bb10-action-bar-table tr td +{ + padding:0px; + margin:0px; + border-collapse:collapse; +} + +.bb-bb10-action-bar-lowres +{ + position: absolute; + height: 73px; + bottom:0px; + right:0px; + left:0px; + background-repeat: repeat-x; + border-top-width: 1px; + border-top-style:solid; +} + +.bb-bb10-action-bar-hires +{ + position: absolute; + height: 139px; + bottom:0px; + right:0px; + left:0px; + background-repeat: repeat-x; + border-top-width: 1px; + border-top-style: solid; +} + +.bb-bb10-action-bar-dark { + border-color: #484948; + background-image: -webkit-gradient(linear, center top, center bottom, from(#323232), to(#272727)); +} + +.bb-bb10-action-bar-light { + border-color: #D1D1D1; + background-image: -webkit-gradient(linear, center top, center bottom, from(#FBFBFB), to(#E0E0E0)); +} + +.bb-bb10-action-bar-icon-lowres +{ + height: 40px; + width: 40px; + margin-top: 3px; +} + +.bb-bb10-action-bar-icon-hires +{ + height: 80px; + width: 80px; + margin-top: 4px; +} + +.bb-bb10-action-bar-button-tab-left-lowres-dark +{ + background-position:left -4px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAABJCAIAAACCd4BSAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFRcpJS1EicAAAAEySURBVEjHvZRBEsMgCEUBvUbuf0vpgpSiokJmUhYdkyB9/I/idV2llFIKEekC+wAAAKjyAb7BzMwsa/seEatNaq0hIjNLkmzTwlXz9HNrDQCISMrLAhEJYsHMNGPpo/y11ParutsAgIa3q/Jd6pA0R+UpVIqhfFSBH4BlGri7tuyroTO7DgGMxuqgzA11bm381F+yTbjN7YydG020dadan4YWLajf1kw8AqzG5cfqWjVPY2esW8839jivT4fwcAo21qur/jFcncdHrJGoFm7G9RVYXSr/Yd3IudR1YxsFe7pT7WlJsLrX4A7gINZxQ35eN/f1I1Y7zlGxBGAjcHKyVpfUkjVaNapAFCDuVp41dLY07zjdGQuCSuXbSlwZkeP6GsBLVRMKBNt/DyCuwDusCYAPj8Kv3bCpS3oAAAAASUVORK5CYII="); +} + +.bb-bb10-action-bar-button-tab-left-hires-dark +{ + background-position:left -4px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAB1CAIAAAAwSA0oAAAABGdBTUEAALGPC/xhBQAAAAd0SU1FB9wEFRcpJS1EicAAAAQ/SURBVGhD1ZrpVttADIUdeAh2EvYspC3t+79b5VwfWdYyW5zQzg+OoeGrlitpZszi4eFhsVhcXl5eXFzQA75iyWf6tus6+5V/SA/Dur29vbu7Wy6Xq9Xq+fn55eXl7e3t4+NjvV5vNpvdbvf5+bnf738c1s/D+nVYX19fvw/rz3R1Nzc3BH18fCTo09MTQV9fXwn6/v5O0O12WwvtYKMkwkwikqVkZiGUje0Id39/D69hIxFhJvsuoYiAcp8jQNwUEWbCd1oIaBRTgoLrE0vMZEtlrgga2siOq7zL1LsC6ImsHoqjCiU7znnn1CMCKghkbwUR8vwOoqyZEq8pjpx0dllmaVC40iPn2sZREpEZmZ8+jspGKNwSZfEoYUoD80SSTlQ5rsvUQTI2Mk4VeIQ7I5EKRjWLY23kFqm8dhONPsTV7cfRJaJaEolGb+97OHdc2yJZj0o9CZE7xBI9VhCrFG4bT69w5TVPBQolXLYKz9TMNxAxuDG8suke65qma0miXSLrEZIc53UJsUiPvAP4h4ly3xOZSZmJkmPbmt5J2emKXGeJnB+faLsZq0el25nXdreXGDIlknT2j8cQdTeLtig2iO4+bVC4rOssEQpPN91J74mI2D9yTvJEKhs6MdhtLnUz3jtLx6N+ga3AkJmIKJtjJCC1UTkXEQq3Ywt6VFvIIhslUZWgIjp7M9SMiqOc15aYFtCkZtB7ZM3wSEinRbbxaqLd40rcqB51ipNHQyjRnVzy/BV2s+gUl5iFoY3Zc2FUhaVEV4zpLAM9ZkbaKE/DVeP/XMSEvBu9LpSOOhjl1aMy49aMPHPxc+rmI9scq4ly9isb5clacR31qDgmqjBjI+sxkZmo10p03sZ0m7BmnpHoJjq6AJh4fX19LacCX8ZJPbrDWh6S+F6FHjoQ3XszVz1qoyJZeHaI7jk46uEpolSPdbmdiEGYLmprlx9HOVojosq1ix7jeBKikg7vJsqDmMo17nHt0UNORFaSfNDqUZk5ihjFUXWzChv5Plypx+2Prr/44STXVUUdQUNiW1pCG9VVlFJPwuWeeHV1RdtcvlVI5FoOL96Q24dMzbh73ASO/imTmf+BaEs77bLjtWzg0uXCtPjERAPPGjgh8klmNqJ6z2VFjs1Fdmn12Jco3CmyLHzglEQVxxm8BpHPHdx7Cp3ljw1e42WhIkp5l3MnxOhivRw3yYwbR55csLdkaa/tFXMJRX7mxEQZR6meKjNHG+VbYeAagkj/d0/EG0hLrDKNPzwQ0Sbcoq7ljkS3YGpxo9dk42xEGtb0Rjwq6hYbmQhtq23jDMRmGY65VjbORoR01MxqcLnPNdlIV4VElL22jYXf6t/PMFG+1WqGDkT1xyPNOO0124g20ba0jdx12nD0Wz2RNrjktXw72IxziMew8LuDjRDj8bieiHY7P5H/9uZ4MztqZdQcZyT+BU+MsECN23toAAAAAElFTkSuQmCC"); +} + +.bb-bb10-action-bar-button-tab-left-lowres-light +{ + background-position:left -4px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAABJCAIAAABttetsAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFgAQJ8YSf00AAAGwSURBVEjH1VbLksQgCJSWqcz/f9X8Uya6B2YIEXzksFW7nFIRsGlalF6v17Ztz+dz+1rOGUD+GhGllIio1sqllOM49n0nIll4PB45Z/nPzAAASACLR621lPJ+vzWm1ppS2vddvGVDtssScxwHACIqpQAopUjilBIrLPnQrNYkS0oJ+ku9BwbJJDD8sv4UB9g1IpKaqGNoQPdMfLjB0GzdFI0wh27V7InGz4fZ/7A7DmB8ONHQJlPTLCEKHvSgU7BsNKjkW7R66Y4vyHJyVul14gNE36d3KBIPD+mOsc06EMyHx5BBZSPuvCzoPtILy+AHyRSrhcoX0QChsC5Vhsc2ZPbeKWY/HrxW49x6fntboaeNsFNslWAjw+rjKnsVc6jsWquotGXQ1tSTeKzBwdw5cfuJM8rtJ3dv5J53SjicRrh7Ymo5sZ0fceIP2CB9PO27SCxrVoOTzo+5uyBZPEHs9TS6L6cd6XpPA3i9kbeRcEPzpMppR7oMjhNfcK/khj4xfgGJvviWkNzCzeFMmvC9iuSWN+sTYbXK9Zv7njdPT258N/wvb9aX+Gp3APwBTn4A1o9I+rclZWgAAAAASUVORK5CYII="); +} + +.bb-bb10-action-bar-button-tab-left-hires-light +{ + background-position:left -8px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-action-lowres +{ + display:table-cell; + float: left; + height:69px; + text-align:center; + border-top-width: 4px; + border-top-style: solid; +} + +.bb-bb10-action-bar-action-display-lowres +{ + font-size:12pt; + line-height:18px; + margin-top: 3px; +} + +.bb-bb10-action-bar-action-hires +{ + display:table-cell; + float: left; + height:131px; + text-align:center; + border-top-width: 8px; + border-top-style: solid; +} + +.bb-bb10-action-bar-action-display-hires +{ + font-size:20pt; + margin-top:3px; + line-height:30px; +} + +.bb-bb10-action-bar-tab-dark { + color: white; + border-top-color: #373737; + border-right-color: #141414; + border-right-width: 2px; + border-right-style: solid; +} + +.bb-bb10-action-bar-tab-light { + color: black; + border-top-color: #E0E0E0; + border-right-color: #C6C6C6; + border-right-width: 2px; + border-right-style: solid; +} + +.bb-bb10-action-bar-button-dark { + color: white; + border-top-color: transparent; + border-right-width: 0px; +} + +.bb-bb10-action-bar-button-light { + color: black; + border-top-color: transparent; + border-right-width: 0px; +} + +.bb-bb10-action-bar-tab-normal-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#252525), to(#1C1C1C)); +} + +.bb-bb10-action-bar-tab-selected-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#47494A), to(#3F3F3F)); +} + +.bb-bb10-action-bar-tab-normal-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DFDFDF)); +} + +.bb-bb10-action-bar-tab-selected-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#FBFBFB), to(#E6E6E6)); +} + +.bb-bb10-action-bar-back-button-lowres +{ + display:table-cell; + float: left; + height:23px; + font-size:12pt; + width:86px; + background-repeat: no-repeat; + text-align:center; + padding-top:50px; + line-height:20px; +} + +.bb-bb10-action-bar-back-button-hires +{ + display:table-cell; + float: left; + height:37px; + font-size:20pt; + width:178px; + background-repeat: no-repeat; + text-align:center; + padding-top:102px; + line-height:12px; +} + +.bb-bb10-action-bar-back-button-lowres-dark +{ + color: white; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-back-button-hires-dark +{ + color: white; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-back-button-lowres-light +{ + color: #242424; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-back-button-hires-light +{ + color: #242424; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-overflow-button-lowres-dark +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEEBMlIi9CC4EAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABFklEQVRYw+3VMYqDQBQG4Mdil94mhsDeROxCPEBALBPBXrCw39pSECysNjdIYSoJhBwhjZUOgsVYavy32hukeOy+7wDDz8y89xMJIYQQf9rpdMJ+vwfrkPf7HQAwDAOCIOAZNo5jAMA0TQCAqqreGvTjXQcppQgAGYZBRERN0/B9+iRJ8Hg8UJYlZFqF+C9s2z6yD1kUBZRSuN1ucF2X54oKwxDzPENrDQA4n888m+nXsiz8/2ee5+i6DnVdY7fbSTsJIbiIogjX6xVZlvFdTYfDAW3bou97aK2Rpim/ZrIs68s0TVqtVjSOI71eL1qv17Tdbj9Z3urlcsE4jng+n/B9n3czeZ4Hx3G+2Q/UZrM5yloRgrEfIAWSJM4nw28AAAAASUVORK5CYII="); +} + +.bb-bb10-action-bar-overflow-button-hires-dark +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEExcbIeIyRnQAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAC+klEQVR42u3ZQUgUURwG8G9235udZWdnxw1hEdFDVmYkZQftEGKlQhch7ZaiFXT30sWzWEFR58oIvXTw5tKlbgaKQl4UQat1MVxjjaCdnYXZeR2iBRG3PU71/WDufz4evHn/DyAiIiIiIiIiIiIior+AFrSB+vv6VevpVti2jVKphGw2i9nZWY0B1mDw+qDqutiFWCwGKSV834frush8zuDR40eBDFEEZZDuq93LZ86eQUNDA0zTrARYLBahhTTcHLmpZl7NaAzwCHWxugstx1tQX1+PeDx+IEAhBHK7OfAEVhtECiQSCdi2DdM0IYSAUgqRSATlchmxWCyQAYaCMkjRKeLb/jcYhgEpJcLhMMLhMKSU8DwPe3t7DLCa+fS8tryyDNd1oWla5fN9Hzs7O1j9sHqXt3ANhoeH1cDAAJqbmvGj8AMLCwuYmJgI7G8MERERERER0f8mcI/03t7e/fb29rpkMgnXdfHx00fMzrATqcngjUHVfakb8XgcQohKJ7K5tYmHDx6yE6mm53LPVMf5DjQ2NsI0Tei6Dt/34TgONE3D2NiYmp6eZidylLgdv3fq5CmkUqkDnYjjOBBC4MvuF/AEVhENRWFZ1qFORNf1X52IwU6kqu/Od+T38zAMA7quQwgBIQQikQg8z0Pua44BVvMm/UZber90qBMpl8vYzmxjZWklkJ1I4IyMjKh0Oq3W19fV4uKimro/pZgKERERERERUXAEbsN7rf+aOtdxDsljSZTcErY2t/Di5Qt2IrUYGhpSfX19sCwLUkoopVAoFLCxsYHJyUl2ItX0XOl53dnZiaampkMr/VAohNt3bqvnz56zEzlKwkrcaGtrQyqVQiKROBCglBIndk6AJ7AKKSVs20YymYRlWZVa8/dKPxqNBjLAwKz0C04B+Xwe0Wi00olIKWEYBjzPw25ul1f+n4yPj6tMJqMcx1Gu66pisajy+byam5vjWr9Wo7dG1dt3b1U2m1Vra2vqydMnDI+IiIiIiIiI/h0/AaEPHrjW6Tb1AAAAAElFTkSuQmCC"); +} + +.bb-bb10-action-bar-overflow-button-lowres-light +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEEBYiHdCucpAAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABMElEQVRYw+3XMYqDUBAG4GEVJILFkiZFUgSbQMgBBJvAFnapA7GSVGKbC6Sz9RqPFNqIHiF2SSHYpE6hpIqF+u8lLN5u5jvA8MPMvOERMcYYY/9amqa43++QOqTrulitVrBtG1mWjRr2a6xCQghcr1eaTqdU1zXFcUxSBp3NZmQYBr1eL+r7npbLpbytF0LA8zyEYQjeVsY+RVmW8m/86XTCZrPBbrdDURRyBr5cLlgsFliv15jP5wiCQM4TqqoqKYpCXdfRMAykaZq8rT+fz7AsC4fDAbfbTe5ZfTweP/ykMPYpoijCdruF7/uoqqoes7Y6VqEkSXA8HgkAFUVBk8nkW8rL1DQNtW1Luq6Toij0fD7l/NxZltU4jkPv95tM06T9fi/3nOZ5Lv/5ZIz9Ab8IP3sHbvNNngAAAABJRU5ErkJggg=="); +} + +.bb-bb10-action-bar-overflow-button-hires-light +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFxQNFCU9Ho4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABqUlEQVR42u3b223bQBBG4ZmdFfXsRnhBakkNKSEtpBa3oisbSQPkcvMgLCHKDK3kaWScDxBgQC/EDy8I8IgiAAAAAAAAAADgBai3C2qaJpuZqN4uLaUk1+tVGfDJ8Xa73TxekVKS8/nscsTg5ULqpj7GGCWE8OFjZtJ2bfY4YPRzFPSbmUkIYfEfmHO+jRhMGHBrQNXF51W4OcI5Z5mmaXXQ8j0Dbuj7XsdxnMd7vImM4/iDu/ATuq7LVVVJCEFyzjIMg5xOp9c50wAAAAAAfHEem8hvM3ujifzPeG2Tq111u7C754BpSnI+0UQ21XX9K1qcG8iiiQSTrutoIptHQfVniUqPTUREJIQgDLg94GoTKX977STumsjfhrrvJQy4ojSRtXhEE/kHpYmY2dxEjscjTQQAAAAAACdcvicSYxRVnR9xXS4Xmsgz2rad3xNZNJGU3P5K1VMTeS+P9D80EaOJfH4UVL/fD1fknEVV3T6RdtVEynhrj/VpIp+4f0/kMTA9vkPCgCv6vtdhGFa/m6bJ7U3EZRPZ7/eLJnI4HGgiAAAAAADga/gD0hGqxramvjAAAAAASUVORK5CYII="); +} + +/* ================================================= + BB10 Context Menu +=================================================*/ + +.bb-bb10-context-menu +{ + z-index: 1002; + position:fixed; + height: 100%; + width: 80%; + top: 0px; + clear: both; +} + +.bb-bb10-context-menu-overlay +{ + z-index: 1000; + position: fixed; + top: 0px; + right:0px; + bottom:0px; + left:0px; + display:none; +} + +.bb-bb10-context-menu-lowres-dark +{ + background-color: #121212; + border-left: solid 1px #161616; +} + +.bb-bb10-context-menu-hires-dark +{ + background-color: #121212; + border-left: solid 2px #161616; +} + +.bb-bb10-context-menu-lowres-light +{ + background-color: #F9F9F9; + border-left: solid 1px #D1D1D1; +} + +.bb-bb10-context-menu-hires-light +{ + background-color: #F9F9F9; + border-left: solid 1px #D1D1D1; +} + +.bb-bb10-context-menu-item-lowres +{ + padding-top: 7px; + padding-bottom: 3px; + padding-left: 5px; + height: 52px; + line-height: 52px; + vertical-align: center; + font-size:16pt; +} + +.bb-bb10-context-menu-item-hires +{ + padding-top: 14px; + padding-bottom: 3px; + padding-left: 10px; + height: 109px; + line-height: 109px; + vertical-align: center; + font-size:30pt; +} + +.bb-bb10-context-menu-item-inner-lowres +{ + padding-left: 5px; + position:relative; + float:left; +} + +.bb-bb10-context-menu-item-inner-hires +{ + padding-left: 15px; + position:relative; + float:left; +} + +.bb-bb10-context-menu-header-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#323232), to(#272727)); + border-bottom: solid 1px #404040; +} + + +.bb-bb10-context-menu-header-title-lowres +{ + font-size: 18pt; + height:30px; + line-height:30px; + padding-left: 15px; + margin:0px; +} + +.bb-bb10-context-menu-header-title-hires +{ + font-size:30pt; + height:30px; + line-height:30px; + padding-left: 18px; + margin:0px; + padding-top:20px; +} + +.bb-bb10-context-menu-header-description-lowres +{ + color: #737173; + font-size: 14pt; + height:30px; + line-height:30px; + padding-left: 15px; + margin:0px; + margin-top:-10px; +} + +.bb-bb10-context-menu-header-description-hires +{ + color: #737173; + font-size: 24pt; + height:30px; + line-height:30px; + padding-left: 18px; + margin:0px; + margin-top:5px; +} + +.bb-bb10-context-menu-header-title-dark +{ + color: white; +} + +.bb-bb10-context-menu-header-title-light +{ + color: black; +} + +.bb-bb10-context-menu-header-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#FBFBFB), to(#E0E0E0)); + border-bottom: solid 1px #D9DCDE; +} + +.bb-bb10-context-menu-item-lowres-light +{ + color:Black; + border-bottom: solid 1px #D9DCDE; +} + +.bb-bb10-context-menu-item-hires-light +{ + color:Black; + border-bottom: solid 2px #D9DCDE; +} + +.bb-bb10-context-menu-item-lowres-dark +{ + color:White; + border-bottom: solid 1px #404040 +} + +.bb-bb10-context-menu-item-hires-dark +{ + color:White; + border-bottom: solid 2px #404040 +} + +.bb-bb10-context-menu-item-hover-lowres +{ + border-left: solid 5px; + padding-left: 0px; +} + +.bb-bb10-context-menu-item-hover-hires +{ + border-left: solid 10px; + padding-left: 0px; +} + +.bb-bb10-context-menu-item-image-lowres +{ + position:relative; + float:left; + height: 42px; + width: 42px; + margin-top:3px; +} + +.bb-bb10-context-menu-item-image-hires +{ + position:relative; + float:left; + height: 80px; + width: 80px; + margin-top:8px; + margin-left:12px; +} + + +/* ================================================= + Not sure if these are needed anymore + =================================================*/ + +.panel-nogap input +{ + display:inline; + float:left; + font-family: BBAlpha Sans; + font-size: 16pt; + border: none; + padding-top: 0px; + width: 10px; +} + + + + diff --git a/pkg/bbui-0.9.1.js b/pkg/bbui-0.9.1.js new file mode 100644 index 00000000..40707fd6 --- /dev/null +++ b/pkg/bbui-0.9.1.js @@ -0,0 +1,4319 @@ +/* +* Copyright 2010-2012 Research In Motion Limited. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +bb = { + scroller: null, + screens: [], + dropdownScrollers: [], + + + // Initialize the the options of bbUI + init : function (options) { + if (options) { + var i; + // User defined options + for (i in options) bb.options[i] = options[i]; + } + + // Assign our back handler if provided otherwise assign the default + if (window.blackberry && blackberry.system && blackberry.system.event && blackberry.system.event.onHardwareKey) { + + if (bb.options.onbackkey) { + blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK, bb.options.onbackkey); + } else { // Use the default + blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK, bb.popScreen); + } + } + + // Initialize our flags once so that we don't have to run logic in-line for decision making + bb.device.isRipple = (navigator.appVersion.indexOf('Ripple') >= 0); + bb.device.isPlayBook = (navigator.appVersion.indexOf('PlayBook') >= 0) || ((window.innerWidth == 1024 && window.innerHeight == 600) || (window.innerWidth == 600 && window.innerHeight == 1024)); + if (bb.device.isPlayBook && bb.options.bb10ForPlayBook) { + bb.device.isBB10 = true; + } else { + bb.device.isBB10 = (navigator.appVersion.indexOf('Version/10.0') >= 0); + } + bb.device.isBB7 = (navigator.appVersion.indexOf('7.0.0') >= 0) || (navigator.appVersion.indexOf('7.1.0') >= 0) || bb.device.isRipple; + bb.device.isBB6 = navigator.appVersion.indexOf('6.0.0') >= 0; + bb.device.isBB5 = navigator.appVersion.indexOf('5.0.0') >= 0; + // Determine HiRes + if (bb.device.isRipple) { + bb.device.isHiRes = window.innerHeight > 480 || window.innerWidth > 480; + } else { + bb.device.isHiRes = screen.width > 480 || screen.height > 480; + } + + // Create our coloring + if (document.styleSheets && document.styleSheets.length) { + try { + document.styleSheets[0].insertRule('.bb10Highlight {background-color:'+ bb.options.bb10HighlightColor +';background-image:none;}', 0); + document.styleSheets[0].insertRule('.bb10-button-highlight {color:White;background-image: -webkit-gradient(linear, center top, center bottom, from('+bb.options.bb10AccentColor+'), to('+bb.options.bb10HighlightColor+'));border-color:#53514F;}', 0); + document.styleSheets[0].insertRule('.bb10Accent {background-color:'+ bb.options.bb10AccentColor +';}', 0); + } + catch (ex) { + console.log(ex.message); + } + } + // Set our action bar coloring + if (bb.options.bb10ActionBarDark) { + bb.actionBar.color = 'dark'; + } else { + bb.actionBar.color = 'light'; + } + + // Set our control coloring + if (bb.options.bb10ControlsDark) { + bb.screen.controlColor = 'dark'; + } else { + bb.screen.controlColor = 'light'; + } + + // Set our list coloring + if (bb.options.bb10ListsDark) { + bb.screen.listColor = 'dark'; + } else { + bb.screen.listColor = 'light'; + } + + }, + + doLoad: function(element) { + // Apply our styling + var root = element || document.body; + + bb.screen.apply(root.querySelectorAll('[data-bb-type=screen]')); + bb.textInput.apply(root.querySelectorAll('input[type=text]')); + bb.dropdown.apply(root.querySelectorAll('select')); + bb.roundPanel.apply(root.querySelectorAll('[data-bb-type=round-panel]')); + bb.textArrowList.apply(root.querySelectorAll('[data-bb-type=text-arrow-list]')); + bb.imageList.apply(root.querySelectorAll('[data-bb-type=image-list]')); + bb.grid.apply(root.querySelectorAll('[data-bb-type=grid-layout]')); + bb.bbmBubble.apply(root.querySelectorAll('[data-bb-type=bbm-bubble]')); + bb.pillButtons.apply(root.querySelectorAll('[data-bb-type=pill-buttons]')); + bb.labelControlContainers.apply(root.querySelectorAll('[data-bb-type=label-control-container]')); + bb.button.apply(root.querySelectorAll('[data-bb-type=button]')); + + // perform device specific formatting + bb.screen.reAdjustHeight(); + }, + + device: { + isHiRes: false, + isBB5: false, + isBB6: false, + isBB7: false, + isBB10: false, + isPlayBook: false, + isRipple: false + }, + + // Options for rendering + options: { + onbackkey: null, + onscreenready: null, + ondomready: null, + bb10ActionBarDark: true, + bb10ControlsDark: true, + bb10ListsDark: false, + bb10ForPlayBook: false, + bb10AccentColor: '#2D566F', + bb10HighlightColor: '#00A8DF' + }, + + loadScreen: function(url, id) { + var xhr = new XMLHttpRequest(), + container = document.createElement('div'), + _reduce = function (nl, func, start) { + var result = start; + + Array.prototype.forEach.apply(nl, [function (v) { + result = func(result, v); + }]); + + return result; + }, + whereScript = function (result, el) { + if (el.nodeName === "SCRIPT") { + result.push(el); + } + + return _reduce(el.childNodes, whereScript, result); + }, + i, + scripts = [], + newScriptTags = []; + + xhr.open("GET", url, false); + xhr.send(); + + container.setAttribute('id', id); + container.innerHTML = xhr.responseText; + + // Add any Java Script files that need to be included + scripts = _reduce(container.childNodes, whereScript, []), + container.scriptIds = []; + + scripts.forEach(function (script) { + var scriptTag = document.createElement('script'); + + if (script.text) { + //if there is text, just eval it since they probably don't have a src. + eval(script.text); + return; + } + container.scriptIds.push({'id' : script.getAttribute('id'), 'onunload': script.getAttribute('onunload')}); + scriptTag.setAttribute('type','text/javascript'); + scriptTag.setAttribute('src', script.getAttribute('src')); + scriptTag.setAttribute('id', script.getAttribute('id')); + newScriptTags.push(scriptTag); + // Remove script tag from container because we are going to add it to + script.parentNode.removeChild(script); + }); + + // Add getElementById for the container so that it can be used in the onscreenready event + container.getElementById = function(id, node) { + var result = null; + if (!node) { + node = this; + } + + if ( node.getAttribute('id') == id ) + return node; + + for ( var i = 0; i < node.childNodes.length; i++ ) { + var child = node.childNodes[i]; + if ( child.nodeType == 1 ) { + result = this.getElementById( id, child ); + if (result) + break; + } + } + return result; + }; + + // Special handling for inserting script tags + bb.screen.scriptCounter = 0; + bb.screen.totalScripts = newScriptTags.length; + for (var i = 0; i < newScriptTags.length; i++) { + document.body.appendChild(newScriptTags[i]); + newScriptTags[i].onload = function() { + bb.screen.scriptCounter++; + if(bb.screen.scriptCounter == bb.screen.totalScripts) { + bb.initContainer(container, id); + } + }; + } + + // In case there are no scripts at all we simply doLoad() now + if(bb.screen.totalScripts === 0) { + bb.initContainer(container, id); + } + return container; + }, + + // Initialize the container + initContainer : function(container, id) { + // Fire the onscreenready and then apply our changes in doLoad() + if (bb.options.onscreenready) { + bb.options.onscreenready(container, id); + } + bb.doLoad(container); + // Load in the new content + document.body.appendChild(container); + // Fire the ondomready after the element is added to the DOM + if (bb.options.ondomready) { + bb.domready.container = container; + bb.domready.id = id; + setTimeout(bb.domready.fire(), 1); + } + window.scroll(0,0); + bb.screen.applyEffect(id, container); + bb.createScreenScroller(); + }, + + // Function pointer to allow us to asynchronously fire ondomready + domready : { + + container : null, + id : null, + + fire : function() { + bb.options.ondomready(bb.domready.container, bb.domready.id); + bb.domready.container = null; + bb.domready.id = null; + } + + }, + + // Creates the scroller for the screen + createScreenScroller : function() { + var scrollWrapper = document.getElementById('bbUIscrollWrapper'); + if (scrollWrapper) { + bb.scroller = new iScroll(scrollWrapper, {hideScrollbar:true,fadeScrollbar:true, onBeforeScrollStart: function (e) { + var target = e.target; + + // Don't scroll the screen when touching in our drop downs for BB10 + if (target.parentNode && target.parentNode.getAttribute('class') == 'bb-bb10-dropdown-items') { + return; + } + + while (target.nodeType != 1) target = target.parentNode; + + if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { + e.preventDefault(); + } + }}); + } + }, + + // Clear the scroller objects + clearScrollers: function() { + // first clear our dropdown scrollers + var scroller; + for (var i = bb.dropdownScrollers -1; i > -1; i--) { + scroller = bb.dropdownScrollers[i]; + scroller.destroy(); + scroller = null; + bb.dropdownScrollers.pop(); + } + if (bb.scroller) { + bb.scroller.destroy(); + bb.scroller = null; + } + }, + + // Add a new screen to the stack + pushScreen : function (url, id) { + + // Remove our old screen + bb.removeLoadedScripts(); + bb.menuBar.clearMenu(); + var numItems = bb.screens.length; + if (numItems > 0) { + var oldScreen = document.getElementById(bb.screens[numItems -1].id); + document.body.removeChild(oldScreen); + bb.clearScrollers(); + } + + // Add our screen to the stack + var container = bb.loadScreen(url, id); + + bb.screens.push({'id' : id, 'url' : url, 'scripts' : container.scriptIds}); + }, + + // Pop a screen from the stack + popScreen: function() { + + var numItems = bb.screens.length; + if (numItems > 1) { + bb.removeLoadedScripts(); + bb.clearScrollers(); + var currentStackItem = bb.screens[numItems-1], + current = document.getElementById(currentStackItem.id); + document.body.removeChild(current); + bb.screens.pop(); + bb.menuBar.clearMenu(); + bb.screen.overlay = null; + + // Retrieve our new screen + var display = bb.screens[numItems-2], + container = bb.loadScreen(display.url, display.id); + + window.scroll(0,0); + bb.screen.applyEffect(display.id, container); + + } else { + if (blackberry) { + blackberry.app.exit(); + } + } + }, + + removeLoadedScripts: function() { + // pop the old item + var numItems = bb.screens.length; + if (numItems > 0) { + var currentStackItem = bb.screens[numItems-1], + current = document.getElementById(currentStackItem.id); + + // Remove any JavaScript files + for (var i = 0; i < currentStackItem.scripts.length; i++) { + var bbScript = currentStackItem.scripts[i], + scriptTag = document.getElementById(bbScript.id); + // Call the unload function if any is defined + if (bbScript.onunload) { + eval(bbScript.onunload); + } + + document.body.removeChild(scriptTag); + } + } + } +}; + +Function.prototype.bind = function(object){ + var fn = this; + return function(){ + return fn.apply(object, arguments); + }; +}; + + +bb.menuBar = { + height: 103, + activeClick: false, + ignoreClick: false, + menuOpen: false, + menu: false, + + apply: function(menuBar,screen){ + if ((window.blackberry && blackberry.app.event) && (bb.device.isPlayBook || bb.device.isBB10)) { + bb.menuBar.createSwipeMenu(menuBar,screen); + if (bb.device.isPlayBook && !bb.device.isBB10) { + menuBar.parentNode.removeChild(menuBar); + } + document.addEventListener("click", bb.menuBar.globalClickHandler, false); + blackberry.app.event.onSwipeDown(bb.menuBar.showMenuBar); + }else if(window.blackberry && blackberry.ui.menu){ + bb.menuBar.createBlackberryMenu(menuBar); + menuBar.parentNode.removeChild(menuBar); + }else{ + console.log('Unable to create Blackberry/onSwipeDown menu.'); + } + }, + + createBlackberryMenu: function(menuBar){ + var items, + item, + title, + div; + + items = menuBar.getElementsByTagName('div'); + + for (var j = 0; j < items.length; j++) { + div = items[j]; + if(div.getAttribute('data-bb-type') === "menu-item"){ + title = div.innerHTML; + if(title){ + item = new blackberry.ui.menu.MenuItem(false, j, title, div.onclick); + blackberry.ui.menu.addMenuItem(item); + if(div.hasAttribute('data-bb-selected') && div.getAttribute('data-bb-selected') === "true"){ + blackberry.ui.menu.setDefaultMenuItem(item); + } + }else{ + console.log("can't add menu item without data-bb-caption"); + } + }else if(div.getAttribute('data-bb-type') === "menu-separator"){ + item = new blackberry.ui.menu.MenuItem(true, j); + blackberry.ui.menu.addMenuItem(item); + }else{ + console.log('invalid menu item type'); + } + } + }, + + createSwipeMenu: function(menuBar, screen){ + + // Get our resolution text for BB10 styling + if (bb.device.isBB10) { + var res, + i, + type, + item, + foundItems = [], + img, + imgPath, + caption, + div, + width; + + if (bb.device.isPlayBook) { + res = 'lowres'; + bb.menuBar.height = 100; + } else { + res = 'hires'; + bb.menuBar.height = 140; + } + //screen.appendChild(menuBar); + menuBar.setAttribute('class','bb-bb10-menu-bar-'+res+' bb-bb10-menu-bar-'+bb.actionBar.color); + items = menuBar.querySelectorAll('[data-bb-type=menu-item]'); + for (i = 0; i < items.length; i++) { + item = items[i]; + type = item.hasAttribute('data-bb-type') ? item.getAttribute('data-bb-type').toLowerCase() : undefined; + // Get our menu items + if (type == 'menu-item') { + caption = item.innerHTML; + imgPath = item.getAttribute('data-bb-img'); + // If the item doesn't have both an image and text then remove it + if ((caption && imgPath) && (foundItems.length < 5)) { + // BB10 menus only allow 5 items max + foundItems.push(item); + // Set our item information + item.setAttribute('class','bb-bb10-menu-bar-item-'+res); + item.innerHTML = ''; + // Add the image + img = document.createElement('img'); + img.setAttribute('src',imgPath); + item.appendChild(img); + // Add the caption + div = document.createElement('div'); + div.setAttribute('class','bb-bb10-menu-bar-item-caption-'+res); + div.innerHTML = caption; + item.appendChild(div); + } else { + item.style.display = 'none'; + } + } else { + item.style.display = 'none'; + } + } + // Now apply the widths since we now know how many there are + if (foundItems.length > 0) { + width = Math.floor(100/foundItems.length); + for (i = 0; i < foundItems.length;i++) { + item = foundItems[i]; + if (i == foundItems.length -1) { + item.style.width = width - 1 +'%'; + item.style.float = 'right'; + } else { + item.style.width = width +'%'; + } + } + } else { + menuBar.style.display = 'none'; + bb.menuBar.menu = null; + } + // Remove any separators + if (bb.menuBar.menu) { + items = menuBar.querySelectorAll('[data-bb-type=menu-separator]'); + for (i = 0; i < items.length; i++) { + items[i].style.display = 'none'; + } + } + // Set the size of the menu bar and assign the lstener + menuBar.style['-webkit-transform'] = 'translate(0,0)'; + menuBar.addEventListener('click', bb.menuBar.onMenuBarClicked, false); + // Assign the menu + bb.menuBar.menu = menuBar; + } else { + var pbMenu = document.createElement('div'), + items, + pbMenuInner, + j, + item, + img, + title, + div, + br, + pbMenuItem; + pbMenu.setAttribute('class','pb-menu-bar'); + // See if there are any items declared + items = menuBar.getElementsByTagName('div'); + if(items.length > 0){ + pbMenuInner = document.createElement("ul"); + pbMenu.appendChild(pbMenuInner); + // Loop through our menu items + for (j = 0; j < items.length; j++) { + item = items[j]; + if(item.getAttribute('data-bb-type') === "menu-item"){ + // Assign our values + title = item.innerHTML + iconPath = item.getAttribute('data-bb-img'); + + // If they don't hav both an icon and a title ignore the item + if (title && iconPath) { + // Create our item + pbMenuItem = document.createElement("li"); + item.innerHTML = ''; + + // Get our image + img = new Image(); + img.src = iconPath; + pbMenuItem.appendChild(img); + + // Add our caption + div = document.createElement('div'); + div.setAttribute('class','pb-menu-bar-caption'); + div.innerText = title; + pbMenuItem.appendChild(div); + + // Assign any click handlers + pbMenuItem.onclick = item.onclick; + pbMenuInner.appendChild(pbMenuItem); + } + } else if(item.getAttribute('data-bb-type') === "menu-separator"){ + pbMenuInner = document.createElement('ul'); + pbMenu.appendChild(pbMenuInner); + } else{ + console.log('invalid menu item type'); + } + + } + + } + // Set the size of the menu bar and assign the lstener + pbMenu.style['-webkit-transform'] = 'translate(0,0)'; + pbMenu.addEventListener('click', bb.menuBar.onMenuBarClicked, false); + document.body.appendChild(pbMenu); + // Assign the menu + bb.menuBar.menu = pbMenu; + } + + // Add the overlay for trapping clicks on items below + if (!bb.screen.overlay) { + bb.screen.overlay = document.createElement('div'); + bb.screen.overlay.setAttribute('class','bb-bb10-context-menu-overlay'); + screen.appendChild(bb.screen.overlay); + bb.menuBar.menu.overlay = bb.screen.overlay; + } + }, + + showMenuBar: function(){ + if(!bb.menuBar.menuOpen){ + bb.menuBar.menu.overlay.style.display = 'inline'; + blackberry.app.event.onSwipeDown(bb.menuBar.hideMenuBar); + bb.menuBar.menu.style['-webkit-transition'] = 'all 0.5s ease-in-out'; + bb.menuBar.menu.style['-webkit-transform'] = 'translate(0, ' + (bb.menuBar.height + 3) + 'px)'; + bb.menuBar.menuOpen = true; + } + }, + + hideMenuBar: function(){ + if(bb.menuBar.menuOpen){ + bb.menuBar.menu.overlay.style.display = 'none'; + blackberry.app.event.onSwipeDown(bb.menuBar.showMenuBar); + bb.menuBar.menu.style['-webkit-transition'] = 'all 0.5s ease-in-out'; + bb.menuBar.menu.style['-webkit-transform'] = 'translate(0, -' + (bb.menuBar.height + 3) + 'px)'; + bb.menuBar.menuOpen = false; + } + }, + + globalClickHandler: function(){ + if (bb.menuBar.menuOpen && !bb.menuBar.activeClick && !bb.menuBar.ignoreClick) { + bb.menuBar.hideMenuBar(); + } + bb.menuBar.activeClick = false; + bb.menuBar.ignoreClick = false; + }, + + onMenuBarClicked: function () { + bb.menuBar.activeClick = true; + bb.menuBar.hideMenuBar(); + }, + + clearMenu: function(){ + if(window.blackberry){ + if(bb.menuBar.menu && (bb.device.isPlayBook || bb.device.isBB10) && blackberry.app.event){ + blackberry.app.event.onSwipeDown(''); + document.removeEventListener("click", bb.menuBar.globalClickHandler, false); + bb.menuBar.menu.parentNode.removeChild(bb.menuBar.menu); + bb.menuBar.menu = false; + }else if(blackberry.ui && blackberry.ui.menu){ + blackberry.ui.menu.clearMenuItems(); + } + } + } +}; + +bb.bbmBubble = { + // Apply our transforms to all BBM Bubbles + apply: function(elements) { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + + if (outerElement.hasAttribute('data-bb-style')) { + var style = outerElement.getAttribute('data-bb-style').toLowerCase(); + if (style == 'left') + outerElement.setAttribute('class','bb-bbm-bubble-left'); + else + outerElement.setAttribute('class','bb-bbm-bubble-right'); + + var innerElements = outerElement.querySelectorAll('[data-bb-type=item]'); + for (var j = 0; j > innerElements.length; j++) { + outerElement.removeChild(innerElements[j]); + } + + // Create our new
's + var placeholder = document.createElement('div'); + placeholder.setAttribute('class','top-left image'); + outerElement.appendChild(placeholder); + placeholder = document.createElement('div'); + placeholder.setAttribute('class','top-right image'); + outerElement.appendChild(placeholder); + + placeholder = document.createElement('div'); + placeholder.setAttribute('class','inside'); + outerElement.appendChild(placeholder); + + var insidePanel = document.createElement('div'); + insidePanel.setAttribute('class','nogap'); + placeholder.appendChild(insidePanel); + + placeholder = document.createElement('div'); + placeholder.setAttribute('class','bottom-left image'); + outerElement.appendChild(placeholder); + placeholder = document.createElement('div'); + placeholder.setAttribute('class','bottom-right image'); + outerElement.appendChild(placeholder); + // Add our previous children back to the insidePanel + for (var j = 0; j < innerElements.length; j++) { + var innerChildNode = innerElements[j], + description = innerChildNode.innerHTML; + innerChildNode.innerHTML = '\n' + + '
'+ description +'
\n'; + insidePanel.appendChild(innerChildNode); + } + + } + } + } +}; + +bb.button = { + + // Apply our transforms to all arrow buttons passed in + apply: function(elements) { + + if (bb.device.isBB5) { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i], + caption = outerElement.innerHTML, + normal = 'bb5-button', + highlight = 'bb5-button-highlight'; + + /*if (outerElement.hasAttribute('data-bb-style')) { + var style = outerElement.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' button-stretch'; + highlight = highlight + ' button-stretch'; + } + }*/ + outerElement.innerHTML = ''; + outerElement.setAttribute('class','bb-bb5-button'); + var button = document.createElement('a'); + //button.setAttribute('href','#'); + button.setAttribute('class',normal); + button.setAttribute('x-blackberry-focusable','true'); + button.setAttribute('onmouseover',"this.setAttribute('class','" + highlight +"')"); + button.setAttribute('onmouseout',"this.setAttribute('class','" + normal + "')"); + outerElement.appendChild(button); + var span = document.createElement('span'); + span.innerHTML = caption; + button.appendChild(span); + } + } else if (bb.device.isBB10) { + var res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i], + disabledStyle, + innerElement = document.createElement('div'); + disabled = outerElement.hasAttribute('data-bb-disabled'), + normal = 'bb-bb10-button bb-bb10-button-'+res, + highlight = 'bb-bb10-button bb-bb10-button-'+res+' bb10-button-highlight', + outerNormal = 'bb-bb10-button-container-'+res+' bb-bb10-button-container-' + bb.screen.controlColor; + + outerElement.enabled = !disabled; + innerElement.innerHTML = outerElement.innerHTML; + outerElement.innerHTML = ''; + outerElement.appendChild(innerElement); + + if (outerElement.hasAttribute('data-bb-style')) { + var style = outerElement.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' bb-bb10-button-stretch'; + highlight = highlight + ' bb-bb10-button-stretch'; + } + } + // Set our styles + disabledStyle = normal + ' bb-bb10-button-disabled-'+bb.screen.controlColor; + normal = normal + ' bb-bb10-button-' + bb.screen.controlColor; + + if (disabled) { + outerElement.removeAttribute('data-bb-disabled'); + innerElement.setAttribute('class',disabledStyle); + } else { + innerElement.setAttribute('class',normal); + } + // Set our variables on the elements + outerElement.setAttribute('class',outerNormal); + outerElement.outerNormal = outerNormal; + outerElement.innerElement = innerElement; + innerElement.normal = normal; + innerElement.highlight = highlight; + innerElement.disabledStyle = disabledStyle; + if (!disabled) { + outerElement.ontouchstart = function() { + this.innerElement.setAttribute('class', this.innerElement.highlight); + + }; + outerElement.ontouchend = function() { + this.innerElement.setAttribute('class', this.innerElement.normal); + }; + } + + // Trap the click and call it only if the button is enabled + outerElement.trappedClick = outerElement.onclick; + outerElement.onclick = undefined; + if (outerElement.trappedClick !== null) { + outerElement.addEventListener('click',function (e) { + if (this.enabled) { + this.trappedClick(); + } + },false); + } + + // Assign our enable function + outerElement.enable = function(){ + if (this.enabled) return; + this.innerElement.setAttribute('class', this.innerElement.normal); + this.ontouchstart = function() { + this.innerElement.setAttribute('class', this.innerElement.highlight); + + }; + this.ontouchend = function() { + this.innerElement.setAttribute('class', this.innerElement.normal); + }; + this.enabled = true; + }; + // Assign our disable function + outerElement.disable = function(){ + if (!this.enabled) return; + this.innerElement.setAttribute('class', this.innerElement.disabledStyle); + this.ontouchstart = null; + this.ontouchend = null; + this.enabled = false; + }; + } + } else { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i], + disabled = outerElement.hasAttribute('data-bb-disabled'), + normal = 'bb-bb7-button', + highlight = 'bb-bb7-button-highlight', + inEvent, + outEvent; + + // Set our highlight events + if (bb.device.isPlayBook) { + inEvent = 'ontouchstart'; + outEvent = 'ontouchend'; + } else { + inEvent = 'onmouseover'; + outEvent = 'onmouseout'; + } + + outerElement.enabled = !disabled; + + if (disabled) { + normal = 'bb-bb7-button-disabled'; + outerElement.removeAttribute('data-bb-disabled'); + } + + if (bb.device.isHiRes) { + normal = normal + ' bb-bb7-button-hires'; + highlight = highlight + ' bb-bb7-button-hires'; + } else { + normal = normal + ' bb-bb7-button-lowres'; + highlight = highlight + ' bb-bb7-button-lowres'; + } + + if (outerElement.hasAttribute('data-bb-style')) { + var style = outerElement.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' button-stretch'; + highlight = highlight + ' button-stretch'; + } + } + outerElement.setAttribute('class',normal); + if (!disabled) { + outerElement.setAttribute('x-blackberry-focusable','true'); + outerElement.setAttribute(inEvent,"this.setAttribute('class','" + highlight +"')"); + outerElement.setAttribute(outEvent,"this.setAttribute('class','" + normal + "')"); + } + + // Trap the click and call it only if the button is enabled + outerElement.trappedClick = outerElement.onclick; + outerElement.onclick = undefined; + if (outerElement.trappedClick !== null) { + outerElement.addEventListener('click',function (e) { + if (this.enabled) { + this.trappedClick(); + } + },false); + } + + // Assign our enable function + outerElement.enable = function(){ + if (this.enabled) return; + var normal = 'bb-bb7-button', + highlight = 'bb-bb7-button-highlight'; + + if (bb.device.isHiRes) { + normal = normal + ' bb-bb7-button-hires'; + highlight = highlight + ' bb-bb7-button-hires'; + } else { + normal = normal + ' bb-bb7-button-lowres'; + highlight = highlight + ' bb-bb7-button-lowres'; + } + + if (this.hasAttribute('data-bb-style')) { + var style = this.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' button-stretch'; + highlight = highlight + ' button-stretch'; + } + } + this.setAttribute('class',normal); + this.setAttribute('x-blackberry-focusable','true'); + this.setAttribute(inEvent,"this.setAttribute('class','" + highlight +"')"); + this.setAttribute(outEvent,"this.setAttribute('class','" + normal + "')"); + this.enabled = true; + }; + // Assign our disable function + outerElement.disable = function(){ + if (!this.enabled) return; + var normal = 'bb-bb7-button-disabled'; + + if (bb.device.isHiRes) { + normal = normal + ' bb-bb7-button-hires'; + } else { + normal = normal + ' bb-bb7-button-lowres'; + } + + if (this.hasAttribute('data-bb-style')) { + var style = this.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' button-stretch'; + highlight = highlight + ' button-stretch'; + } + } + this.setAttribute('class',normal); + this.removeAttribute('x-blackberry-focusable'); + this.removeAttribute('onmouseover'); + this.removeAttribute('onmouseout'); + this.removeAttribute('ontouchstart'); + this.removeAttribute('ontouchend'); + this.enabled = false; + }; + } + } + } +}; + +bb.dropdown = { + // Apply our transforms to all dropdowns passed in + apply: function(elements) { + if (bb.device.isBB5) { + + } else if (bb.device.isBB10) { + var res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + var options, + option, + caption, + img, + i,j, + innerElement, + select, + innerContainer, + buttonOuter, + dropdown, + labelElement, + captionElement, + itemsElement, + item, + normal = 'bb-bb10-dropdown bb-bb10-dropdown-'+res+' bb-bb10-dropdown-' + bb.screen.controlColor + ' bb-bb10-dropdown-'+res, + highlight = 'bb-bb10-dropdown bb-bb10-dropdown-'+res+' bb10-button-highlight bb-bb10-dropdown-'+res, //********************************* TODO: currently using Button highlight ******************** + outerContainerStyle = 'bb-bb10-dropdown-container-'+res+' bb-bb10-dropdown-container-' + bb.screen.controlColor + ' bb-bb10-dropdown-container-'+res, + innerContainerStyle = 'bb-bb10-dropdown-container-inner-'+res+' bb-bb10-dropdown-container-inner-'+bb.screen.controlColor, + innerButtonStyle = 'bb-bb10-dropdown-inner-'+res+' bb-bb10-dropdown-inner-'+bb.screen.controlColor; + + for (i = 0; i < elements.length; i++) { + select = elements[i] + caption = ''; + options = select.getElementsByTagName('option') + // Make the existing invisible so that we can hide it and create our own display + select.style.display = 'none'; + // Get our selected item in case they haven't specified "selected"; + if (options.length > 0) { + caption = options[0].innerHTML; + } + + // Create the dropdown container and insert it where the select was + dropdown = document.createElement('div'); + dropdown.setAttribute('data-bb-type','dropdown'); + select.dropdown = dropdown; + select.parentNode.insertBefore(dropdown, select); + // Insert the select as an invisible node in the new dropdown element + dropdown.appendChild(select); + + // Create the innerContainer for the dual border + innerContainer = document.createElement('div'); + innerContainer.setAttribute('class',innerContainerStyle); + dropdown.appendChild(innerContainer); + + if (select.hasAttribute('data-bb-style')) { + var style = select.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' bb-bb10-dropdown-stretch'; + highlight = highlight + ' bb-bb10-dropdown-stretch'; + } + } + + // Create our button container for the outer part of the dual border + buttonOuter = document.createElement('div'); + buttonOuter.setAttribute('class',normal); + innerContainer.appendChild(buttonOuter); + + // Create the inner button element + innerElement = document.createElement('div'); + innerElement.setAttribute('class',innerButtonStyle); + buttonOuter.appendChild(innerElement); + + // Create the optinal label for the dropdown + labelElement = document.createElement('div'); + labelElement.setAttribute('class','bb-bb10-dropdown-label'); + if (select.hasAttribute('data-bb-label')) { + labelElement.innerHTML = select.getAttribute('data-bb-label'); + } + innerElement.appendChild(labelElement); + + // Create our dropdown arrow + img = document.createElement('div'); + img.setAttribute('class','bb-bb10-dropdown-arrow-'+res+'-'+bb.screen.controlColor); + innerElement.appendChild(img); + dropdown.img = img; + + // Create the caption for the dropdown + captionElement = document.createElement('div'); + captionElement.setAttribute('class','bb-bb10-dropdown-caption-'+res); + captionElement.innerHTML = caption; + innerElement.appendChild(captionElement); + + // Create the scrolling area + var scrollArea = document.createElement('div'); + scrollArea.style.position = 'relative'; + scrollArea.style['margin-top'] = '10px'; + scrollArea.style.overflow = 'hidden'; + innerContainer.appendChild(scrollArea); + var innerScroller = document.createElement('div'); + scrollArea.appendChild(innerScroller); + + // Create our drop down items + itemsElement = document.createElement('div'); + itemsElement.setAttribute('class','bb-bb10-dropdown-items'); + innerScroller.appendChild(itemsElement); + for (j = 0; j < options.length; j++) { + option = options[j]; + item = document.createElement('div'); + item.slectedStyle = 'bb-bb10-dropdown-item-'+res+' bb-bb10-dropdown-item-'+bb.screen.controlColor+' bb-bb10-dropdown-item-selected-'+ bb.screen.controlColor; + item.normalStyle = 'bb-bb10-dropdown-item-'+res+' bb-bb10-dropdown-item-'+bb.screen.controlColor; + item.index = j; + item.select = select; + item.dropdown = dropdown; + if (!item.dropdown.selected) { + item.dropdown.selected = item; + } + item.innerHTML = option.innerHTML; + itemsElement.appendChild(item); + // Create the image + img = document.createElement('div'); + img.setAttribute('class','bb-bb10-dropdown-selected-image-'+res+'-'+bb.screen.controlColor); + item.img = img; + item.appendChild(img); + + // See if it was specified as the selected item + if (option.hasAttribute('selected')) { + captionElement.innerHTML = option.innerHTML; + item.setAttribute('class',item.slectedStyle); + img.style.visibility = 'visible'; + item.dropdown.selected = item; + } else { + item.setAttribute('class',item.normalStyle); + } + // Assign our item handlers + item.ontouchstart = function(event) { + this.style['background-color'] = bb.options.bb10HighlightColor; + this.style['color'] = 'white'; + }; + + item.ontouchend = function(event) { + this.style['background-color'] = 'transparent'; + this.style['color'] = ''; + }; + item.onclick = function() { + // Style the previously selected item as no longer selected + if (this.dropdown.selected) { + this.dropdown.selected.setAttribute('class',this.normalStyle); + this.dropdown.selected.img.style.visibility = 'hidden'; + } + // Style this item as selected + this.setAttribute('class',this.slectedStyle); + this.img.style.visibility = 'visible'; + this.dropdown.selected = this; + // Set our index and fire the event + this.select.setSelectedItem(this.index); + this.dropdown.hide(); + }; + } + + // set our outward styling + dropdown.setAttribute('class',outerContainerStyle); + dropdown.buttonOuter = buttonOuter; + dropdown.isRefreshed = false; + dropdown.select = select; + dropdown.caption = captionElement; + dropdown.options = options; + buttonOuter.dropdown = dropdown; + dropdown.open = false; + buttonOuter.normal = normal; + buttonOuter.highlight = highlight; + + // Create our scroller + dropdown.scroller = new iScroll(scrollArea, {vScrollbar: false, + onBeforeScrollStart: function (e) { + if (bb.scroller) { + bb.scroller.disable(); + } + e.preventDefault(); + }, + onBeforeScrollEnd: function(e) { + if (bb.scroller) { + bb.scroller.enable(); + } + }}); + bb.dropdownScrollers.push(dropdown.scroller); + dropdown.scrollArea = scrollArea; + + // Assign our touch handlers to out-most div + buttonOuter.ontouchstart = function(event) { + this.setAttribute('class', this.highlight); + }; + buttonOuter.ontouchend = function(event) { + this.setAttribute('class', this.normal); + }; + buttonOuter.onclick = function(event) { + if (!this.dropdown.open) { + this.dropdown.show(); + } else { + this.dropdown.hide(); + } + }; + // Collapse the combo-box + dropdown.show = function() { + var scrollHeight; + this.open = true; + // Figure out how many items to show + if (this.options.length > 5) { + this.numItems = 5; + } else { + this.numItems = this.options.length; + } + // Set the open height + if (bb.device.isPlayBook) { + scrollHeight = (this.numItems * 54); + this.style.height = 60 + scrollHeight +'px'; + } else { + scrollHeight = (this.numItems * 99); + this.style.height = 95 + scrollHeight +'px'; + } + // Refresh our scroller based on the height only once + this.scrollArea.style.height = scrollHeight - 10 + 'px'; + if (!this.isRefreshed) { + this.scroller.refresh(); + this.isRefreshed = true; + } + this.scroller.scrollToElement(this.selected,0); + + // Animate our caption change + this.caption.style.opacity = '0.0'; + this.caption.style['-webkit-transition'] = 'opacity 0.5s linear'; + this.caption.style['-webkit-backface-visibility'] = 'hidden'; + this.caption.style['-webkit-perspective'] = 1000; + this.caption.style['-webkit-transform'] = 'translate3d(0,0,0)'; + + // Animate our arrow + this.img.style.opacity = '1.0'; + this.img.style['-webkit-transition'] = 'all 0.5s ease-in-out'; + this.img.style['-webkit-transform'] = 'rotate(-720deg)'; + }; + dropdown.show = dropdown.show.bind(dropdown); + // Collapse the combo-box + dropdown.hide = function() { + this.open = false; + this.style.height = '59px'; + + if (bb.device.isPlayBook) { + this.style.height = '60px'; + } else { + this.style.height = '95px'; + } + + // Animate our caption change + this.caption.style.opacity = '1.0'; + this.caption.style['-webkit-transition'] = 'opacity 0.5s linear'; + this.caption.style['-webkit-backface-visibility'] = 'hidden'; + this.caption.style['-webkit-perspective'] = 1000; + + // Animate our arrow + this.img.style.opacity = '0.0'; + this.img.style['-webkit-transition'] = 'all 0.5s ease-in-out'; + this.img.style['-webkit-transform'] = 'rotate(0deg)'; + }; + dropdown.hide = dropdown.hide.bind(dropdown); + + // Assign our functions to be able to set the value + select.setSelectedItem = function(index) { + if (this.selectedIndex != index) { + this.selectedIndex = index; + this.dropdown.caption.innerHTML = this.options[index].text; + + window.setTimeout(this.fireEvent,0); + } + }; + // Have this function so we can asynchronously fire the change event + select.fireEvent = function() { + // Raise the DOM event + var evObj = document.createEvent('HTMLEvents'); + evObj.initEvent('change', false, true ); + this.dispatchEvent(evObj); + }; + select.fireEvent = select.fireEvent.bind(select); + } + } else { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i], + options = outerElement.getElementsByTagName('option'), + caption = '', + inEvent, + outEvent; + + // Set our highlight events + if (bb.device.isPlayBook) { + inEvent = 'ontouchstart'; + outEvent = 'ontouchend'; + } else { + inEvent = 'onmouseover'; + outEvent = 'onmouseout'; + } + + outerElement.style.display = 'none'; + // Get our selected item + if (options.length > 0) { + caption = options[0].innerHTML; + } + for (var j = 0; j < options.length; j++) { + if (options[j].hasAttribute('selected')) { + caption = options[j].innerHTML; + break; + } + } + + // Create our new dropdown button + var dropdown = document.createElement('div'); + dropdown.innerHTML = '
' + caption + '
'; + + var normal = 'bb-bb7-dropdown', + highlight = 'bb-bb7-dropdown-highlight'; + + if (bb.device.isHiRes) { + normal = normal + ' bb-bb7-dropdown-hires'; + highlight = highlight + ' bb-bb7-dropdown-hires'; + } else { + normal = normal + ' bb-bb7-dropdown-lowres'; + highlight = highlight + ' bb-bb7-dropdown-lowres'; + } + + if (outerElement.hasAttribute('data-bb-style')) { + var style = outerElement.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' dropdown-stretch'; + highlight = highlight + ' dropdown-stretch'; + } + } + dropdown.setAttribute('data-bb-type','dropdown'); + dropdown.setAttribute('class',normal); + dropdown.setAttribute('x-blackberry-focusable','true'); + dropdown.setAttribute(inEvent,"this.setAttribute('class','" + highlight +"')"); + dropdown.setAttribute(outEvent,"this.setAttribute('class','" + normal + "')"); + outerElement.parentNode.insertBefore(dropdown, outerElement); + dropdown.appendChild(outerElement); + + // Assign our functions to be able to set the value + outerElement.dropdown = dropdown; + outerElement.setSelectedItem = function(index) { + var select = this.dropdown.getElementsByTagName('select')[0]; + if (select && select.selectedIndex != index) { + select.selectedIndex = index; + // Change our button caption + var caption = this.dropdown.querySelectorAll('[data-bb-type=caption]')[0]; + if (caption) { + caption.innerHTML = '' + select.options[index].text + ''; + } + // Raise the DOM event + var evObj = document.createEvent('HTMLEvents'); + evObj.initEvent('change', false, true ); + select.dispatchEvent(evObj); + } + }; + + // Set our click handler + dropdown.onclick = function() { + var select = this.getElementsByTagName('select')[0]; + // Add our emulation for Ripple + if (bb.device.isPlayBook || bb.device.isRipple) { + // Create the overlay to trap clicks on the screen + var overlay = document.createElement('div'); + overlay.setAttribute('id', 'ripple-dropdown-overlay'); + overlay.setAttribute('style', 'position: absolute;left: 0px;top: ' + document.body.scrollTop + 'px;width:100%;height:100%;z-index: 1000000;'); + // Close the overlay if they click outside of the select box + overlay.onclick = function () { + if (this.parentNode !== null) { + this.parentNode.removeChild(this); + } + }; + + // Create our dialog + var dialog = document.createElement('div'); + if (bb.device.isHiRes) { + dialog.setAttribute('class', 'ripple-dropdown-dialog bb-hires-screen'); + } else { + dialog.setAttribute('class', 'ripple-dropdown-dialog'); + } + overlay.appendChild(dialog); + dialog.onclick = function() { + this.parentNode.parentNode.removeChild(this.parentNode); + }; + + // Add our options + for (var i = 0; i < select.options.length; i++) { + var item = select.options[i], + highlight = document.createElement('div'); + + dialog.appendChild(highlight); + var option = document.createElement('div'); + if (item.selected) { + option.setAttribute('class', 'item selected'); + highlight.setAttribute('class','backgroundHighlight backgroundSelected'); + } else { + option.setAttribute('class', 'item'); + highlight.setAttribute('class','backgroundHighlight'); + } + + option.innerHTML = '' + item.text + ''; + option.setAttribute('x-blackberry-focusable','true'); + option.setAttribute('data-bb-index', i); + // Assign our dropdown for when the item is clicked + option.dropdown = this; + option.onclick = function() { + var index = this.getAttribute('data-bb-index'); + // Retrieve our select + var select = this.dropdown.getElementsByTagName('select')[0]; + if (select) { + select.setSelectedItem(index); + } + }; + // Add to the DOM + highlight.appendChild(option); + } + + var height = (select.options.length * 45) + 20, + maxHeight = window.innerHeight - 80; + if (height > maxHeight) { + height = maxHeight; + dialog.style.height = maxHeight + 'px'; + } + + var top = (window.innerHeight/2) - (height/2); + dialog.style.top = top + 'px'; + + // Add the overlay to the DOM now that we are done + document.body.appendChild(overlay); + } else { + //On Smartphones, use the new Select Asynch dialog in blackberry.ui.dialog + var inputs = []; + for (var i = 0; i < select.options.length; i++) { + inputs[i] = { label : select.options[i].text, selected : i == select.selectedIndex, enabled : true, type : "option"}; + } + try { + blackberry.ui.dialog.selectAsync(false, inputs, + function (indices) { + if (indices.length > 0 && indices[0] < select.options.length) { + select.setSelectedItem(indices[0]); + } + } + ); + } catch (e) { + console.log("Exception in selectAsync: " + e); + } + } + }; + } + } + } +}; + +bb.imageList = { + apply: function(elements) { + if (bb.device.isBB10) { + var res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + + // Apply our transforms to all Image Lists + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i], + normal, + highlight, + contextMenu; + outerElement.setAttribute('class','bb-bb10-image-list'); + // Assign our context menu if there is one + if (outerElement.hasAttribute('data-bb-context') && outerElement.getAttribute('data-bb-context').toLowerCase() == 'true') { + contextMenu = bb.screen.contextMenu; + } + // Gather our inner items + var items = outerElement.querySelectorAll('[data-bb-type=item], [data-bb-type=header]'); + for (var j = 0; j < items.length; j++) { + var innerChildNode = items[j]; + if (innerChildNode.hasAttribute('data-bb-type')) { + // Figure out the type of item + var type = innerChildNode.getAttribute('data-bb-type').toLowerCase(), + description = innerChildNode.innerHTML, + title, + accentText, + img, + details, + descriptionDiv; + + if (type == 'header') { + // Set our normal and highlight styling + normal = 'bb-bb10-image-list-header bb10Accent bb-bb10-image-list-header-'+res; + highlight = 'bb-bb10-image-list-header bb10Highlight bb-bb10-image-list-header-'+res; + // Check for alignment + if (innerChildNode.hasAttribute('data-bb-justify')) { + if (innerChildNode.getAttribute('data-bb-justify').toLowerCase() == 'left') { + normal = normal + ' bb-bb10-image-list-header-left-'+res; + highlight = highlight + ' bb-bb10-image-list-header-left-'+res; + } else if (innerChildNode.getAttribute('data-bb-justify').toLowerCase() == 'right') { + normal = normal + ' bb-bb10-image-list-header-right-'+res; + highlight = highlight + ' bb-bb10-image-list-header-right-'+res; + } else { + normal = normal + ' bb-bb10-image-list-header-center'; + highlight = highlight + ' bb-bb10-image-list-header-center'; + } + } else { + normal = normal + ' bb-bb10-image-list-header-center'; + highlight = highlight + ' bb-bb10-image-list-header-center'; + } + + // Set our styling + innerChildNode.normal = normal; + innerChildNode.highlight = highlight; + innerChildNode.innerHTML = '

'+ description +'

'; + innerChildNode.setAttribute('class', normal); + innerChildNode.ontouchstart = function () { + this.setAttribute('class', this.highlight); + } + innerChildNode.ontouchend = function () { + this.setAttribute('class',this.normal); + } + } + else if (type == 'item') { + normal = 'bb-bb10-image-list-item bb-bb10-image-list-item-' + bb.screen.listColor + ' bb-bb10-image-list-item-' + res; + highlight = normal + ' bb-bb10-image-list-item-hover bb10Highlight'; + innerChildNode.normal = normal; + innerChildNode.highlight = highlight; + innerChildNode.setAttribute('class', normal); + innerChildNode.innerHTML = ''; + // Create our image + img = document.createElement('img'); + img.setAttribute('src',innerChildNode.getAttribute('data-bb-img')); + innerChildNode.appendChild(img); + // Create the details container + details = document.createElement('div'); + details.setAttribute('class','details'); + innerChildNode.appendChild(details); + // Create our title + title = document.createElement('span'); + title.setAttribute('class','title'); + title.innerHTML = innerChildNode.getAttribute('data-bb-title'); + details.appendChild(title); + // Create the accent text + if (innerChildNode.hasAttribute('data-bb-accent-text')) { + accentText = document.createElement('div'); + accentText.setAttribute('class','accent-text'); + accentText.innerHTML = innerChildNode.getAttribute('data-bb-accent-text'); + details.appendChild(accentText); + } + // Create our description + descriptionDiv = document.createElement('div'); + descriptionDiv.setAttribute('class','description'); + descriptionDiv.innerHTML = description; + details.appendChild(descriptionDiv); + // Clean-up + innerChildNode.removeAttribute('data-bb-img'); + innerChildNode.removeAttribute('data-bb-title'); + // Set up our variables + innerChildNode.fingerDown = false; + innerChildNode.contextShown = false; + innerChildNode.contextMenu = contextMenu; + innerChildNode.description = description; + innerChildNode.title = title.innerHTML; + innerChildNode.ontouchstart = function () { + this.setAttribute('class',this.highlight); + innerChildNode.fingerDown = true; + innerChildNode.contextShown = false; + if (innerChildNode.contextMenu) { + window.setTimeout(this.touchTimer, 667); + } + }; + innerChildNode.ontouchend = function (event) { + this.setAttribute('class',this.normal); + innerChildNode.fingerDown = false; + if (innerChildNode.contextShown) { + event.preventDefault(); + event.stopPropagation(); + } + }; + innerChildNode.touchTimer = function() { + if (innerChildNode.fingerDown) { + innerChildNode.contextShown = true; + innerChildNode.contextMenu.peek({title:this.title,description:this.description, selected: this}); + } + }; + innerChildNode.touchTimer = innerChildNode.touchTimer.bind(innerChildNode); + } + } + } + } + } + else { + // Apply our transforms to all Image Lists + for (var i = 0; i < elements.length; i++) { + var inEvent, + outEvent, + outerElement = elements[i]; + // Set our highlight events + if (bb.device.isPlayBook) { + inEvent = 'ontouchstart'; + outEvent = 'ontouchend'; + } else { + inEvent = 'onmouseover'; + outEvent = 'onmouseout'; + } + if (bb.device.isHiRes) { + outerElement.setAttribute('class','bb-hires-image-list'); + } else { + outerElement.setAttribute('class','bb-lowres-image-list'); + } + // Gather our inner items + var items = outerElement.querySelectorAll('[data-bb-type=item], [data-bb-type=header]'), + innerChildNode, + type, + j, + description, + accentText, + normal, + highlight, + res; + + if (bb.device.isHiRes) { + res = 'hires'; + } else { + res = 'lowres'; + } + + for (j = 0; j < items.length; j++) { + innerChildNode = items[j]; + if (innerChildNode.hasAttribute('data-bb-type')) { + type = innerChildNode.getAttribute('data-bb-type').toLowerCase(); + description = innerChildNode.innerHTML; + accentText = ''; + + // Grab the accent-text if it is there + if (innerChildNode.hasAttribute('data-bb-accent-text')) { + accentText = innerChildNode.getAttribute('data-bb-accent-text'); + } + + if (type == 'header') { + normal = 'bb-'+res+'-image-list-header'; + highlight = 'bb-'+res+'-image-list-header-hover'; + // Check for alignment + if (innerChildNode.hasAttribute('data-bb-justify')) { + if (innerChildNode.getAttribute('data-bb-justify').toLowerCase() == 'left') { + normal = normal + ' bb-'+res+'-image-list-header-left'; + highlight = highlight + ' bb-'+res+'-image-list-header-left'; + } else if (innerChildNode.getAttribute('data-bb-justify').toLowerCase() == 'right') { + normal = normal + ' bb-'+ res+'-image-list-header-right'; + highlight = highlight + ' bb-'+res+'-image-list-header-right'; + } else { + normal = normal + ' bb-'+res+'-image-list-header-center'; + highlight = highlight + ' bb-'+res+'-image-list-header-center'; + } + } else { + normal = normal + ' bb-'+res+'-image-list-header-center'; + highlight = highlight + ' bb-'+res+'-image-list-header-center'; + } + // Set our styling + innerChildNode.normal = normal; + innerChildNode.highlight = highlight; + innerChildNode.innerHTML = '

'+ description +'

'; + innerChildNode.setAttribute('x-blackberry-focusable','true'); + innerChildNode.setAttribute('class', normal); + innerChildNode.setAttribute(inEvent, "this.setAttribute('class',this.highlight)"); + innerChildNode.setAttribute(outEvent, "this.setAttribute('class',this.normal)"); + } + else if (type == 'item') { + innerChildNode.setAttribute('class', 'bb-'+res+'-image-list-item'); + innerChildNode.setAttribute(inEvent, "this.setAttribute('class','bb-"+res+"-image-list-item-hover')"); + innerChildNode.setAttribute(outEvent, "this.setAttribute('class','bb-"+res+"-image-list-item')"); + innerChildNode.setAttribute('x-blackberry-focusable','true'); + innerChildNode.innerHTML = '\n'+ + '
\n'+ + ' ' + innerChildNode.getAttribute('data-bb-title') + '\n'+ + ' ' + accentText + '\n'+ + '
' + description + '
\n'+ + '
\n'; + innerChildNode.removeAttribute('data-bb-img'); + innerChildNode.removeAttribute('data-bb-title'); + } + } + } + } + } + } +}; + +bb.grid = { + apply: function(elements) { + if (bb.device.isBB10) { + var res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + // Apply our transforms to all grids + for (var i = 0; i < elements.length; i++) { + var j, + items, + type, + title, + innerChildNode, + outerElement = elements[i]; + + outerElement.setAttribute('class','bb-bb10-grid-'+res); + // Gather our inner items + items = outerElement.querySelectorAll('[data-bb-type=group], [data-bb-type=row]'); + for (j = 0; j < items.length; j++) { + innerChildNode = items[j]; + if (innerChildNode.hasAttribute('data-bb-type')) { + + type = innerChildNode.getAttribute('data-bb-type').toLowerCase(); + if (type == 'group' && innerChildNode.hasAttribute('data-bb-title')) { + title = document.createElement('div'); + title.normal = 'bb-bb10-grid-header-'+res+' bb10Accent'; + title.highlight = 'bb-bb10-grid-header-'+res+' bb10Highlight'; + title.innerHTML = '

'+ innerChildNode.getAttribute('data-bb-title') +'

'; + title.setAttribute('class', title.normal); + title.ontouchstart = function() { + this.setAttribute('class',this.highlight); + }; + title.ontouchend = function() { + this.setAttribute('class',this.normal); + }; + if (innerChildNode.firstChild) { + innerChildNode.insertBefore(title, innerChildNode.firstChild); + } else { + innerChildNode.appendChild(title); + } + } + else if (type == 'row') { + var k, + numItems, + itemNode, + columnClass, + subtitle, + image, + overlay, + subtitle, + height, + width, + rowItems = innerChildNode.querySelectorAll('[data-bb-type=item]'); + + innerChildNode.setAttribute('class', 'bb-bb10-grid-row-'+res); + numItems = rowItems.length; + if (numItems > 0) { + columnClass = 'bb-bb10-grid-item-col-' + numItems+'-'+res; + } + + for (k = 0; k < numItems; k++) { + itemNode = rowItems[k]; + subtitle = itemNode.innerHTML; + itemNode.innerHTML = ''; + if (bb.device.isPlayBook) { + width = ((window.innerWidth/numItems) - 5); + } else { + width = ((window.innerWidth/numItems) - 8); + } + height = Math.ceil(width*0.5625); + itemNode.setAttribute('class', 'bb-bb10-grid-item ' + columnClass); + itemNode.style.width = width + 'px'; + itemNode.style.height = height + 'px'; + + // Create our display image + image = document.createElement('img'); + image.setAttribute('src',itemNode.getAttribute('data-bb-img')); + image.setAttribute('style','height:100%;width:100%;'); + itemNode.appendChild(image); + // Create our translucent overlay + overlay = document.createElement('div'); + overlay.setAttribute('class','bb-bb10-grid-item-overlay-'+res); + overlay.innerHTML = '

' + itemNode.getAttribute('data-bb-title') + '
' + subtitle +'

'; + itemNode.appendChild(overlay); + // Add the overlay to the itemNode as a pointer for convenience when highlighting + itemNode.overlay = overlay; + itemNode.ontouchstart = function() { + this.overlay.setAttribute('style','opacity:1.0;background-color:' + bb.options.bb10HighlightColor +';'); + }; + itemNode.ontouchend = function() { + this.overlay.setAttribute('style',''); + }; + itemNode.removeAttribute('data-bb-img'); + itemNode.removeAttribute('data-bb-title'); + } + + } + } + } + + // Make sure we move when the orientation of the device changes + outerElement.orientationChanged = function(event) { + var items = this.querySelectorAll('[data-bb-type=row]'), + i,j, + rowItems, + numItems, + itemNode, + width, + height, + innerWidth; + + // Orientation is backwards between playbook and BB10 smartphones + if (bb.device.isPlayBook) { + if (window.orientation == 0 || window.orientation == 180) { + innerWidth = 1024; // Doesn't seem to calculate width to the new width when this even fires + } else if (window.orientation == -90 || window.orientation == 90) { + innerWidth = 600; + } + } else { + if (window.orientation == 0 || window.orientation == 180) { + innerWidth = 768; + } else if (window.orientation == -90 || window.orientation == 90) { + innerWidth = 1280; + } + } + + + for (i = 0; i < items.length; i++) { + rowItems = items[i].querySelectorAll('[data-bb-type=item]'); + numItems = rowItems.length; + for (j = 0; j < numItems; j++ ) { + itemNode = rowItems[j]; + if (bb.device.isPlayBook) { + width = ((innerWidth/numItems) - 5); + } else { + width = ((innerWidth/numItems) - 8); + } + height = Math.ceil(width*0.5625); + itemNode.style.width = width+'px'; + itemNode.style.height = height+'px'; + } + } + }; + outerElement.orientationChanged = outerElement.orientationChanged.bind(outerElement); + window.addEventListener('orientationchange', outerElement.orientationChanged,false); + } + } else { + // Make the grids invisible if it isn't BB10 + for (var i = 0; i < elements.length; i++) { + elements[i].style.display = 'none'; + } + } + } +}; + +bb.labelControlContainers = { + // Apply our transforms to all label control rows + apply: function(elements) { + if (bb.device.isBB5) { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + outerElement.setAttribute('class','bb-label-control-horizontal-row'); + // Gather our inner items + var items = outerElement.querySelectorAll('[data-bb-type=label]'); + for (var j = 0; j < items.length; j++) { + var label = items[j]; + label.setAttribute('class', 'bb-label'); + } + } + } else if (bb.device.isBB10) { + var i, + outerElement, + items, + table, + j, + row, + tr, + tdLabel, + label, + tdControl, + control, + bbType, + res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + for (i = 0; i < elements.length; i++) { + outerElement = elements[i]; + + // Fetch all our rows + items = outerElement.querySelectorAll('[data-bb-type=row]'); + if (items.length > 0 ) { + // Create our containing table + table = document.createElement('table'); + table.setAttribute('class','bb-bb10-label-control-rows'); + outerElement.insertBefore(table,items[0]); + + for (j = 0; j < items.length; j++) { + row = items[j]; + tr = document.createElement('tr'); + tr.setAttribute('class','bb-bb10-label-control-label-row-'+res); + table.appendChild(tr); + + // Get the label + tdLabel = document.createElement('td'); + tr.appendChild(tdLabel); + label = row.querySelectorAll('[data-bb-type=label]')[0]; + label.setAttribute('class','bb-bb10-label-control-label-'+res); + row.removeChild(label); + tdLabel.appendChild(label); + + // Get the control + tr = document.createElement('tr'); + table.appendChild(tr); + tdControl = document.createElement('td'); + tr.appendChild(tdControl); + control = row.querySelectorAll('[data-bb-type=button],input,[data-bb-type=dropdown]')[0]; + row.removeChild(control); + tdControl.appendChild(control); + outerElement.removeChild(row); + /*bbType = control.getAttribute('data-bb-type'); + if (bbType == 'button' || bbType == 'dropdown') { + control.style.float = 'right'; + }*/ + } + } + } + } else { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + + // Fetch all our rows + var items = outerElement.querySelectorAll('[data-bb-type=row]'); + if (items.length > 0 ) { + // Create our containing table + var table = document.createElement('table'); + table.setAttribute('class','bb-bb7-label-control-rows'); + outerElement.insertBefore(table,items[0]); + + for (var j = 0; j < items.length; j++) { + var row = items[j], + tr = document.createElement('tr'); + table.appendChild(tr); + // Get the label + var tdLabel = document.createElement('td'); + tr.appendChild(tdLabel); + var label = row.querySelectorAll('[data-bb-type=label]')[0]; + row.removeChild(label); + tdLabel.appendChild(label); + // Get the control + var tdControl = document.createElement('td'); + tr.appendChild(tdControl); + var control = row.querySelectorAll('[data-bb-type=button],input,[data-bb-type=dropdown]')[0]; + row.removeChild(control); + tdControl.appendChild(control); + outerElement.removeChild(row); + var bbType = control.getAttribute('data-bb-type'); + if (bbType == 'button' || bbType == 'dropdown') { + control.style.float = 'right'; + } + } + } + } + } + } +}; + +bb.pillButtons = { + // Apply our transforms to all pill buttons passed in + apply: function(elements) { + if (bb.device.isBB5) { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + outerElement.setAttribute('class','bb-pill-buttons'); + + // Gather our inner items + var items = outerElement.querySelectorAll('[data-bb-type=pill-button]'); + for (var j = 0; j < items.length; j++) { + var innerChildNode = items[j]; + innerChildNode.setAttribute('x-blackberry-focusable','true'); + var text = innerChildNode.innerHTML; + innerChildNode.innerHTML = '' + text + ''; + + if (j === 0) { + innerChildNode.setAttribute('class','buttonLeft'); + } + else if (j == items.length -1) { + innerChildNode.setAttribute('class','buttonRight'); + } + else { + innerChildNode.setAttribute('class','buttonMiddle'); + } + + // See if the item is marked as selected + if (innerChildNode.hasAttribute('data-bb-selected') && innerChildNode.getAttribute('data-bb-selected').toLowerCase() == 'true') { + bb.pillButtons.selectButton(innerChildNode); + } + + // Change the selected state when a user presses the button + innerChildNode.onmousedown = function() { + bb.pillButtons.selectButton(this); + var buttons = this.parentNode.querySelectorAll('[data-bb-type=pill-button]'); + for (var i = 0; i < buttons.length; i++) { + var button = buttons[i]; + if (button != this) { + bb.pillButtons.deSelectButton(button); + } + } + }; + } + } + } else if (bb.device.isBB10) { + var res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + var i, + outerElement, + containerStyle = 'bb-bb10-pill-buttons-container-'+res+' bb-bb10-pill-buttons-container-' + bb.screen.controlColor, + buttonStyle = 'bb-bb10-pill-button-'+res, + containerDiv, + innerBorder; + + for (i = 0; i < elements.length; i++) { + outerElement = elements[i]; + outerElement.setAttribute('class','bb-bb10-pill-buttons-'+res); + containerDiv = document.createElement('div'); + outerElement.appendChild(containerDiv); + containerDiv.setAttribute('class',containerStyle); + + // Gather our inner items + var items = outerElement.querySelectorAll('[data-bb-type=pill-button]'), + percentWidth = Math.floor(100 / items.length), + sidePadding = 102-(percentWidth * items.length), + sidePadding, + innerChildNode, + j; + + outerElement.style['padding-left'] = sidePadding + '%'; + outerElement.style['padding-right'] = sidePadding + '%'; + for (j = 0; j < items.length; j++) { + innerChildNode = items[j]; + containerDiv.appendChild(innerChildNode); + + // Set our styling + innerChildNode.selected = buttonStyle + ' bb-bb10-pill-button-selected-'+res+'-'+ bb.screen.controlColor; + innerChildNode.normal = buttonStyle; + innerChildNode.highlight = buttonStyle + ' bb-bb10-pill-button-highlight-'+res+'-'+ bb.screen.controlColor +' bb10Highlight'; + if (j == items.length - 1) { + innerChildNode.style.float = 'right'; + if (!bb.device.isPlayBook && j > 2) { + innerChildNode.style.width = percentWidth-2 + '%'; + } else { + innerChildNode.style.width = percentWidth-1 + '%'; + } + } else { + innerChildNode.style.width = percentWidth + '%'; + } + + // Create our inner container to have double borders + innerBorder = document.createElement('div'); + innerBorder.normal = 'bb-bb10-pill-button-inner-'+res; + innerBorder.selected = innerBorder.normal +' bb-bb10-pill-button-inner-selected-'+res+'-'+bb.screen.controlColor; + + innerBorder.innerHTML = innerChildNode.innerHTML; + innerChildNode.innerHTML = ''; + innerChildNode.appendChild(innerBorder); + + if (innerChildNode.getAttribute('data-bb-selected') == 'true') { + innerChildNode.setAttribute('class',innerChildNode.selected); + innerBorder.setAttribute('class',innerBorder.selected); + } else { + innerChildNode.setAttribute('class',innerChildNode.normal); + innerBorder.setAttribute('class',innerBorder.normal); + innerChildNode.ontouchstart = function() { + this.setAttribute('class',this.highlight); + }; + innerChildNode.ontouchend = function() { + this.setAttribute('class',this.normal); + }; + } + + // Add our subscription for click events to change highlighting + innerChildNode.addEventListener('click',function (e) { + var innerChildNode, + innerBorder, + items = this.parentNode.querySelectorAll('[data-bb-type=pill-button]'); + for (var j = 0; j < items.length; j++) { + innerChildNode = items[j]; + innerBorder = innerChildNode.firstChild; + if (innerChildNode == this) { + innerChildNode.setAttribute('class',innerChildNode.selected); + innerBorder.setAttribute('class',innerBorder.selected); + } else { + innerBorder.setAttribute('class',innerBorder.normal); + innerChildNode.setAttribute('class',innerChildNode.normal); + innerChildNode.ontouchstart = function() { + this.setAttribute('class',this.highlight); + }; + innerChildNode.ontouchend = function() { + this.setAttribute('class',this.normal); + }; + } + } + },false); + } + } + } else { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i], + containerStyle = 'bb-bb7-pill-buttons', + buttonStyle = ''; + + // Set our container style + if (bb.device.isHiRes) { + containerStyle = containerStyle + ' bb-bb7-pill-buttons-hires'; + buttonStyle = 'bb-bb7-pill-button-hires'; + } else { + containerStyle = containerStyle + ' bb-bb7-pill-buttons-lowres'; + buttonStyle = 'bb-bb7-pill-button-lowres'; + } + outerElement.setAttribute('class',containerStyle); + + + // Gather our inner items + var inEvent, + outEvent, + items = outerElement.querySelectorAll('[data-bb-type=pill-button]'), + percentWidth = Math.floor(98 / items.length), + sidePadding = 102-(percentWidth * items.length); + + if (bb.device.isPlayBook) { + inEvent = 'ontouchstart'; + outEvent = 'ontouchend'; + } else { + inEvent = 'onmouseover'; + outEvent = 'onmouseout'; + } + + outerElement.style['padding-left'] = sidePadding + '%'; + outerElement.style['padding-right'] = sidePadding + '%'; + for (var j = 0; j < items.length; j++) { + var innerChildNode = items[j]; + innerChildNode.setAttribute('x-blackberry-focusable','true'); + if (j === 0) { // First button + if (innerChildNode.getAttribute('data-bb-selected') == 'true') { + innerChildNode.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-left '+ buttonStyle); + } else { + innerChildNode.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-left '+ buttonStyle); + innerChildNode.setAttribute(inEvent,"this.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-left " + buttonStyle +"')"); + innerChildNode.setAttribute(outEvent,"this.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-left " + buttonStyle +"')"); + } + } else if (j == items.length -1) { // Right button + if (innerChildNode.getAttribute('data-bb-selected') == 'true') { + innerChildNode.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-right '+ buttonStyle); + } else { + innerChildNode.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-right ' + buttonStyle); + innerChildNode.setAttribute(inEvent,"this.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-right " + buttonStyle +"')"); + innerChildNode.setAttribute(outEvent,"this.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-right " + buttonStyle +"')"); + } + } else { // Middle Buttons + if (innerChildNode.getAttribute('data-bb-selected') == 'true') { + innerChildNode.setAttribute('class','bb-bb7-pill-button-highlight '+ buttonStyle); + } else { + innerChildNode.setAttribute('class','bb-bb7-pill-button ' + buttonStyle); + innerChildNode.setAttribute(inEvent,"this.setAttribute('class','bb-bb7-pill-button-highlight " + buttonStyle +"')"); + innerChildNode.setAttribute(outEvent,"this.setAttribute('class','bb-bb7-pill-button " + buttonStyle +"')"); + } + } + + // Set our width + innerChildNode.style.width = percentWidth + '%'; + // Add our subscription for click events to change highlighting + innerChildNode.addEventListener('click',function (e) { + var inEvent, outEvent, items = this.parentNode.querySelectorAll('[data-bb-type=pill-button]'); + + if (bb.device.isPlayBook) { + inEvent = 'ontouchstart'; + outEvent = 'ontouchend'; + } else { + inEvent = 'onmouseover'; + outEvent = 'onmouseout'; + } + + for (var j = 0; j < items.length; j++) { + var innerChildNode = items[j]; + + if (j === 0) { // First button + if (innerChildNode == this) { + innerChildNode.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-left '+ buttonStyle); + innerChildNode.onmouseover = null; + innerChildNode.onmouseout = null; + } else { + innerChildNode.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-left '+ buttonStyle); + innerChildNode.setAttribute(inEvent,"this.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-left " + buttonStyle +"')"); + innerChildNode.setAttribute(outEvent,"this.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-left " + buttonStyle +"')"); + } + } else if (j == items.length -1) { // Right button + if (innerChildNode == this) { + innerChildNode.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-right '+ buttonStyle); + innerChildNode.onmouseover = null; + innerChildNode.onmouseout = null; + } else { + innerChildNode.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-right ' + buttonStyle); + innerChildNode.setAttribute(inEvent,"this.setAttribute('class','bb-bb7-pill-button-highlight bb-bb7-pill-button-right " + buttonStyle +"')"); + innerChildNode.setAttribute(outEvent,"this.setAttribute('class','bb-bb7-pill-button bb-bb7-pill-button-right " + buttonStyle +"')"); + } + } else { // Middle Buttons + if (innerChildNode == this) { + innerChildNode.setAttribute('class','bb-bb7-pill-button-highlight '+ buttonStyle); + innerChildNode.onmouseover = null; + innerChildNode.onmouseout = null; + } else { + innerChildNode.setAttribute('class','bb-bb7-pill-button ' + buttonStyle); + innerChildNode.setAttribute(inEvent,"this.setAttribute('class','bb-bb7-pill-button-highlight " + buttonStyle +"')"); + innerChildNode.setAttribute(outEvent,"this.setAttribute('class','bb-bb7-pill-button " + buttonStyle +"')"); + } + } + } + + },false); + } + } + } + } /*, + + // Reset the button back to its un-selected state + deSelectButton: function(button) { + var cssClass = button.getAttribute('class'); + if (cssClass == 'buttonLeft') { + button.style.backgroundPosition = 'top right'; + button.firstChild.style.backgroundPosition = 'top left'; + } + else if (cssClass == 'buttonRight') { + button.style.backgroundPosition = 'top right'; + button.firstChild.style.backgroundPosition = '-10px 0px'; + } + else if (cssClass == 'buttonMiddle') { + button.style.backgroundPosition = 'top right'; + button.firstChild.style.backgroundPosition = '-10px 0px'; + } + }, + + // Highlight the button + selectButton: function(button) { + var cssClass = button.getAttribute('class'); + if (cssClass == 'buttonLeft') { + button.style.backgroundPosition = 'bottom right'; + button.firstChild.style.backgroundPosition = 'bottom left'; + } + else if (cssClass == 'buttonRight') { + button.style.backgroundPosition = 'bottom right'; + button.firstChild.style.backgroundPosition = '-10px -39px'; + } + else if (cssClass == 'buttonMiddle') { + button.style.backgroundPosition = 'bottom right'; + button.firstChild.style.backgroundPosition = '-10px -39px'; + } + }*/ +}; + +bb.roundPanel = { + apply: function(elements) { + if (bb.device.isBB7 || bb.device.isBB6 || bb.device.isBB5) { + // Apply our transforms to all the panels + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + outerElement.setAttribute('class','bb-round-panel'); + if (outerElement.hasChildNodes()) { + var innerElements = [], + innerCount = outerElement.childNodes.length; + // Grab the internal contents so that we can add them + // back to the massaged version of this div + for (var j = 0; j < innerCount; j++) { + innerElements.push(outerElement.childNodes[j]); + } + for (var j = innerCount - 1; j >= 0; j--) { + outerElement.removeChild(outerElement.childNodes[j]); + } + // Create our new
's + var placeholder = document.createElement('div'); + placeholder.setAttribute('class','bb-round-panel-top-left bb-round-panel-background '); + outerElement.appendChild(placeholder); + placeholder = document.createElement('div'); + placeholder.setAttribute('class','bb-round-panel-top-right bb-round-panel-background '); + outerElement.appendChild(placeholder); + var insidePanel = document.createElement('div'); + insidePanel.setAttribute('class','bb-round-panel-inside'); + outerElement.appendChild(insidePanel); + placeholder = document.createElement('div'); + placeholder.setAttribute('class','bb-round-panel-bottom-left bb-round-panel-background '); + outerElement.appendChild(placeholder); + placeholder = document.createElement('div'); + placeholder.setAttribute('class','bb-round-panel-bottom-right bb-round-panel-background '); + outerElement.appendChild(placeholder); + // Add our previous children back to the insidePanel + for (var j = 0; j < innerElements.length; j++) { + insidePanel.appendChild(innerElements[j]); + } + } + // Handle the headers + var items = outerElement.querySelectorAll('[data-bb-type=panel-header]'); + for (var j = 0; j < items.length; j++) { + items[j].setAttribute('class','bb-lowres-panel-header'); + } + } + } + else if (bb.device.isBB10) { + var i, + j, + outerElement, + items, + res; + + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + + for (i = 0; i < elements.length; i++) { + outerElement = elements[i]; + outerElement.setAttribute('class','bb-bb10-round-panel-'+res+' bb-bb10-round-panel-light'); + items = outerElement.querySelectorAll('[data-bb-type=panel-header]'); + for (j = 0; j < items.length; j++) { + items[j].setAttribute('class','bb-bb10-panel-header-'+res+' bb-bb10-panel-header-'+res+'-light'); + } + } + } + else { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + outerElement.setAttribute('class','bb-playbook-round-panel'); + var items = outerElement.querySelectorAll('[data-bb-type=panel-header]'); + for (var j = 0; j < items.length; j++) { + if (bb.device.isHiRes) { + items[j].setAttribute('class','bb-hires-panel-header'); + } else { + items[j].setAttribute('class','bb-lowres-panel-header'); + } + } + } + } + } +}; + +bb.screen = { + scriptCounter: 0, + totalScripts: 0, + controlColor: 'light', + listColor: 'light', + overlay : null, + contextMenu : null, + + apply: function(elements) { + var screenRes, + outerElement; + // Reset our context Menu + bb.screen.contextMenu = null; + + if (bb.device.isBB10 && bb.device.isPlayBook) { + screenRes = 'bb-hires-screen'; + } else if (bb.device.isBB10) { + screenRes = 'bb-bb10-hires-screen'; + } else if (bb.device.isHiRes) { + screenRes = 'bb-hires-screen'; + } + + for (var i = 0; i < elements.length; i++) { + outerElement = elements[i]; + + // Set our screen resolution + outerElement.setAttribute('class', screenRes); + + //check to see if a menu/menuBar needs to be created + var menuBar = outerElement.querySelectorAll('[data-bb-type=menu]'); + if (menuBar.length > 0) { + menuBar = menuBar[0]; + bb.menuBar.apply(menuBar,outerElement); + } + + if (bb.device.isBB10) { + + var titleBar = outerElement.querySelectorAll('[data-bb-type=title]'), + actionBar = outerElement.querySelectorAll('[data-bb-type=action-bar]'), + context = outerElement.querySelectorAll('[data-bb-type=context-menu]'), + outerScrollArea, + scrollArea, + tempHolder = [], + childNode = null, + j; + + // Figure out what to do with the title bar + if (titleBar.length > 0) { + titleBar = titleBar[0]; + // See if they want a back button + if (titleBar.hasAttribute('data-bb-back-caption')) { + if (actionBar.length == 0) { + // Since there's no way to get back, we'll add an action bar + var newBackBar = document.createElement('div'); + newBackBar.setAttribute('data-bb-type','action-bar'); + newBackBar.setAttribute('data-bb-back-caption',titleBar.getAttribute('data-bb-back-caption')); + outerElement.appendChild(newBackBar); + actionBar = [newBackBar]; + } + } + // TODO: Add title bar support + outerElement.removeChild(titleBar); + } + + // Assign our action bar + if (actionBar.length > 0) { + actionBar = actionBar[0]; + } else { + actionBar = null; + } + + // Create our scrollable
+ outerScrollArea = document.createElement('div'); + outerElement.appendChild(outerScrollArea); + // Turn off scrolling effects if they don't want them + if (!outerElement.hasAttribute('data-bb-scroll-effect') || outerElement.getAttribute('data-bb-scroll-effect').toLowerCase() != 'off') { + outerScrollArea.setAttribute('id','bbUIscrollWrapper'); + } + + // Inner Scroll Area + scrollArea = document.createElement('div'); + outerScrollArea.appendChild(scrollArea); + + // Copy all nodes in the screen that are not the action bar + for (j = 0; j < outerElement.childNodes.length - 1; j++) { + childNode = outerElement.childNodes[j]; + if ((childNode != actionBar) && (childNode != menuBar)) { + tempHolder.push(childNode); + } + } + // Add them into the scrollable area + for (j = 0; j < tempHolder.length -1; j++) { + scrollArea.appendChild(tempHolder[j]); + } + + if (actionBar) { + if (bb.device.isPlayBook) { + outerScrollArea.setAttribute('style','overflow:auto;position:absolute;bottom:73px;top:0px;left:0px;right:0px;'); + } else { + outerScrollArea.setAttribute('style','overflow:auto;position:absolute;bottom:140px;top:0px;left:0px;right:0px;'); + } + bb.actionBar.apply(actionBar,outerElement); + } + else { + outerScrollArea.setAttribute('style','overflow:auto;bottom:0px;position:absolute;top:0px;left:0px;right:0px;'); + } + + // Assign our context + if (context.length > 0) { + bb.screen.processContext(context[0], outerElement); + } else { + context = null; + } + } + else if (bb.device.isPlayBook) { + var titleBar = outerElement.querySelectorAll('[data-bb-type=title]'), + outerScrollArea, + scrollArea, + tempHolder = [], + childNode = null, + j, + actionBar = outerElement.querySelectorAll('[data-bb-type=action-bar]'), + context = outerElement.querySelectorAll('[data-bb-type=context-menu]'); + + // Remove any BB10 context menus or action bars from sight + for (j = 0; j < actionBar.length; j++) { + actionBar[j].style.display = 'none'; + } + for (j = 0; j < context.length; j++) { + context[j].style.display = 'none'; + } + + if (titleBar.length > 0) { + titleBar = titleBar[0]; } + else { + titleBar = null; + } + + // Create our scrollable
+ outerScrollArea = document.createElement('div'); + outerElement.appendChild(outerScrollArea); + // Turn off scrolling effects if they don't want them + if (!outerElement.hasAttribute('data-bb-scroll-effect') || outerElement.getAttribute('data-bb-scroll-effect').toLowerCase() != 'off') { + outerScrollArea.setAttribute('id','bbUIscrollWrapper'); + } + // Inner Scroll Area + scrollArea = document.createElement('div'); + outerScrollArea.appendChild(scrollArea); + + // Copy all nodes that are not the title bar + for (j = 0; j < outerElement.childNodes.length - 1; j++) { + childNode = outerElement.childNodes[j]; + if (childNode != titleBar) { + tempHolder.push(childNode); + } + } + // Add them into the scrollable area + for (j = 0; j < tempHolder.length -1; j++) { + scrollArea.appendChild(tempHolder[j]); + } + + if (titleBar) { + outerScrollArea.setAttribute('style','overflow:auto;bottom:0px;position:absolute;top:55px;left:0px;right:0px;'); + titleBar.setAttribute('class', 'pb-title-bar'); + titleBar.innerHTML = titleBar.getAttribute('data-bb-caption'); + if (titleBar.hasAttribute('data-bb-back-caption')) { + var button = document.createElement('div'), + buttonInner = document.createElement('div'); + button.setAttribute('class', 'pb-title-bar-back'); + button.onclick = bb.popScreen; + buttonInner.setAttribute('class','pb-title-bar-back-inner'); + buttonInner.innerHTML = titleBar.getAttribute('data-bb-back-caption'); + button.appendChild(buttonInner); + titleBar.appendChild(button); + } + } + else { + outerScrollArea.setAttribute('style','overflow:auto;bottom:0px;position:absolute;top:0px;left:0px;right:0px;'); + } + } + else { + // See if there is a title bar + var titleBar = outerElement.querySelectorAll('[data-bb-type=title]'), + actionBar = outerElement.querySelectorAll('[data-bb-type=action-bar]'), + context = outerElement.querySelectorAll('[data-bb-type=context-menu]'); + + + // Remove any BB10 context menus or action bars from sight + for (j = 0; j < actionBar.length; j++) { + actionBar[j].style.display = 'none'; + } + for (j = 0; j < context.length; j++) { + context[j].style.display = 'none'; + } + + + if (titleBar.length > 0) { + titleBar = titleBar[0]; + if (titleBar.hasAttribute('data-bb-caption')) { + var outerStyle = outerElement.getAttribute('style'); + if (bb.device.isHiRes) { + titleBar.setAttribute('class', 'bb-hires-screen-title'); + outerElement.setAttribute('style', outerStyle + ';padding-top:33px'); + } else { + titleBar.setAttribute('class', 'bb-lowres-screen-title'); + outerElement.setAttribute('style', outerStyle + ';padding-top:27px'); + } + titleBar.innerHTML = titleBar.getAttribute('data-bb-caption'); + } + } + } + } + }, + + // Process all of the context menu code + processContext : function (context, screen) { + screen.appendChild(context); + context.menu = bb.contextMenu.create(screen); + context.appendChild(context.menu); + bb.screen.contextMenu = context.menu; + // Add the actions + var actions = context.querySelectorAll('[data-bb-type=action]'), + i; + for (i = 0; i < actions.length; i++) { + context.menu.add(actions[i]); + } + }, + + fadeIn: function (params) { + // set default values + var r = 0, + duration = 1, + iteration = 1, + timing = 'ease-out'; + + if (document.getElementById(params.id)) { + var elem = document.getElementById(params.id), + s = elem.style; + + if (params.random) { + r = Math.random() * (params.random / 50) - params.random / 100; + } + + if (params.duration) { + duration = parseFloat(params.duration) + parseFloat(params.duration) * r; + duration = Math.round(duration * 1000) / 1000; + } + + if (params.iteration) { + iteration = params.iteration; + } + + if (params.timing) { + timing = params.timing; + } + + s['-webkit-animation-name'] = 'bbUI-fade-in'; + s['-webkit-animation-duration'] = duration + 's'; + s['-webkit-animation-timing-function'] = timing; + } + else { + console.warn('Could not access ' + params.id); + } + }, + + + applyEffect: function(id, container) { + // see if there is a display effect + if (!bb.device.isBB5 && !bb.device.isBB6) { + var screen = container.querySelectorAll('[data-bb-type=screen]'); + if (screen.length > 0 ) { + screen = screen[0]; + var effect = screen.getAttribute('data-bb-effect'); + if (effect && effect.toLowerCase() == 'fade') { + bb.screen.fadeIn({'id': id, 'duration': 1.0}); + } + } + } + }, + + + + reAdjustHeight: function() { + // perform device specific formatting + if (bb.device.isBB5) { + document.body.style.height = screen.height - 27 + 'px'; + } + else if (bb.device.isBB6) { + document.body.style.height = screen.height - 17 + 'px'; + } + else if (bb.device.isBB7 && (navigator.appVersion.indexOf('Ripple') < 0)) { + document.body.style.height = screen.height + 'px'; + } + } +}; + +// Apply styling to an action bar +bb.actionBar = { + + color: '', + + apply: function(actionBar, screen) { + + actionBar.tabs = []; + var actions = actionBar.querySelectorAll('[data-bb-type=action]'), + action, + caption, + style, + lastStyle, + tabStyle, + backBtn, + actionContainer = actionBar, + btnWidth, + limit = actions.length, + res, + icon, + color = bb.actionBar.color, + j, + firstTab = true; + + // Find our resolution + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + + actionBar.setAttribute('class','bb-bb10-action-bar-'+res+' bb-bb10-action-bar-' + bb.actionBar.color); + + // Create the back button if it has one and there are no tabs in the action bar + if (actionBar.hasAttribute('data-bb-back-caption') && actionBar.querySelectorAll('[data-bb-style=tab]').length == 0) { + backBtn = document.createElement('div'); + backBtn.innerHTML = actionBar.getAttribute('data-bb-back-caption'); + backBtn.setAttribute('class','bb-bb10-action-bar-back-button-'+res+' bb-bb10-action-bar-back-button-'+res+'-' + color); + backBtn.onclick = bb.popScreen; + // Set tab coloring + backBtn.normal = 'bb-bb10-action-bar-tab-normal-'+color; + backBtn.highlight = 'bb-bb10-action-bar-tab-selected-'+color; + actionBar.backBtn = backBtn; + // Create a table to hold the back button and our actions + var table = document.createElement('table'), + tr = document.createElement('tr'), + td = document.createElement('td'); + actionBar.appendChild(table); + table.appendChild(tr); + table.setAttribute('class','bb-bb10-action-bar-table'); + // Create the container for the back button + if (bb.device.isPlayBook) { + td.style.width = '86px'; + } else { + td.style.width = '178px'; + } + tr.appendChild(td); + td.appendChild(backBtn); + // Create the container for the rest of the actions + td = document.createElement('td'); + td.style.width = '100%'; + tr.appendChild(td); + actionContainer = td; + // Add the rest of the actions to the second column + for (j = 0; j < actions.length; j++) { + action = actions[j]; + td.appendChild(action); + } + limit++; + } + + // If we have more than 5 items in the action bar we need to show the more menu button + if (limit > 5) { + actionBar.menu = bb.contextMenu.create(screen); + actionBar.appendChild(actionBar.menu); + // Create our action bar overflow button + action = document.createElement('div'); + action.setAttribute('data-bb-type','action'); + action.setAttribute('data-bb-style','button'); + + if (res == 'lowres') { + action.setAttribute('data-bb-img','overflow'); + } else { + action.setAttribute('data-bb-img','overflow'); + } + + action.onclick = actionBar.menu.show; + if (backBtn) { + actionContainer.insertBefore(action,actions[3]); + } else { + actionContainer.insertBefore(action,actions[4]); + } + // Refresh our list of actions + actions = actionBar.querySelectorAll('[data-bb-type=action]'); + } + + // Find out what kind of tab style is desired + if (actionBar.hasAttribute('data-bb-tab-style')) { + if (actionBar.getAttribute('data-bb-tab-style').toLowerCase() == 'indent') { + tabStyle = 'indent'; + } else { + tabStyle = 'highlight'; + } + actionBar.tabStyle = tabStyle; + } + + // Calculate action widths + if (backBtn) { + if (actions.length < 5) { + btnWidth = Math.floor(100/actions.length); + } else { + btnWidth = Math.floor(100/4); + } + } else { + if (actions.length < 6) { + btnWidth = Math.floor(100/actions.length); + } else { + btnWidth = Math.floor(100/5); + } + } + + // Grab all the actions that are defined + for (j = 0; j < actions.length; j++) { + action = actions[j]; + action.res = res; + caption = action.innerHTML; + + if ((backBtn && j > 3) || j > 4) { + actionBar.menu.add(action); + } else { + // apply our button styling + if (action.hasAttribute('data-bb-style')) { + // Set our button widths taking into account the last button float + if ((backBtn && j > 2) || (j > 3) || (j == actions.length -1)) { + action.style.width = btnWidth - 1 + '%'; + action.style.float = 'right'; + } else { + action.style.width = btnWidth + '%'; + } + style = action.getAttribute('data-bb-style').toLowerCase(); + if (style == 'button') { + // See if the last action was a tab + if (lastStyle == 'tab') { + action.normal = 'bb-bb10-action-bar-action-'+res+' bb-bb10-action-bar-button-'+color+' bb-bb10-action-bar-button-tab-left-'+res+'-'+color; + } else { + action.normal = 'bb-bb10-action-bar-action-'+res+' bb-bb10-action-bar-button-'+color; + } + action.innerHTML = ''; + action.setAttribute('class',action.normal); + // Add the icon + icon = document.createElement('img'); + if (action.getAttribute('data-bb-img') == 'overflow') { + // Set our transparent pixel + icon.setAttribute('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A'+ + '/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFxQXKc14qEQAAAAZdEVYdENv'+ + 'bW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADUlEQVQI12NgYGBgAAAABQABXvMqOgAAAABJ'+ + 'RU5ErkJggg=='); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res+' bb-bb10-action-bar-overflow-button-'+res+'-'+color); + } else { + icon.setAttribute('src',action.getAttribute('data-bb-img')); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res); + } + action.appendChild(icon); + + + /*icon = document.createElement('img'); + icon.setAttribute('src',action.getAttribute('data-bb-img')); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res); + action.appendChild(icon);*/ + // Set our caption + var display = document.createElement('div'); + display.setAttribute('class','bb-bb10-action-bar-action-display-'+res); + display.innerHTML = caption; + action.appendChild(display); + } + else if (style=='tab') { + action.actionBar = actionBar; + // Apply our highlight tab styling + if (tabStyle == 'highlight') { + actionBar.tabs.push(action); + action.innerHTML = ''; + action.normal = 'bb-bb10-action-bar-action-'+res+' bb-bb10-action-bar-tab-'+color+' bb-bb10-action-bar-tab-normal-'+color; + action.highlight = action.normal + ' bb-bb10-action-bar-tab-selected-'+color; + action.setAttribute('class',action.normal); + if (firstTab && actionBar.backBtn) { + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.normal); + } + if (action.hasAttribute('data-bb-selected') && (action.getAttribute('data-bb-selected').toLowerCase() == 'true')) { + bb.actionBar.highlightAction(action); + if (firstTab && actionBar.backBtn) { + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.highlight); + } + } + + firstTab = false; + // Add the icon + icon = document.createElement('img'); + icon.setAttribute('src',action.getAttribute('data-bb-img')); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res); + action.appendChild(icon); + // Set our caption + var display = document.createElement('div'); + display.setAttribute('class','bb-bb10-action-bar-action-display-'+res); + display.innerHTML = caption; + action.appendChild(display); + + // Make the last tab have a smaller border + if (j == actions.length-1) { + action.style['border-right-width'] = '1px'; + } + } + // Add our click listener + action.addEventListener('click',function (e) { + var i, + action, + tabStyle = this.actionBar.tabStyle; + tabs = this.actionBar.tabs, + firstTab = false; + + for (i = 0; i < tabs.length; i++) { + action = tabs[i]; + if (tabStyle == 'highlight') { + if (action == this) { + bb.actionBar.highlightAction(action); + firstTab = (i == 0); + } else { + bb.actionBar.unhighlightAction(action); + } + } + // Set our back button highlighting + if (firstTab && actionBar.backBtn) { + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.highlight); + } else if (actionBar.backBtn){ + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.normal); + } + + } + + },false); + } + lastStyle = style; + } + } + } + // Set the proper header height + /* if (actionBar.menu) { + actionBar.menu.setHeaderHeight(); + }*/ + }, + + // Apply the proper highlighting for the action + highlightAction: function (action) { + action.style['border-top-color'] = bb.options.bb10HighlightColor; + action.setAttribute('class',action.highlight); + }, + + // Apply the proper styling for an action that is no longer highlighted + unhighlightAction: function(action) { + action.style['border-top-color'] = ''; + action.setAttribute('class',action.normal); + } +}; + +// BlackBerry 10 Context Menu +bb.contextMenu = { + + // Create an instance of the menu and pass it back to the caller + create : function(screen) { + var res, + swipeThreshold; + if (bb.device.isPlayBook) { + res = 'lowres'; + swipeThreshold = 100; + } else { + res = 'hires'; + swipeThreshold = 300; + } + + // Create the oveflow menu container + var menu = document.createElement('div'), + title = document.createElement('div'), + description = document.createElement('div'), + header; + menu.setAttribute('class','bb-bb10-context-menu bb-bb10-context-menu-' + res + '-' + bb.actionBar.color); + menu.actions = []; + menu.res = res; + // Add the overlay for trapping clicks on items below + if (!bb.screen.overlay) { + bb.screen.overlay = document.createElement('div'); + bb.screen.overlay.threshold = swipeThreshold; + bb.screen.overlay.setAttribute('class','bb-bb10-context-menu-overlay'); + bb.screen.overlay.menu = menu; + screen.appendChild(bb.screen.overlay); + + bb.screen.overlay.ontouchmove = function(event) { + // Only care about moves if peeking + if (!this.menu.peeking) return; + var touch = event.touches[0]; + if (this.startPos && (this.startPos - touch.pageX > this.threshold)) { + this.menu.show(); + this.closeMenu = false; + } + }; + bb.screen.overlay.ontouchend = function() { + if (this.closeMenu) { + this.menu.hide(); + } + }; + bb.screen.overlay.ontouchstart = function(event) { + this.closeMenu = true; + if (!this.menu.peeking) return; + + var touch = event.touches[0]; + this.startPos = touch.pageX; + event.preventDefault(); + }; + } + menu.overlay = bb.screen.overlay; + // Create the menu header + header = document.createElement('div'); + header.setAttribute('class','bb-bb10-context-menu-item-'+res+' bb-bb10-context-menu-header-'+bb.actionBar.color); + menu.header = header; + menu.appendChild(header); + + // Create our title container + title.setAttribute('class','bb-bb10-context-menu-header-title-'+res+' bb-bb10-context-menu-header-title-'+bb.actionBar.color); + menu.topTitle = title; + header.appendChild(title); + + // Create our description container + description.setAttribute('class','bb-bb10-context-menu-header-description-'+res); + menu.description = description; + header.appendChild(description); + + // Set our first left position + menu.style.left = bb.contextMenu.getLeft(); + + // Display the menu + menu.show = function(data){ + if (data) { + if (data.title) { + this.topTitle.innerHTML = data.title; + } + if (data.description) { + this.description.innerHTML = data.description; + } + this.selected = data; + } + this.peeking = false; + this.overlay.style.display = 'inline'; + this.style['-webkit-transition'] = 'all 0.3s ease-in-out'; + this.style['-webkit-transform'] = 'translate(-' + bb.contextMenu.getWidth() + ', 0)'; + this.addEventListener("touchstart", this.touchHandler, false); + // Remove the header click handling while peeking + this.header.addEventListener("click", this.hide, false); + }; + menu.show = menu.show.bind(menu); + // Hide the menu + menu.hide = function(){ + this.overlay.style.display = 'none'; + this.removeEventListener("touchstart", this.touchHandler, false); + this.style['-webkit-transition'] = 'all 0.5s ease-in-out'; + this.style['-webkit-transform'] = 'translate(' + bb.contextMenu.getWidth() + ', 0px)'; + if (!this.peeking) { + // Remove the header click handling + this.header.removeEventListener("click", this.hide, false); + } + this.peeking = false; + }; + menu.hide = menu.hide.bind(menu); + // Peek the menu + menu.peek = function(data){ + if (data) { + if (data.title) { + this.topTitle.innerHTML = data.title; + } + if (data.description) { + this.description.innerHTML = data.description; + } + this.selected = data; + } + this.peeking = true; + this.overlay.style.display = 'inline'; + this.style['-webkit-transition'] = 'all 0.3s ease-in-out'; + this.style['-webkit-transform'] = 'translate(-' + bb.contextMenu.getPeekWidth() + ', 0)'; + this.addEventListener("touchstart", this.touchHandler, false); + // Remove the header click handling while peeking + this.header.removeEventListener("click", this.hide, false); + }; + menu.peek = menu.peek.bind(menu); + + // Trap the events + menu.touchHandler = function(event) { + if (this.peeking) { + if (event.target == this) { + event.preventDefault(); + event.stopPropagation(); + } else if (event.target.parentNode == this && event.target != this.header) { + event.preventDefault(); + event.stopPropagation(); + } + } else { + if (event.target == this) { + this.hide(); + } + } + }; + menu.touchHandler = menu.touchHandler.bind(menu); + + // Calculate the header bottom margin to center the items in the list + menu.setHeaderHeight = function() { + var windowHeight, + itemHeight, + margin; + if (bb.device.isPlayBook) { + itemHeight = 53; + if (window.orientation == 0 || window.orientation == 180) { + windowHeight = 600; + } else if (window.orientation == -90 || window.orientation == 90) { + windowHeight = 1024; + } + } else { + itemHeight = 111; + if (window.orientation == 0 || window.orientation == 180) { + windowHeight = 1280; + } else if (window.orientation == -90 || window.orientation == 90) { + windowHeight = 768; + } + } + margin = Math.floor(windowHeight/2) - Math.floor((this.actions.length * itemHeight)/2); + this.header.style['margin-bottom'] = margin + 'px'; + }; + menu.setHeaderHeight = menu.setHeaderHeight.bind(menu); + + + // Make sure we move when the orientation of the device changes + menu.orientationChanged = function(event) { + // Orientation is backwards between playbook and BB10 smartphones + if (bb.device.isPlayBook) { + if (window.orientation == 0 || window.orientation == 180) { + this.style.left = '1027px'; + } else if (window.orientation == -90 || window.orientation == 90) { + this.style.left = '603px'; + } + } else { + if (window.orientation == 0 || window.orientation == 180) { + this.style.left = '771px'; + } else if (window.orientation == -90 || window.orientation == 90) { + this.style.left = '1283px'; + } + } + }; + menu.orientationChanged = menu.orientationChanged.bind(menu); + window.addEventListener('orientationchange', menu.orientationChanged,false); + + // Create our add item function + menu.add = function(action) { + var normal, + highlight, + caption = action.innerHTML; + + // set our styling + normal = 'bb-bb10-context-menu-item-'+this.res+' bb-bb10-context-menu-item-'+this.res+'-' + bb.actionBar.color; + highlight = normal + ' bb-bb10-context-menu-item-hover-'+this.res; + this.appendChild(action); + this.actions.push(action); + action.normal = normal; + action.highlight = highlight; + // Set our inner information + action.innerHTML = ''; + var inner = document.createElement('div'), + img = document.createElement('img'); + img.setAttribute('src', action.getAttribute('data-bb-img')); + img.setAttribute('class','bb-bb10-context-menu-item-image-'+this.res); + action.appendChild(img); + inner.setAttribute('class','bb-bb10-context-menu-item-inner-'+this.res); + action.appendChild(inner); + inner.innerHTML = caption; + + action.setAttribute('class',normal); + action.ontouchstart = function () { + this.setAttribute('class',this.highlight); + this.setAttribute('style','border-left-color:'+ bb.options.bb10HighlightColor); + } + action.ontouchend = function () { + this.setAttribute('class',this.normal); + this.setAttribute('style',''); + } + action.addEventListener("click", this.hide, false); + }; + menu.add = menu.add.bind(menu); + + return menu; + }, + + // Calculate the proper width of the context menu + getWidth : function() { + if (bb.device.isPlayBook) { + return '300px'; + } else { + return '563px'; + } + }, + + // Calculate the proper width of the context menu when peeking + getPeekWidth : function() { + if (bb.device.isPlayBook) { + return '55px'; + } else { + return '121px'; + } + }, + + // Calculate the proper left of the context menu + getLeft : function() { + return window.innerWidth + 3 + 'px'; + } +}; + + +bb.textArrowList = { + // Apply our transforms to all arrow lists passed in + apply: function(elements) { + if (bb.device.isBB10) { + var i, + outerElement, + res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + for (i = 0; i < elements.length; i++) { + outerElement = elements[i]; + outerElement.setAttribute('class','bb-bb10-text-arrow-list-'+res); + // Gather our inner items + var items = outerElement.querySelectorAll('[data-bb-type=item]'); + for (var j = 0; j < items.length; j++) { + var innerChildNode = items[j], + text = innerChildNode.innerHTML; + innerChildNode.normal = 'bb-bb10-text-arrow-list-item-'+res+' bb-bb10-text-arrow-list-item-'+bb.screen.listColor; + innerChildNode.highlight = 'bb-bb10-text-arrow-list-item-'+res+' bb-bb10-text-arrow-list-item-hover bb10Highlight'; + innerChildNode.setAttribute('class',innerChildNode.normal); + innerChildNode.innerHTML = '
'+ text + '
'+ + '
'; + innerChildNode.ontouchstart = function() { + this.setAttribute('class', this.highlight); + }; + innerChildNode.ontouchend = function() { + this.setAttribute('class', this.normal); + }; + // Create our separator
+ if (j < items.length - 1) { + var placeholder = document.createElement('div'); + placeholder.setAttribute('class','bb-bb10-arrow-list-separator-'+res+'-'+bb.screen.listColor); + outerElement.insertBefore(placeholder,innerChildNode.nextSibling); + } + } + } + } + else { + for (var i = 0; i < elements.length; i++) { + var inEvent, + outEvent, + outerElement = elements[i]; + + // Set our highlight events + if (bb.device.isPlayBook) { + inEvent = 'ontouchstart'; + outEvent = 'ontouchend'; + } else { + inEvent = 'onmouseover'; + outEvent = 'onmouseout'; + } + outerElement.setAttribute('class','bb-text-arrow-list'); + // Gather our inner items + var items = outerElement.querySelectorAll('[data-bb-type=item]'); + for (var j = 0; j < items.length; j++) { + var innerChildNode = items[j], + text = innerChildNode.innerHTML; + innerChildNode.setAttribute('class','bb-text-arrow-list-item'); + innerChildNode.setAttribute(inEvent, "this.setAttribute('class','bb-text-arrow-list-item-hover');"); + innerChildNode.setAttribute(outEvent, "this.setAttribute('class','bb-text-arrow-list-item')"); + innerChildNode.setAttribute('x-blackberry-focusable','true'); + + innerChildNode.innerHTML = ''+ text + '' + + '
'; + + // Create our separator
+ if (j < items.length - 1) { + var placeholder = document.createElement('div'); + placeholder.setAttribute('class','bb-arrow-list-separator'); + outerElement.insertBefore(placeholder,innerChildNode.nextSibling); + } + } + } + } + } +}; + + +bb.textInput = { + apply: function(elements) { + if (bb.device.isBB5) { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + } + } else if (bb.device.isBB10){ + var res, + i, + outerElement, + css; + + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + for (i = 0; i < elements.length; i++) { + outerElement = elements[i]; + css = ''; + // Keep the developers existing styling + if (outerElement.hasAttribute('class')) { + css = outerElement.getAttribute('class'); + } + + outerElement.normal = css + ' bb-bb10-input bb-bb10-input-'+res; + outerElement.focused = css + ' bb-bb10-input-focused bb-bb10-input-focused-'+res+' bb-bb10-input-'+res; + outerElement.setAttribute('class', outerElement.normal); + outerElement.isFocused = false; + outerElement.clickCount = 0; + outerElement.addEventListener('focus', function() { + this.setAttribute('class',this.focused); + this.style['border-color'] = bb.options.bb10HighlightColor; + this.isFocused = true; + this.clickCount = 0; + }, false); + + outerElement.addEventListener('blur', function() { + this.setAttribute('class',this.normal); + this.style['border-color'] = ''; + this.isFocused = false; + this.removeEventListener('click',outerElement.handleDeleteClick , false); + }, false); + + outerElement.addEventListener('click',function (event) { + // Don't handle the first click which is the focus + if (this.clickCount == 0) { + this.clickCount++; + return; + } + if (event.target == this && this.isFocused) { + var deleteClicked = false; + if (bb.device.isPlayBook && event.clientX > (this.clientWidth - 40)) { + deleteClicked = true; + } else if(event.clientX > (this.clientWidth - 45)){ + deleteClicked = true; + } + if (deleteClicked) { + this.value = ''; + } + } + } , false); + } + }else { + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i]; + var style = outerElement.getAttribute('class'); + style = style + ' bb-bb7-input'; + + if (bb.device.isHiRes) { + style = style + ' bb-bb7-input-hires'; + } else { + style = style + ' bb-bb7-input-lowres'; + } + // Apply our style + outerElement.setAttribute('class', style); + } + } + } +}; + +/*! + * iScroll v4.1.9 ~ Copyright (c) 2011 Matteo Spinelli, http://cubiq.org + * Released under MIT license, http://cubiq.org/license + */ +(function(){ +var m = Math, + mround = function (r) { return r >> 0; }, + vendor = (/webkit/i).test(navigator.appVersion) ? 'webkit' : + (/firefox/i).test(navigator.userAgent) ? 'Moz' : + (/trident/i).test(navigator.userAgent) ? 'ms' : + 'opera' in window ? 'O' : '', + + // Browser capabilities + isAndroid = (/android/gi).test(navigator.appVersion), + isIDevice = (/iphone|ipad/gi).test(navigator.appVersion), + isPlaybook = (/playbook/gi).test(navigator.appVersion), + isTouchPad = (/hp-tablet/gi).test(navigator.appVersion), + + has3d = 'WebKitCSSMatrix' in window && 'm11' in new WebKitCSSMatrix(), + hasTouch = 'ontouchstart' in window && !isTouchPad, + hasTransform = vendor + 'Transform' in document.documentElement.style, + hasTransitionEnd = isIDevice || isPlaybook, + + nextFrame = (function() { + return window.requestAnimationFrame + || window.webkitRequestAnimationFrame + || window.mozRequestAnimationFrame + || window.oRequestAnimationFrame + || window.msRequestAnimationFrame + || function(callback) { return setTimeout(callback, 1); } + })(), + cancelFrame = (function () { + return window.cancelRequestAnimationFrame + || window.webkitCancelAnimationFrame + || window.webkitCancelRequestAnimationFrame + || window.mozCancelRequestAnimationFrame + || window.oCancelRequestAnimationFrame + || window.msCancelRequestAnimationFrame + || clearTimeout + })(), + + // Events + RESIZE_EV = 'onorientationchange' in window ? 'orientationchange' : 'resize', + START_EV = hasTouch ? 'touchstart' : 'mousedown', + MOVE_EV = hasTouch ? 'touchmove' : 'mousemove', + END_EV = hasTouch ? 'touchend' : 'mouseup', + CANCEL_EV = hasTouch ? 'touchcancel' : 'mouseup', + WHEEL_EV = vendor == 'Moz' ? 'DOMMouseScroll' : 'mousewheel', + + // Helpers + trnOpen = 'translate' + (has3d ? '3d(' : '('), + trnClose = has3d ? ',0)' : ')', + + // Constructor + iScroll = function (el, options) { + var that = this, + doc = document, + i; + + that.wrapper = typeof el == 'object' ? el : doc.getElementById(el); + that.wrapper.style.overflow = 'hidden'; + that.scroller = that.wrapper.children[0]; + + // Default options + that.options = { + hScroll: true, + vScroll: true, + x: 0, + y: 0, + bounce: true, + bounceLock: false, + momentum: true, + lockDirection: true, + useTransform: true, + useTransition: false, + topOffset: 0, + checkDOMChanges: false, // Experimental + + // Scrollbar + hScrollbar: true, + vScrollbar: true, + fixedScrollbar: isAndroid, + hideScrollbar: isIDevice, + fadeScrollbar: isIDevice && has3d, + scrollbarClass: '', + + // Zoom + zoom: false, + zoomMin: 1, + zoomMax: 4, + doubleTapZoom: 2, + wheelAction: 'scroll', + + // Snap + snap: false, + snapThreshold: 1, + + // Events + onRefresh: null, + onBeforeScrollStart: function (e) { e.preventDefault(); }, + onScrollStart: null, + onBeforeScrollMove: null, + onScrollMove: null, + onBeforeScrollEnd: null, + onScrollEnd: null, + onTouchEnd: null, + onDestroy: null, + onZoomStart: null, + onZoom: null, + onZoomEnd: null + }; + + // User defined options + for (i in options) that.options[i] = options[i]; + + // Set starting position + that.x = that.options.x; + that.y = that.options.y; + + // Normalize options + that.options.useTransform = hasTransform ? that.options.useTransform : false; + that.options.hScrollbar = that.options.hScroll && that.options.hScrollbar; + that.options.vScrollbar = that.options.vScroll && that.options.vScrollbar; + that.options.zoom = that.options.useTransform && that.options.zoom; + that.options.useTransition = hasTransitionEnd && that.options.useTransition; + + // Helpers FIX ANDROID BUG! + // translate3d and scale doesn't work together! + // Ignoring 3d ONLY WHEN YOU SET that.options.zoom + if ( that.options.zoom && isAndroid ){ + trnOpen = 'translate('; + trnClose = ')'; + } + + // Set some default styles + that.scroller.style[vendor + 'TransitionProperty'] = that.options.useTransform ? '-' + vendor.toLowerCase() + '-transform' : 'top left'; + that.scroller.style[vendor + 'TransitionDuration'] = '0'; + that.scroller.style[vendor + 'TransformOrigin'] = '0 0'; + if (that.options.useTransition) that.scroller.style[vendor + 'TransitionTimingFunction'] = 'cubic-bezier(0.33,0.66,0.66,1)'; + + if (that.options.useTransform) that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose; + else that.scroller.style.cssText += ';position:absolute;top:' + that.y + 'px;left:' + that.x + 'px'; + + if (that.options.useTransition) that.options.fixedScrollbar = true; + + that.refresh(); + + that._bind(RESIZE_EV, window); + that._bind(START_EV); + if (!hasTouch) { + that._bind('mouseout', that.wrapper); + if (that.options.wheelAction != 'none') + that._bind(WHEEL_EV); + } + + if (that.options.checkDOMChanges) that.checkDOMTime = setInterval(function () { + that._checkDOMChanges(); + }, 500); + }; + +// Prototype +iScroll.prototype = { + enabled: true, + x: 0, + y: 0, + steps: [], + scale: 1, + currPageX: 0, currPageY: 0, + pagesX: [], pagesY: [], + aniTime: null, + wheelZoomCount: 0, + + handleEvent: function (e) { + var that = this; + switch(e.type) { + case START_EV: + if (!hasTouch && e.button !== 0) return; + that._start(e); + break; + case MOVE_EV: that._move(e); break; + case END_EV: + case CANCEL_EV: that._end(e); break; + case RESIZE_EV: that._resize(); break; + case WHEEL_EV: that._wheel(e); break; + case 'mouseout': that._mouseout(e); break; + case 'webkitTransitionEnd': that._transitionEnd(e); break; + } + }, + + _checkDOMChanges: function () { + if (this.moved || this.zoomed || this.animating || + (this.scrollerW == this.scroller.offsetWidth * this.scale && this.scrollerH == this.scroller.offsetHeight * this.scale)) return; + + this.refresh(); + }, + + _scrollbar: function (dir) { + var that = this, + doc = document, + bar; + + if (!that[dir + 'Scrollbar']) { + if (that[dir + 'ScrollbarWrapper']) { + if (hasTransform) that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = ''; + that[dir + 'ScrollbarWrapper'].parentNode.removeChild(that[dir + 'ScrollbarWrapper']); + that[dir + 'ScrollbarWrapper'] = null; + that[dir + 'ScrollbarIndicator'] = null; + } + + return; + } + + if (!that[dir + 'ScrollbarWrapper']) { + // Create the scrollbar wrapper + bar = doc.createElement('div'); + + if (that.options.scrollbarClass) bar.className = that.options.scrollbarClass + dir.toUpperCase(); + else bar.style.cssText = 'position:absolute;z-index:100;' + (dir == 'h' ? 'height:7px;bottom:1px;left:2px;right:' + (that.vScrollbar ? '7' : '2') + 'px' : 'width:7px;bottom:' + (that.hScrollbar ? '7' : '2') + 'px;top:2px;right:1px'); + + bar.style.cssText += ';pointer-events:none;-' + vendor + '-transition-property:opacity;-' + vendor + '-transition-duration:' + (that.options.fadeScrollbar ? '350ms' : '0') + ';overflow:hidden;opacity:' + (that.options.hideScrollbar ? '0' : '1'); + + that.wrapper.appendChild(bar); + that[dir + 'ScrollbarWrapper'] = bar; + + // Create the scrollbar indicator + bar = doc.createElement('div'); + if (!that.options.scrollbarClass) { + bar.style.cssText = 'position:absolute;z-index:100;background:rgba(0,0,0,0.3);border:1px solid rgba(255,255,255,0.9);-' + vendor + '-background-clip:padding-box;-' + vendor + '-box-sizing:border-box;' + (dir == 'h' ? 'height:100%' : 'width:100%') + ';-' + vendor + '-border-radius:3px;border-radius:3px'; + } + bar.style.cssText += ';pointer-events:none;-' + vendor + '-transition-property:-' + vendor + '-transform;-' + vendor + '-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1);-' + vendor + '-transition-duration:0;-' + vendor + '-transform:' + trnOpen + '0,0' + trnClose; + if (that.options.useTransition) bar.style.cssText += ';-' + vendor + '-transition-timing-function:cubic-bezier(0.33,0.66,0.66,1)'; + + that[dir + 'ScrollbarWrapper'].appendChild(bar); + that[dir + 'ScrollbarIndicator'] = bar; + } + + if (dir == 'h') { + that.hScrollbarSize = that.hScrollbarWrapper.clientWidth; + that.hScrollbarIndicatorSize = m.max(mround(that.hScrollbarSize * that.hScrollbarSize / that.scrollerW), 8); + that.hScrollbarIndicator.style.width = that.hScrollbarIndicatorSize + 'px'; + that.hScrollbarMaxScroll = that.hScrollbarSize - that.hScrollbarIndicatorSize; + that.hScrollbarProp = that.hScrollbarMaxScroll / that.maxScrollX; + } else { + that.vScrollbarSize = that.vScrollbarWrapper.clientHeight; + that.vScrollbarIndicatorSize = m.max(mround(that.vScrollbarSize * that.vScrollbarSize / that.scrollerH), 8); + that.vScrollbarIndicator.style.height = that.vScrollbarIndicatorSize + 'px'; + that.vScrollbarMaxScroll = that.vScrollbarSize - that.vScrollbarIndicatorSize; + that.vScrollbarProp = that.vScrollbarMaxScroll / that.maxScrollY; + } + + // Reset position + that._scrollbarPos(dir, true); + }, + + _resize: function () { + var that = this; + setTimeout(function () { that.refresh(); }, isAndroid ? 200 : 0); + }, + + _pos: function (x, y) { + x = this.hScroll ? x : 0; + y = this.vScroll ? y : 0; + + if (this.options.useTransform) { + this.scroller.style[vendor + 'Transform'] = trnOpen + x + 'px,' + y + 'px' + trnClose + ' scale(' + this.scale + ')'; + } else { + x = mround(x); + y = mround(y); + this.scroller.style.left = x + 'px'; + this.scroller.style.top = y + 'px'; + } + + this.x = x; + this.y = y; + + this._scrollbarPos('h'); + this._scrollbarPos('v'); + }, + + _scrollbarPos: function (dir, hidden) { + var that = this, + pos = dir == 'h' ? that.x : that.y, + size; + + if (!that[dir + 'Scrollbar']) return; + + pos = that[dir + 'ScrollbarProp'] * pos; + + if (pos < 0) { + if (!that.options.fixedScrollbar) { + size = that[dir + 'ScrollbarIndicatorSize'] + mround(pos * 3); + if (size < 8) size = 8; + that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; + } + pos = 0; + } else if (pos > that[dir + 'ScrollbarMaxScroll']) { + if (!that.options.fixedScrollbar) { + size = that[dir + 'ScrollbarIndicatorSize'] - mround((pos - that[dir + 'ScrollbarMaxScroll']) * 3); + if (size < 8) size = 8; + that[dir + 'ScrollbarIndicator'].style[dir == 'h' ? 'width' : 'height'] = size + 'px'; + pos = that[dir + 'ScrollbarMaxScroll'] + (that[dir + 'ScrollbarIndicatorSize'] - size); + } else { + pos = that[dir + 'ScrollbarMaxScroll']; + } + } + + that[dir + 'ScrollbarWrapper'].style[vendor + 'TransitionDelay'] = '0'; + that[dir + 'ScrollbarWrapper'].style.opacity = hidden && that.options.hideScrollbar ? '0' : '1'; + that[dir + 'ScrollbarIndicator'].style[vendor + 'Transform'] = trnOpen + (dir == 'h' ? pos + 'px,0' : '0,' + pos + 'px') + trnClose; + }, + + _start: function (e) { + var that = this, + point = hasTouch ? e.touches[0] : e, + matrix, x, y, + c1, c2; + + if (!that.enabled) return; + + if (that.options.onBeforeScrollStart) that.options.onBeforeScrollStart.call(that, e); + + if (that.options.useTransition || that.options.zoom) that._transitionTime(0); + + that.moved = false; + that.animating = false; + that.zoomed = false; + that.distX = 0; + that.distY = 0; + that.absDistX = 0; + that.absDistY = 0; + that.dirX = 0; + that.dirY = 0; + + // Gesture start + if (that.options.zoom && hasTouch && e.touches.length > 1) { + c1 = m.abs(e.touches[0].pageX-e.touches[1].pageX); + c2 = m.abs(e.touches[0].pageY-e.touches[1].pageY); + + that.touchesDistStart = m.sqrt(c1 * c1 + c2 * c2); + + that.originX = m.abs(e.touches[0].pageX + e.touches[1].pageX - that.wrapperOffsetLeft * 2) / 2 - that.x; + that.originY = m.abs(e.touches[0].pageY + e.touches[1].pageY - that.wrapperOffsetTop * 2) / 2 - that.y; + + if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); + } + + if (that.options.momentum) { + if (that.options.useTransform) { + // Very lame general purpose alternative to CSSMatrix + matrix = getComputedStyle(that.scroller, null)[vendor + 'Transform'].replace(/[^0-9-.,]/g, '').split(','); + x = matrix[4] * 1; + y = matrix[5] * 1; + } else { + x = getComputedStyle(that.scroller, null).left.replace(/[^0-9-]/g, '') * 1; + y = getComputedStyle(that.scroller, null).top.replace(/[^0-9-]/g, '') * 1; + } + + if (x != that.x || y != that.y) { + if (that.options.useTransition) that._unbind('webkitTransitionEnd'); + else cancelFrame(that.aniTime); + that.steps = []; + that._pos(x, y); + } + } + + that.absStartX = that.x; // Needed by snap threshold + that.absStartY = that.y; + + that.startX = that.x; + that.startY = that.y; + that.pointX = point.pageX; + that.pointY = point.pageY; + + that.startTime = e.timeStamp || Date.now(); + + if (that.options.onScrollStart) that.options.onScrollStart.call(that, e); + + that._bind(MOVE_EV); + that._bind(END_EV); + that._bind(CANCEL_EV); + }, + + _move: function (e) { + var that = this, + point = hasTouch ? e.touches[0] : e, + deltaX = point.pageX - that.pointX, + deltaY = point.pageY - that.pointY, + newX = that.x + deltaX, + newY = that.y + deltaY, + c1, c2, scale, + timestamp = e.timeStamp || Date.now(); + + if (that.options.onBeforeScrollMove) that.options.onBeforeScrollMove.call(that, e); + + // Zoom + if (that.options.zoom && hasTouch && e.touches.length > 1) { + c1 = m.abs(e.touches[0].pageX - e.touches[1].pageX); + c2 = m.abs(e.touches[0].pageY - e.touches[1].pageY); + that.touchesDist = m.sqrt(c1*c1+c2*c2); + + that.zoomed = true; + + scale = 1 / that.touchesDistStart * that.touchesDist * this.scale; + + if (scale < that.options.zoomMin) scale = 0.5 * that.options.zoomMin * Math.pow(2.0, scale / that.options.zoomMin); + else if (scale > that.options.zoomMax) scale = 2.0 * that.options.zoomMax * Math.pow(0.5, that.options.zoomMax / scale); + + that.lastScale = scale / this.scale; + + newX = this.originX - this.originX * that.lastScale + this.x, + newY = this.originY - this.originY * that.lastScale + this.y; + + this.scroller.style[vendor + 'Transform'] = trnOpen + newX + 'px,' + newY + 'px' + trnClose + ' scale(' + scale + ')'; + + if (that.options.onZoom) that.options.onZoom.call(that, e); + return; + } + + that.pointX = point.pageX; + that.pointY = point.pageY; + + // Slow down if outside of the boundaries + if (newX > 0 || newX < that.maxScrollX) { + newX = that.options.bounce ? that.x + (deltaX / 2) : newX >= 0 || that.maxScrollX >= 0 ? 0 : that.maxScrollX; + } + if (newY > that.minScrollY || newY < that.maxScrollY) { + newY = that.options.bounce ? that.y + (deltaY / 2) : newY >= that.minScrollY || that.maxScrollY >= 0 ? that.minScrollY : that.maxScrollY; + } + + that.distX += deltaX; + that.distY += deltaY; + that.absDistX = m.abs(that.distX); + that.absDistY = m.abs(that.distY); + + if (that.absDistX < 6 && that.absDistY < 6) { + return; + } + + // Lock direction + if (that.options.lockDirection) { + if (that.absDistX > that.absDistY + 5) { + newY = that.y; + deltaY = 0; + } else if (that.absDistY > that.absDistX + 5) { + newX = that.x; + deltaX = 0; + } + } + + that.moved = true; + that._pos(newX, newY); + that.dirX = deltaX > 0 ? -1 : deltaX < 0 ? 1 : 0; + that.dirY = deltaY > 0 ? -1 : deltaY < 0 ? 1 : 0; + + if (timestamp - that.startTime > 300) { + that.startTime = timestamp; + that.startX = that.x; + that.startY = that.y; + } + + if (that.options.onScrollMove) that.options.onScrollMove.call(that, e); + }, + + _end: function (e) { + if (hasTouch && e.touches.length != 0) return; + + var that = this, + point = hasTouch ? e.changedTouches[0] : e, + target, ev, + momentumX = { dist:0, time:0 }, + momentumY = { dist:0, time:0 }, + duration = (e.timeStamp || Date.now()) - that.startTime, + newPosX = that.x, + newPosY = that.y, + distX, distY, + newDuration, + snap, + scale; + + that._unbind(MOVE_EV); + that._unbind(END_EV); + that._unbind(CANCEL_EV); + + if (that.options.onBeforeScrollEnd) that.options.onBeforeScrollEnd.call(that, e); + + if (that.zoomed) { + scale = that.scale * that.lastScale; + scale = Math.max(that.options.zoomMin, scale); + scale = Math.min(that.options.zoomMax, scale); + that.lastScale = scale / that.scale; + that.scale = scale; + + that.x = that.originX - that.originX * that.lastScale + that.x; + that.y = that.originY - that.originY * that.lastScale + that.y; + + that.scroller.style[vendor + 'TransitionDuration'] = '200ms'; + that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + that.scale + ')'; + + that.zoomed = false; + that.refresh(); + + if (that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); + return; + } + + if (!that.moved) { + if (hasTouch) { + if (that.doubleTapTimer && that.options.zoom) { + // Double tapped + clearTimeout(that.doubleTapTimer); + that.doubleTapTimer = null; + if (that.options.onZoomStart) that.options.onZoomStart.call(that, e); + that.zoom(that.pointX, that.pointY, that.scale == 1 ? that.options.doubleTapZoom : 1); + if (that.options.onZoomEnd) { + setTimeout(function() { + that.options.onZoomEnd.call(that, e); + }, 200); // 200 is default zoom duration + } + } else { + that.doubleTapTimer = setTimeout(function () { + that.doubleTapTimer = null; + + // Find the last touched element + target = point.target; + while (target.nodeType != 1) target = target.parentNode; + + if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { + ev = document.createEvent('MouseEvents'); + ev.initMouseEvent('click', true, true, e.view, 1, + point.screenX, point.screenY, point.clientX, point.clientY, + e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, + 0, null); + ev._fake = true; + target.dispatchEvent(ev); + } + }, that.options.zoom ? 250 : 0); + } + } + + that._resetPos(200); + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + if (duration < 300 && that.options.momentum) { + momentumX = newPosX ? that._momentum(newPosX - that.startX, duration, -that.x, that.scrollerW - that.wrapperW + that.x, that.options.bounce ? that.wrapperW : 0) : momentumX; + momentumY = newPosY ? that._momentum(newPosY - that.startY, duration, -that.y, (that.maxScrollY < 0 ? that.scrollerH - that.wrapperH + that.y - that.minScrollY : 0), that.options.bounce ? that.wrapperH : 0) : momentumY; + + newPosX = that.x + momentumX.dist; + newPosY = that.y + momentumY.dist; + + if ((that.x > 0 && newPosX > 0) || (that.x < that.maxScrollX && newPosX < that.maxScrollX)) momentumX = { dist:0, time:0 }; + if ((that.y > that.minScrollY && newPosY > that.minScrollY) || (that.y < that.maxScrollY && newPosY < that.maxScrollY)) momentumY = { dist:0, time:0 }; + } + + if (momentumX.dist || momentumY.dist) { + newDuration = m.max(m.max(momentumX.time, momentumY.time), 10); + + // Do we need to snap? + if (that.options.snap) { + distX = newPosX - that.absStartX; + distY = newPosY - that.absStartY; + if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) { that.scrollTo(that.absStartX, that.absStartY, 200); } + else { + snap = that._snap(newPosX, newPosY); + newPosX = snap.x; + newPosY = snap.y; + newDuration = m.max(snap.time, newDuration); + } + } + + that.scrollTo(mround(newPosX), mround(newPosY), newDuration); + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + // Do we need to snap? + if (that.options.snap) { + distX = newPosX - that.absStartX; + distY = newPosY - that.absStartY; + if (m.abs(distX) < that.options.snapThreshold && m.abs(distY) < that.options.snapThreshold) that.scrollTo(that.absStartX, that.absStartY, 200); + else { + snap = that._snap(that.x, that.y); + if (snap.x != that.x || snap.y != that.y) that.scrollTo(snap.x, snap.y, snap.time); + } + + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + return; + } + + that._resetPos(200); + if (that.options.onTouchEnd) that.options.onTouchEnd.call(that, e); + }, + + _resetPos: function (time) { + var that = this, + resetX = that.x >= 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x, + resetY = that.y >= that.minScrollY || that.maxScrollY > 0 ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; + + if (resetX == that.x && resetY == that.y) { + if (that.moved) { + that.moved = false; + if (that.options.onScrollEnd) that.options.onScrollEnd.call(that); // Execute custom code on scroll end + } + + if (that.hScrollbar && that.options.hideScrollbar) { + if (vendor == 'webkit') that.hScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms'; + that.hScrollbarWrapper.style.opacity = '0'; + } + if (that.vScrollbar && that.options.hideScrollbar) { + if (vendor == 'webkit') that.vScrollbarWrapper.style[vendor + 'TransitionDelay'] = '300ms'; + that.vScrollbarWrapper.style.opacity = '0'; + } + + return; + } + + that.scrollTo(resetX, resetY, time || 0); + }, + + _wheel: function (e) { + var that = this, + wheelDeltaX, wheelDeltaY, + deltaX, deltaY, + deltaScale; + + if ('wheelDeltaX' in e) { + wheelDeltaX = e.wheelDeltaX / 12; + wheelDeltaY = e.wheelDeltaY / 12; + } else if('wheelDelta' in e) { + wheelDeltaX = wheelDeltaY = e.wheelDelta / 12; + } else if ('detail' in e) { + wheelDeltaX = wheelDeltaY = -e.detail * 3; + } else { + return; + } + + if (that.options.wheelAction == 'zoom') { + deltaScale = that.scale * Math.pow(2, 1/3 * (wheelDeltaY ? wheelDeltaY / Math.abs(wheelDeltaY) : 0)); + if (deltaScale < that.options.zoomMin) deltaScale = that.options.zoomMin; + if (deltaScale > that.options.zoomMax) deltaScale = that.options.zoomMax; + + if (deltaScale != that.scale) { + if (!that.wheelZoomCount && that.options.onZoomStart) that.options.onZoomStart.call(that, e); + that.wheelZoomCount++; + + that.zoom(e.pageX, e.pageY, deltaScale, 400); + + setTimeout(function() { + that.wheelZoomCount--; + if (!that.wheelZoomCount && that.options.onZoomEnd) that.options.onZoomEnd.call(that, e); + }, 400); + } + + return; + } + + deltaX = that.x + wheelDeltaX; + deltaY = that.y + wheelDeltaY; + + if (deltaX > 0) deltaX = 0; + else if (deltaX < that.maxScrollX) deltaX = that.maxScrollX; + + if (deltaY > that.minScrollY) deltaY = that.minScrollY; + else if (deltaY < that.maxScrollY) deltaY = that.maxScrollY; + + that.scrollTo(deltaX, deltaY, 0); + }, + + _mouseout: function (e) { + var t = e.relatedTarget; + + if (!t) { + this._end(e); + return; + } + + while (t = t.parentNode) if (t == this.wrapper) return; + + this._end(e); + }, + + _transitionEnd: function (e) { + var that = this; + + if (e.target != that.scroller) return; + + that._unbind('webkitTransitionEnd'); + + that._startAni(); + }, + + + /** + * + * Utilities + * + */ + _startAni: function () { + var that = this, + startX = that.x, startY = that.y, + startTime = Date.now(), + step, easeOut, + animate; + + if (that.animating) return; + + if (!that.steps.length) { + that._resetPos(400); + return; + } + + step = that.steps.shift(); + + if (step.x == startX && step.y == startY) step.time = 0; + + that.animating = true; + that.moved = true; + + if (that.options.useTransition) { + that._transitionTime(step.time); + that._pos(step.x, step.y); + that.animating = false; + if (step.time) that._bind('webkitTransitionEnd'); + else that._resetPos(0); + return; + } + + animate = function () { + var now = Date.now(), + newX, newY; + + if (now >= startTime + step.time) { + that._pos(step.x, step.y); + that.animating = false; + if (that.options.onAnimationEnd) that.options.onAnimationEnd.call(that); // Execute custom code on animation end + that._startAni(); + return; + } + + now = (now - startTime) / step.time - 1; + easeOut = m.sqrt(1 - now * now); + newX = (step.x - startX) * easeOut + startX; + newY = (step.y - startY) * easeOut + startY; + that._pos(newX, newY); + if (that.animating) that.aniTime = nextFrame(animate); + }; + + animate(); + }, + + _transitionTime: function (time) { + time += 'ms'; + this.scroller.style[vendor + 'TransitionDuration'] = time; + if (this.hScrollbar) this.hScrollbarIndicator.style[vendor + 'TransitionDuration'] = time; + if (this.vScrollbar) this.vScrollbarIndicator.style[vendor + 'TransitionDuration'] = time; + }, + + _momentum: function (dist, time, maxDistUpper, maxDistLower, size) { + var deceleration = 0.0006, + speed = m.abs(dist) / time, + newDist = (speed * speed) / (2 * deceleration), + newTime = 0, outsideDist = 0; + + // Proportinally reduce speed if we are outside of the boundaries + if (dist > 0 && newDist > maxDistUpper) { + outsideDist = size / (6 / (newDist / speed * deceleration)); + maxDistUpper = maxDistUpper + outsideDist; + speed = speed * maxDistUpper / newDist; + newDist = maxDistUpper; + } else if (dist < 0 && newDist > maxDistLower) { + outsideDist = size / (6 / (newDist / speed * deceleration)); + maxDistLower = maxDistLower + outsideDist; + speed = speed * maxDistLower / newDist; + newDist = maxDistLower; + } + + newDist = newDist * (dist < 0 ? -1 : 1); + newTime = speed / deceleration; + + return { dist: newDist, time: mround(newTime) }; + }, + + _offset: function (el) { + var left = -el.offsetLeft, + top = -el.offsetTop; + + while (el = el.offsetParent) { + left -= el.offsetLeft; + top -= el.offsetTop; + } + + if (el != this.wrapper) { + left *= this.scale; + top *= this.scale; + } + + return { left: left, top: top }; + }, + + _snap: function (x, y) { + var that = this, + i, l, + page, time, + sizeX, sizeY; + + // Check page X + page = that.pagesX.length - 1; + for (i=0, l=that.pagesX.length; i= that.pagesX[i]) { + page = i; + break; + } + } + if (page == that.currPageX && page > 0 && that.dirX < 0) page--; + x = that.pagesX[page]; + sizeX = m.abs(x - that.pagesX[that.currPageX]); + sizeX = sizeX ? m.abs(that.x - x) / sizeX * 500 : 0; + that.currPageX = page; + + // Check page Y + page = that.pagesY.length-1; + for (i=0; i= that.pagesY[i]) { + page = i; + break; + } + } + if (page == that.currPageY && page > 0 && that.dirY < 0) page--; + y = that.pagesY[page]; + sizeY = m.abs(y - that.pagesY[that.currPageY]); + sizeY = sizeY ? m.abs(that.y - y) / sizeY * 500 : 0; + that.currPageY = page; + + // Snap with constant speed (proportional duration) + time = mround(m.max(sizeX, sizeY)) || 200; + + return { x: x, y: y, time: time }; + }, + + _bind: function (type, el, bubble) { + (el || this.scroller).addEventListener(type, this, !!bubble); + }, + + _unbind: function (type, el, bubble) { + (el || this.scroller).removeEventListener(type, this, !!bubble); + }, + + + /** + * + * Public methods + * + */ + destroy: function () { + var that = this; + + that.scroller.style[vendor + 'Transform'] = ''; + + // Remove the scrollbars + that.hScrollbar = false; + that.vScrollbar = false; + that._scrollbar('h'); + that._scrollbar('v'); + + // Remove the event listeners + that._unbind(RESIZE_EV, window); + that._unbind(START_EV); + that._unbind(MOVE_EV); + that._unbind(END_EV); + that._unbind(CANCEL_EV); + + if (!that.options.hasTouch) { + that._unbind('mouseout', that.wrapper); + that._unbind(WHEEL_EV); + } + + if (that.options.useTransition) that._unbind('webkitTransitionEnd'); + + if (that.options.checkDOMChanges) clearInterval(that.checkDOMTime); + + if (that.options.onDestroy) that.options.onDestroy.call(that); + }, + + refresh: function () { + var that = this, + offset, + i, l, + els, + pos = 0, + page = 0; + + if (that.scale < that.options.zoomMin) that.scale = that.options.zoomMin; + that.wrapperW = that.wrapper.clientWidth || 1; + that.wrapperH = that.wrapper.clientHeight || 1; + + that.minScrollY = -that.options.topOffset || 0; + that.scrollerW = mround(that.scroller.offsetWidth * that.scale); + that.scrollerH = mround((that.scroller.offsetHeight + that.minScrollY) * that.scale); + that.maxScrollX = that.wrapperW - that.scrollerW; + that.maxScrollY = that.wrapperH - that.scrollerH + that.minScrollY; + that.dirX = 0; + that.dirY = 0; + + if (that.options.onRefresh) that.options.onRefresh.call(that); + + that.hScroll = that.options.hScroll && that.maxScrollX < 0; + that.vScroll = that.options.vScroll && (!that.options.bounceLock && !that.hScroll || that.scrollerH > that.wrapperH); + + that.hScrollbar = that.hScroll && that.options.hScrollbar; + that.vScrollbar = that.vScroll && that.options.vScrollbar && that.scrollerH > that.wrapperH; + + offset = that._offset(that.wrapper); + that.wrapperOffsetLeft = -offset.left; + that.wrapperOffsetTop = -offset.top; + + // Prepare snap + if (typeof that.options.snap == 'string') { + that.pagesX = []; + that.pagesY = []; + els = that.scroller.querySelectorAll(that.options.snap); + for (i=0, l=els.length; i= that.maxScrollX) { + that.pagesX[page] = pos; + pos = pos - that.wrapperW; + page++; + } + if (that.maxScrollX%that.wrapperW) that.pagesX[that.pagesX.length] = that.maxScrollX - that.pagesX[that.pagesX.length-1] + that.pagesX[that.pagesX.length-1]; + + pos = 0; + page = 0; + that.pagesY = []; + while (pos >= that.maxScrollY) { + that.pagesY[page] = pos; + pos = pos - that.wrapperH; + page++; + } + if (that.maxScrollY%that.wrapperH) that.pagesY[that.pagesY.length] = that.maxScrollY - that.pagesY[that.pagesY.length-1] + that.pagesY[that.pagesY.length-1]; + } + + // Prepare the scrollbars + that._scrollbar('h'); + that._scrollbar('v'); + + if (!that.zoomed) { + that.scroller.style[vendor + 'TransitionDuration'] = '0'; + that._resetPos(200); + } + }, + + scrollTo: function (x, y, time, relative) { + var that = this, + step = x, + i, l; + + that.stop(); + + if (!step.length) step = [{ x: x, y: y, time: time, relative: relative }]; + + for (i=0, l=step.length; i 0 ? 0 : pos.left < that.maxScrollX ? that.maxScrollX : pos.left; + pos.top = pos.top > that.minScrollY ? that.minScrollY : pos.top < that.maxScrollY ? that.maxScrollY : pos.top; + time = time === undefined ? m.max(m.abs(pos.left)*2, m.abs(pos.top)*2) : time; + + that.scrollTo(pos.left, pos.top, time); + }, + + scrollToPage: function (pageX, pageY, time) { + var that = this, x, y; + + time = time === undefined ? 400 : time; + + if (that.options.onScrollStart) that.options.onScrollStart.call(that); + + if (that.options.snap) { + pageX = pageX == 'next' ? that.currPageX+1 : pageX == 'prev' ? that.currPageX-1 : pageX; + pageY = pageY == 'next' ? that.currPageY+1 : pageY == 'prev' ? that.currPageY-1 : pageY; + + pageX = pageX < 0 ? 0 : pageX > that.pagesX.length-1 ? that.pagesX.length-1 : pageX; + pageY = pageY < 0 ? 0 : pageY > that.pagesY.length-1 ? that.pagesY.length-1 : pageY; + + that.currPageX = pageX; + that.currPageY = pageY; + x = that.pagesX[pageX]; + y = that.pagesY[pageY]; + } else { + x = -that.wrapperW * pageX; + y = -that.wrapperH * pageY; + if (x < that.maxScrollX) x = that.maxScrollX; + if (y < that.maxScrollY) y = that.maxScrollY; + } + + that.scrollTo(x, y, time); + }, + + disable: function () { + this.stop(); + this._resetPos(0); + this.enabled = false; + + // If disabled after touchstart we make sure that there are no left over events + this._unbind(MOVE_EV); + this._unbind(END_EV); + this._unbind(CANCEL_EV); + }, + + enable: function () { + this.enabled = true; + }, + + stop: function () { + if (this.options.useTransition) this._unbind('webkitTransitionEnd'); + else cancelFrame(this.aniTime); + this.steps = []; + this.moved = false; + this.animating = false; + }, + + zoom: function (x, y, scale, time) { + var that = this, + relScale = scale / that.scale; + + if (!that.options.useTransform) return; + + that.zoomed = true; + time = time === undefined ? 200 : time; + x = x - that.wrapperOffsetLeft - that.x; + y = y - that.wrapperOffsetTop - that.y; + that.x = x - x * relScale + that.x; + that.y = y - y * relScale + that.y; + + that.scale = scale; + that.refresh(); + + that.x = that.x > 0 ? 0 : that.x < that.maxScrollX ? that.maxScrollX : that.x; + that.y = that.y > that.minScrollY ? that.minScrollY : that.y < that.maxScrollY ? that.maxScrollY : that.y; + + that.scroller.style[vendor + 'TransitionDuration'] = time + 'ms'; + that.scroller.style[vendor + 'Transform'] = trnOpen + that.x + 'px,' + that.y + 'px' + trnClose + ' scale(' + scale + ')'; + that.zoomed = false; + }, + + isReady: function () { + return !this.moved && !this.zoomed && !this.animating; + } +}; + +if (typeof exports !== 'undefined') exports.iScroll = iScroll; +else window.iScroll = iScroll; + +})(); \ No newline at end of file diff --git a/samples/config.xml b/samples/config.xml index 3d396109..bf82a9d4 100644 --- a/samples/config.xml +++ b/samples/config.xml @@ -1,4 +1,4 @@ - + - + bbUI Samples An example of how to use different BlackBerry UI layouts and controls diff --git a/samples/contextMenu.htm b/samples/contextMenu.htm new file mode 100644 index 00000000..d8cc842e --- /dev/null +++ b/samples/contextMenu.htm @@ -0,0 +1,52 @@ + + +
+
+
+
BlackBerry 10 Only
+

The Delete menu item demonstrates how to grab the currently selected item of the context menu

+
+
+
+
Show Menu
+
Peek Menu
+
+
+
+
BlackBerry 10 Only
+

The below list demonstrates using the built in press and hold context menu for image lists

+
+
+
+
Dude from another planet
+
Dark Knight of Gotham
+
Cool shiny ring
+
That sheild rocks!
+
That's some serious tech
+
Hulk Smash!
+
Bring down the Hammer!
+
+
+
+
Email Work
+
Invite to Meeting
+
Call Work
+
View details
+
Delete
+
+
+ diff --git a/samples/dataOnLoad.htm b/samples/dataOnLoad.htm index 45e979af..ad7fda1c 100644 --- a/samples/dataOnLoad.htm +++ b/samples/dataOnLoad.htm @@ -17,11 +17,6 @@
-
diff --git a/samples/dataOnTheFly.htm b/samples/dataOnTheFly.htm index 310625c0..00087b84 100644 --- a/samples/dataOnTheFly.htm +++ b/samples/dataOnTheFly.htm @@ -17,11 +17,6 @@
-

This example shows you how to "hack" your way to adding UI elements on the fly. You can use as is, but it will be subject to change once a permanent solution is in place

@@ -31,6 +26,10 @@
Add DropDown
+
+ +
+
diff --git a/samples/grid.htm b/samples/grid.htm new file mode 100644 index 00000000..f46c2a04 --- /dev/null +++ b/samples/grid.htm @@ -0,0 +1,61 @@ + + +
+
+ +
+
+
+
Good Fun
+
+
+
Look-Out!
+
Fun with Lasers
+
+
+
+
+
BatBerry Controller
+
Scoop in some Air
+
+
+
Keeping Informed
+
Fun Stuff
+
Hello There
+
+
+
+
+
Just Plain Cool
+
Dashboard Mount
+
+
+
+
+
Action 1
+
Action 2
+
Action 3
+
Action 4
+
Extra Action
+
Another Action
+
+
\ No newline at end of file diff --git a/samples/imageListAndGrid.htm b/samples/imageListAndGrid.htm new file mode 100644 index 00000000..ce7fcc1f --- /dev/null +++ b/samples/imageListAndGrid.htm @@ -0,0 +1,40 @@ + + +
+
+
+
+
+
2:03:19
+
2:15:15
+
+
+
2:15:15
+
2:18:26
+
+
+
+
+
A
+
Yummy Fruit
+
Not really a peach
+
Time for some guacamole
+
B
+
I like the yellow ones
+
You know where I'm going with this one
+
+
\ No newline at end of file diff --git a/samples/images/actionBar/cog_dark_theme.png b/samples/images/actionBar/cog_dark_theme.png new file mode 100644 index 00000000..1f7b9611 Binary files /dev/null and b/samples/images/actionBar/cog_dark_theme.png differ diff --git a/samples/images/grid/1.jpg b/samples/images/grid/1.jpg new file mode 100644 index 00000000..7ca5fc71 Binary files /dev/null and b/samples/images/grid/1.jpg differ diff --git a/samples/images/grid/10.jpg b/samples/images/grid/10.jpg new file mode 100644 index 00000000..64988080 Binary files /dev/null and b/samples/images/grid/10.jpg differ diff --git a/samples/images/grid/2.jpg b/samples/images/grid/2.jpg new file mode 100644 index 00000000..41a17ccc Binary files /dev/null and b/samples/images/grid/2.jpg differ diff --git a/samples/images/grid/3.jpg b/samples/images/grid/3.jpg new file mode 100644 index 00000000..bf82be4b Binary files /dev/null and b/samples/images/grid/3.jpg differ diff --git a/samples/images/grid/4.png b/samples/images/grid/4.png new file mode 100644 index 00000000..1b498310 Binary files /dev/null and b/samples/images/grid/4.png differ diff --git a/samples/images/grid/5.jpg b/samples/images/grid/5.jpg new file mode 100644 index 00000000..0feede85 Binary files /dev/null and b/samples/images/grid/5.jpg differ diff --git a/samples/images/grid/6.jpg b/samples/images/grid/6.jpg new file mode 100644 index 00000000..8e8fb859 Binary files /dev/null and b/samples/images/grid/6.jpg differ diff --git a/samples/images/grid/7.jpg b/samples/images/grid/7.jpg new file mode 100644 index 00000000..bd862d51 Binary files /dev/null and b/samples/images/grid/7.jpg differ diff --git a/samples/images/grid/8.jpg b/samples/images/grid/8.jpg new file mode 100644 index 00000000..a33809df Binary files /dev/null and b/samples/images/grid/8.jpg differ diff --git a/samples/images/grid/9.jpg b/samples/images/grid/9.jpg new file mode 100644 index 00000000..34da59ce Binary files /dev/null and b/samples/images/grid/9.jpg differ diff --git a/samples/images/grid/pattern.png b/samples/images/grid/pattern.png new file mode 100644 index 00000000..ea8276e6 Binary files /dev/null and b/samples/images/grid/pattern.png differ diff --git a/samples/images/icons/icon1.png b/samples/images/icons/icon1.png index 669066de..82ac9baa 100644 Binary files a/samples/images/icons/icon1.png and b/samples/images/icons/icon1.png differ diff --git a/samples/images/icons/icon10.png b/samples/images/icons/icon10.png index 538420a5..c4cd4a2e 100644 Binary files a/samples/images/icons/icon10.png and b/samples/images/icons/icon10.png differ diff --git a/samples/images/icons/icon11.png b/samples/images/icons/icon11.png index 22efade7..25ad934a 100644 Binary files a/samples/images/icons/icon11.png and b/samples/images/icons/icon11.png differ diff --git a/samples/images/icons/icon2.png b/samples/images/icons/icon2.png index 01c22df9..54d7b5d3 100644 Binary files a/samples/images/icons/icon2.png and b/samples/images/icons/icon2.png differ diff --git a/samples/images/icons/icon3.png b/samples/images/icons/icon3.png index f53ab5b1..ee95b5b7 100644 Binary files a/samples/images/icons/icon3.png and b/samples/images/icons/icon3.png differ diff --git a/samples/images/icons/icon4.png b/samples/images/icons/icon4.png index 7c3c82af..6346c9dd 100644 Binary files a/samples/images/icons/icon4.png and b/samples/images/icons/icon4.png differ diff --git a/samples/images/icons/icon5.png b/samples/images/icons/icon5.png index 15e5dae0..ada7341b 100644 Binary files a/samples/images/icons/icon5.png and b/samples/images/icons/icon5.png differ diff --git a/samples/images/icons/icon6.png b/samples/images/icons/icon6.png index 2ba7c6da..6dcae93c 100644 Binary files a/samples/images/icons/icon6.png and b/samples/images/icons/icon6.png differ diff --git a/samples/images/icons/icon7.png b/samples/images/icons/icon7.png index a75cd673..37a76dc8 100644 Binary files a/samples/images/icons/icon7.png and b/samples/images/icons/icon7.png differ diff --git a/samples/images/icons/icon8.png b/samples/images/icons/icon8.png index 1560615e..8a9e4dd4 100644 Binary files a/samples/images/icons/icon8.png and b/samples/images/icons/icon8.png differ diff --git a/samples/images/icons/icon9.png b/samples/images/icons/icon9.png index 6d7a344b..5486d333 100644 Binary files a/samples/images/icons/icon9.png and b/samples/images/icons/icon9.png differ diff --git a/samples/images/inboxList/new.png b/samples/images/inboxList/new.png index 1f1b6b18..65310c72 100644 Binary files a/samples/images/inboxList/new.png and b/samples/images/inboxList/new.png differ diff --git a/samples/images/inboxList/opened.png b/samples/images/inboxList/opened.png index cc7a4795..5e7ea7b1 100644 Binary files a/samples/images/inboxList/opened.png and b/samples/images/inboxList/opened.png differ diff --git a/samples/images/inboxList/sent.png b/samples/images/inboxList/sent.png index 6ef36046..faafd48b 100644 Binary files a/samples/images/inboxList/sent.png and b/samples/images/inboxList/sent.png differ diff --git a/samples/inboxList.htm b/samples/inboxList.htm index 2ad81072..e237c258 100644 --- a/samples/inboxList.htm +++ b/samples/inboxList.htm @@ -18,43 +18,37 @@
- - -
+
Thu 27 May 2010
-
My car just broke down
-
Need to pick up Milk
-
Where do I find the new Document
-
Time for some BBQ Ribs
+
My car just broke down
+
Need to pick up Milk
+
Where do I find the new Document
+
Time for some BBQ Ribs
Thu 26 May 2010
-
Yes, I used to be in the Navy
-
Man, Vegas was rough!
-
What time are you getting home
-
I"ve been re-booked
-
Do you have time for a meeting?
-
Mac status update
-
Navigation mode rocks!
-
Theme work underway for 6.0
-
Year end reviews
+
Yes, I used to be in the Navy
+
Man, Vegas was rough!
+
What time are you getting home
+
I"ve been re-booked
+
Do you have time for a meeting?
+
Mac status update
+
Navigation mode rocks!
+
Theme work underway for 6.0
+
Year end reviews
Thu 25 May 2010
-
My car just broke down
-
Need to pick up Milk
-
Where do I find the new Document
-
Time for some BBQ Ribs
+
My car just broke down
+
Need to pick up Milk
+
Where do I find the new Document
+
Time for some BBQ Ribs
Thu 24 May 2010
-
Yes, I used to be in the Navy
-
Man, Vegas was rough!
-
What time are you getting home
-
I"ve been re-booked
-
Do you have time for a meeting?
-
Mac status update
-
Navigation mode rocks!
-
Theme work underway for 6.0
-
Year end reviews
+
Yes, I used to be in the Navy
+
Man, Vegas was rough!
+
What time are you getting home
+
I"ve been re-booked
+
Do you have time for a meeting?
+
Mac status update
+
Navigation mode rocks!
+
Theme work underway for 6.0
+
Year end reviews
diff --git a/samples/index.htm b/samples/index.htm index 57e2bb62..3768a9ce 100644 --- a/samples/index.htm +++ b/samples/index.htm @@ -14,21 +14,54 @@ * See the License for the specific language governing permissions and * limitations under the License. --> - + - - + + - + diff --git a/samples/input.htm b/samples/input.htm index a9e4c808..4d19c761 100644 --- a/samples/input.htm +++ b/samples/input.htm @@ -15,48 +15,53 @@ * limitations under the License. --> -
+
+
-
Buttons
+
Text Entry Examples
-
Choose A City:
-
Brasilia
+
Sample Text
+
+
+
Another Label
+ +
- +
-
Buttons
+
Dropdown Buttons
-
Radio Status:
-
Yes
+
Sample Dropdown
+
-
-
Sound:
-
Yes
-
- - -

This is text that I want to place in the middle of the screen to see how it looks

-
Text Entry Examples
+
Buttons
-
Sample Text:
- +
This is a button
+
My Button
-
-
Another Label:
- -
-
diff --git a/samples/js/dataOnTheFly.js b/samples/js/dataOnTheFly.js index 0274d120..ce90ab3f 100644 --- a/samples/js/dataOnTheFly.js +++ b/samples/js/dataOnTheFly.js @@ -14,6 +14,19 @@ * limitations under the License. */ +function dataOnTheFly_initialLoad(element) { + // I'm just doing a setTimeout to mimic processing some data + // in a background worker thread + setTimeout(dataOnTheFly_loadAfterTimeout,2000); +} + +function dataOnTheFly_loadAfterTimeout() { + document.getElementById('waiting').style.display = 'none'; + dataOnTheFly_addListItem() + dataOnTheFly_addListItem() + dataOnTheFly_addListItem() +} + function dataOnTheFly_addListItem() { var listItem, container, dataList = document.getElementById('dataList'); // Create our list item @@ -29,6 +42,10 @@ function dataOnTheFly_addListItem() { bb.imageList.apply([container]); // Append the item dataList.appendChild(container.firstChild); + // re-compute the scrolling area + if (bb.scroller) { + bb.scroller.refresh(); + } } function dataOnTheFly_addDropDown() { @@ -56,4 +73,8 @@ function dataOnTheFly_addDropDown() { bb.dropdown.apply([dropdown]); // Append the item buttonPanel.appendChild(container); + // re-compute the scrolling area + if (bb.scroller) { + bb.scroller.refresh(); + } } \ No newline at end of file diff --git a/samples/js/inboxList.js b/samples/js/inboxList.js index f33bea1b..727207ae 100644 --- a/samples/js/inboxList.js +++ b/samples/js/inboxList.js @@ -18,14 +18,14 @@ function clickMe() { alert('Your device pin is:' + blackberry.identity.PIN); } -if (blackberry.ui && blackberry.ui.menu) { +if (window.blackberry && blackberry.ui && blackberry.ui.menu) { blackberry.ui.menu.clearMenuItems(); var item = new blackberry.ui.menu.MenuItem(false, 1, 'Custom Menu', clickMe); blackberry.ui.menu.addMenuItem(item); } function unloadMessageList() { - if (blackberry.ui && blackberry.ui.menu) { + if (window.blackberry && blackberry.ui && blackberry.ui.menu) { blackberry.ui.menu.clearMenuItems(); } } \ No newline at end of file diff --git a/samples/menu.htm b/samples/menu.htm index e6f9adb4..b4a54323 100644 --- a/samples/menu.htm +++ b/samples/menu.htm @@ -16,26 +16,28 @@ -->
- -
-
Use native looking input controls
-
Style your list like the BlackBerry Inbox
-
Create native looking options screens
-
Add some height to your list items
-
Generate a chat window like BBM
-
Use pill buttons to organize your data
-
Add charts to your application
-
Use gauges and progress bars
- -
Create a navigation list with arrows
-
Dynamically load data when the screen opens
-
Dynamically load data/UI after the screen loads
-
Create native looking onSwipeDown menu on PlayBook or system menu on Smartphone
+
BlackBerry 10 Only
+
Layout content in an Image Grid
+
Combine a Grid and Image list
+
Create a context sensitive menu
+
Create a set of actions for your user
+
Buttons/Menus and Inputs
+
Use native looking input controls
+
Use pill buttons to organize your data
+
Create native looking menus
+
Lists
+
Style your list like the BlackBerry Inbox
+
Create a navigation list with arrows
+
Generate a chat window like BBM
+
BlackBerry 7 Examples
+
Create native looking options screens
+
Dynamic Screen Content
+
Using the onscreenready event
+
Using the ondomready event
+
Charts and Gauges
+
Add charts to your application
+
Use gauges and progress bars
diff --git a/samples/menuBar.htm b/samples/menuBar.htm index bfeb31be..f8b4389c 100644 --- a/samples/menuBar.htm +++ b/samples/menuBar.htm @@ -17,18 +17,18 @@
-
-
-
+
+
Rules
+
Options
-
-
+
Stats
+
Play
-
-
PlayBook
-

When viewed on the PlayBook the menu will appear on bezel swipe down.

+
+
PlayBook & BlackBerry 10
+

When viewed on the PlayBook or BlackBerry 10 the menu will appear on the top bezel swipe down.

-
+
Smartphone

When viewed on a Smartphone the menu will appear when you use the Blackberry button.

diff --git a/samples/pillButtons.htm b/samples/pillButtons.htm index b27e363b..f6648d4e 100644 --- a/samples/pillButtons.htm +++ b/samples/pillButtons.htm @@ -28,19 +28,19 @@
Contact
-
Title:
+
Title
-
First Name:
+
First Name
-
Last Name:
+
Last Name
-
Email:
+
Email
diff --git a/samples/settings.htm b/samples/settings.htm index 9b9ebf6e..34c70393 100644 --- a/samples/settings.htm +++ b/samples/settings.htm @@ -14,13 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. --> -
+
Font
Font Family:
- @@ -66,7 +66,7 @@
Backlight Brightness:
-
100
+
Cancel
Backlight Timeout:
diff --git a/screenshots/actionBar.png b/screenshots/actionBar.png new file mode 100644 index 00000000..1af10ec2 Binary files /dev/null and b/screenshots/actionBar.png differ diff --git a/screenshots/buttons.png b/screenshots/buttons.png index f51eb2c8..8d23a5ca 100644 Binary files a/screenshots/buttons.png and b/screenshots/buttons.png differ diff --git a/screenshots/contextMenu.png b/screenshots/contextMenu.png new file mode 100644 index 00000000..25c6bf6f Binary files /dev/null and b/screenshots/contextMenu.png differ diff --git a/screenshots/grid.png b/screenshots/grid.png new file mode 100644 index 00000000..56df3c5c Binary files /dev/null and b/screenshots/grid.png differ diff --git a/screenshots/pillButtons.png b/screenshots/pillButtons.png index 5ce3cfd0..0f424889 100644 Binary files a/screenshots/pillButtons.png and b/screenshots/pillButtons.png differ diff --git a/src/bbUI.css b/src/bbUI.css index e0f6c788..49136ade 100644 --- a/src/bbUI.css +++ b/src/bbUI.css @@ -17,10 +17,10 @@ body, html { padding:0; margin:0; - font-family: BBAlpha Sans; + font-family: Slate,Myriad Pro,BBAlpha Sans; font-size: 12pt; overflow:visible; - background-color:#DDDDDD; + /*background-color:#DDDDDD;*/ user-select: none; -webkit-user-select: none; } @@ -36,6 +36,162 @@ body, html { font-size: 16pt; } +.bb-bb10-hires-screen { + font-size: 30pt; +} + +.bb-bb10-background-dark +{ + background-color: #121212; +} + +/* ================================================= + PlayBook Swipe Menu + =================================================*/ +.pb-menu-bar { + font-family: "Myriad Pro", sans serif; + position: fixed; + left: 0px; + width: 100%; + clear: both; + margin: 0; + padding: 0; + line-height: 1; + border: 0; + font-size: 100%; + background: #181818; + border-bottom: solid #626262 1px; + box-shadow: 0px 2px 2px #888; + color: white; + z-index:1002; + height: 100px; + top: -104px; +} + +.pb-menu-bar ul { + float: right; + list-style: none; + margin: 0; + padding-left: 15px; + border: 0; + position: relative; + border-left: solid #626262 1px; +} + +.pb-menu-bar ul li { + margin: 0 2px 0 2px; + border: 0; + cursor: pointer; + text-align: center; + float: left; + font-size: 16pt; + padding-right: 15px; +} + +.pb-menu-bar img +{ + height: 65px; + width: 65px; +} + +.pb-menu-bar-caption +{ + padding-top: 10px; + +} + +/* ================================================= + BB10 Swipe Menu + =================================================*/ +.bb-bb10-menu-bar-lowres { + position: fixed; + left: 0px; + width: 100%; + clear: both; + margin: 0; + padding: 0; + border: 0; + top: -103px; + font-size: 100%; + z-index:1002; + height: 100px; + border-bottom-style: solid; + border-bottom-width: 1px; +} + +.bb-bb10-menu-bar-hires { + position: fixed; + left: 0px; + width: 100%; + clear: both; + margin: 0; + padding: 0; + border: 0; + top: -143px; + font-size: 100%; + z-index:1002; + height: 140px; + border-bottom-style: solid; + border-bottom-width: 2px; +} + +.bb-bb10-menu-bar-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#323232), to(#272727)); + border-bottom-color: #626262; + color: white; +} + +.bb-bb10-menu-bar-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#FAFAFA), to(#E0E0E0)); + border-bottom-color: #CFCFCF; + color: black; +} + +.bb-bb10-menu-bar-item-lowres +{ + text-align: center; + cursor: pointer; + float: left; + height: 88px; +} + +.bb-bb10-menu-bar-item-hires +{ + text-align: center; + cursor: pointer; + float: left; + height: 88px; +} + +.bb-bb10-menu-bar-item-lowres img +{ + height: 40px; + width: 40px; + margin-top: 15px; +} + +.bb-bb10-menu-bar-item-hires img +{ + height: 80px; + width: 80px; + margin-top: 10px; +} + +.bb-bb10-menu-bar-item-caption-lowres +{ + font-size: 16pt; + padding-top: 10px; +} + +.bb-bb10-menu-bar-item-caption-hires +{ + font-size: 20pt; + padding-top: 10px; +} + + /* ================================================= BB7 Screen Title =================================================*/ @@ -84,10 +240,69 @@ body, html { height:33px; } +/* ================================================= + BB7 Input Box + =================================================*/ + +.bb-bb10-input { + color: black; + border-style: solid; + background-color:#F9F9F9; + width: 100%; + border-top-color: #ACACAC; + border-left-color: #BEBEBE; + border-right-color: #BDBDBD; + border-bottom-color:#C7C7C7; +} + +.bb-bb10-input::-webkit-input-placeholder +{ + color:#4A4A4A; + font-style:italic; +} + +.bb-bb10-input-focused +{ + color: black; + border-style: solid; + background-color:#F9F9F9; + width: 100%; + background-repeat: no-repeat; + background-position: center right; +} + +.bb-bb10-input-focused-hires +{ + border-width: 4px; + background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAVCAYAAAAuJkyQAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFRALG07YxM4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADbUlEQVRIx7WW3VNTRxjGnz1n94Qkaq/ITbXXRUJiPk4I6LQD4bOUJgW1OozTv64EPUCohnw3IR9EFBNwnPZvsBdt5apy9uS8vejoDNNAhYTnaq92frv7e59ZVqlUCQDC4SDTNA0XiWmaaLcPyCZCRNcZ5youGl6t1/H27e84Ojqi2NQk04Q4N0y5skO5fBEezyBCwSB6AVKmYjFYto1soYByZYdM0zwXTLVWp2y+CGlZiE1OQAiOXqL4fV7246MVKIqKTDaPnWqNTCk/CabWaFA6kwUAPFpZQeCWnymK0huQpmkI+H3s4YMfoCgqtp6mUd9tkjwDSkqJ5t4LSv2chqKoePjgPkJB/4UdPAEEAEIIhAJ+dv/u93AMDGB9I4WXr1pdoaSUeNVq0xNjE5qmYXkpgXAwwMQ53TtV6o8LzqGHQ8zq2PQsvY3kmgGFMQoFAx9PLqVE++CQVpMGXC4Xvl2Yx6geZpxz9CsndhJCYGxUZ0RE2Wweq2sGAFAoGGCMMbQPDumn5GO43E7Mz81gPBrp2810BfoANR6NMLJtyhdKSK4ZIJtIURWsJg243C7Mzczg9tho32EAgB0fH58iroXm8z3K5Yv4+/17MMbgcDgwNzuNO+PRvj7Tf6TuFiH+derGFzdgE0FaHVy//jki4dClwZwJJKXEfqtFf/z5DoODg/B4PPjr3RH2W60zK+FSgExTolbfpWJpBx27g4X5WSQWv4Ft2ygUK6jWGpcGxbs1cL3RpEKpDFVVEV/4Dt7hIcYYg002PTFSKJTKICL6+qs7fSnDU2/INCV2m3uUK5bAFAXLS3F4h4eYEAKcc9wc+pLdu5uAqnLkS2XU/qfRewKSUuLFy31KZ3JQVY7lpTh83uETo60JAe/NIXZvOQHBObYzOTSf7/UVSvkw4u2D15TaegZNcyC+uICAb6Rrzwgh4BsZZon4IpwDTmw93UarfUhSWv1xSEqJw9dvyFjfhNPlwvzsFMKhwJmjzTlHMOBnnY5FmWwBxnoKjDEK3PL17BR/8+tv9NjYgNPtxsz0BCJ6mIlP6BnBOfRQkJFNlC/9AmNjEypXKdjjF0Sp1Ru4evUKZqcmENX1c/0YhRCI6CE2HZvEtc+uobHbhGX19nT89tgYVFWBb8R7oQYWQiA6qrMrbhdZVgeqqvYE9A8Ey3jZunas2AAAAABJRU5ErkJggg=="); +} + +.bb-bb10-input-focused-lowres +{ + border-width: 4px; + background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAANCAYAAACtpZ5jAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFREGHoreJDsAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACIklEQVQ4y2NctXrtf14eHm9PT/dtDHjA4SNHFZ49e36fiZmJPTQ46BcDAcD05+9fho1btmzdt/9A+ObNWzEUbN2+nYGBgYFh/4GD969cvcYgLibGQAxg8fX1Evzx4+f7bdt3rggLD+FnYGCYBZPcf/AQo5SUpFJHd+8dRgYGhqiIKGcVFYVfxBjMdP78pQ9JCbGMCooKDIuXLJ956PARY5ikg50ty969+++8ffeewd3N1eTJs8f7GUgB+/YfYPjw6TPXwsXL/heWVPy/dv16zP///5nbOrv/N7d1/D9y7IQGA4mAEcbYtWcfo5a6GueGTVu+vn37jkFWVobhybNnDN4enmGv375e7eHmQp7ByKCmvvn/m7fvGDQ11PTyczIvM5AB4AZv276TUUtTnXPLtp1f//z7xyAtJcVw585dBkc767DXb9+t9vX2JMlgJgYGBobde/YxmJuacO47cOjry1evGHw83GNDAv1YuLm4GHbu2beKl4+X5DBmOHT4KAMDAwPDpCnT/1fXN/0/fuo0PFX8//+fdeGipf9LKqr+nz5zxvjgoSOMRLtYX1dXYP6Cxf/fvfvAEB4akm5pZnoWJnni5Kk/9g52KkoKigwHDh45IyUl6Ui0wbv27n1/4/YdBg9P54hXL1/OQpa0tDD/f//+vbtZGamMrGxsDCtXr9l79PgJNqJM3rR56/8jR456EVJ37sIlhc1btv3ftHkrUQYDAIiA4Za6H4vLAAAAAElFTkSuQmCC"); +} + +.bb-bb10-input-hires { + height:79px; + border-radius:4px; + border-width: 2px; + font-size: 27pt; +} + +.bb-bb10-input-lowres { + height:45px; + border-radius:4px; + border-width: 1px; + font-size: 16pt; +} + + + /* ================================================= BB7 Round panels =================================================*/ -.bb-bb7-round-panel { +.bb-playbook-round-panel { border-radius:3px; border-width: 1px; border-style: solid; @@ -101,6 +316,66 @@ body, html { padding: 5px; } +/* ================================================= + BB10 Round panels + =================================================*/ +.bb-bb10-round-panel-lowres { + border-radius:5px; + border-width: 1px; + border-style: solid; + margin-left: 5px; + margin-right: 5px; + margin-bottom: 3px; + margin-top: 3px; + padding: 5px; +} + +.bb-bb10-round-panel-hires { + border-radius:10px; + border-width: 2px; + border-style: solid; + margin-left: 10px; + margin-right: 10px; + margin-bottom: 8px; + margin-top: 8px; + padding: 10px; +} + +.bb-bb10-round-panel-light { + border-color: #C6C6C6; + color: Black; + background-color: white; +} + +.bb-bb10-panel-header-lowres +{ + padding-top:5px; + margin-bottom: 5px; + padding-bottom: 3px; + font-size: 14pt; + font-weight: bold; +} + +.bb-bb10-panel-header-hires +{ + padding-top:10px; + margin-bottom: 10px; + padding-bottom: 6px; + font-size: 24pt; + font-weight: bold; +} + +.bb-bb10-panel-header-lowres-light { + border-bottom: solid 1px #DCDBDB; + color: #7C7E80; +} + +.bb-bb10-panel-header-hires-light { + border-bottom: solid 2px #DCDBDB; + color: #7C7E80; +} + + /* ================================================= BB7 Buttons =================================================*/ @@ -168,6 +443,107 @@ body, html { display:block; } +/* ================================================= + BB10 Buttons + =================================================*/ + +.bb-bb10-button-container-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#BDBDBD), to(#D4D4D4)); + color: black; + border-top-color: #A3A3A3; + border-bottom-color: #CECECE; + border-left-color: #C3C3C3; + border-right-color: #C4C4C4; +} + +.bb-bb10-button-container-dark +{ + background-color: #0B0B0B; + color: white; + border-color: #333333; +} + +.bb-bb10-button-container-hires +{ + border-width:4px; + border-style: solid; + border-radius:10px; + padding: 2px; + margin: 20px; +} + +.bb-bb10-button-container-lowres +{ + border-width:2px; + border-style: solid; + border-radius:4px; + padding: 1px; + margin: 16px; +} + +.bb-bb10-button { + border-style: solid; + text-align:center; + white-space:nowrap; + vertical-align: middle; + display: block; + background-clip: padding-box; +} + +.bb-bb10-button-light { + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DDDDDD)); +} + +.bb-bb10-button-dark { + border-color:#5C5C5C; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#262626)); +} + +.bb-bb10-button-disabled-dark { + border-color:#262626; + background-color: #262626; + color: #666666; + +} + +.bb-bb10-button-disabled-light { + border-color: #D4D4D4; + background-color: #C1C1C1; + color: #838383; +} + +.bb-bb10-button-hires { + border-width:1px; + border-radius:5px; + line-height:75px; + height:75px; + padding-top:12px; + padding-left: 35px; + padding-right: 35px; + font-size:28pt; +} + +.bb-bb10-button-lowres { + border-width:1px; + border-radius:2px; + line-height:46px; + height:46px; + padding-top:5px; + padding-left: 15px; + padding-right: 15px; + font-size:16pt; +} + + +.bb-bb10-button-stretch{ + display:block; +} + /* ================================================= PlayBook Title Bar =================================================*/ @@ -200,16 +576,11 @@ body, html { z-index:1001; } -/* -.pb-title-bar-back-hover{ - background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); - box-shadow: none; -}*/ - .pb-title-bar-back-inner { border-top: 2px solid #2E2E2E; padding-left:35px; padding-right:12px; + padding-top: 3px; border-radius:4px; background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAARCAYAAADpPU2iAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sMCQ4AGWIgYQ0AAAE0SURBVCjPhZI9joJQEIAnewXPY+FVLIwxFsbeRRC5gCYGGwtvY28wUplYgQYiiuLL49tiw2Z3FZhpZjLzzV9GkGq1LIv5fE7h1yafTifu9zuWZYEgH1IixqdBr9eTRqMhcRxLlmXfgXeVbdsmjmMAjscjjuOUj2QYBtfrFa01YRgyGo34Hf+TbJomURQBcD6fGY/H/C/4Y0ynU5IkQWv9MsYLYNs2l8uF5/NJFEWYpknZ5aTVahEEAUoptNZsNhuqTi0IslqteDwe5HnOfr+n2+1SCSDIbDYjz3MAdrsd/X6fSgBBXNclTVO01vi+T7vdphJAkOVyCYBSisPhQKfToRIoOt1uNwC22y2DwaD++RaLBWmaAuB5HsPhkNpvdV2XLMtQSjGZTOqBYqf1ek2z2QRBvgC36+O26W6RWQAAAABJRU5ErkJggg=="); background-repeat: no-repeat; @@ -217,44 +588,336 @@ body, html { } /* ================================================= - PlayBook Swipe Menu + BB10 DropDown Buttons =================================================*/ -#pb-menu-bar { - font-family: "Myriad Pro", sans serif; - position: fixed; - left: 0px; - width: 100%; - clear: both; - margin: 0; - padding: 0; - line-height: 1; - border: 0; - font-size: 100%; - background: #181818; - border-bottom: solid #626262 1px; - box-shadow: 0px 2px 2px #888; - color: #626262; - z-index:1002; -} -#pb-menu-bar ul { - float: right; - list-style: none; - margin: 0; - padding: 0 5px; - border: 0; - position: relative; - border-left: solid #626262 1px; +.bb-bb10-dropdown-container-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#C0C0C0), to(#D9D9D9)); + color: black; + border-top-color: #B2B2B2; + border-bottom-color: #B2B2B2; + border-left-color: #BFBEBF; + border-right-color: #BFBFBF; + margin:20px; } -#pb-menu-bar ul li { - margin: 0 2px 0 2px; - border: 0; - cursor: pointer; - text-align: center; +.bb-bb10-dropdown-container-dark +{ + color: white; + border-top-color: #232323; + border-left-color: #2A2A2A; + border-right-color: #292929; + border-bottom-color: #5A5A5A; + background-image: -webkit-gradient(linear, center top, center bottom, from(#050505), to(#161616)); + margin:20px; +} + +.bb-bb10-dropdown-container-inner-dark +{ + border-color: #070707; +} + +.bb-bb10-dropdown-container-inner-light +{ + border-color: #CECECE; +} + +.bb-bb10-dropdown-items +{ + margin-top: 5px; +} + +.bb-bb10-dropdown-item-lowres +{ + height: 53px; + line-height: 60px; + border-bottom-width: 1px; + border-bottom-style: solid; + font-size: 16pt; + padding-left: 10px; + padding-right: 10px; + vertical-align: center; +} + +.bb-bb10-dropdown-item-hires +{ + height: 97px; + line-height: 97px; + border-bottom-width: 2px; + border-bottom-style: solid; + font-size: 28pt; + padding-left: 10px; + padding-right: 10px; + vertical-align: center; +} + +.bb-bb10-dropdown-selected-image-lowres-dark +{ + float:right; + height:20px; + width:20px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhInKjcG1NoAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACr0lEQVQ4y82UMUgbYRTH/9cLmhKxadImUKlYIWigxJwSCMahkiHgnG6uXRJE5wSCUQyVDoKIi+jqIAgOQveAa0iRkCqECxjuLn53R2hMuORyr5OWYlrQFto3Pd73+L3H9/78gf8tEokEACAQCPw9aCAQmLnN+ccApqenIUkSnE7nSCaTOV5YWPg4Pz8fIaL8nyzmXltbqzHGyDAMuri4oO3t7eiThxCCwSAAwOl0jmaz2S9LS0uvHA4H9Xo9dLtdtFqtR202nMvlviqKQs1m02o2m6RpmpXNZqVwODz6UBifTqd1WZap0WhYjUaDGGNWMpkkAPa7rqGhobtcEIS+JI/H83xjY6NUr9dJ13VL0zS6urqi1dVV6RYWDoeBaDR6x/X5fJ8AYG5u7h4wnU7LoigSY4wYY6Sqam9lZUXz+/1uAAiFQj+aY7HYyf7+Pp2cnFA8Hm96vd6nt28ul+tZKpWSJUmy6vU6KYpCoihSKpVqAnDcmxyJRF7s7u5WVFUlxphVLBYpkUhUXS7XJACsr68XLy8vSZZlkiSJarWalclkSmNjY6/7fZFNlmVD0zRmmuYbwzA4t9uNZDI52m63j71e7/Di4uKIzWZDt9sFANrZ2cHm5uY7AHUAKBQKP19N1/UOY+xbp9OJC4JAvV4PdrsdgiC8DIVCw4ODg0REnGEYODg4KOdyubcA6lNTU1AU5b4MYrEYzs7OzlVV/dzpdD4IgsCZpomBgQGO53kQEcfzvLW3t9c6PDwM67ouBYNBFIvFX4vL4/EAACYmJt5vbW1Z1WqVKpWKValUqFwu0/Lystb3AP2ECgA3NzcAAFVVS6IolkzTfD8+Ps61220cHR1Jp6en/uvr68atKfwuuH7FmZmZidnZWR/Hcd18Pn9eKBRqj7aQycnJftL6dw7+He+cXXbTjGkZAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:15px; +} + +.bb-bb10-dropdown-selected-image-hires-dark +{ + float:right; + height:38px; + width:38px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ4K4nWlmAAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADuElEQVRYw+3YO08qWxgG4HcNxFEBZWaIaGDCzQItxRhpjMolsfEW8PIH/B37dOcvuAs7vMTCGGNlAQhojLUSY6zETIE5RuQmKus0QhjALdsNugu/ZKo1mXnyfmutrBlisVjwNxaDv7S+Yd+wZpRSqYQgCP8aDAaq0WjkY1+F4jjO7XA4DhwOBzQaDSRJorFYDGdnZ+Tp6elrYDzPr3i93lWfzwe73Q6FQoFcLgeLxYK1tTV6fn5OmK9CLS8vY2BgAAqFAgDQ0dEBp9OJoaGhz28lz/MrHo9ndWlpCTabDYQQUErL411dXeju7v5c2HsoAJAkCZIkfR6shFpcXHwTlUqlEA6HcXp6+jkwnudXXC7X6sLCAmw2GwCgWCyWxwkhSKVSCIVC2NnZQSKRIC2HcRzndrvdq36/H1arFQBqknp4eEAoFEIgEEA8HielcWWLUQd+v//N9qXTaYTD4RpUy2Acx7ldLtdBZVLV7ctkMggGgwgEAri4uCDVaGWrUD6fD6WzXuVLCSFIp9MIBoNYX1+vi2o6rBJltVpr2ldChUKhX6Lqwtrb26HVaimlFHd3d6RQKDSMmpycPJifny8nVd2+bDbbEKoGZjKZ6OjoKPr7+1EsFhGPx+nJyQkkSSLvoSYmJmSo6qQymQwODw8bQslgPT09/3m9XszMzEAQBADA8PAwent7sb+/T6+vr0mjqMqkGIYpozY2NhpCyc5jNpuNGxkZAc/zoJSCUoq+vj5MTU1henoaoijWPE2r1VrHx8cP5ubmYDaby0mVLgAfQskSU6vV0Gg0NXuNTqeDx+MBAOzu7tLSzvyKupqdnYXZbK470XO5HCKRyG+jZLBkMonb21uYTCY8Pz/LbhIEAS6XC8ViEXt7ezSdTttKqLfal8vlEI1GP4SSwa6urkgsFqOiKEKn0+Hl5aUmObfbDZZlcX9/fzU2NiZrX3VS0WgUm5ubH0IBgILjOABAoVBAMpn8AQBGoxEqlUqWAgB0dnbCYDDAbrdDr9eDYeTnTIZhkM/nEYvF/gglg71O1H9ubm5+EEJgNBqhVqtrcCzLgmVZEEJqUI+Pj01B1cDq4eolV7O0X1FHR0dNQdWF/S6uErW1tdUU1JuwRnEMw6BQKDQd9UtYNU4URahUqvJqLaGOj4+bjnoXVomjlEIURQiCAJZly6tve3u76SgAII3+H9Pr9dTpdGJwcBBtbW1IJBKIRCK4vLwk7y2OlsIAQKFQQKVSQalUrmSz2Z/5fL5l3wvk+4/iN6zF9T/sykhzncwdXQAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:15px; +} + +.bb-bb10-dropdown-selected-image-lowres-light +{ + float:right; + height:20px; + width:20px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQzKPMrHhEAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACaElEQVQ4y82UTWvUQBjH/5MsWbKZySjarbToTd1CbdPI4kJ7a2FvnuxXkBDSl+/hraVljh716Fm8eCortLRKWz+ALLsIZZOZZFdLxkObsrSr0CLonIaZZ37zPP/nBfjfVhiGAICZmZm/B11ZWXla7MlNAL7vY3d3F2EYTjLGXpdKpaU8z99nWfaS3NSrIAjucM4PKKUThmHg9PQU/X5/ybgOxPO8QrcHnPMDxtiEYRi6uNdaXz/kIAhczvknSukjQog+l00nSdLJsuwZuSbMdF33O2PsVgHTWuter0eklLYQom8AAKX04tHc3NzvyuM25/zzMCzPc0gpOwWs0WjAWFxchJQSQRDQKIpe7e3tYWFh4QqQUnrkOM7UuVYEQJ4kyUmaptNCiH69XsfOzs6Zhuvr6+8qlcpz0zShlFKDwWBsa2srO/eMU0q/MsaqRZlprSGlVHEcjwsh1PDHxtra2l3btp9UKhVYlqVd13Vs2z4Ow7AGAIyxj47jjA/VrFZKHaVpOiWEUJclIlEUMcdxPlBK61rri/THcXxkmqZLKZ0cstdSSsRxfE8I0R2ltdlqtX74vp9orV9YlqUBgBCCcrk8ZlmWO5RNKKWO4zieFkJ0Z2dn0el0rgCNZrOJzc3NN2maNpRSpAiNEAJCSNGeuVJKpWnaFEJ0Pc/D/v7+yGogAFCtVtHtdhFF0TJj7K1t2wTAhWdSypMkSe5fTsDIkAFAqTO7Vqt16HneIYDlUqlEtNbIsqydZdnU9vZ2z/d9tNvtPwJHdsrq6urjcrn8EMDPwWDwZWNj49uNZ1utVrtyNj8//+8m+C/+2RCtLAkgFQAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:15px; +} + +.bb-bb10-dropdown-selected-image-hires-light +{ + float:right; + height:38px; + width:38px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAmCAYAAACoPemuAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ5CDKq1lMAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACN0lEQVRYw+3YT/KaMBQH8G/4lwR00SPYHsTNz41DOIZn6RXaY8i4cBiP4hW6cQQihnRRoaCg1hL9LcwMMw5k9DMv7+UFyWQywWccFj7peMPesCGG4zgQQnyPokiPx+PWM/KqqgzD8INSmnieB0IIlFKQUmK1WpGiKF4TMSHEgnOejEYjBEEA3/dRfZ7P5/olSymEWDDGfvi+D9d1/y4dIaCUwvO85+dYH6qJsyzrubAmynGczjlKKSilngc7RxFCLuaUZQkpJQ6Hw5+KfUWktNatOVpr5HmONE0RxzExHrEwDD9uLV+F2u/3WC6XpEJbJlGc8+QRlDHYKVIPo4zAmijbth9CDZ7855G6Vn3XUJ0wxhhms5kGgPV6TaryfWT5uqrvHtRFE4+iSFNK6y8uigJSyrqE/zen7kW1ckwI8YsxhiAIwDkH57xusFEU6WeiWjDHcb5QSuteBQC2bYMxBs55Jy4Mw68mUC2YZVmdydqHO6G2JlCt5FdKoSzLzkkVrsrDsiy/Mca2nPOrW8KjqFbENpsNkVLW3V1r3bosywJjDL7vw/f9Lee8VX3VNQSqFbHdboc8z0EIQRWJi934hKvOTl3nqSFQFzt/HMckyzJkWQalVO+Pd90fKlK9LekenGlUb688xz0bdbWJN3F91dpEpWk6GOrm6eIWzhTqrmPPOa6Z/KZQ//QmLoTQlFK4rgtCCI7HY93gry21cVjVAYIgwHQ6XSRJ8jPPc2PvC+T9j+IbZnj8BjBO/sXL4BuuAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + visibility:hidden; + margin-top:20px; +} + +.bb-bb10-dropdown-item-dark +{ + border-bottom-color: #373737; +} + +.bb-bb10-dropdown-item-light +{ + border-bottom-color: #B4B4B4; +} + +.bb-bb10-dropdown-item-selected-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#252525)); +} + +.bb-bb10-dropdown-item-selected-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#EAEAEA), to(#EDEDED)); +} + +.bb-bb10-dropdown-container-hires +{ + border-width:2px; + border-style: solid; + border-radius:4px; + padding: 0px; + height: 95px; + overflow:hidden; +} + +.bb-bb10-dropdown-container-lowres +{ + border-width:1px; + border-style: solid; + border-radius:4px; + padding: 0px; + height: 59px; + overflow:hidden; +} + +.bb-bb10-dropdown-container-inner-lowres +{ + z-index: 10; + border-style: solid; + border-width: 1px; + border-radius: 4px; + padding: 1px; +} + +.bb-bb10-dropdown-container-inner-hires +{ + z-index: 10; + border-style: solid; + border-width: 2px; + border-radius: 4px; + padding: 2px; +} + +.bb-bb10-dropdown-caption-lowres { + position:relative; + display:block; + float: right; + z-index:1; + margin-right:-22px; +} + +.bb-bb10-dropdown-caption-hires { + position:relative; + display:block; + float: right; + z-index:1; + margin-right:-38px; +} + +.bb-bb10-dropdown-label { + display:table-cell; float: left; } + +.bb-bb10-dropdown { + border-style: solid; + white-space:nowrap; + vertical-align: middle; + display: block; + background-clip: padding-box; +} + +.bb-bb10-dropdown-light { + border-top-color: #B1B1B1; + border-left-color: #BFBFBF; + border-bottom-color: #B4B4B4; + border-right-color: #949494; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#E1E1E1)); +} + +.bb-bb10-dropdown-dark { + border-color:#040404; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#252525)); +} + +.bb-bb10-dropdown-inner-light { + border-top-color: #FFFFFF; + border-left-color: #DBDBDB; + border-right-color: #EFEFEF; + border-bottom-color: #E0E0E0; +} + +.bb-bb10-dropdown-inner-dark { + border-top-color: #5D5D5D; + border-left-color: #575757; + border-right-color: #545454; + border-bottom-color: #474747; +} + +.bb-bb10-dropdown-arrow-lowres-dark +{ + position:relative; + float:right; + z-index:2; + display:block; + top: 10px; + height:22px; + width:22px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhI3LeOgUygAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB2klEQVQ4y+2TP4saQRiHf2PiBkFFBREUQmJzyNYGLYQ0URYWLXTjf5ANAUFB8ANobCyvSxO09QOktrEzjZVhYyEJamOjgmy3O2+aCOflPM1dF+4HDwwz8748vMwA/2Xq9To7rJvNJruk5qJLoii+KpfLP61WK3q93mtN0349ylSSJABAu91u7XY72u121O12WwAgy/LjxiCKojQcDknXddJ1nUajEcVisS/n6p6dOojH4xBF0ZrJZL4lk8kXpmkyzjn8fj8BeGm3268DgQDN5/N/t63Vau8WiwVtNpsjlsslqar68UHGsiy/z+fzX4PBIBERIyIcEASBXC5Xcr/f/5jNZt/vqrfc3sjlcgCARCLxIRqNwjAMZpombmIYBguHw5AkSQWAYrF43ng6nUJRFK1SqbwRBOHI9CamacLn8wW3221uMBh8vtc4nU4DAEql0pXH42Gcc9yH2+1mhULhCgAURTltrGkaGo0GpVIp3J7rXXDO4fV6YbFYPvX7/c7JxqqqtqrV6lubzXa26QHGGAuFQmQYBk0mk9HRKKrVKgAgEol0nE4n45zj0sacczgcDhaJRDp/nigA4DkArFYr1ul0eDabBRE96IcqioL1ek3j8dgCgPCUp/yV37GLSoxuRECwAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-arrow-hires-dark +{ + position:relative; + float:right; + z-index:2; + display:block; + top:11px; + float:right; + height:37px; + width:37px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAYAAADFniADAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhI2NnDeq4UAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACd0lEQVRYw+2YzW7aQBSFjy2bCCRjMBDECgtFchLzZxLwzHjALLqJlPfII/QV+k59lTTyBsGqGzZICG43dSRoRE0MlEoc6Ww80mj8nXtnxlY45zg3qThDXRaVVBoRpZ9E06BpGlarFZbL5XmQ8jyPXl5eqN/v00FIpZ2gWq1SGIZ4enpCLpfD29sbzWYzJRUpIsJnraoqOOcIggCKosD3fYRhCE3TkGreNG/U6XRoPB4jn8+DiGAYBqSU6Ha79E9IWZb1TUqJ+/v7jeeO42A0GqFSqfw8KSlFUSCE+CqlBACs1+t3AwBjDFLKoqqqpyPlui4Nh0MUCoUPx03ThJQS7XabTkKqWCw2pJRoNpsbhLZ9e3uL4XAIy7K+HJUUAAwGgx9SSqiqmqgzhRDfARyP1N3dHY1GI1iWtZNS7EKhgCAI4LouHWVHNwwDnHO0Wq1EC4rtui6klDBN87Dx/Y6NksT2UYyMMTDGKGmMiUjd3NxQEAQol8t7UYpdKpUghIDjOHSQs88wDAgh3mP7rFzXRRAEmEwmmM/n6Wqq1+uREAK6rqc6zzRNg+/7GAwGf6W18z7VaDSIc47r6+tUlGJVKhVwzhFFEb2+vip7k8pms/B9H91uNxWhbTebTTDGkM1m9+8+z/MOEtu2dV0HYwyPj4+0V/fV63XinKNWqx10QbFrtRqEELBtmxLV1NXVFfr9Pnq9HuJ95Rhqt9uIogjT6RSLxWJ3TXmeR5xzZDKZo1CKnclkwBjDw8MD7dyn6vU6PT8/IwzDk3xK2baNxWKByWRCURS9d6PS6XQ2Lm+xT6Xt4+wPUtuD//XH6OVfwmVRl5q6xHdE/QJaEjMvW5ot6AAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-arrow-lowres-light +{ + position:relative; + float:right; + z-index:2; + display:block; + top: 10px; + height:22px; + width:22px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ1ExR6ULMAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABmUlEQVQ4y+2UsWoCQRCG/11zt6u7F7FIkSqkkmB5L5BKECSNGATBwkAQxOLUA6uAtaBY5y1SBLRLpS8gSaqkT5rjRFSImyZHoonnmXTBqRZ25uefb2YX+JdRr9eJd7ZtmwSp2QuSNJvNjhqNxhMAjMfjYwDPm2qo32UqlQIARCKRgpQSUkoIIQoAkE6nfYU3tlWpVFKxWOyWMea5h+M4191u9/JXwslkEolEQuOcvwgh9r/kqslk8jqdTg9Ho9Fbr9fbDkW/30coFDoNh8PRFQOEc35ACCmuEwWA0LoLy7LOhRA3mqYppdRSZ5RSRSk9M03zYTgcjgI5zuVyAADO+QVjDKuiAKCUIrqug3NeBIB8Ph+McbVavY9Go3FKqe9wF4uFchznsd1un/g6zmQy3nptFP1AQoQQcQDIZrP+jm3bVoZhqCCr6JFxXZe0Wi2ydni1Wu1KSnlKCCFbvHiiaZoyTVMNBoO7JRSlUgkAwBhrBkHwExLGWBMAyuXyJwrLsoiu6wvDMP70Wbmui/l8TjudjsIudvEt3gGChHNZioZMCgAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-arrow-hires-light +{ + position:relative; + float:right; + z-index:2; + display:block; + top:11px; + float:right; + height:37px; + width:37px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACUAAAAlCAYAAADFniADAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFhQ2FdY0pkUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAB7ElEQVRYw+2YTY6bQBCFXzdNv8YSsnKFXMALC4sGzI+UO+UKuVMWXvgcucIcwMauWSRYskceYzAzE8kl9Qakovp9r/oH5b3HVwuNLxjPovqGEZHxSYyBMQaHwwH7/X58vkfMLE1TIYndboftdqs+HZ/3XpxzmM1mIAnvvXwqviAIQBIkAQAk0bYtjDGjMI5SKssyIQmt/6bRWsM5hzRNR6mlRQRDhvf+F0mEYXj23BgD5xyyLHsZmnuQ0ZVSIPmzw3YZ1lq0bftNa43j8fgxShVFcYbtTVKtQRJFUciQ/Hd7Ks/z7x22W2sXSeR5/mPS7lNKwVr7hySUUn0Qo23b3wDUPd+5S6myLMU5B611LwxdYWVZyiRLQhzHsNbexHYZYRiCJObz+WONDgBJkohzbtC6QxLL5VIAPM7oZVm+2203Z/6vG/ti1H2w9em2vhjjOB5fVJIk0qfbei64WK1WMspTVVWdsA3dMs68ojWstaiqSgZ5KoqiQd3WB6O1FlEU3a+U9/4h2K5hzLJM7lKqrmshiSAIJjmDd+ewuq6ll1LW2tOYMrpuJHlbqfV6PQm2K/soiqKQdy8OTdNIFEW4dk6aAqOIoGka2Ww2JxXUYrE4q74bHxWX29kbpS5f/teX0ee/hGdRT0898U0Yr14ND1sa1m9mAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: center center; + opacity:0.0; +} + +.bb-bb10-dropdown-hires { + border-width:2px; + border-radius:5px; + padding:0px; + border-style:solid; +} + +.bb-bb10-dropdown-inner-hires { + border-width:2px; + border-radius:5px; + line-height:71px; + height:71px; + padding-top:12px; + padding-left: 35px; + padding-right: 35px; + font-size:28pt; +} + +.bb-bb10-dropdown-lowres { + border-width:1px; + border-radius:2px; + padding:0px; + border-style: solid; +} + +.bb-bb10-dropdown-inner-lowres { + border-width:1px; + border-radius:2px; + line-height:46px; + height:46px; + padding-top:5px; + padding-left: 15px; + padding-right: 15px; + font-size:16pt; + border-style:solid; +} +.bb-bb10-dropdown-stretch{ + display:block; +} + + /* ================================================= BB7 DropDown Buttons =================================================*/ @@ -393,7 +1056,6 @@ a.bb5-button-highlight span { } .bb-round-panel-background { - /*background-image: url('../images/panel.png');*/ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAAQCAYAAADu4htYAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFDA0UC0zjOK8AAAFMSURBVHja7d0hi9xAGAbgN0tEREUWKlY24kRE//8PKVzEiZyMOEjEiYjAVCwJe9QtaaHwPGpmGPW6lxn4qpKSR+PbWNZtTbYAAAA8p06aukn30lWPx9VjARmGoSgeAADAmUWk7/vqjwIy/BrKfuHaXtO2rbAAAICnLMuSeZmPn1X9z3sJqUrKUT6u36+53W7SAgAATjFNU+aP+Sgh1evwWrIlzbcm3Y9OQgAAwKnG9zHr55rUyWV/ElE+AACAv+HoGltyEQcAAPCvKCAAAIACAgAAKCAAAAAKCAAA8D8UkPq+GN9HaQAAAKc7ukadXPax6OvnmmmapAMAAJxmmqb7DJAkfd9XVUlJkmMaenKfiN62rbQAAICnLMtyTEBP7lPQk+wfsB5WWzJ/zF8uAwAAPKX+uj1eQJJkfBvLuq1CAgAATtHUTbqXrtr3vwHOgmRaTerV1wAAAABJRU5ErkJggg=="); } @@ -477,7 +1139,49 @@ a.bb5-button-highlight span { width:100%; } +/* ================================================= + BB10 Label Control Rows + =================================================*/ + +.bb-bb10-label-control-rows { + margin:0px; + padding:0px; + width:100%; +} + +.bb-bb10-label-control-label-row-hires +{ + vertical-align: text-bottom; + height:38px; +} + +.bb-bb10-label-control-label-row-lowres +{ + vertical-align: text-bottom; + height:22px; +} + +.bb-bb10-label-control-label-lowres +{ + position:relative; + top: 7px; + bottom:0px; + left:0px; + font-size: 12pt; + height:15px; + vertical-align: text-bottom; +} +.bb-bb10-label-control-label-hires +{ + position:relative; + top: 10px; + bottom:0px; + left:0px; + font-size: 21pt; + height:30px; + vertical-align: text-bottom; +} /* ================================================= @@ -506,7 +1210,7 @@ a.bb5-button-highlight span { line-height:40px; padding-left:7px; display:inline; - + text-overflow: ellipsis; } .bb-text-arrow-list-item-hover .bb-text-arrow-list-item-value @@ -534,368 +1238,435 @@ a.bb5-button-highlight span { background-position: top right; } - /* ================================================= - Image List High-Resolution + Arrow List BB10 =================================================*/ +.bb-bb10-text-arrow-list-lowres +{ + margin-top: -3; + margin-bottom: -3; + font-size: 20pt; +} +.bb-bb10-text-arrow-list-hires +{ + margin-top: -3; + margin-bottom: -3; + font-size: 40pt; +} -.bb-hires-image-list +.bb-bb10-text-arrow-list-item-lowres { - margin:0px; - padding:0px; + vertical-align: middle; + height: 50px; + width:100%; + padding-top: 7px; } -.bb-hires-image-list-item +.bb-bb10-text-arrow-list-item-hires { - border-bottom: solid 1px #D9DCDE; - padding-top: 10px; - padding-left: 5px; - padding-bottom: 0px; - overflow:hidden; - height: 60px; + vertical-align: middle; + height: 100px; + width:100%; + padding-top: 14px; } -.bb-hires-image-list-item-hover +.bb-bb10-text-arrow-list-item-dark { - /*background-color:#2175F7;*/ - background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); - border-bottom: solid 1px #D9DCDE; - padding-top: 10px; - padding-left: 5px; - padding-bottom: 0px; - overflow:hidden; - height: 60px; + color: White; } -.bb-hires-image-list .details +.bb-bb10-text-arrow-list-item-light { - position:relative; - margin-left:74px; - margin-bottom: 0px; + color: Black; } -.bb-hires-image-list-item .title +.bb-bb10-text-arrow-list-item-hover { - color:Black; - overflow: hidden; + color: White; } -.bb-hires-image-list-item-hover .title +.bb-bb10-text-arrow-list-item-value-lowres { - color:White; + line-height:50px; + padding-left:7px; + display:inline; overflow: hidden; + text-overflow: ellipsis; } -.bb-hires-image-list img +.bb-bb10-text-arrow-list-item-value-hires { - position:relative; - left: 4px; - float:left; - height:48px; - width:48px; - top:-3px; + line-height:100px; + padding-left:14px; + height: 100px; + display:inline; + text-overflow: ellipsis; + overflow:hidden; } -.bb-hires-image-list .description +.bb-bb10-arrow-list-separator-lowres-light { - color:#737173; - overflow: hidden; - white-space:nowrap; - font-size: 14pt; - margin-bottom: 0px; + border-bottom: solid 1px Silver; + margin: 1px; } -.bb-hires-image-list-item-hover .description +.bb-bb10-arrow-list-separator-hires-light { - color: White; - overflow: hidden; - white-space:nowrap; - font-size: 14pt; - margin-bottom: 0px; + border-bottom: solid 2px Silver; + margin: 2px; } -/* ================================================= - Image List Low-Resolution - =================================================*/ - - -.bb-lowres-image-list +.bb-bb10-arrow-list-separator-lowres-dark { - margin:0px; - padding:0px; + border-bottom: solid 1px #3A3A3A; + margin: 1px; } -.bb-lowres-image-list-item +.bb-bb10-arrow-list-separator-hires-dark { - border-bottom: solid 1px #D9DCDE; - padding-top: 9px; - padding-left: 5px; - padding-bottom: 0px; - overflow:hidden; - height: 45px; + border-bottom: solid 2px #3A3A3A; + margin: 2px; } -.bb-lowres-image-list-item-hover + +.bb-bb10-arrow-list-arrow-lowres { - background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); - background-color:#2175F7; - border-bottom: solid 1px #D9DCDE; - padding-top: 9px; - padding-left: 5px; - padding-bottom: 0px; - overflow:hidden; - height: 45px; + position:relative; + float:right; + display:inline; + margin-right: 5px; + top: 17px; + width: 20px; + height: 20px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAALCAYAAACzkJeoAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFGxUUItGqPS0AAABBSURBVBjTdcxBDgAhCATBlo87vnz2siYICidSHTBGkk3f4J+lZcpEPmoQtc5BwxxccQdPnJojXnB9u6FhhgMrAHy5yiKIJPT0DgAAAABJRU5ErkJggg=="); + background-repeat: no-repeat; + background-position: top right; } -.bb-lowres-image-list .details +.bb-bb10-arrow-list-arrow-hires { position:relative; - margin-left:48px; - margin-bottom: 0px; + float:right; + display:inline; + margin-right: 10px; + top: 28px; + width: 51px; + height: 51px; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAeCAYAAADzXER0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFBckHH9TGOAAAACRSURBVDjLndNBDoAgDETRYS4OnLyuMIhQ2jExUcj7QUW01szMoJwEgN67QTg4LpQA55tsgOtAJsDdYDTA00QkQG/yFuCt7gUYebZTgNE3uwsw813XALO7ag5Q2dMjIOERkHGttVCF0rIHTOMZpvAKw3gHQ/gEr9iDLr7BI47ALY7CH87AD87CFysQAIqZqT8WHrs4Z4yW5p4FAAAAAElFTkSuQmCC"); + background-repeat: no-repeat; + background-position: top right; } -.bb-lowres-image-list-item .title + +/* ================================================= + Image List BB10 + =================================================*/ + +.bb-bb10-image-list { - color:Black; - overflow: hidden; + margin:0px; + padding:0px; } - -.bb-lowres-image-list-item-hover .title + +.bb-bb10-image-list-header { - color:White; - overflow: hidden; + vertical-align:middle; + font-weight: bold; } -.bb-lowres-image-list img +.bb-bb10-image-list-header-hires { - position:relative; - left: 4px; - float:left; - height:32px; - width:32px; + height:47px; + line-height:47px; + font-size: 28pt; + padding-top:5px; } -.bb-lowres-image-list .description +.bb-bb10-image-list-header-lowres { - color:#737173; - overflow: hidden; - white-space:nowrap; - font-size: 10pt; - margin-bottom: 0px; + height:30px; + line-height:30px; + font-size: 16pt; } -.bb-lowres-image-list-item-hover .description +.bb-bb10-image-list-header p { color: White; - overflow: hidden; - white-space:nowrap; - font-size: 10pt; - margin-bottom: 0px; + margin:0px; + padding:0px; + padding-top:4px; } +.bb-bb10-image-list-header-left-lowres +{ + text-align:left; + padding-left: 10px; +} -/* ================================================= - Tall Style List - =================================================*/ +.bb-bb10-image-list-header-right-lowres +{ + text-align:right; + padding-right: 10px; +} +.bb-bb10-image-list-header-left-hires +{ + text-align:left; + padding-left: 20px; +} -.bb-tall-list +.bb-bb10-image-list-header-right-hires { - margin:0px; - padding:0px; - font-size: 12pt; + text-align:right; + padding-right: 20px; } -.bb-tall-list-item +.bb-bb10-image-list-header-center { - border-bottom: dashed 1px #E7E7E7; - padding-top: 5px; - padding-bottom: 5px; + text-align:center; +} + +.bb-bb10-image-list-item +{ + padding-bottom: 0px; + overflow:hidden; +} + +.bb-bb10-image-list-item-lowres +{ + padding-top: 8px; padding-left: 5px; - overflow:visible; + height: 56px; + border-bottom-width: 1px; } -.bb-tall-list-item-hover +.bb-bb10-image-list-item-hires { - background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); - /*background-color:#2175F7; */ - border-bottom: dashed 1px #E7E7E7; - padding-top: 5px; - padding-bottom: 5px; + padding-top: 10px; padding-left: 5px; - overflow:visible; + height: 109px; + border-bottom-width: 2px; } -.bb-tall-list .details +.bb-bb10-image-list-item-lowres .details { position:relative; - margin-left:60px; + margin-left:70px; + margin-bottom: 0px; + margin-top:8px; } -.bb-tall-list .title +.bb-bb10-image-list-item-hires .details { - color:Black; - font-weight:bold; + position:relative; + margin-left:130px; + margin-bottom: 0px; + margin-top:17px; } -.bb-tall-list-item-hover .title +.bb-bb10-image-list-item-dark { color:White; - font-weight:bold; + border-bottom-style: solid; + border-bottom-color: #3A3A3A; } -.bb-tall-list img +.bb-bb10-image-list-item-light { - position:relative; - left: 2px; - float:left; - height:45px; - width:45px; + color:Black; + border-bottom-style: solid; + border-bottom-color: #D9DCDE; } -.bb-tall-list-item .description +.bb-bb10-image-list-item-lowres .title { - color:#7B7D7B; + overflow: hidden; + font-size: 20pt; + line-height:20px; + text-overflow: ellipsis; } -.bb-tall-list-item-hover .description +.bb-bb10-image-list-item-hires .title { - color:White; + overflow: hidden; + font-size: 40pt; + line-height:45px; + text-overflow: ellipsis; } -.bb-tall-list-item .time +.bb-bb10-image-list-item-hover { - margin-top: 5px; - margin-right: 5px; - text-align:right; - color:#696969; + /*placeholder to signify hover*/ } -.bb-tall-list-item-hover .time +.bb-bb10-image-list-item-hover .title { - margin-top: 5px; - margin-right: 5px; - text-align:right; color:White; } +.bb-bb10-image-list-item-lowres img +{ + position:relative; + left: -5px; + float:left; + height:64px; + width:64px; + top:-8px; +} +.bb-bb10-image-list-item-hires img +{ + position:relative; + left: -5px; + top: -10px; + float:left; + height:119px; + width:119px; +} -/* ================================================= - Inbox Style List - High Resolution - =================================================*/ +.bb-bb10-image-list-item-lowres .description +{ + color:#606060; + overflow: hidden; + white-space:nowrap; + font-size: 14pt; + margin-bottom: 0px; + margin-top: 2px; + text-overflow: ellipsis; +} -.bb-hires-inbox-list +.bb-bb10-image-list-item-hires .description { - margin:0px; - padding:0px; - font-size: 13pt; + color:#606060; + overflow: hidden; + white-space:nowrap; + font-size: 28pt; + margin-bottom: 0px; + margin-top:-6px; + text-overflow: ellipsis; } -.bb-hires-inbox-list-header +.bb-bb10-image-list-item-hover .description { - background-image: -webkit-gradient(linear, center top, center bottom, from(#D5D6D7), to(#9E9F9F)); - height:56px; - vertical-align:middle; - border-bottom: solid 1px #D9DCDE; + color: White; +/* overflow: hidden; + white-space:nowrap; + font-size: 15pt; + margin-bottom: 0px;*/ } -.bb-hires-inbox-list-header-hover +.bb-bb10-image-list-item-lowres .accent-text { - background-image: -webkit-gradient(linear, center top, center bottom, from(#088FF0), to(#1666DC)); - height:56px; - vertical-align:middle; - border-bottom: solid 1px #D9DCDE; + position:relative; + float:right; + color:#606060; + font-size:14pt; + margin-right: 5px; } -.bb-hires-inbox-list-header-hover p +.bb-bb10-image-list-item-hires .accent-text { - color:White; - line-height:56px; - text-align:center; - margin:0px; - padding:0px; + position:relative; + float:right; + color:#606060; + font-size:22pt; + margin-right: 10px; + margin-top:5px; } -.bb-hires-inbox-list-header p +.bb-bb10-image-list-item-hover .accent-text +{ + color:White; +} + + + +/* ================================================= + Image List High-Resolution + =================================================*/ + + +.bb-hires-image-list { - color: Black; - line-height:56px; - text-align:center; margin:0px; - padding:0px; + padding:0px; } -.bb-hires-inbox-list-item +.bb-hires-image-list-item { border-bottom: solid 1px #D9DCDE; - padding-top: 7px; - padding-bottom: 3px; + padding-top: 10px; padding-left: 5px; - height: 52px; + padding-bottom: 0px; + overflow:hidden; + height: 60px; } -.bb-hires-inbox-list-item-hover +.bb-hires-image-list-item-hover { - background-image: -webkit-gradient(linear, center top, center bottom, from(#088FF0), to(#1666DC)); - background-color:#2175F7; + /*background-color:#2175F7;*/ + background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); border-bottom: solid 1px #D9DCDE; - padding-top: 7px; - padding-bottom: 3px; + padding-top: 10px; padding-left: 5px; - height: 52px; + padding-bottom: 0px; + overflow:hidden; + height: 60px; } -.bb-hires-inbox-list-item .title +.bb-hires-image-list .details { - margin-left: 13px; - color:Black; - display:inline; + position:relative; + margin-left:74px; + margin-bottom: 0px; } -.bb-hires-inbox-list-item-hover .title +.bb-hires-image-list-item .title { - margin-left: 13px; - color:White; - display:inline; + color:Black; + overflow: hidden; + text-overflow: ellipsis; } -.bb-hires-inbox-list-item img +.bb-hires-image-list-item-hover .title { - float:left; - margin-left: 7px; - margin-top: 7px; - height: 32px; - width: 32px; + color:White; + overflow: hidden; + text-overflow: ellipsis; } -.bb-hires-inbox-list-item-hover img +.bb-hires-image-list img { + position:relative; + left: -5px; float:left; - margin-left: 7px; - margin-top: 7px; - height: 32px; - width: 32px; + height:70px; + width:70px; + top:-10px; } -.bb-hires-inbox-list-item .description +.bb-hires-image-list .description { - margin-left: 50px; - color:#7B7D7B; - font-size: 14pt; - overflow:hidden; + color:#737173; + overflow: hidden; + white-space:nowrap; + font-size: 14pt; + margin-bottom: 0px; + text-overflow: ellipsis; } -.bb-hires-inbox-list-item-hover .description +.bb-hires-image-list-item-hover .description { - margin-left: 50px; - color:White; - font-size: 14pt; - overflow:hidden; + color: White; + overflow: hidden; + white-space:nowrap; + font-size: 14pt; + margin-bottom: 0px; + text-overflow: ellipsis; } -.bb-hires-inbox-list-item .time +.bb-hires-image-list-item .accent-text { position:relative; float:right; @@ -904,7 +1675,7 @@ a.bb5-button-highlight span { color: Black; } -.bb-hires-inbox-list-item-hover .time +.bb-hires-image-list-item-hover .accent-text { position:relative; float:right; @@ -913,131 +1684,203 @@ a.bb5-button-highlight span { color:White; } -/* ================================================= - Inbox Style List - Low Resolution - =================================================*/ - -.bb-lowres-inbox-list +.bb-hires-image-list-header { - margin:0px; - padding:0px; - font-size: 13pt; + background-image: -webkit-gradient(linear, center top, center bottom, from(#D5D6D7), to(#9E9F9F)); + height:56px; + vertical-align:middle; + border-bottom: solid 1px #D9DCDE; } -.bb-lowres-inbox-list-header +.bb-hires-image-list-header-right { - background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAAbCAIAAAArlMusAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAblJREFUeF7t2CFuw0AQBVD3/mcK6j1SUGAQYBAQEODOOmlZUaTor+ZZ1rqss29mv6187Pu+uAgQIEAgUKAC2kWAAAECgQLLs6b78bSGCISUYSRaCbTa7CRHbAT07XazRglEFWM8mgg02eY0h6teIfd9GV/NdxmdJeCoEHi/wDTJ1eeb8hHQNQpjGh4xbQ0Q0AgC7xdw9tMEagaWvzl4/0D4j/8JpA2KejoIOI+BAiOgXQQIECAQKCCgA5uiJAIECAwBAW0OCBAgECrwG9DXoz5riEBIGUailUCrzU5yxEZAb9tmjRKIKsZ4NBFoss1pDle9Qq71E8fx0JsogahiphlonxqvCWh0nEAFdGWBiwABAgQCBQR0YFOURIAAgSEgoM0BAQIEQgUEdGhjlEWAAIER0Ou6WqMEoooxHk0EmmxzmsN12bZL/cRxPPQmSiCqmGkG2qfGawIaHSdQAV1Z4CJAgACBQAEBHdgUJREgQGAICGhzQIAAgVABAR3aGGURIEBgWb9XNwECBAgECiznr7ObAAECBNIE6oXxDOj6q4qzhgiElGEkWgm02uwsR2w5fZ7cBAgQIBAo8AP5Rl6LQeuAZgAAAABJRU5ErkJggg=="); - background-image: -webkit-gradient(linear, center top, center bottom, from(#eff1f2), to(#dcd7de)); - height:27px; - vertical-align:middle; + text-align:right; + padding-right: 10px; } -.bb-lowres-inbox-list-header-hover +.bb-hires-image-list-header-left { - height:27px; - vertical-align:middle; - background-image: none; - background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); - background-color: #2175F7; + text-align:left; + padding-left: 10px; } -.bb-lowres-inbox-list-header-hover p +.bb-hires-image-list-header-center { - color:White; - line-height:27px; text-align:center; - margin:0px; - padding:0px; } -.bb-lowres-inbox-list-header p +.bb-hires-image-list-header-hover { - color: Black; - line-height:27px; - text-align:center; + background-image: -webkit-gradient(linear, center top, center bottom, from(#088FF0), to(#1666DC)); + height:56px; + vertical-align:middle; + border-bottom: solid 1px #D9DCDE; +} + +.bb-hires-image-list-header-hover p +{ + color:White; + line-height:56px; margin:0px; padding:0px; } -.bb-lowres-inbox-list-item +.bb-hires-image-list-header p { - border-bottom: solid 1px #D9DCDE; - padding-top: 5px; - padding-bottom: 5px; - padding-left: 5px; + color: Black; + line-height:56px; + margin:0px; + padding:0px; } -.bb-lowres-inbox-list-item-hover +/* ================================================= + Image List Low-Resolution + =================================================*/ + + +.bb-lowres-image-list +{ + margin:0px; + padding:0px; +} + +.bb-lowres-image-list-item { - background-image: -webkit-gradient(linear, center top, center bottom, from(#0dacff), to(#0f75ff)); - background-color:#2175F7; border-bottom: solid 1px #D9DCDE; - padding-top: 5px; - padding-bottom: 5px; - padding-left: 5px; - + padding-bottom: 0px; + overflow:hidden; + height:60px; } -.bb-lowres-inbox-list-item .title +.bb-lowres-image-list-item-hover { - margin-left: 8px; - color:Black; - display:inline; + background-color:#2175F7; + border-bottom: solid 1px #D9DCDE; + padding-bottom: 0px; + overflow:hidden; + height: 60px; } -.bb-lowres-inbox-list-item-hover .title +.bb-lowres-image-list .details { - color:White; - margin-left: 8px; - display:inline; + position:relative; + margin-left:68px; + margin-bottom: 0px; + margin-top:8px; } -.bb-lowres-inbox-list-item img +.bb-lowres-image-list-item .title { - float:left; - left: 2px; + color:Black; + overflow: hidden; + font-size:14pt; +} + +.bb-lowres-image-list-item-hover .title +{ + color:White; + overflow: hidden; + font-size:14pt; } -.bb-lowres-inbox-list-item-hover img +.bb-lowres-image-list img { + position:relative; + left:0px; float:left; - left: 2px; + height:60px; + width:60px; } -.bb-lowres-inbox-list-item .description +.bb-lowres-image-list .description { - margin-left: 38px; - color:#7B7D7B; - font-size: 12pt; - overflow:hidden; + color:#737173; + overflow: hidden; + white-space:nowrap; + font-size: 12pt; + margin-bottom: 0px; } -.bb-lowres-inbox-list-item-hover .description +.bb-lowres-image-list-item-hover .description { - margin-left: 38px; - color:White; - font-size: 12pt; - overflow:hidden; + color: White; + overflow: hidden; + white-space:nowrap; + font-size: 12pt; + margin-bottom: 0px; } -.bb-lowres-inbox-list-item .time +.bb-lowres-image-list-item .accent-text { position:relative; float:right; font-size:10pt; margin-right: 5px; color:#696969; + margin-top:5px; } -.bb-lowres-inbox-list-item-hover .time +.bb-lowres-image-list-item-hover .accent-text { position:relative; float:right; font-size:10pt; margin-right: 5px; color:White; + margin-top:5px; +} + +.bb-lowres-image-list-header +{ + background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAAbCAIAAAArlMusAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAblJREFUeF7t2CFuw0AQBVD3/mcK6j1SUGAQYBAQEODOOmlZUaTor+ZZ1rqss29mv6187Pu+uAgQIEAgUKAC2kWAAAECgQLLs6b78bSGCISUYSRaCbTa7CRHbAT07XazRglEFWM8mgg02eY0h6teIfd9GV/NdxmdJeCoEHi/wDTJ1eeb8hHQNQpjGh4xbQ0Q0AgC7xdw9tMEagaWvzl4/0D4j/8JpA2KejoIOI+BAiOgXQQIECAQKCCgA5uiJAIECAwBAW0OCBAgECrwG9DXoz5riEBIGUailUCrzU5yxEZAb9tmjRKIKsZ4NBFoss1pDle9Qq71E8fx0JsogahiphlonxqvCWh0nEAFdGWBiwABAgQCBQR0YFOURIAAgSEgoM0BAQIEQgUEdGhjlEWAAIER0Ou6WqMEoooxHk0EmmxzmsN12bZL/cRxPPQmSiCqmGkG2qfGawIaHSdQAV1Z4CJAgACBQAEBHdgUJREgQGAICGhzQIAAgVABAR3aGGURIEBgWb9XNwECBAgECiznr7ObAAECBNIE6oXxDOj6q4qzhgiElGEkWgm02uwsR2w5fZ7cBAgQIBAo8AP5Rl6LQeuAZgAAAABJRU5ErkJggg=='); + + height:27px; + background-color:silver; +} + +.bb-lowres-image-list-header-right +{ + text-align:right; + padding-right: 10px; +} + +.bb-lowres-image-list-header-left +{ + text-align:left; + padding-left: 10px; +} + +.bb-lowres-image-list-header-center +{ + text-align:center; +} + +.bb-lowres-image-list-header-hover +{ + height:27px; + background-image: none; + background-color: #2175F7; +} + +.bb-lowres-image-list-header-hover p +{ + color:White; + line-height:27px; + margin:0px; + padding:0px; +} + +.bb-lowres-image-list-header p +{ + color: Black; + line-height:27px; + margin:0px; + padding:0px; } + + + /* ================================================= BBM Bubbles =================================================*/ @@ -1063,7 +1906,6 @@ a.bb5-button-highlight span { } .bb-bbm-bubble-left .image { - /*background-image: url('../images/bbmBubbles/panelLeft.png');*/ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAAdCAYAAABSfAiGAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBUjB5d+cecAAAI0SURBVHja7dw9a1t3GMbh+5gz/A0apM1jD3TR6K/h8QwZ/PEyZNSoMauGDIZCMSUFFdJQhwTsQdBnOHA6uCktNfQllknCdS3nRqDl2X4SUjdnTpJsN9u5pkqmpKYKAADAp2h9S/r758V40SVJN2fOZrOZ61BpraUtWlpbJfk1yel/fMa2bfsr2m5gfy47bmHb9he5q25Th0pVpS1axnHs+u1mO9ehsjw7y3oYZBoAAPBIzpIk1/t97m5u8t33P8x9TffffIgPAADgGNbDkB+TvHv7NidVlfPzc1cBAACO5tthyPsPNzlxCgAA4ElMESAAAMDTESAAAIAAAQAABAgAAIAAAQAABAgAAIAAAQAABAgAACBAAAAABAgAACBAAAAAHgqQ3hEAAIAn0CcnrW/ZvbpyDAAA4Gh2r3ZpaTlpfZIqFwEAAI7i+vV1MiWttXRz5mw2m7nuKmnJcrHMer1+8I3TNOXNL2+SKUmfvz9j27b9FW03sD+XHbewbfvL3FWVu0MlU6W1lvHZ2HVz5iTJdrOda6rc3t1m+GbIMAx/iY/9fp/9T/uctlMJBwAA/LM+aX1L61suxovuz5+n/PHCi+cv5od+mL7/+Sar5Srjs7FzSQAA4P/4V3/D+3K3y+r3r0ycDAAAOFqA7Ha7rPpkvBQfAADAEQPk49/zjpeX4gMAADhegFxdXSVTZblYuhIAAHCcAGl9Sx0qVffx8fHH6QAAAI8eIGktVZW2aOIDAAB4VL8B1hmhz0JjeFQAAAAASUVORK5CYII="); } @@ -1113,12 +1955,10 @@ a.bb5-button-highlight span { margin-right: 8px; margin-left: 20px; position:relative; - /*font-size: 13pt;*/ } .bb-bbm-bubble-right .image { - /*background-image: url('../images/bbmBubbles/panelRight.png');*/ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAAdCAYAAABSfAiGAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9oFHBUgJ4c9AuwAAAJNSURBVHja7dyxa1tXGMbh95o7fIYOEmSIoIUIumjIkLEaM3rUkCFD/8AOd7NHj+pgiIcMHRpohoICCUjQgM4guB3clgZMSRorQ/w8i16MpiOd4YcldWPGJMnFcDG2Q0trLQAAAJ+r+kr6m8ez1VmXJN2YMcMwjNuWtMk8NZsnSU7Tsk/Z9r3ZzsJ2B+KO296Ttrtmf/T+78fkNJVt2yZ/7FLvfsu0T1bPVl13PpyPm/ctWSwzf1iZVUk1AADgzqxf75Jf15lV5aQdWtrDeZaPJuIDAAC4c8tHk7QH87RDy0lrLU+fLJwKAABwNE+fLG4CxFEAAABfxCECBAAA+HIECAAAIEAAAAABAgAAIEAAAAABAgAAIEAAAAABAgAACBAAAAABAgAACBAAAAABAgAACBAAAOCr1ycnVZXLq2uHAQAAHM3l1XUqlZPqK/Vuk/XrjVMBAADu3PrVJrXbpKrSjRkzDMO4fZ+0ySz13TynqSQt+8S279GOs7Dv9d6nueO296Ttrtmf/BpXJYsHdft/PV5tkrdvUrtNpt8kq9Wq68aMSZKL4WJsh5bWmkQDAAA+yvaQ1OKHLL+fffD369932V+dZzqZpvrkbLXqkuSfAAEAAPhUw0/DuG1JHi+z/HbyQYDk5WWe//i8+/fz/QoWAADwv62erbppJe3l+iY6/tbf/rEsAQIAAHx2hMwq2f7yIru/vtKxPzQBAgAAHDFC+pb1z+vsWnLaR4AAAADHjZD5oeXF1To5JOkFCAAAcERVlWl7k+3bTeqW74H8CX8ZrQX6MdddAAAAAElFTkSuQmCC"); } @@ -1347,6 +2187,212 @@ a.bb5-button-highlight span { border-bottom-right-radius:5px; } +/* ================================================= + BB10 Pill Buttons + =================================================*/ + +.bb-bb10-pill-buttons-lowres { + padding-top:5px; +} + +.bb-bb10-pill-buttons-hires { + padding-top:10px; +} + +.bb-bb10-pill-buttons-container-lowres { + border-width:1px; + border-style: solid; + border-radius:3px; + padding: 2px; + font-size: 16pt; + height:46px; +} + +.bb-bb10-pill-buttons-container-hires { + border-width:2px; + border-style: solid; + border-radius:5px; + padding: 2px; + font-size: 27pt; + height:89px; +} + +.bb-bb10-pill-buttons-container-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#BDBDBD), to(#D4D4D4)); + color: #5D5D5D; + border-top-color: #A3A3A3; + border-bottom-color: #CECECE; + border-left-color: #C3C3C3; + border-right-color: #C4C4C4; +} + +.bb-bb10-pill-buttons-container-dark +{ + color: #8D8D8D; + border-top-color: #262626; + border-left-color: #2A2A2A; + border-right-color: #2A2A2A; + border-bottom-color: #2E2E2E; + background-image: -webkit-gradient(linear, center top, center bottom, from(#292929), to(#333333)); +} + +.bb-bb10-pill-button-lowres { + float: left; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 0px; + padding-right: 0px; + border-width: 1px; + border-style: solid; + border-color: transparent; + display: table-cell; + background-clip: padding-box; + height:43px; + border-radius: 3px; +} + +.bb-bb10-pill-button-hires { + float: left; + text-align:center; + white-space:nowrap; + vertical-align: middle; + padding-left: 0px; + padding-right: 0px; + border-width: 2px; + border-style: solid; + border-color: transparent; + display: table-cell; + background-clip: padding-box; + height:85px; + border-radius: 5px; +} + +.bb-bb10-pill-button-inner-lowres +{ + margin:0px; + border-width:1px; + border-style: solid; + border-radius: 3px; + height:36px; + line-height:36px; + z-index:10; + border-color: transparent; + padding-top: 5px; +} + +.bb-bb10-pill-button-inner-hires +{ + margin:0px; + border-width:2px; + border-style: solid; + border-radius: 5px; + height:76px; + line-height:76px; + z-index:10; + border-color: transparent; + padding-top: 5px; +} + +.bb-bb10-pill-button-inner-selected-lowres-dark +{ + border-color: #4F4F4F; +} + +.bb-bb10-pill-button-inner-selected-hires-dark +{ + border-color: #4F4F4F; +} + +.bb-bb10-pill-button-inner-selected-lowres-light +{ + border-color: transparent; +} + +.bb-bb10-pill-button-inner-selected-hires-light +{ + border-color: transparent; +} + +.bb-bb10-pill-button-selected-lowres-light{ + color: black; + border-width:1px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DDDDDD)); +} + +.bb-bb10-pill-button-selected-hires-light{ + color: black; + border-width:2px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DDDDDD)); +} + +.bb-bb10-pill-button-highlight-lowres-light{ + color: white; + border-width:1px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; +} + +.bb-bb10-pill-button-highlight-hires-light{ + color: white; + border-width:1px; + border-style: solid; + border-top-color: #B4B4B4; + border-left-color: #C2C2C2; + border-bottom-color: #B4B4B4; + border-right-color: #C8C8C8; +} + +.bb-bb10-pill-button-selected-lowres-dark +{ + color: white; + border-width:1px; + border-style: solid; + border-color:#090909; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#262626)); +} + +.bb-bb10-pill-button-selected-hires-dark +{ + color: white; + border-width:2px; + border-style: solid; + border-color:#090909; + background-image: -webkit-gradient(linear, center top, center bottom, from(#3F3F3F), to(#262626)); +} + +.bb-bb10-pill-button-highlight-lowres-dark +{ + color: white; + border-width:1px; + border-style: solid; + border-color:#333333; +} + +.bb-bb10-pill-button-highlight-hires-dark +{ + color: white; + border-width:2px; + border-style: solid; + border-color:#333333; +} + + + /* ================================================= Ripple Drop-Down dialog =================================================*/ @@ -1392,21 +2438,633 @@ a.bb5-button-highlight span { background-position: 10px center; } + /* ================================================= - Not sure if these are needed anymore + BB10 Grid =================================================*/ -.panel-nogap input +.bb-bb10-grid-lowres { - display:inline; - float:left; - font-family: BBAlpha Sans; - font-size: 16pt; - border: none; - padding-top: 0px; - width: 10px; + margin:0px; + padding:0px; +} + +.bb-bb10-grid-hires +{ + margin:0px; + padding:0px; +} + +.bb-bb10-grid-header-lowres +{ + height:30px; + line-height:30px; + vertical-align:middle; } +.bb-bb10-grid-header-hires +{ + height:46px; + line-height:46px; + padding-top:5px; + vertical-align:middle; + padding-left: 10px; +} +.bb-bb10-grid-header-lowres p +{ + color: White; + font-size: 16pt; + font-weight: bold; + line-height:30px; + margin:0px; + padding:0px; + padding-top:4px; + margin-left: 10px; +} +.bb-bb10-grid-header-hires p +{ + color: White; + font-size: 28pt; + font-weight: bold; + line-height:46px; + margin:0px; + padding:0px; + padding-top:4px; + margin-left: 10px; +} + +.bb-bb10-grid-row-lowres +{ + padding:1px; +} + +.bb-bb10-grid-row-hires +{ + padding:1px; +} + +.bb-bb10-grid-item +{ + display:inline-block; +} + +.bb-bb10-grid-item-col-1-lowres +{ + margin:1px; +} + +.bb-bb10-grid-item-col-1-hires +{ + margin:1px; +} + +.bb-bb10-grid-item-col-2-lowres +{ + margin-left: 1px; +} + +.bb-bb10-grid-item-col-2-hires +{ + margin-left: 1px; +} + +.bb-bb10-grid-item-col-3-lowres +{ + margin-left: -3px; +} + +.bb-bb10-grid-item-col-3-hires +{ + margin-left: -3px; +} + +.bb-bb10-grid-item-overlay-lowres +{ + position:relative; + height: 40px; + top:-40px; + right:0px; + left: 0px; + background-color: black; + opacity: 0.7; +} + +.bb-bb10-grid-item-overlay-hires +{ + position:relative; + height: 70px; + top:-70px; + right:0px; + left: 0px; + background-color: black; + opacity: 0.7; +} + +.bb-bb10-grid-item-overlay-lowres .title +{ + text-align:center; + right:0px; + left:0px; + padding:0px; + margin:0px; + padding-top: 3px; + line-height:20px; + height:37px; + opacity:1.0; + color:white; + font-size: 13pt; +} + +.bb-bb10-grid-item-overlay-hires .title +{ + text-align:center; + right:0px; + left:0px; + padding:0px; + margin:0px; + padding-top: 10px; + line-height:30px; + height:37px; + opacity:1.0; + color:white; + font-size: 22pt; +} + +/* ================================================= + BB10 Action Bar + =================================================*/ + +.bb-bb10-action-bar-table +{ + margin:0px; + margin-top:0px; + padding:0px; + width:100%; + border-collapse:collapse; +} + +.bb-bb10-action-bar-table tr td +{ + padding:0px; + margin:0px; + border-collapse:collapse; +} + +.bb-bb10-action-bar-lowres +{ + position: absolute; + height: 73px; + bottom:0px; + right:0px; + left:0px; + background-repeat: repeat-x; + border-top-width: 1px; + border-top-style:solid; +} + +.bb-bb10-action-bar-hires +{ + position: absolute; + height: 139px; + bottom:0px; + right:0px; + left:0px; + background-repeat: repeat-x; + border-top-width: 1px; + border-top-style: solid; +} + +.bb-bb10-action-bar-dark { + border-color: #484948; + background-image: -webkit-gradient(linear, center top, center bottom, from(#323232), to(#272727)); +} + +.bb-bb10-action-bar-light { + border-color: #D1D1D1; + background-image: -webkit-gradient(linear, center top, center bottom, from(#FBFBFB), to(#E0E0E0)); +} + +.bb-bb10-action-bar-icon-lowres +{ + height: 40px; + width: 40px; + margin-top: 3px; +} + +.bb-bb10-action-bar-icon-hires +{ + height: 80px; + width: 80px; + margin-top: 4px; +} + +.bb-bb10-action-bar-button-tab-left-lowres-dark +{ + background-position:left -4px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAABJCAIAAACCd4BSAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFRcpJS1EicAAAAEySURBVEjHvZRBEsMgCEUBvUbuf0vpgpSiokJmUhYdkyB9/I/idV2llFIKEekC+wAAAKjyAb7BzMwsa/seEatNaq0hIjNLkmzTwlXz9HNrDQCISMrLAhEJYsHMNGPpo/y11ParutsAgIa3q/Jd6pA0R+UpVIqhfFSBH4BlGri7tuyroTO7DgGMxuqgzA11bm381F+yTbjN7YydG020dadan4YWLajf1kw8AqzG5cfqWjVPY2esW8839jivT4fwcAo21qur/jFcncdHrJGoFm7G9RVYXSr/Yd3IudR1YxsFe7pT7WlJsLrX4A7gINZxQ35eN/f1I1Y7zlGxBGAjcHKyVpfUkjVaNapAFCDuVp41dLY07zjdGQuCSuXbSlwZkeP6GsBLVRMKBNt/DyCuwDusCYAPj8Kv3bCpS3oAAAAASUVORK5CYII="); +} + +.bb-bb10-action-bar-button-tab-left-hires-dark +{ + background-position:left -4px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAB1CAIAAAAwSA0oAAAABGdBTUEAALGPC/xhBQAAAAd0SU1FB9wEFRcpJS1EicAAAAQ/SURBVGhD1ZrpVttADIUdeAh2EvYspC3t+79b5VwfWdYyW5zQzg+OoeGrlitpZszi4eFhsVhcXl5eXFzQA75iyWf6tus6+5V/SA/Dur29vbu7Wy6Xq9Xq+fn55eXl7e3t4+NjvV5vNpvdbvf5+bnf738c1s/D+nVYX19fvw/rz3R1Nzc3BH18fCTo09MTQV9fXwn6/v5O0O12WwvtYKMkwkwikqVkZiGUje0Id39/D69hIxFhJvsuoYiAcp8jQNwUEWbCd1oIaBRTgoLrE0vMZEtlrgga2siOq7zL1LsC6ImsHoqjCiU7znnn1CMCKghkbwUR8vwOoqyZEq8pjpx0dllmaVC40iPn2sZREpEZmZ8+jspGKNwSZfEoYUoD80SSTlQ5rsvUQTI2Mk4VeIQ7I5EKRjWLY23kFqm8dhONPsTV7cfRJaJaEolGb+97OHdc2yJZj0o9CZE7xBI9VhCrFG4bT69w5TVPBQolXLYKz9TMNxAxuDG8suke65qma0miXSLrEZIc53UJsUiPvAP4h4ly3xOZSZmJkmPbmt5J2emKXGeJnB+faLsZq0el25nXdreXGDIlknT2j8cQdTeLtig2iO4+bVC4rOssEQpPN91J74mI2D9yTvJEKhs6MdhtLnUz3jtLx6N+ga3AkJmIKJtjJCC1UTkXEQq3Ywt6VFvIIhslUZWgIjp7M9SMiqOc15aYFtCkZtB7ZM3wSEinRbbxaqLd40rcqB51ipNHQyjRnVzy/BV2s+gUl5iFoY3Zc2FUhaVEV4zpLAM9ZkbaKE/DVeP/XMSEvBu9LpSOOhjl1aMy49aMPHPxc+rmI9scq4ly9isb5clacR31qDgmqjBjI+sxkZmo10p03sZ0m7BmnpHoJjq6AJh4fX19LacCX8ZJPbrDWh6S+F6FHjoQ3XszVz1qoyJZeHaI7jk46uEpolSPdbmdiEGYLmprlx9HOVojosq1ix7jeBKikg7vJsqDmMo17nHt0UNORFaSfNDqUZk5ihjFUXWzChv5Plypx+2Prr/44STXVUUdQUNiW1pCG9VVlFJPwuWeeHV1RdtcvlVI5FoOL96Q24dMzbh73ASO/imTmf+BaEs77bLjtWzg0uXCtPjERAPPGjgh8klmNqJ6z2VFjs1Fdmn12Jco3CmyLHzglEQVxxm8BpHPHdx7Cp3ljw1e42WhIkp5l3MnxOhivRw3yYwbR55csLdkaa/tFXMJRX7mxEQZR6meKjNHG+VbYeAagkj/d0/EG0hLrDKNPzwQ0Sbcoq7ljkS3YGpxo9dk42xEGtb0Rjwq6hYbmQhtq23jDMRmGY65VjbORoR01MxqcLnPNdlIV4VElL22jYXf6t/PMFG+1WqGDkT1xyPNOO0124g20ba0jdx12nD0Wz2RNrjktXw72IxziMew8LuDjRDj8bieiHY7P5H/9uZ4MztqZdQcZyT+BU+MsECN23toAAAAAElFTkSuQmCC"); +} + +.bb-bb10-action-bar-button-tab-left-lowres-light +{ + background-position:left -4px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAABJCAIAAABttetsAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFgAQJ8YSf00AAAGwSURBVEjH1VbLksQgCJSWqcz/f9X8Uya6B2YIEXzksFW7nFIRsGlalF6v17Ztz+dz+1rOGUD+GhGllIio1sqllOM49n0nIll4PB45Z/nPzAAASACLR621lPJ+vzWm1ppS2vddvGVDtssScxwHACIqpQAopUjilBIrLPnQrNYkS0oJ+ku9BwbJJDD8sv4UB9g1IpKaqGNoQPdMfLjB0GzdFI0wh27V7InGz4fZ/7A7DmB8ONHQJlPTLCEKHvSgU7BsNKjkW7R66Y4vyHJyVul14gNE36d3KBIPD+mOsc06EMyHx5BBZSPuvCzoPtILy+AHyRSrhcoX0QChsC5Vhsc2ZPbeKWY/HrxW49x6fntboaeNsFNslWAjw+rjKnsVc6jsWquotGXQ1tSTeKzBwdw5cfuJM8rtJ3dv5J53SjicRrh7Ymo5sZ0fceIP2CB9PO27SCxrVoOTzo+5uyBZPEHs9TS6L6cd6XpPA3i9kbeRcEPzpMppR7oMjhNfcK/khj4xfgGJvviWkNzCzeFMmvC9iuSWN+sTYbXK9Zv7njdPT258N/wvb9aX+Gp3APwBTn4A1o9I+rclZWgAAAAASUVORK5CYII="); +} + +.bb-bb10-action-bar-button-tab-left-hires-light +{ + background-position:left -8px; + background-repeat:no-repeat; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-action-lowres +{ + display:table-cell; + float: left; + height:69px; + text-align:center; + border-top-width: 4px; + border-top-style: solid; +} + +.bb-bb10-action-bar-action-display-lowres +{ + font-size:12pt; + line-height:18px; + margin-top: 3px; +} + +.bb-bb10-action-bar-action-hires +{ + display:table-cell; + float: left; + height:131px; + text-align:center; + border-top-width: 8px; + border-top-style: solid; +} + +.bb-bb10-action-bar-action-display-hires +{ + font-size:20pt; + margin-top:3px; + line-height:30px; +} + +.bb-bb10-action-bar-tab-dark { + color: white; + border-top-color: #373737; + border-right-color: #141414; + border-right-width: 2px; + border-right-style: solid; +} + +.bb-bb10-action-bar-tab-light { + color: black; + border-top-color: #E0E0E0; + border-right-color: #C6C6C6; + border-right-width: 2px; + border-right-style: solid; +} + +.bb-bb10-action-bar-button-dark { + color: white; + border-top-color: transparent; + border-right-width: 0px; +} + +.bb-bb10-action-bar-button-light { + color: black; + border-top-color: transparent; + border-right-width: 0px; +} + +.bb-bb10-action-bar-tab-normal-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#252525), to(#1C1C1C)); +} + +.bb-bb10-action-bar-tab-selected-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#47494A), to(#3F3F3F)); +} + +.bb-bb10-action-bar-tab-normal-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#F9F9F9), to(#DFDFDF)); +} + +.bb-bb10-action-bar-tab-selected-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#FBFBFB), to(#E6E6E6)); +} + +.bb-bb10-action-bar-back-button-lowres +{ + display:table-cell; + float: left; + height:23px; + font-size:12pt; + width:86px; + background-repeat: no-repeat; + text-align:center; + padding-top:50px; + line-height:20px; +} + +.bb-bb10-action-bar-back-button-hires +{ + display:table-cell; + float: left; + height:37px; + font-size:20pt; + width:178px; + background-repeat: no-repeat; + text-align:center; + padding-top:102px; + line-height:12px; +} + +.bb-bb10-action-bar-back-button-lowres-dark +{ + color: white; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-back-button-hires-dark +{ + color: white; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-back-button-lowres-light +{ + color: #242424; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-back-button-hires-light +{ + color: #242424; + background-image: url("data:image/png;base64,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"); +} + +.bb-bb10-action-bar-overflow-button-lowres-dark +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEEBMlIi9CC4EAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABFklEQVRYw+3VMYqDQBQG4Mdil94mhsDeROxCPEBALBPBXrCw39pSECysNjdIYSoJhBwhjZUOgsVYavy32hukeOy+7wDDz8y89xMJIYQQf9rpdMJ+vwfrkPf7HQAwDAOCIOAZNo5jAMA0TQCAqqreGvTjXQcppQgAGYZBRERN0/B9+iRJ8Hg8UJYlZFqF+C9s2z6yD1kUBZRSuN1ucF2X54oKwxDzPENrDQA4n888m+nXsiz8/2ee5+i6DnVdY7fbSTsJIbiIogjX6xVZlvFdTYfDAW3bou97aK2Rpim/ZrIs68s0TVqtVjSOI71eL1qv17Tdbj9Z3urlcsE4jng+n/B9n3czeZ4Hx3G+2Q/UZrM5yloRgrEfIAWSJM4nw28AAAAASUVORK5CYII="); +} + +.bb-bb10-action-bar-overflow-button-hires-dark +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEExcbIeIyRnQAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAC+klEQVR42u3ZQUgUURwG8G9235udZWdnxw1hEdFDVmYkZQftEGKlQhch7ZaiFXT30sWzWEFR58oIvXTw5tKlbgaKQl4UQat1MVxjjaCdnYXZeR2iBRG3PU71/WDufz4evHn/DyAiIiIiIiIiIiIior+AFrSB+vv6VevpVti2jVKphGw2i9nZWY0B1mDw+qDqutiFWCwGKSV834frush8zuDR40eBDFEEZZDuq93LZ86eQUNDA0zTrARYLBahhTTcHLmpZl7NaAzwCHWxugstx1tQX1+PeDx+IEAhBHK7OfAEVhtECiQSCdi2DdM0IYSAUgqRSATlchmxWCyQAYaCMkjRKeLb/jcYhgEpJcLhMMLhMKSU8DwPe3t7DLCa+fS8tryyDNd1oWla5fN9Hzs7O1j9sHqXt3ANhoeH1cDAAJqbmvGj8AMLCwuYmJgI7G8MERERERER0f8mcI/03t7e/fb29rpkMgnXdfHx00fMzrATqcngjUHVfakb8XgcQohKJ7K5tYmHDx6yE6mm53LPVMf5DjQ2NsI0Tei6Dt/34TgONE3D2NiYmp6eZidylLgdv3fq5CmkUqkDnYjjOBBC4MvuF/AEVhENRWFZ1qFORNf1X52IwU6kqu/Od+T38zAMA7quQwgBIQQikQg8z0Pua44BVvMm/UZber90qBMpl8vYzmxjZWklkJ1I4IyMjKh0Oq3W19fV4uKimro/pZgKERERERERUXAEbsN7rf+aOtdxDsljSZTcErY2t/Di5Qt2IrUYGhpSfX19sCwLUkoopVAoFLCxsYHJyUl2ItX0XOl53dnZiaampkMr/VAohNt3bqvnz56zEzlKwkrcaGtrQyqVQiKROBCglBIndk6AJ7AKKSVs20YymYRlWZVa8/dKPxqNBjLAwKz0C04B+Xwe0Wi00olIKWEYBjzPw25ul1f+n4yPj6tMJqMcx1Gu66pisajy+byam5vjWr9Wo7dG1dt3b1U2m1Vra2vqydMnDI+IiIiIiIiI/h0/AaEPHrjW6Tb1AAAAAElFTkSuQmCC"); +} + +.bb-bb10-action-bar-overflow-button-lowres-light +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACoAAAAqCAYAAADFw8lbAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEEBYiHdCucpAAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABMElEQVRYw+3XMYqDUBAG4GEVJILFkiZFUgSbQMgBBJvAFnapA7GSVGKbC6Sz9RqPFNqIHiF2SSHYpE6hpIqF+u8lLN5u5jvA8MPMvOERMcYYY/9amqa43++QOqTrulitVrBtG1mWjRr2a6xCQghcr1eaTqdU1zXFcUxSBp3NZmQYBr1eL+r7npbLpbytF0LA8zyEYQjeVsY+RVmW8m/86XTCZrPBbrdDURRyBr5cLlgsFliv15jP5wiCQM4TqqoqKYpCXdfRMAykaZq8rT+fz7AsC4fDAbfbTe5ZfTweP/ykMPYpoijCdruF7/uoqqoes7Y6VqEkSXA8HgkAFUVBk8nkW8rL1DQNtW1Luq6Toij0fD7l/NxZltU4jkPv95tM06T9fi/3nOZ5Lv/5ZIz9Ab8IP3sHbvNNngAAAABJRU5ErkJggg=="); +} + +.bb-bb10-action-bar-overflow-button-hires-light +{ + background-repeat: no-repeat; + background-position: center center; + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFxQNFCU9Ho4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAABqUlEQVR42u3b223bQBBG4ZmdFfXsRnhBakkNKSEtpBa3oisbSQPkcvMgLCHKDK3kaWScDxBgQC/EDy8I8IgiAAAAAAAAAADgBai3C2qaJpuZqN4uLaUk1+tVGfDJ8Xa73TxekVKS8/nscsTg5ULqpj7GGCWE8OFjZtJ2bfY4YPRzFPSbmUkIYfEfmHO+jRhMGHBrQNXF51W4OcI5Z5mmaXXQ8j0Dbuj7XsdxnMd7vImM4/iDu/ATuq7LVVVJCEFyzjIMg5xOp9c50wAAAAAAfHEem8hvM3ujifzPeG2Tq111u7C754BpSnI+0UQ21XX9K1qcG8iiiQSTrutoIptHQfVniUqPTUREJIQgDLg94GoTKX977STumsjfhrrvJQy4ojSRtXhEE/kHpYmY2dxEjscjTQQAAAAAACdcvicSYxRVnR9xXS4Xmsgz2rad3xNZNJGU3P5K1VMTeS+P9D80EaOJfH4UVL/fD1fknEVV3T6RdtVEynhrj/VpIp+4f0/kMTA9vkPCgCv6vtdhGFa/m6bJ7U3EZRPZ7/eLJnI4HGgiAAAAAADga/gD0hGqxramvjAAAAAASUVORK5CYII="); +} + +/* ================================================= + BB10 Context Menu +=================================================*/ + +.bb-bb10-context-menu +{ + z-index: 1002; + position:fixed; + height: 100%; + width: 80%; + top: 0px; + clear: both; +} + +.bb-bb10-context-menu-overlay +{ + z-index: 1000; + position: fixed; + top: 0px; + right:0px; + bottom:0px; + left:0px; + display:none; +} + +.bb-bb10-context-menu-lowres-dark +{ + background-color: #121212; + border-left: solid 1px #161616; +} + +.bb-bb10-context-menu-hires-dark +{ + background-color: #121212; + border-left: solid 2px #161616; +} + +.bb-bb10-context-menu-lowres-light +{ + background-color: #F9F9F9; + border-left: solid 1px #D1D1D1; +} + +.bb-bb10-context-menu-hires-light +{ + background-color: #F9F9F9; + border-left: solid 1px #D1D1D1; +} + +.bb-bb10-context-menu-item-lowres +{ + padding-top: 7px; + padding-bottom: 3px; + padding-left: 5px; + height: 52px; + line-height: 52px; + vertical-align: center; + font-size:16pt; +} + +.bb-bb10-context-menu-item-hires +{ + padding-top: 14px; + padding-bottom: 3px; + padding-left: 10px; + height: 109px; + line-height: 109px; + vertical-align: center; + font-size:30pt; +} + +.bb-bb10-context-menu-item-inner-lowres +{ + padding-left: 5px; + position:relative; + float:left; +} + +.bb-bb10-context-menu-item-inner-hires +{ + padding-left: 15px; + position:relative; + float:left; +} + +.bb-bb10-context-menu-header-dark +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#323232), to(#272727)); + border-bottom: solid 1px #404040; +} + + +.bb-bb10-context-menu-header-title-lowres +{ + font-size: 18pt; + height:30px; + line-height:30px; + padding-left: 15px; + margin:0px; +} + +.bb-bb10-context-menu-header-title-hires +{ + font-size:30pt; + height:30px; + line-height:30px; + padding-left: 18px; + margin:0px; + padding-top:20px; +} + +.bb-bb10-context-menu-header-description-lowres +{ + color: #737173; + font-size: 14pt; + height:30px; + line-height:30px; + padding-left: 15px; + margin:0px; + margin-top:-10px; +} + +.bb-bb10-context-menu-header-description-hires +{ + color: #737173; + font-size: 24pt; + height:30px; + line-height:30px; + padding-left: 18px; + margin:0px; + margin-top:5px; +} + +.bb-bb10-context-menu-header-title-dark +{ + color: white; +} + +.bb-bb10-context-menu-header-title-light +{ + color: black; +} + +.bb-bb10-context-menu-header-light +{ + background-image: -webkit-gradient(linear, center top, center bottom, from(#FBFBFB), to(#E0E0E0)); + border-bottom: solid 1px #D9DCDE; +} + +.bb-bb10-context-menu-item-lowres-light +{ + color:Black; + border-bottom: solid 1px #D9DCDE; +} + +.bb-bb10-context-menu-item-hires-light +{ + color:Black; + border-bottom: solid 2px #D9DCDE; +} + +.bb-bb10-context-menu-item-lowres-dark +{ + color:White; + border-bottom: solid 1px #404040 +} + +.bb-bb10-context-menu-item-hires-dark +{ + color:White; + border-bottom: solid 2px #404040 +} + +.bb-bb10-context-menu-item-hover-lowres +{ + border-left: solid 5px; + padding-left: 0px; +} + +.bb-bb10-context-menu-item-hover-hires +{ + border-left: solid 10px; + padding-left: 0px; +} + +.bb-bb10-context-menu-item-image-lowres +{ + position:relative; + float:left; + height: 42px; + width: 42px; + margin-top:3px; +} + +.bb-bb10-context-menu-item-image-hires +{ + position:relative; + float:left; + height: 80px; + width: 80px; + margin-top:8px; + margin-left:12px; +} + + +/* ================================================= + Not sure if these are needed anymore + =================================================*/ + +.panel-nogap input +{ + display:inline; + float:left; + font-family: BBAlpha Sans; + font-size: 16pt; + border: none; + padding-top: 0px; + width: 10px; +} diff --git a/src/core.js b/src/core.js index 924c2db1..77c38c62 100644 --- a/src/core.js +++ b/src/core.js @@ -1,260 +1,356 @@ -bb = { - scroller: null, - screens: [], - - // Assign any listeners we need to make the bbUI framework function - assignBackHandler: function(callback) { - if (window.blackberry && blackberry.system.event.onHardwareKey) { - blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK, callback); - } - }, - - doLoad: function(element) { - // Apply our styling - var root = element || document.body; - - bb.screen.apply(root.querySelectorAll('[data-bb-type=screen]')); - bb.textInput.apply(root.querySelectorAll('input[type=text]')); - bb.dropdown.apply(root.querySelectorAll('select')); - bb.roundPanel.apply(root.querySelectorAll('[data-bb-type=round-panel]')); - bb.textArrowList.apply(root.querySelectorAll('[data-bb-type=text-arrow-list]')); - bb.imageList.apply(root.querySelectorAll('[data-bb-type=image-list]')); - bb.tallList.apply(root.querySelectorAll('[data-bb-type=tall-list]')); - bb.inboxList.apply(root.querySelectorAll('[data-bb-type=inbox-list]')); - bb.bbmBubble.apply(root.querySelectorAll('[data-bb-type=bbm-bubble]')); - bb.pillButtons.apply(root.querySelectorAll('[data-bb-type=pill-buttons]')); - bb.labelControlContainers.apply(root.querySelectorAll('[data-bb-type=label-control-container]')); - bb.button.apply(root.querySelectorAll('[data-bb-type=button]')); - - // perform device specific formatting - bb.screen.reAdjustHeight(); - }, - - device: { - isHiRes: function() { - if (bb.device.isRipple()) { - return window.innerHeight > 480 || window.innerWidth > 480; - } else { - return screen.width > 480 || screen.height > 480; - } - }, - - // Determine if this browser is BB5 - isBB5: function() { - return navigator.appVersion.indexOf('5.0.0') >= 0; - }, - - // Determine if this browser is BB6 - isBB6: function() { - return navigator.appVersion.indexOf('6.0.0') >= 0; - }, - - // Determine if this browser is BB7.. Ripple's Render is similar to that in BB7 - isBB7: function() { - return (navigator.appVersion.indexOf('7.0.0') >= 0) || (navigator.appVersion.indexOf('7.1.0') >= 0) || bb.device.isRipple(); - }, - - isPlayBook: function() { - return (navigator.appVersion.indexOf('PlayBook') >= 0) || ((window.innerWidth == 1024 && window.innerHeight == 600) || (window.innerWidth == 600 && window.innerHeight == 1024)); - }, - - isRipple: function() { - return (navigator.appVersion.indexOf('Ripple') >= 0); - }, - - // Determines if this device supports touch - isTouch: function() { - return true; - } - }, - - loadScreen: function(url, id) { - var xhr = new XMLHttpRequest(), - container = document.createElement('div'), - _reduce = function (nl, func, start) { - var result = start; - - Array.prototype.forEach.apply(nl, [function (v) { - result = func(result, v); - }]); - - return result; - }, - whereScript = function (result, el) { - if (el.nodeName === "SCRIPT") { - result.push(el); - } - - return _reduce(el.childNodes, whereScript, result); - }, - i, - scripts = [], - newScriptTags = []; - - xhr.open("GET", url, false); - xhr.send(); - - container.setAttribute('id', id); - container.innerHTML = xhr.responseText; - - // Add any Java Script files that need to be included - scripts = _reduce(container.childNodes, whereScript, []), - container.scriptIds = []; - - scripts.forEach(function (script) { - var scriptTag = document.createElement('script'); - - if (script.text) { - //if there is text, just eval it since they probably don't have a src. - eval(script.text); - return; - } - container.scriptIds.push({'id' : script.getAttribute('id'), 'onunload': script.getAttribute('onunload')}); - scriptTag.setAttribute('type','text/javascript'); - scriptTag.setAttribute('src', script.getAttribute('src')); - scriptTag.setAttribute('id', script.getAttribute('id')); - newScriptTags.push(scriptTag); - // Remove script tag from container because we are going to add it to - script.parentNode.removeChild(script); - }); - - // Add getElementById for the container so that it can be used in the onscreenready event - container.getElementById = function(id, node) { - var result = null; - if (!node) { - node = this; - } - - if ( node.getAttribute('id') == id ) - return node; - - for ( var i = 0; i < node.childNodes.length; i++ ) { - var child = node.childNodes[i]; - if ( child.nodeType == 1 ) { - result = this.getElementById( id, child ); - if (result) - break; - } - } - return result; - }; - - // Special handling for inserting script tags - bb.screen.scriptCounter = 0; - bb.screen.totalScripts = newScriptTags.length; - for (var i = 0; i < newScriptTags.length; i++) { - document.body.appendChild(newScriptTags[i]); - newScriptTags[i].onload = function() { - bb.screen.scriptCounter++; - if(bb.screen.scriptCounter == bb.screen.totalScripts) { - // When we have scripts we fire the onscreenready and then apply our changes in doLoad() - if (bb.onscreenready) { - bb.onscreenready(container, container.getAttribute('id')); - } - bb.doLoad(container); - // Load in the new content - document.body.appendChild(container); - window.scroll(0,0); - bb.screen.applyEffect(id, container); - bb.createScreenScroller(); - } - }; - } - - // In case there are no scripts at all we simply doLoad() now - if(bb.screen.totalScripts === 0) { - if (bb.onscreenready) { - bb.onscreenready(container, container.getAttribute('id')); - } - bb.doLoad(container); - // Load in the new content - document.body.appendChild(container); - window.scroll(0,0); - bb.screen.applyEffect(id, container); - bb.createScreenScroller(); - } - return container; - }, - - // Creates the scroller for the screen - createScreenScroller : function() { - - var scrollWrapper = document.getElementById('bbUIscrollWrapper'); - if (scrollWrapper) { - bb.scroller = new iScroll(scrollWrapper, {hideScrollbar:true,fadeScrollbar:true, onBeforeScrollStart: function (e) { - var target = e.target; - while (target.nodeType != 1) target = target.parentNode; - - if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') - e.preventDefault(); - }}); - } - }, - - // Add a new screen to the stack - pushScreen : function (url, id) { - - // Remove our old screen - bb.removeLoadedScripts(); - bb.menuBar.clearMenu(); - var numItems = bb.screens.length; - if (numItems > 0) { - var oldScreen = document.getElementById(bb.screens[numItems -1].id); - document.body.removeChild(oldScreen); - } - - // Add our screen to the stack - var container = bb.loadScreen(url, id); - - bb.screens.push({'id' : id, 'url' : url, 'scripts' : container.scriptIds}); - }, - - // Pop a screen from the stack - popScreen: function() { - - var numItems = bb.screens.length; - if (numItems > 1) { - bb.removeLoadedScripts(); - var currentStackItem = bb.screens[numItems-1], - current = document.getElementById(currentStackItem.id); - document.body.removeChild(current); - bb.menuBar.clearMenu(); - bb.screens.pop(); - - // Retrieve our new screen - var display = bb.screens[numItems-2], - container = bb.loadScreen(display.url, display.id); - - window.scroll(0,0); - bb.screen.applyEffect(display.id, container); - - } else { - if (blackberry) { - blackberry.app.exit(); - } - } - }, - - removeLoadedScripts: function() { - // pop the old item - var numItems = bb.screens.length; - if (numItems > 0) { - var currentStackItem = bb.screens[numItems-1], - current = document.getElementById(currentStackItem.id); - - // Remove any JavaScript files - for (var i = 0; i < currentStackItem.scripts.length; i++) { - var bbScript = currentStackItem.scripts[i], - scriptTag = document.getElementById(bbScript.id); - // Call the unload function if any is defined - if (bbScript.onunload) { - eval(bbScript.onunload); - } - - document.body.removeChild(scriptTag); - } - } - } -}; - -bb.assignBackHandler(bb.popScreen); \ No newline at end of file +bb = { + scroller: null, + screens: [], + dropdownScrollers: [], + + + // Initialize the the options of bbUI + init : function (options) { + if (options) { + var i; + // User defined options + for (i in options) bb.options[i] = options[i]; + } + + // Assign our back handler if provided otherwise assign the default + if (window.blackberry && blackberry.system && blackberry.system.event && blackberry.system.event.onHardwareKey) { + + if (bb.options.onbackkey) { + blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK, bb.options.onbackkey); + } else { // Use the default + blackberry.system.event.onHardwareKey(blackberry.system.event.KEY_BACK, bb.popScreen); + } + } + + // Initialize our flags once so that we don't have to run logic in-line for decision making + bb.device.isRipple = (navigator.appVersion.indexOf('Ripple') >= 0); + bb.device.isPlayBook = (navigator.appVersion.indexOf('PlayBook') >= 0) || ((window.innerWidth == 1024 && window.innerHeight == 600) || (window.innerWidth == 600 && window.innerHeight == 1024)); + if (bb.device.isPlayBook && bb.options.bb10ForPlayBook) { + bb.device.isBB10 = true; + } else { + bb.device.isBB10 = (navigator.appVersion.indexOf('Version/10.0') >= 0); + } + bb.device.isBB7 = (navigator.appVersion.indexOf('7.0.0') >= 0) || (navigator.appVersion.indexOf('7.1.0') >= 0) || bb.device.isRipple; + bb.device.isBB6 = navigator.appVersion.indexOf('6.0.0') >= 0; + bb.device.isBB5 = navigator.appVersion.indexOf('5.0.0') >= 0; + // Determine HiRes + if (bb.device.isRipple) { + bb.device.isHiRes = window.innerHeight > 480 || window.innerWidth > 480; + } else { + bb.device.isHiRes = screen.width > 480 || screen.height > 480; + } + + // Create our coloring + if (document.styleSheets && document.styleSheets.length) { + try { + document.styleSheets[0].insertRule('.bb10Highlight {background-color:'+ bb.options.bb10HighlightColor +';background-image:none;}', 0); + document.styleSheets[0].insertRule('.bb10-button-highlight {color:White;background-image: -webkit-gradient(linear, center top, center bottom, from('+bb.options.bb10AccentColor+'), to('+bb.options.bb10HighlightColor+'));border-color:#53514F;}', 0); + document.styleSheets[0].insertRule('.bb10Accent {background-color:'+ bb.options.bb10AccentColor +';}', 0); + } + catch (ex) { + console.log(ex.message); + } + } + // Set our action bar coloring + if (bb.options.bb10ActionBarDark) { + bb.actionBar.color = 'dark'; + } else { + bb.actionBar.color = 'light'; + } + + // Set our control coloring + if (bb.options.bb10ControlsDark) { + bb.screen.controlColor = 'dark'; + } else { + bb.screen.controlColor = 'light'; + } + + // Set our list coloring + if (bb.options.bb10ListsDark) { + bb.screen.listColor = 'dark'; + } else { + bb.screen.listColor = 'light'; + } + + }, + + doLoad: function(element) { + // Apply our styling + var root = element || document.body; + + bb.screen.apply(root.querySelectorAll('[data-bb-type=screen]')); + bb.textInput.apply(root.querySelectorAll('input[type=text]')); + bb.dropdown.apply(root.querySelectorAll('select')); + bb.roundPanel.apply(root.querySelectorAll('[data-bb-type=round-panel]')); + bb.textArrowList.apply(root.querySelectorAll('[data-bb-type=text-arrow-list]')); + bb.imageList.apply(root.querySelectorAll('[data-bb-type=image-list]')); + bb.grid.apply(root.querySelectorAll('[data-bb-type=grid-layout]')); + bb.bbmBubble.apply(root.querySelectorAll('[data-bb-type=bbm-bubble]')); + bb.pillButtons.apply(root.querySelectorAll('[data-bb-type=pill-buttons]')); + bb.labelControlContainers.apply(root.querySelectorAll('[data-bb-type=label-control-container]')); + bb.button.apply(root.querySelectorAll('[data-bb-type=button]')); + + // perform device specific formatting + bb.screen.reAdjustHeight(); + }, + + device: { + isHiRes: false, + isBB5: false, + isBB6: false, + isBB7: false, + isBB10: false, + isPlayBook: false, + isRipple: false + }, + + // Options for rendering + options: { + onbackkey: null, + onscreenready: null, + ondomready: null, + bb10ActionBarDark: true, + bb10ControlsDark: true, + bb10ListsDark: false, + bb10ForPlayBook: false, + bb10AccentColor: '#2D566F', + bb10HighlightColor: '#00A8DF' + }, + + loadScreen: function(url, id) { + var xhr = new XMLHttpRequest(), + container = document.createElement('div'), + _reduce = function (nl, func, start) { + var result = start; + + Array.prototype.forEach.apply(nl, [function (v) { + result = func(result, v); + }]); + + return result; + }, + whereScript = function (result, el) { + if (el.nodeName === "SCRIPT") { + result.push(el); + } + + return _reduce(el.childNodes, whereScript, result); + }, + i, + scripts = [], + newScriptTags = []; + + xhr.open("GET", url, false); + xhr.send(); + + container.setAttribute('id', id); + container.innerHTML = xhr.responseText; + + // Add any Java Script files that need to be included + scripts = _reduce(container.childNodes, whereScript, []), + container.scriptIds = []; + + scripts.forEach(function (script) { + var scriptTag = document.createElement('script'); + + if (script.text) { + //if there is text, just eval it since they probably don't have a src. + eval(script.text); + return; + } + container.scriptIds.push({'id' : script.getAttribute('id'), 'onunload': script.getAttribute('onunload')}); + scriptTag.setAttribute('type','text/javascript'); + scriptTag.setAttribute('src', script.getAttribute('src')); + scriptTag.setAttribute('id', script.getAttribute('id')); + newScriptTags.push(scriptTag); + // Remove script tag from container because we are going to add it to + script.parentNode.removeChild(script); + }); + + // Add getElementById for the container so that it can be used in the onscreenready event + container.getElementById = function(id, node) { + var result = null; + if (!node) { + node = this; + } + + if ( node.getAttribute('id') == id ) + return node; + + for ( var i = 0; i < node.childNodes.length; i++ ) { + var child = node.childNodes[i]; + if ( child.nodeType == 1 ) { + result = this.getElementById( id, child ); + if (result) + break; + } + } + return result; + }; + + // Special handling for inserting script tags + bb.screen.scriptCounter = 0; + bb.screen.totalScripts = newScriptTags.length; + for (var i = 0; i < newScriptTags.length; i++) { + document.body.appendChild(newScriptTags[i]); + newScriptTags[i].onload = function() { + bb.screen.scriptCounter++; + if(bb.screen.scriptCounter == bb.screen.totalScripts) { + bb.initContainer(container, id); + } + }; + } + + // In case there are no scripts at all we simply doLoad() now + if(bb.screen.totalScripts === 0) { + bb.initContainer(container, id); + } + return container; + }, + + // Initialize the container + initContainer : function(container, id) { + // Fire the onscreenready and then apply our changes in doLoad() + if (bb.options.onscreenready) { + bb.options.onscreenready(container, id); + } + bb.doLoad(container); + // Load in the new content + document.body.appendChild(container); + // Fire the ondomready after the element is added to the DOM + if (bb.options.ondomready) { + bb.domready.container = container; + bb.domready.id = id; + setTimeout(bb.domready.fire(), 1); + } + window.scroll(0,0); + bb.screen.applyEffect(id, container); + bb.createScreenScroller(); + }, + + // Function pointer to allow us to asynchronously fire ondomready + domready : { + + container : null, + id : null, + + fire : function() { + bb.options.ondomready(bb.domready.container, bb.domready.id); + bb.domready.container = null; + bb.domready.id = null; + } + + }, + + // Creates the scroller for the screen + createScreenScroller : function() { + var scrollWrapper = document.getElementById('bbUIscrollWrapper'); + if (scrollWrapper) { + bb.scroller = new iScroll(scrollWrapper, {hideScrollbar:true,fadeScrollbar:true, onBeforeScrollStart: function (e) { + var target = e.target; + + // Don't scroll the screen when touching in our drop downs for BB10 + if (target.parentNode && target.parentNode.getAttribute('class') == 'bb-bb10-dropdown-items') { + return; + } + + while (target.nodeType != 1) target = target.parentNode; + + if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA') { + e.preventDefault(); + } + }}); + } + }, + + // Clear the scroller objects + clearScrollers: function() { + // first clear our dropdown scrollers + var scroller; + for (var i = bb.dropdownScrollers -1; i > -1; i--) { + scroller = bb.dropdownScrollers[i]; + scroller.destroy(); + scroller = null; + bb.dropdownScrollers.pop(); + } + if (bb.scroller) { + bb.scroller.destroy(); + bb.scroller = null; + } + }, + + // Add a new screen to the stack + pushScreen : function (url, id) { + + // Remove our old screen + bb.removeLoadedScripts(); + bb.menuBar.clearMenu(); + var numItems = bb.screens.length; + if (numItems > 0) { + var oldScreen = document.getElementById(bb.screens[numItems -1].id); + document.body.removeChild(oldScreen); + bb.clearScrollers(); + } + + // Add our screen to the stack + var container = bb.loadScreen(url, id); + + bb.screens.push({'id' : id, 'url' : url, 'scripts' : container.scriptIds}); + }, + + // Pop a screen from the stack + popScreen: function() { + + var numItems = bb.screens.length; + if (numItems > 1) { + bb.removeLoadedScripts(); + bb.clearScrollers(); + var currentStackItem = bb.screens[numItems-1], + current = document.getElementById(currentStackItem.id); + document.body.removeChild(current); + bb.screens.pop(); + bb.menuBar.clearMenu(); + bb.screen.overlay = null; + + // Retrieve our new screen + var display = bb.screens[numItems-2], + container = bb.loadScreen(display.url, display.id); + + window.scroll(0,0); + bb.screen.applyEffect(display.id, container); + + } else { + if (blackberry) { + blackberry.app.exit(); + } + } + }, + + removeLoadedScripts: function() { + // pop the old item + var numItems = bb.screens.length; + if (numItems > 0) { + var currentStackItem = bb.screens[numItems-1], + current = document.getElementById(currentStackItem.id); + + // Remove any JavaScript files + for (var i = 0; i < currentStackItem.scripts.length; i++) { + var bbScript = currentStackItem.scripts[i], + scriptTag = document.getElementById(bbScript.id); + // Call the unload function if any is defined + if (bbScript.onunload) { + eval(bbScript.onunload); + } + + document.body.removeChild(scriptTag); + } + } + } +}; + +Function.prototype.bind = function(object){ + var fn = this; + return function(){ + return fn.apply(object, arguments); + }; +}; \ No newline at end of file diff --git a/src/plugins/actionBar.js b/src/plugins/actionBar.js new file mode 100644 index 00000000..949dca5a --- /dev/null +++ b/src/plugins/actionBar.js @@ -0,0 +1,262 @@ +// Apply styling to an action bar +bb.actionBar = { + + color: '', + + apply: function(actionBar, screen) { + + actionBar.tabs = []; + var actions = actionBar.querySelectorAll('[data-bb-type=action]'), + action, + caption, + style, + lastStyle, + tabStyle, + backBtn, + actionContainer = actionBar, + btnWidth, + limit = actions.length, + res, + icon, + color = bb.actionBar.color, + j, + firstTab = true; + + // Find our resolution + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + + actionBar.setAttribute('class','bb-bb10-action-bar-'+res+' bb-bb10-action-bar-' + bb.actionBar.color); + + // Create the back button if it has one and there are no tabs in the action bar + if (actionBar.hasAttribute('data-bb-back-caption') && actionBar.querySelectorAll('[data-bb-style=tab]').length == 0) { + backBtn = document.createElement('div'); + backBtn.innerHTML = actionBar.getAttribute('data-bb-back-caption'); + backBtn.setAttribute('class','bb-bb10-action-bar-back-button-'+res+' bb-bb10-action-bar-back-button-'+res+'-' + color); + backBtn.onclick = bb.popScreen; + // Set tab coloring + backBtn.normal = 'bb-bb10-action-bar-tab-normal-'+color; + backBtn.highlight = 'bb-bb10-action-bar-tab-selected-'+color; + actionBar.backBtn = backBtn; + // Create a table to hold the back button and our actions + var table = document.createElement('table'), + tr = document.createElement('tr'), + td = document.createElement('td'); + actionBar.appendChild(table); + table.appendChild(tr); + table.setAttribute('class','bb-bb10-action-bar-table'); + // Create the container for the back button + if (bb.device.isPlayBook) { + td.style.width = '86px'; + } else { + td.style.width = '178px'; + } + tr.appendChild(td); + td.appendChild(backBtn); + // Create the container for the rest of the actions + td = document.createElement('td'); + td.style.width = '100%'; + tr.appendChild(td); + actionContainer = td; + // Add the rest of the actions to the second column + for (j = 0; j < actions.length; j++) { + action = actions[j]; + td.appendChild(action); + } + limit++; + } + + // If we have more than 5 items in the action bar we need to show the more menu button + if (limit > 5) { + actionBar.menu = bb.contextMenu.create(screen); + actionBar.appendChild(actionBar.menu); + // Create our action bar overflow button + action = document.createElement('div'); + action.setAttribute('data-bb-type','action'); + action.setAttribute('data-bb-style','button'); + + if (res == 'lowres') { + action.setAttribute('data-bb-img','overflow'); + } else { + action.setAttribute('data-bb-img','overflow'); + } + + action.onclick = actionBar.menu.show; + if (backBtn) { + actionContainer.insertBefore(action,actions[3]); + } else { + actionContainer.insertBefore(action,actions[4]); + } + // Refresh our list of actions + actions = actionBar.querySelectorAll('[data-bb-type=action]'); + } + + // Find out what kind of tab style is desired + if (actionBar.hasAttribute('data-bb-tab-style')) { + if (actionBar.getAttribute('data-bb-tab-style').toLowerCase() == 'indent') { + tabStyle = 'indent'; + } else { + tabStyle = 'highlight'; + } + actionBar.tabStyle = tabStyle; + } + + // Calculate action widths + if (backBtn) { + if (actions.length < 5) { + btnWidth = Math.floor(100/actions.length); + } else { + btnWidth = Math.floor(100/4); + } + } else { + if (actions.length < 6) { + btnWidth = Math.floor(100/actions.length); + } else { + btnWidth = Math.floor(100/5); + } + } + + // Grab all the actions that are defined + for (j = 0; j < actions.length; j++) { + action = actions[j]; + action.res = res; + caption = action.innerHTML; + + if ((backBtn && j > 3) || j > 4) { + actionBar.menu.add(action); + } else { + // apply our button styling + if (action.hasAttribute('data-bb-style')) { + // Set our button widths taking into account the last button float + if ((backBtn && j > 2) || (j > 3) || (j == actions.length -1)) { + action.style.width = btnWidth - 1 + '%'; + action.style.float = 'right'; + } else { + action.style.width = btnWidth + '%'; + } + style = action.getAttribute('data-bb-style').toLowerCase(); + if (style == 'button') { + // See if the last action was a tab + if (lastStyle == 'tab') { + action.normal = 'bb-bb10-action-bar-action-'+res+' bb-bb10-action-bar-button-'+color+' bb-bb10-action-bar-button-tab-left-'+res+'-'+color; + } else { + action.normal = 'bb-bb10-action-bar-action-'+res+' bb-bb10-action-bar-button-'+color; + } + action.innerHTML = ''; + action.setAttribute('class',action.normal); + // Add the icon + icon = document.createElement('img'); + if (action.getAttribute('data-bb-img') == 'overflow') { + // Set our transparent pixel + icon.setAttribute('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A'+ + '/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9wEFxQXKc14qEQAAAAZdEVYdENv'+ + 'bW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAADUlEQVQI12NgYGBgAAAABQABXvMqOgAAAABJ'+ + 'RU5ErkJggg=='); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res+' bb-bb10-action-bar-overflow-button-'+res+'-'+color); + } else { + icon.setAttribute('src',action.getAttribute('data-bb-img')); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res); + } + action.appendChild(icon); + + + /*icon = document.createElement('img'); + icon.setAttribute('src',action.getAttribute('data-bb-img')); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res); + action.appendChild(icon);*/ + // Set our caption + var display = document.createElement('div'); + display.setAttribute('class','bb-bb10-action-bar-action-display-'+res); + display.innerHTML = caption; + action.appendChild(display); + } + else if (style=='tab') { + action.actionBar = actionBar; + // Apply our highlight tab styling + if (tabStyle == 'highlight') { + actionBar.tabs.push(action); + action.innerHTML = ''; + action.normal = 'bb-bb10-action-bar-action-'+res+' bb-bb10-action-bar-tab-'+color+' bb-bb10-action-bar-tab-normal-'+color; + action.highlight = action.normal + ' bb-bb10-action-bar-tab-selected-'+color; + action.setAttribute('class',action.normal); + if (firstTab && actionBar.backBtn) { + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.normal); + } + if (action.hasAttribute('data-bb-selected') && (action.getAttribute('data-bb-selected').toLowerCase() == 'true')) { + bb.actionBar.highlightAction(action); + if (firstTab && actionBar.backBtn) { + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.highlight); + } + } + + firstTab = false; + // Add the icon + icon = document.createElement('img'); + icon.setAttribute('src',action.getAttribute('data-bb-img')); + icon.setAttribute('class','bb-bb10-action-bar-icon-'+res); + action.appendChild(icon); + // Set our caption + var display = document.createElement('div'); + display.setAttribute('class','bb-bb10-action-bar-action-display-'+res); + display.innerHTML = caption; + action.appendChild(display); + + // Make the last tab have a smaller border + if (j == actions.length-1) { + action.style['border-right-width'] = '1px'; + } + } + // Add our click listener + action.addEventListener('click',function (e) { + var i, + action, + tabStyle = this.actionBar.tabStyle; + tabs = this.actionBar.tabs, + firstTab = false; + + for (i = 0; i < tabs.length; i++) { + action = tabs[i]; + if (tabStyle == 'highlight') { + if (action == this) { + bb.actionBar.highlightAction(action); + firstTab = (i == 0); + } else { + bb.actionBar.unhighlightAction(action); + } + } + // Set our back button highlighting + if (firstTab && actionBar.backBtn) { + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.highlight); + } else if (actionBar.backBtn){ + actionBar.backBtn.parentNode.setAttribute('class',actionBar.backBtn.normal); + } + + } + + },false); + } + lastStyle = style; + } + } + } + // Set the proper header height + /* if (actionBar.menu) { + actionBar.menu.setHeaderHeight(); + }*/ + }, + + // Apply the proper highlighting for the action + highlightAction: function (action) { + action.style['border-top-color'] = bb.options.bb10HighlightColor; + action.setAttribute('class',action.highlight); + }, + + // Apply the proper styling for an action that is no longer highlighted + unhighlightAction: function(action) { + action.style['border-top-color'] = ''; + action.setAttribute('class',action.normal); + } +}; diff --git a/src/plugins/button.js b/src/plugins/button.js index 27907705..6f22a118 100644 --- a/src/plugins/button.js +++ b/src/plugins/button.js @@ -1,8 +1,9 @@ bb.button = { + // Apply our transforms to all arrow buttons passed in apply: function(elements) { - - if (bb.device.isBB5()) { + + if (bb.device.isBB5) { for (var i = 0; i < elements.length; i++) { var outerElement = elements[i], caption = outerElement.innerHTML, @@ -29,7 +30,95 @@ bb.button = { span.innerHTML = caption; button.appendChild(span); } - } else { + } else if (bb.device.isBB10) { + var res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + for (var i = 0; i < elements.length; i++) { + var outerElement = elements[i], + disabledStyle, + innerElement = document.createElement('div'); + disabled = outerElement.hasAttribute('data-bb-disabled'), + normal = 'bb-bb10-button bb-bb10-button-'+res, + highlight = 'bb-bb10-button bb-bb10-button-'+res+' bb10-button-highlight', + outerNormal = 'bb-bb10-button-container-'+res+' bb-bb10-button-container-' + bb.screen.controlColor; + + outerElement.enabled = !disabled; + innerElement.innerHTML = outerElement.innerHTML; + outerElement.innerHTML = ''; + outerElement.appendChild(innerElement); + + if (outerElement.hasAttribute('data-bb-style')) { + var style = outerElement.getAttribute('data-bb-style'); + if (style == 'stretch') { + normal = normal + ' bb-bb10-button-stretch'; + highlight = highlight + ' bb-bb10-button-stretch'; + } + } + // Set our styles + disabledStyle = normal + ' bb-bb10-button-disabled-'+bb.screen.controlColor; + normal = normal + ' bb-bb10-button-' + bb.screen.controlColor; + + if (disabled) { + outerElement.removeAttribute('data-bb-disabled'); + innerElement.setAttribute('class',disabledStyle); + } else { + innerElement.setAttribute('class',normal); + } + // Set our variables on the elements + outerElement.setAttribute('class',outerNormal); + outerElement.outerNormal = outerNormal; + outerElement.innerElement = innerElement; + innerElement.normal = normal; + innerElement.highlight = highlight; + innerElement.disabledStyle = disabledStyle; + if (!disabled) { + outerElement.ontouchstart = function() { + this.innerElement.setAttribute('class', this.innerElement.highlight); + + }; + outerElement.ontouchend = function() { + this.innerElement.setAttribute('class', this.innerElement.normal); + }; + } + + // Trap the click and call it only if the button is enabled + outerElement.trappedClick = outerElement.onclick; + outerElement.onclick = undefined; + if (outerElement.trappedClick !== null) { + outerElement.addEventListener('click',function (e) { + if (this.enabled) { + this.trappedClick(); + } + },false); + } + + // Assign our enable function + outerElement.enable = function(){ + if (this.enabled) return; + this.innerElement.setAttribute('class', this.innerElement.normal); + this.ontouchstart = function() { + this.innerElement.setAttribute('class', this.innerElement.highlight); + + }; + this.ontouchend = function() { + this.innerElement.setAttribute('class', this.innerElement.normal); + }; + this.enabled = true; + }; + // Assign our disable function + outerElement.disable = function(){ + if (!this.enabled) return; + this.innerElement.setAttribute('class', this.innerElement.disabledStyle); + this.ontouchstart = null; + this.ontouchend = null; + this.enabled = false; + }; + } + } else { for (var i = 0; i < elements.length; i++) { var outerElement = elements[i], disabled = outerElement.hasAttribute('data-bb-disabled'), @@ -39,7 +128,7 @@ bb.button = { outEvent; // Set our highlight events - if (bb.device.isPlayBook()) { + if (bb.device.isPlayBook) { inEvent = 'ontouchstart'; outEvent = 'ontouchend'; } else { @@ -54,7 +143,7 @@ bb.button = { outerElement.removeAttribute('data-bb-disabled'); } - if (bb.device.isHiRes()) { + if (bb.device.isHiRes) { normal = normal + ' bb-bb7-button-hires'; highlight = highlight + ' bb-bb7-button-hires'; } else { @@ -93,7 +182,7 @@ bb.button = { var normal = 'bb-bb7-button', highlight = 'bb-bb7-button-highlight'; - if (bb.device.isHiRes()) { + if (bb.device.isHiRes) { normal = normal + ' bb-bb7-button-hires'; highlight = highlight + ' bb-bb7-button-hires'; } else { @@ -119,7 +208,7 @@ bb.button = { if (!this.enabled) return; var normal = 'bb-bb7-button-disabled'; - if (bb.device.isHiRes()) { + if (bb.device.isHiRes) { normal = normal + ' bb-bb7-button-hires'; } else { normal = normal + ' bb-bb7-button-lowres'; @@ -143,4 +232,4 @@ bb.button = { } } } -}; \ No newline at end of file +}; diff --git a/src/plugins/contextMenu.js b/src/plugins/contextMenu.js new file mode 100644 index 00000000..8ed05dad --- /dev/null +++ b/src/plugins/contextMenu.js @@ -0,0 +1,255 @@ +// BlackBerry 10 Context Menu +bb.contextMenu = { + + // Create an instance of the menu and pass it back to the caller + create : function(screen) { + var res, + swipeThreshold; + if (bb.device.isPlayBook) { + res = 'lowres'; + swipeThreshold = 100; + } else { + res = 'hires'; + swipeThreshold = 300; + } + + // Create the oveflow menu container + var menu = document.createElement('div'), + title = document.createElement('div'), + description = document.createElement('div'), + header; + menu.setAttribute('class','bb-bb10-context-menu bb-bb10-context-menu-' + res + '-' + bb.actionBar.color); + menu.actions = []; + menu.res = res; + // Add the overlay for trapping clicks on items below + if (!bb.screen.overlay) { + bb.screen.overlay = document.createElement('div'); + bb.screen.overlay.threshold = swipeThreshold; + bb.screen.overlay.setAttribute('class','bb-bb10-context-menu-overlay'); + bb.screen.overlay.menu = menu; + screen.appendChild(bb.screen.overlay); + + bb.screen.overlay.ontouchmove = function(event) { + // Only care about moves if peeking + if (!this.menu.peeking) return; + var touch = event.touches[0]; + if (this.startPos && (this.startPos - touch.pageX > this.threshold)) { + this.menu.show(); + this.closeMenu = false; + } + }; + bb.screen.overlay.ontouchend = function() { + if (this.closeMenu) { + this.menu.hide(); + } + }; + bb.screen.overlay.ontouchstart = function(event) { + this.closeMenu = true; + if (!this.menu.peeking) return; + + var touch = event.touches[0]; + this.startPos = touch.pageX; + event.preventDefault(); + }; + } + menu.overlay = bb.screen.overlay; + // Create the menu header + header = document.createElement('div'); + header.setAttribute('class','bb-bb10-context-menu-item-'+res+' bb-bb10-context-menu-header-'+bb.actionBar.color); + menu.header = header; + menu.appendChild(header); + + // Create our title container + title.setAttribute('class','bb-bb10-context-menu-header-title-'+res+' bb-bb10-context-menu-header-title-'+bb.actionBar.color); + menu.topTitle = title; + header.appendChild(title); + + // Create our description container + description.setAttribute('class','bb-bb10-context-menu-header-description-'+res); + menu.description = description; + header.appendChild(description); + + // Set our first left position + menu.style.left = bb.contextMenu.getLeft(); + + // Display the menu + menu.show = function(data){ + if (data) { + if (data.title) { + this.topTitle.innerHTML = data.title; + } + if (data.description) { + this.description.innerHTML = data.description; + } + this.selected = data; + } + this.peeking = false; + this.overlay.style.display = 'inline'; + this.style['-webkit-transition'] = 'all 0.3s ease-in-out'; + this.style['-webkit-transform'] = 'translate(-' + bb.contextMenu.getWidth() + ', 0)'; + this.addEventListener("touchstart", this.touchHandler, false); + // Remove the header click handling while peeking + this.header.addEventListener("click", this.hide, false); + }; + menu.show = menu.show.bind(menu); + // Hide the menu + menu.hide = function(){ + this.overlay.style.display = 'none'; + this.removeEventListener("touchstart", this.touchHandler, false); + this.style['-webkit-transition'] = 'all 0.5s ease-in-out'; + this.style['-webkit-transform'] = 'translate(' + bb.contextMenu.getWidth() + ', 0px)'; + if (!this.peeking) { + // Remove the header click handling + this.header.removeEventListener("click", this.hide, false); + } + this.peeking = false; + }; + menu.hide = menu.hide.bind(menu); + // Peek the menu + menu.peek = function(data){ + if (data) { + if (data.title) { + this.topTitle.innerHTML = data.title; + } + if (data.description) { + this.description.innerHTML = data.description; + } + this.selected = data; + } + this.peeking = true; + this.overlay.style.display = 'inline'; + this.style['-webkit-transition'] = 'all 0.3s ease-in-out'; + this.style['-webkit-transform'] = 'translate(-' + bb.contextMenu.getPeekWidth() + ', 0)'; + this.addEventListener("touchstart", this.touchHandler, false); + // Remove the header click handling while peeking + this.header.removeEventListener("click", this.hide, false); + }; + menu.peek = menu.peek.bind(menu); + + // Trap the events + menu.touchHandler = function(event) { + if (this.peeking) { + if (event.target == this) { + event.preventDefault(); + event.stopPropagation(); + } else if (event.target.parentNode == this && event.target != this.header) { + event.preventDefault(); + event.stopPropagation(); + } + } else { + if (event.target == this) { + this.hide(); + } + } + }; + menu.touchHandler = menu.touchHandler.bind(menu); + + // Calculate the header bottom margin to center the items in the list + menu.setHeaderHeight = function() { + var windowHeight, + itemHeight, + margin; + if (bb.device.isPlayBook) { + itemHeight = 53; + if (window.orientation == 0 || window.orientation == 180) { + windowHeight = 600; + } else if (window.orientation == -90 || window.orientation == 90) { + windowHeight = 1024; + } + } else { + itemHeight = 111; + if (window.orientation == 0 || window.orientation == 180) { + windowHeight = 1280; + } else if (window.orientation == -90 || window.orientation == 90) { + windowHeight = 768; + } + } + margin = Math.floor(windowHeight/2) - Math.floor((this.actions.length * itemHeight)/2); + this.header.style['margin-bottom'] = margin + 'px'; + }; + menu.setHeaderHeight = menu.setHeaderHeight.bind(menu); + + + // Make sure we move when the orientation of the device changes + menu.orientationChanged = function(event) { + // Orientation is backwards between playbook and BB10 smartphones + if (bb.device.isPlayBook) { + if (window.orientation == 0 || window.orientation == 180) { + this.style.left = '1027px'; + } else if (window.orientation == -90 || window.orientation == 90) { + this.style.left = '603px'; + } + } else { + if (window.orientation == 0 || window.orientation == 180) { + this.style.left = '771px'; + } else if (window.orientation == -90 || window.orientation == 90) { + this.style.left = '1283px'; + } + } + }; + menu.orientationChanged = menu.orientationChanged.bind(menu); + window.addEventListener('orientationchange', menu.orientationChanged,false); + + // Create our add item function + menu.add = function(action) { + var normal, + highlight, + caption = action.innerHTML; + + // set our styling + normal = 'bb-bb10-context-menu-item-'+this.res+' bb-bb10-context-menu-item-'+this.res+'-' + bb.actionBar.color; + highlight = normal + ' bb-bb10-context-menu-item-hover-'+this.res; + this.appendChild(action); + this.actions.push(action); + action.normal = normal; + action.highlight = highlight; + // Set our inner information + action.innerHTML = ''; + var inner = document.createElement('div'), + img = document.createElement('img'); + img.setAttribute('src', action.getAttribute('data-bb-img')); + img.setAttribute('class','bb-bb10-context-menu-item-image-'+this.res); + action.appendChild(img); + inner.setAttribute('class','bb-bb10-context-menu-item-inner-'+this.res); + action.appendChild(inner); + inner.innerHTML = caption; + + action.setAttribute('class',normal); + action.ontouchstart = function () { + this.setAttribute('class',this.highlight); + this.setAttribute('style','border-left-color:'+ bb.options.bb10HighlightColor); + } + action.ontouchend = function () { + this.setAttribute('class',this.normal); + this.setAttribute('style',''); + } + action.addEventListener("click", this.hide, false); + }; + menu.add = menu.add.bind(menu); + + return menu; + }, + + // Calculate the proper width of the context menu + getWidth : function() { + if (bb.device.isPlayBook) { + return '300px'; + } else { + return '563px'; + } + }, + + // Calculate the proper width of the context menu when peeking + getPeekWidth : function() { + if (bb.device.isPlayBook) { + return '55px'; + } else { + return '121px'; + } + }, + + // Calculate the proper left of the context menu + getLeft : function() { + return window.innerWidth + 3 + 'px'; + } +}; diff --git a/src/plugins/dropdown.js b/src/plugins/dropdown.js index a315b914..9cad58a2 100644 --- a/src/plugins/dropdown.js +++ b/src/plugins/dropdown.js @@ -1,9 +1,288 @@ bb.dropdown = { // Apply our transforms to all dropdowns passed in apply: function(elements) { - if (bb.device.isBB5()) { + if (bb.device.isBB5) { - } else { + } else if (bb.device.isBB10) { + var res; + if (bb.device.isPlayBook) { + res = 'lowres'; + } else { + res = 'hires'; + } + var options, + option, + caption, + img, + i,j, + innerElement, + select, + innerContainer, + buttonOuter, + dropdown, + labelElement, + captionElement, + itemsElement, + item, + normal = 'bb-bb10-dropdown bb-bb10-dropdown-'+res+' bb-bb10-dropdown-' + bb.screen.controlColor + ' bb-bb10-dropdown-'+res, + highlight = 'bb-bb10-dropdown bb-bb10-dropdown-'+res+' bb10-button-highlight bb-bb10-dropdown-'+res, //********************************* TODO: currently using Button highlight ******************** + outerContainerStyle = 'bb-bb10-dropdown-container-'+res+' bb-bb10-dropdown-container-' + bb.screen.controlColor + ' bb-bb10-dropdown-container-'+res, + innerContainerStyle = 'bb-bb10-dropdown-container-inner-'+res+' bb-bb10-dropdown-container-inner-'+bb.screen.controlColor, + innerButtonStyle = 'bb-bb10-dropdown-inner-'+res+' bb-bb10-dropdown-inner-'+bb.screen.controlColor; + + for (i = 0; i < elements.length; i++) { + select = elements[i] + caption = ''; + options = select.getElementsByTagName('option') + // Make the existing