From 908b12ef200fe1e254726fa832ed5194005939a4 Mon Sep 17 00:00:00 2001 From: William Petit Date: Thu, 20 Aug 2015 18:41:51 +0200 Subject: [PATCH] Initial commit --- .editorconfig | 7 + .gitignore | 9 + Gruntfile.js | 115 ++++++++ LICENSE | 674 +++++++++++++++++++++++++++++++++++++++++++ README.md | 28 ++ css/style.css | 83 ++++++ default-profile.json | 9 + img/background.png | Bin 0 -> 99200 bytes index.html | 34 +++ js/app.js | 170 +++++++++++ package.json | 27 ++ 11 files changed, 1156 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 Gruntfile.js create mode 100644 LICENSE create mode 100644 README.md create mode 100644 css/style.css create mode 100644 default-profile.json create mode 100644 img/background.png create mode 100644 index.html create mode 100644 js/app.js create mode 100644 package.json diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..81d2021 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0c88cd5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +node_modules +bower_components +node-webkit +libudev.so.0 +*.log +dist +build +nwjs +my-profile.json diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..ff225f2 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,115 @@ +/* jshint node: true */ +var _ = require('lodash'); +var path = require('path'); + +module.exports = function(grunt) { + + var NW_VERSION = '0.12.2'; + var BUILD_DIR = 'build'; + var BUILD_TARGETS = { + linux_ia32: true, + linux_x64: true, + win: true, + osx: false + }; + var PKG = grunt.file.readJSON('package.json'); + var PKG_OVERWRITE = { + window: { + toolbar: false + } + }; + + // Create build tasks options + var buildOptions = _.merge({ + runtimeVersion: NW_VERSION + }, BUILD_TARGETS); + + // Define copy:build tasks files + var appFiles = []; + + _.forEach(BUILD_TARGETS, function(isEnabled, target) { + + if(!isEnabled) return; + + var arch = 'ia32'; + var platform = target; + if(platform.indexOf('linux') !== -1) { + arch = platform.split('_')[1]; + platform = 'linux'; + } + var dirName = PKG.name + '-' + PKG.version + '-' + platform + '-' + arch; + var destPath = path.join(BUILD_DIR, dirName + '/'); + + // Retreive NPM dependencies + var npmDeps = _.keys(PKG.dependencies).map(function(moduleName) { + return path.join('node_modules', moduleName, '**'); + }); + appFiles.push({ src: npmDeps, dest: destPath }); + + // Add main files, licence, & config + appFiles.push({ + src: [ + 'index.html', + 'package.json', + 'css/**', + 'js/**', + 'img/**' + ], + dest: destPath + }); + + }); + + // Configure tasks + grunt.initConfig({ + + pkg: PKG, + + download: { + options: { + runtimeVersion: NW_VERSION + } + }, + + run: { + options: { + nwArgs: ['.'].concat(process.argv.slice(3)), + runtimeVersion: NW_VERSION + } + }, + + build: { + options: buildOptions + }, + + clean: { + build: [BUILD_DIR] + }, + + copy: { + build: { + files: appFiles, + options: { + noProcess: ['**','!package.json'], + process: function() { + var pkg = _.merge(PKG, PKG_OVERWRITE); + return JSON.stringify(pkg, null, 2); + } + } + } + } + + }); + + grunt.registerTask('kaki:run', ['download', 'run']); + grunt.registerTask( + 'kaki:build', + ['download', 'build', 'copy:build'] + ); + grunt.registerTask('default', ['kaki:run']); + + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-nw'); + +}; diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8102956 --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# Kaki + +Application loader + +## Getting started + +``` +git clone +cd kaki +git checkout develop +npm install +npm start +``` + +### Passing options in development + +``` +npm start -- [options...] +``` + +Exemple: +``` +npm start -- --profile=my-profile.json +``` + +## How to contribute + +This project uses [Git Flow](http://nvie.com/posts/a-successful-git-branching-model/). diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..b32143b --- /dev/null +++ b/css/style.css @@ -0,0 +1,83 @@ +* { + box-sizing: border-box; +} + +html, body { + padding: 1Opx 10px; + margin: 0; + font-family: 'Droid Sans', 'Ubuntu Sans', sans-serif; + background: url('../img/background.png') no-repeat; + background-size: contain; + background-position: center; + background-color: rgb(34, 107, 160); +} + +body, ul.apps-list { + width: 100%; + height: 100%; +} + +ul.apps-list { + display: block; + margin: 0; + padding: 0; + display: flex; + flex-direction: row; + list-style: none; + flex-wrap: wrap; + justify-content: center; + align-items: center; + align-content: center; +} + +li.app-item { + background-color: red; + margin: 5px; + border-radius: 5px; + background-color: rgba(0,0,0,0.4); + box-shadow: 5px 5px 30px -2px rgba(0,0,0,0.5); + cursor: pointer; + padding: 10px 5px; + text-align: center; + margin-top: 5px; + transition: 150ms linear; + position: relative; + overflow: hidden; +} + +li.app-item::after { + content: ' '; + display: block; + border-radius: 50%; + background-color: rgba(255, 255, 255, 0.1); + width: 150%; + height: 125%; + position: absolute; + left: -50%; + top: -75%; +} + +li.app-item:hover { + background-color: rgba(0,0,0,0.6); +} + +li.app-item > .app-icon { + width: 70%; + height: auto; +} + +li.app-item > .app-label { + display: block; + text-align: center; + color: white; +} + +li.app-item.loading { + -webkit-animation: 1s pulse infinite; +} + +@-webkit-keyframes pulse { + 0% { transform: scale(1); } + 50% { transform: scale(1.1); } + 100% { transform: scale(1); } +} diff --git a/default-profile.json b/default-profile.json new file mode 100644 index 0000000..55345c0 --- /dev/null +++ b/default-profile.json @@ -0,0 +1,9 @@ +{ + "items": [ + { + "label": "Chromium Browser", + "exec": "/usr/bin/chromium-browser", + "icon": "/usr/share/icons/Mint-X/apps/48/chromium-browser.png" + } + ] +} diff --git a/img/background.png b/img/background.png new file mode 100644 index 0000000000000000000000000000000000000000..3178e5ab7fbb9874cf62ec8b9c995ae9915ad9cf GIT binary patch literal 99200 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 QzEK6&LS8GpdgtN)0~W`jK>z>% literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..a867ea8 --- /dev/null +++ b/index.html @@ -0,0 +1,34 @@ + + + Kaki Launcher + + + +

+ + + + + + + + diff --git a/js/app.js b/js/app.js new file mode 100644 index 0000000..70125db --- /dev/null +++ b/js/app.js @@ -0,0 +1,170 @@ +(function(Kaki, window) { + + "use strict"; + + var path = require('path'); + var fs = require('fs'); + var Handlebars = require('handlebars'); + var cp = require("child_process"); + var gui = require('nw.gui'); + var minimist = require('minimist'); + + // Templates + var itemsListTpl = Handlebars.compile(select('#items-list-tpl').innerHTML); + + /** + * Start the app + * + * @param rootEl The application root element selector + * @return Kaki + */ + Kaki.start = function(rootEl) { + + Kaki._opts = minimist(gui.App.argv); + Kaki._rootEl = select(rootEl); + Kaki._initListeners(); + + var profilePath = Kaki._opts.profile || './default-profile.json'; + + return Kaki.loadProfile(profilePath) + .then(function() { + return Kaki; + }) + ; + + }; + + /** + * Load a profile file and render the application + * + * @param profilePath The path of the profile file + * @return Promise + */ + Kaki.loadProfile = function(profilePath) { + return Kaki._loadJSONFile(profilePath) + .then(function(profile) { + Kaki._profile = profile; + Kaki.render(); + return profile; + }) + ; + }; + + /** + * Update the application view + * + * @return Kaki + */ + Kaki.render = function() { + var rootEl = Kaki._rootEl; + var profile = Kaki._profile; + rootEl.innerHTML = itemsListTpl(profile); + }; + + + /** + * Initialize DOM event listeners + * @private + */ + Kaki._initListeners = function() { + var rootEl = Kaki._rootEl; + rootEl.addEventListener('click', Kaki._onItemClick); + }; + + /** + * App item click handler + * @private + */ + Kaki._onItemClick = function(evt) { + + var appItemEl = evt.srcElement.matches( '.app-item') ? evt.srcElement : + getClosestAncestor(evt.srcElement, '.app-item') + ; + + if( !appItemEl ) return; + + var execPath = appItemEl.dataset.exec; + + console.info('Launching application "'+execPath+'"...'); + + if(execPath) { + appItemEl.classList.add('loading'); + cp.exec(execPath, function(err) { + appItemEl.classList.remove('loading'); + if(err) return console.error(err.stack || err); + console.info('Application closed "'+execPath+'".'); + }); + } + + }; + + /** + * Load a JSON file + * + * @private + * @param filePath The path of the json file + * @return Promise + */ + Kaki._loadJSONFile = function(filePath) { + return new Promise(function(resolve, reject) { + fs.readFile(filePath, 'utf8', function(err, fileContent) { + if(err) return reject(err); + try { + var json = JSON.parse(fileContent); + return resolve(json); + } catch(err) { + return reject(err); + } + }); + }); + }; + + // DOM manipulation helpers + + /** + * Select an element in the DOM by its CSS selector + * + * @private + * @param selector The CSS selector + * @return The selected element or null + */ + function select(selector) { + return window.document.querySelector(selector); + } + + /** + * Select all elements in the DOM with a CSS selector + * + * @private + * @param selector The CSS selector + * @return An array of the selected elements (if any) + */ + function selectAll(selector) { + return window.document.querySelectorAll(selector); + } + + /** + * Find the closest ancestor matching the CSS selector + * + * @private + * @param selector The CSS selector + * @return An array of the selected elements (if any) + */ + function getClosestAncestor(el, selector) { + + var parent = el.parentElement; + + if(parent) { + if(parent.matches(selector)) { + return parent; + } else { + return getClosestAncestor(parent, selector); + } + } + + return false; + + } + + +}(window.Kaki = window.Kaki || {}, window)); diff --git a/package.json b/package.json new file mode 100644 index 0000000..a70ca3c --- /dev/null +++ b/package.json @@ -0,0 +1,27 @@ +{ + "name": "kaki", + "version": "0.0.0", + "private": "true", + "main": "index.html", + "devDependencies": { + "grunt": "^0.4.5", + "grunt-cli": "^0.1.13", + "grunt-contrib-clean": "^0.6.0", + "grunt-contrib-copy": "^0.7.0", + "grunt-nw": "git+https://github.com/snap-project/grunt-nw#develop", + "lodash": "^3.0.1" + }, + "scripts": { + "start": "./node_modules/.bin/grunt kaki:run", + "build": "./node_modules/.bin/grunt kaki:build" + }, + "chromium-args": "--ignore-certificate-errors", + "window": { + "toolbar": true, + "kiosk": false + }, + "dependencies": { + "handlebars": "^3.0.3", + "minimist": "^1.1.3" + } +}