├── .gitignore ├── CODE-OF-CONDUCT.md ├── LICENSE.md ├── README.md ├── READMEs ├── Development.md ├── DownloadHistory.md └── ImportHistory.md ├── ROADMAP.md ├── TUTORIAL.md ├── demo.gif ├── package.json └── src ├── assets ├── 128.png ├── 16.png ├── 18.png ├── 19.png ├── 38.png ├── 48.png ├── FAQ.html ├── about.html ├── analyse_urls.html ├── assets │ ├── css │ │ ├── animate.min.css │ │ ├── bootstrap.min.css │ │ ├── demo.css │ │ ├── light-bootstrap-dashboard.css │ │ ├── notie.css │ │ ├── pe-icon-7-stroke.css │ │ ├── reset.css │ │ └── style.css │ ├── fonts │ │ ├── Pe-icon-7-stroke.eot │ │ ├── Pe-icon-7-stroke.svg │ │ ├── Pe-icon-7-stroke.ttf │ │ └── Pe-icon-7-stroke.woff │ ├── img │ │ ├── background_header.png │ │ ├── background_sidebar.png │ │ ├── dropdown.png │ │ ├── favicon.ico │ │ ├── loading-bubbles.svg │ │ ├── logo_dashboard.png │ │ ├── mockup_results.png │ │ ├── patreon_logo_black.png │ │ └── patreon_logo_white.png │ ├── js │ │ ├── bootstrap-checkbox-radio-switch.js │ │ ├── bootstrap-notify.js │ │ ├── bootstrap-select.js │ │ ├── bootstrap.min.js │ │ ├── chartist.min.js │ │ ├── demo.js │ │ ├── jquery-1.10.2.js │ │ ├── jquery-2.1.1.js │ │ ├── jquery.mobile.custom.min.js │ │ ├── light-bootstrap-dashboard.js │ │ ├── main.js │ │ ├── modernizr.js │ │ └── tether.min.js │ └── sass │ │ ├── lbd │ │ ├── _alerts.scss │ │ ├── _buttons.scss │ │ ├── _cards.scss │ │ ├── _chartist.scss │ │ ├── _checkbox-radio-switch.scss │ │ ├── _dropdown.scss │ │ ├── _footers.scss │ │ ├── _inputs.scss │ │ ├── _misc.scss │ │ ├── _mixins.scss │ │ ├── _navbars.scss │ │ ├── _responsive.scss │ │ ├── _sidebar-and-main-panel.scss │ │ ├── _tables.scss │ │ ├── _typography.scss │ │ ├── _variables.scss │ │ └── mixins │ │ │ ├── _buttons.scss │ │ │ ├── _cards.scss │ │ │ ├── _chartist.scss │ │ │ ├── _icons.scss │ │ │ ├── _inputs.scss │ │ │ ├── _labels.scss │ │ │ ├── _morphing-buttons.scss │ │ │ ├── _navbars.scss │ │ │ ├── _social-buttons.scss │ │ │ ├── _tabs.scss │ │ │ ├── _transparency.scss │ │ │ └── _vendor-prefixes.scss │ │ └── light-bootstrap-dashboard.scss ├── contribute.html ├── download_history.html ├── feedback.html ├── howto.html ├── popup.html ├── preferences.html ├── semantic.min.css └── style.css ├── js-browserify ├── download_urls.js └── html.js ├── js ├── background.js ├── compatibility.js ├── content.js ├── get_tab.js ├── import_bookmarks.js ├── import_history.js ├── lib │ ├── chrono.min.js │ ├── notie.min.js │ ├── pdf2text_bundle.js │ ├── readability.js │ ├── semantic.min.js │ ├── stopwords_res.js │ └── tether.min.js ├── pdf.js ├── pdf.worker.js ├── pdftotext.js ├── popup.js ├── preferences.js ├── queryparser.js ├── relevanttext.js └── textprocessing.js └── manifest.json /.gitignore: -------------------------------------------------------------------------------- 1 | *zip 2 | build 3 | node_modules -------------------------------------------------------------------------------- /CODE-OF-CONDUCT.md: -------------------------------------------------------------------------------- 1 | 2 | # Code of Conduct 3 | 4 | ## 1. Purpose 5 | A primary goal of the WorldBrain Community is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof). 6 | 7 | This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior. 8 | 9 | We invite all those who participate in the WorldBrain Project to help us create safe and positive experiences for everyone. 10 | 11 | ## 2. Open [Source/Culture/Tech] Citizenship 12 | A supplemental goal of this Code of Conduct is to increase open [source/culture/tech] citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community. 13 | 14 | Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. 15 | 16 | If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we would like to know. hope you endorse it. 17 | 18 | ## 3. Expected Behavior 19 | The following behaviors are expected and requested of all community members: 20 | 21 | * Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community. 22 | * Exercise consideration and respect in your speech and actions. 23 | * **Attempt collaboration before conflict.** 24 | * Refrain from demeaning, discriminatory, or harassing behavior and speech. 25 | * Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential. 26 | * Remember that the behaviour of our members does not only have an impact on our community, but also on how it is perceived in the public. 27 | **Conflict resolution and constructive debate is one of WorldBrain's core values.** We have to nurture them as a community in order to ensure a trustworthy image in the long run. 28 | 29 | ## 4. Unacceptable Behavior 30 | The following behaviors are considered harassment and are unacceptable within our community: 31 | 32 | * Violence, threats of violence or violent language directed against another person. 33 | * Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. 34 | * Posting or displaying sexually explicit or violent material. 35 | * Posting or threatening to post other people’s personally identifying information ("doxing"). 36 | * Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability. 37 | * Inappropriate photography or recording. 38 | * Inappropriate physical contact. You should have someone’s consent before touching them. 39 | * Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances. 40 | * Deliberate intimidation, stalking or following (online or in person). 41 | * Advocating for, or encouraging, any of the above behavior. 42 | * Sustained disruption of community events, including talks and presentations. 43 | 44 | ## 5. Consequences of Unacceptable Behavior 45 | Unacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated. 46 | 47 | Anyone asked to stop unacceptable behavior is expected to comply immediately. 48 | 49 | If a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event). 50 | 51 | ## 6. Reporting Guidelines 52 | If you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible by emailing info@worldbrain.io. 53 | 54 | Additionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress. 55 | 56 | ## 7. Addressing Grievances 57 | If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify the WorldBrain team with a concise description of your grievance. 58 | 59 | ## 8. Scope 60 | We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues–online and in-person–as well as in all one-on-one communications pertaining to community business. 61 | 62 | This code of conduct and its related procedures also applies to unacceptable behavior occuring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members. 63 | 64 | ## 9 . Contact info 65 | To report or discuss a suspected violation of this code of conduct by a community member, you may contact any of the team directly and in confidence, or the team-lead [Oliver Sauter](https://github.com/oliversauter). 66 | 67 | If you want to change that and contribute, visit our [Readme file](https://github.com/WorldBrain/Webmarks/blob/master/README.md). 68 | 69 | 70 | ## 10. License and attribution 71 | This Code of Conduct is distributed under a Creative Commons Attribution-ShareAlike license. 72 | 73 | It is derived from the Citizen Code of Conduct at http://citizencodeofconduct.org/ and from the Slidewinder Code of Conduct at http://www.slidewinder.io/docs/01_code_of_conduct.html. 74 | 75 | Portions of text dervied from the Django Code of Conduct and the Geek Feminism Anti-Harassment Policy. 76 | 77 | Created at 07.02.2016 v1.0 78 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## IMPORTANT 4 | 5 | This is a legacy repo. We rebuilt this tool from the ground up and you can download it [on our website](https://worldbrain.io). 6 | The new repository, you find [here](https://github.com/WorldBrain/Memex/). 7 | 8 | # WorldBrain's (Re)search-Engine 9 | **Welcome to the WorldBrain project. We work on the goal of an increased (scientific) literacy in our global society through a better overall information quality on the internet.** 10 | 11 | Doing so by developing open-source search tools for professional web-researchers like science communicators, (STEM-) students, journalists, librarians and online debaters to effortlessly find, rate and share qualitative and trustworthy web content/notes with their friends, followers and the public. ([Watch the 3.5 min Vision Video](http://worldbrain.io/vision)) 12 | 13 | ### Our first tool is the *(Re)search-Engine*, a photographic memory for your web research. 14 | 15 | It's an open-source chrome extension to **full-text search all the pages you visited and bookmarked**, and later also all the apps you use to organise your knowledge (i.e. Evernote, Pocket, Google Drive, Asana, Mendeley) 16 | ([Watch 2 min Intro Video](http://worldbrain.io/intro)) ([DOWNLOAD HERE](http://worldbrain.io/download)) 17 | 18 | ## Table of Content 19 | 20 | 1. [How to use the extension](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#how-to-use-the-extension) 21 | 1. [Status & Development Roadmap](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#status--development-roadmap) 22 | 2. [How to get involved](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#how-to-get-involved) 23 | 1. [FAQs](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#faq) 24 | 3. [Installation (as user & developer)](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#installation) 25 | 7. [How to get in touch with us](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#how-to-get-in-touch-with-us) 26 | 4. [Acknowledgements](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#acknowledgements) 27 | 8. [Licence](https://github.com/WorldBrain/Research-Engine/blob/master/README.md#license) 28 | 29 | 30 | ## How to use the extension 31 | 32 | ([Download it here](http://worldbrain.io/download)), then type in `w`+ `space`/`tab`+ `your keywords`into the address bar. 33 | 34 | For more detailed description, you can watch our [Demo Video (2min)](http://worldbrain.io/tutorial) **or** read the text-based [tutorial](https://github.com/WorldBrain/Research-Engine/blob/master/TUTORIAL.md). 35 | 36 | **Important:** All your data is stored and processed locally 37 | 38 | ![](http://g.recordit.co/qgCwluEMpa.gif) 39 | 40 | 41 | ## Status & Development Roadmap 42 | 43 | [Here](https://github.com/WorldBrain/Research-Engine/blob/master/ROADMAP.md) you find the long term roadmap. 44 | 45 | ### Current Stage 46 | 47 | Right now, the chrome extension lets you full-text search all the web pages and PDFs you visited and bookmarked. 48 | 49 | #### Full Feature Set 50 | 51 | - full-text search history & bookmarks 52 | - filter by time and minuswords 53 | - blacklisting urls, domains, regex 54 | - supports PDFs you visited online 55 | - import existing history and bookmarks 56 | 57 | ### Under Development 58 | We are currently working on replacing the DB with PouchDB and the default search implementation with [PouchDB Quick Search](https://github.com/nolanlawson/pouchdb-quick-search/) 59 | 60 | View all ["UNDER DEVELOPMENT" issues](https://github.com/WorldBrain/Research-Engine/issues?q=is%3Aissue+is%3Aopen+label%3A%22UNDER+DEVELOPMENT%22) 61 | 62 | ### Up next 63 | #### Web-view for results and more filter options. 64 | Currently the results can only be shown in the drop down of the adress bar and filters only applied by entering queries. 65 | 66 | To change that, we are adding a web-based results and filter view (much like a google results page), where all results can be shown and a variety of filters applied. 67 | 68 | More info in our [projects section](https://github.com/WorldBrain/Research-Engine/projects) 69 | 70 | ## How to get involved 71 | 72 | - If you are **JAVASCRIPT DEVELOPER** you can check out [our current projects](https://github.com/WorldBrain/WebMemex/projects) and [open tasks](https://github.com/WorldBrain/WebMemex/issues) 73 | - Wanna help with **MARKETING**? Contact Oliver via email: oli@worldbrain.io 74 | - Wanna help us with **MONEYYYZ**? Wohoo! You can do so by [supporting us on Patreon](http://patreon.com/WorldBrain) 75 | 76 | ## FAQ 77 | You can reach our FAQ here: [reddit.com*/*r*/*WorldBrain](http://reddit.com/r/WorldBrain/) 78 | 79 | ## Installation 80 | 81 | ### AS A USER 82 | [Install from the Chrome store here](https://chrome.google.com/webstore/detail/worldbrain-the-research-e/abkfbakhjpmblaafnpgjppbmioombali/related). (If you don't feel comfortable with that, look at [Transparent Installation](#transparent-installation)). 83 | #### Transparent Installation 84 | If you don't feel comfortable installing a Chrome extension that can read and modify all data on the websites you visit from the webstore (we wouldn't either!), you can clone this repository on your local machine, read through our code to verify that it is not malicious, and then install it as an unpacked local extension through the menu in `chrome://extensions/`. **But this way you also won't receive any updates**. 85 | 86 | Wanna know if the extension installed on your computer has the same code as here on GitHub? [See here](https://www.reddit.com/r/WorldBrain/comments/5ok2h8/how_do_i_know_that_the_code_on_my_computer_is_not/). 87 | 88 | ### AS A DEVELOPER 89 | 90 | Fork the project, then... 91 | 92 | #### Prerequisites 93 | - Install ```browserify``` and ```watchify``` with ```npm install -g browserify``` 94 | - Run ```npm install``` to install dependencies 95 | 96 | #### While Developing 97 | - ```npm run watch``` 98 | 99 | #### Build 100 | - ```npm run build``` 101 | 102 | #### Activate & Test the plugin on your browser 103 | 104 | ###### In Chrome 105 | - go to ```chrome://extensions/``` 106 | - Activate *Developer Mode* (top right) 107 | - Click *load unpacked extension* (top left) 108 | - Select the ```/build``` folder from the project 109 | 110 | #### Problems Building the Extension in Windows? 111 | 112 | Check [this StackOverflow thread](http://stackoverflow.com/questions/39727920/cant-use-mkdir-in-npm-script-from-windows) 113 | 114 | 115 | ## How to get in touch with us 116 | 117 | 1. via Email: [info@worldbrain.io](mailto:info@worldbrain.io) 118 | 2. Enter our Slack Channel: [https://join-worldbrain.herokuapp.com/](https://join-worldbrain.herokuapp.com/) 119 | 120 | 121 | ## Acknowledgements 122 | 123 | This tool is originally released under the name "[Falcon](https://github.com/lengstrom/falcon)" and will be further developed to fit the needs of the scientific research community. The original programmers are [@andrewilyas](https://github.com/andrewilyas) and [@lengstrom](https://github.com/lengstrom). 124 | 125 | 126 | ## License 127 | 128 | Currently the (Re)search-Engine is released under GPL-3, as this has been the license of *Falcon*. 129 | We aim to release it under a more liberal license (CC0, MIT, BSD-2/3) as soon as we have replaced all the code from the original Falcon tool. 130 | 131 | Our goal is to provide a set of reusable libraries, so that this client can be adapted to as many work-flows as possible. 132 | -------------------------------------------------------------------------------- /READMEs/Development.md: -------------------------------------------------------------------------------- 1 | # How to work on the plugin 2 | tl;dr; build the project and load the plugin 3 | 4 | ## Prerequisites 5 | - Install ```browserify``` and ```watchify``` with ```npm install -g browserify``` 6 | - Run ```npm install``` to install dependencies 7 | 8 | ## Development 9 | - ```npm run watch``` 10 | 11 | ## Build 12 | - ```npm run build``` 13 | 14 | ## Activate the plugin on your browser 15 | 16 | ### Chrome 17 | - go to ```chrome://extensions/``` 18 | - Activate *Developer Mode* (top right) 19 | - Click *load unpacked extension* (top left) 20 | - Select the build folder from the project -------------------------------------------------------------------------------- /READMEs/DownloadHistory.md: -------------------------------------------------------------------------------- 1 | Goal 2 | --- 3 | Downloading History URLs for processing. 4 | 5 | Input 6 | --- 7 | No particular input. History items already stored in ```chrome.storage.local``` by ```importHistory``` are used. 8 | 9 | Output 10 | --- 11 | Creates a data object and sends it to ```handleMessage``` for processing. The format is shown below: 12 | ``` 13 | { 14 | msg: 'saveHistory', 15 | text: 'Body/Article HTML of the URL', 16 | time: 'Time of visit of the URL', 17 | url: 'URL', 18 | title: 'Title of the URL' 19 | } 20 | ``` 21 | 22 | Technical Implementation 23 | --- 24 | Retrieve the History Items in JSON format using [```chrome.storage.local```](https://developer.chrome.com/extensions/storage) API. 25 | Use *[Readability](https://github.com/mozilla/readability)* to obtain HTML for a URL. 26 | -------------------------------------------------------------------------------- /READMEs/ImportHistory.md: -------------------------------------------------------------------------------- 1 | Goal 2 | --- 3 | Importing a user's existing Browser History using the Chrome's History API 4 | 5 | Input 6 | --- 7 | No particular input. Function is called on when user prompts from the frontend. 8 | 9 | Output 10 | --- 11 | Saves the History Items in the following format and returns the number of History URLs stored. 12 | ``` 13 | { 14 | url: '', 15 | lastVisitTime: '' 16 | } 17 | ``` 18 | 19 | Technical Implementation 20 | --- 21 | Query the history using [```chrome.history```](https://developer.chrome.com/extensions/history) API.
22 | Store the History Items in JSON format using [```chrome.storage.local```](https://developer.chrome.com/extensions/storage) API. 23 | -------------------------------------------------------------------------------- /ROADMAP.md: -------------------------------------------------------------------------------- 1 | # Development Roadmap 2 | 3 | You see the related projects in [the project list](https://github.com/WorldBrain/Research-Engine/projects). 4 | 5 | 6 | ### 1. PouchDB Transition 7 | 8 | The currently the search is built on top of the browser's local storage, which is limited in the ability extend the data and to improve the search. 9 | 10 | ### 2. Restructuring of Code + Bugfixes 11 | 12 | The current code is quite a mess, provides no modularity and is not contributor friendly. 13 | It is a patchwork from the Falcon code and has some bugs we need to get rid of. 14 | Can start as soon as the PouchDB transition is done. 15 | 16 | ### 3. (Overhaul) Web Interface + Add Web results / Change to React 17 | 18 | We want to change the front-end framework to React and want to add a web interface to display the results and filter options. 19 | 20 | ### 4. Port to Safari / Firefox 21 | 22 | With the web interface running, the search can also be done with Firefox and Safari. 23 | With the current method of searching via the address bar, it is unfortunately not possible. 24 | 25 | ### 4. Quick Blacklist function 26 | 27 | Right now you have to go to the settings in order to blacklist a page. 28 | We need a quick version via the popup. 29 | 30 | ### 5. Improvement of search ranking 31 | 32 | The search ranking sometimes is not very precise - we have to improve on that as well as the parsers for pages. 33 | -------------------------------------------------------------------------------- /TUTORIAL.md: -------------------------------------------------------------------------------- 1 | # Full Tutorial for the (Re)search-Engine 2 | 3 | Chrome extension for full-text browsing history & bookmarks search. 4 | 5 | **To activate**, press `w`, then `space` or `tab`, in the omnibar to start searching your previously visited websites! 6 | Every time you visit a website in Chrome, WorldBrain indexes all the text on the page so that the site can be easily found later. Then, for example, if you type `w mugwort`, WorldBrain will show the websites you visited containing the text "mugwort"! 7 | 8 | You can watch a short 2 minute video here: [worldbrain.io*/*tutorial](http://worldbrain.io/tutorial) 9 | 10 | ## More options: 11 | - Import existing history and bookmarks via the dashboard. (Reachable via the small brain icon in the top-right corner of the browser) 12 | - Use `before:date` and `after:date` to search your history in a certain time range 13 | - You can use natural language along with quotes to specify dates as well, e.g. `before:"yesterday at 5pm"` 14 | - Use quotations to look for exact matches of strings containing whitespace 15 | - Only documents containing all words will be returned 16 | 17 | ## Example Queries 18 | 19 | `before: "yesterday at 5pm" after: "three weeks ago" emscripten blog "anish athalye"` 20 | - Searches for websites that you browsed between yesterday at 5pm and 3 weeks ago containing the keywords "emscripten" and "blog" and "anish athalye" 21 | 22 | `-"cat food" just "a dog"` 23 | - Searches for websites you visited containing the keywords "just" and "a dog", and without the phrase "cat food". 24 | 25 | `ethereum medium` 26 | - Searches for websites you visited in the last 2 weeks containing the keywords "ethereum" and "medium" 27 | 28 | `ethereum medium after:11/29/2015 before:3/26/2016` 29 | - Searches for websites you visited between 11/29/2015 and 3/26/2016 containing the keywords "ethereum" and "medium" 30 | 31 | ## Blacklist and Delete Pages 32 | To manage which URLs WorldBrain can index, delete websites from the index, and more, go to the preferences page. 33 | 34 | !["Extension Bar"](https://cloud.githubusercontent.com/assets/7870039/19575579/98d64ea4-970f-11e6-958b-8bdc9fd87baf.png "Extension Bar") 35 | 36 | 37 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/demo.gif -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "research-engine", 3 | "version": "1.0.0", 4 | "description": "Worldbrain.io research engine", 5 | "main": "index.js", 6 | "dependencies": { 7 | "cheerio": "^0.22.0", 8 | "fs": "0.0.1-security", 9 | "lodash": "^4.17.4", 10 | "npm-run-all": "^4.0.0" 11 | }, 12 | "devDependencies": { 13 | "cpx": "^1.5.0", 14 | "watchify": "^3.8.0" 15 | }, 16 | "scripts": { 17 | "build": "npm-run-all build:*", 18 | "watch": "npm-run-all --parallel watch:*", 19 | "build:copy-manifest": "cpx src/manifest.json build", 20 | "watch:copy-manifest": "cpx src/manifest.json build --watch", 21 | "build:copy-js": "cpx 'src/js/**/*.*' build/js", 22 | "watch:copy-js": "cpx 'src/js/**/*.*' build/js --watch", 23 | "build:copy-assets": "cpx 'src/assets/**/*.*' build/assets", 24 | "watch:copy-assets": "cpx 'src/assets/**/*.*' build/assets --watch", 25 | "build:browserify": "mkdir -p ./build/js && browserify src/js-browserify/download_urls.js -o build/js/bundle.js", 26 | "watch:browserify": "mkdir -p ./build/js && watchify src/js-browserify/download_urls.js -o build/js/bundle.js", 27 | "test": "echo \"Error: no test specified\" && exit 1" 28 | }, 29 | "repository": { 30 | "type": "git", 31 | "url": "git+https://github.com/WorldBrain/Research-Engine.git" 32 | }, 33 | "author": "Worldbrain", 34 | "license": "GPL 3", 35 | "bugs": { 36 | "url": "https://github.com/WorldBrain/Research-Engine/issues" 37 | }, 38 | "homepage": "https://github.com/WorldBrain/Research-Engine#readme" 39 | } 40 | -------------------------------------------------------------------------------- /src/assets/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/128.png -------------------------------------------------------------------------------- /src/assets/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/16.png -------------------------------------------------------------------------------- /src/assets/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/18.png -------------------------------------------------------------------------------- /src/assets/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/19.png -------------------------------------------------------------------------------- /src/assets/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/38.png -------------------------------------------------------------------------------- /src/assets/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/48.png -------------------------------------------------------------------------------- /src/assets/assets/css/demo.css: -------------------------------------------------------------------------------- 1 | @media (min-width: 992px){ 2 | .typo-line{ 3 | padding-left: 140px; 4 | margin-bottom: 40px; 5 | position: relative; 6 | } 7 | 8 | .typo-line .category{ 9 | transform: translateY(-50%); 10 | top: 50%; 11 | left: 0px; 12 | position: absolute; 13 | } 14 | } 15 | 16 | .all-icons [class*="pe-"]{ 17 | font-size: 40px; 18 | } 19 | .all-icons input{ 20 | border: 0; 21 | } 22 | .all-icons .font-icon-detail{ 23 | text-align: center; 24 | padding: 45px 0px 30px; 25 | border: 1px solid #e5e5e5; 26 | border-radius: 6px; 27 | margin: 15px 0; 28 | } 29 | .all-icons .font-icon-detail input{ 30 | margin: 25px auto 0; 31 | width: 100%; 32 | text-align: center; 33 | display: block; 34 | color: #aaa; 35 | font-size: 13px; 36 | } 37 | 38 | #map{ 39 | position:relative; 40 | width:100%; 41 | height: calc(100% - 60px); 42 | } 43 | 44 | .places-buttons .btn{ 45 | margin-bottom: 30px 46 | } 47 | .sidebar .nav > li.active-pro{ 48 | position: absolute; 49 | width: 100%; 50 | bottom: 10px; 51 | } 52 | .sidebar .nav > li.active-pro a{ 53 | 54 | } 55 | 56 | .table-upgrade td:nth-child(2), 57 | .table-upgrade td:nth-child(3){ 58 | text-align: center; 59 | } 60 | -------------------------------------------------------------------------------- /src/assets/assets/css/notie.css: -------------------------------------------------------------------------------- 1 | .notie-transition { 2 | -moz-transition: all 0.3s ease; 3 | -webkit-transition: all 0.3s ease; 4 | transition: all 0.3s ease; } 5 | 6 | .notie-background-success { 7 | background-color: #57BF57 !important; } 8 | 9 | .notie-background-warning { 10 | background-color: #D6A14D !important; } 11 | 12 | .notie-background-error { 13 | background-color: #E1715B !important; } 14 | 15 | .notie-background-info { 16 | background-color: #4D82D6 !important; } 17 | 18 | #notie-alert-outer, #notie-confirm-outer, #notie-input-outer, #notie-select-outer, #notie-date-outer { 19 | position: fixed; 20 | top: 0; 21 | left: 0; 22 | z-index: 999999999; 23 | height: auto; 24 | width: 100%; 25 | display: none; 26 | text-align: center; 27 | cursor: pointer; 28 | font-size: 24px; 29 | -o-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); 30 | -ms-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); 31 | -moz-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); 32 | -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); 33 | box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.5); } 34 | @media (max-width: 600px) { 35 | #notie-alert-outer, #notie-confirm-outer, #notie-input-outer, #notie-select-outer, #notie-date-outer { 36 | font-size: 18px; } } 37 | 38 | #notie-alert-inner { 39 | padding: 20px; 40 | display: table-cell; } 41 | 42 | #notie-alert-content { 43 | max-width: 900px; 44 | margin: 0 auto; } 45 | 46 | #notie-alert-text { 47 | color: #FFFFFF; } 48 | 49 | #notie-confirm-outer { 50 | cursor: default; } 51 | 52 | #notie-confirm-inner, #notie-input-inner, #notie-select-inner { 53 | box-sizing: border-box; 54 | width: 100%; 55 | padding: 20px; 56 | display: block; 57 | cursor: default; 58 | background-color: #4D82D6; } 59 | 60 | #notie-confirm-text { 61 | color: #FFFFFF; } 62 | 63 | #notie-confirm-text-yes { 64 | color: #FFFFFF; } 65 | 66 | #notie-confirm-text-no { 67 | color: #FFFFFF; } 68 | 69 | #notie-confirm-yes, #notie-confirm-no, #notie-input-no, #notie-input-yes { 70 | float: left; 71 | height: 50px; 72 | line-height: 50px; 73 | width: 50%; 74 | cursor: pointer; 75 | background-color: #57BF57; } 76 | 77 | #notie-confirm-no, #notie-input-no { 78 | float: right; 79 | background-color: #E1715B; } 80 | 81 | #notie-confirm-background, #notie-input-background, #notie-select-background, #notie-date-background { 82 | position: fixed; 83 | top: 0; 84 | left: 0; 85 | z-index: 999999980; 86 | height: 100%; 87 | width: 100%; 88 | display: none; 89 | background-color: #FFFFFF; 90 | opacity: 0; } 91 | 92 | /* INPUT */ 93 | #notie-input-outer { 94 | cursor: default; } 95 | 96 | #notie-input-field { 97 | display: block; 98 | box-sizing: border-box; 99 | height: 55px; 100 | width: 100%; 101 | text-align: center; 102 | outline: 0; 103 | border: 0; 104 | background-color: #FFFFFF; 105 | font-family: inherit; 106 | font-size: 24px; } 107 | @media (max-width: 600px) { 108 | #notie-input-field { 109 | font-size: 18px; } } 110 | 111 | #notie-input-text { 112 | color: #FFFFFF; } 113 | 114 | #notie-input-text-yes { 115 | color: #FFFFFF; } 116 | 117 | #notie-input-text-no { 118 | color: #FFFFFF; } 119 | 120 | #notie-select-outer { 121 | top: auto; 122 | bottom: 0; 123 | cursor: default; } 124 | 125 | #notie-select-text { 126 | color: #FFFFFF; } 127 | 128 | #notie-select-choices, .notie-select-choice { 129 | background-color: #57BF57; } 130 | 131 | .notie-select-choice { 132 | height: 50px; 133 | line-height: 50px; 134 | color: #FFFFFF; 135 | cursor: pointer; } 136 | 137 | #notie-select-cancel { 138 | height: 60px; 139 | line-height: 60px; 140 | color: #FFFFFF; 141 | cursor: pointer; 142 | background-color: #A0A0A0; } 143 | 144 | .notie-select-choice-bottom-border { 145 | border-bottom: 1px solid rgba(255, 255, 255, 0.2); } 146 | 147 | #notie-date-outer { 148 | background-color: #4D82D6; 149 | color: #FFFFFF; 150 | cursor: default; } 151 | 152 | #notie-date-selector { 153 | margin: 0 auto; 154 | max-width: 900px; 155 | padding-left: 10px; 156 | padding-right: 10px; } 157 | 158 | .notie-date-up, .notie-date-down { 159 | height: 50px; 160 | float: left; 161 | width: 33.333333%; 162 | cursor: pointer; } 163 | 164 | .notie-date-arrow, .notie-date-arrow-up, .notie-date-arrow-down { 165 | height: 40px; 166 | width: 40px; 167 | background-size: 40px 40px; 168 | margin: 0 auto; 169 | margin-top: 5px; } 170 | 171 | .notie-date-arrow-up { 172 | background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDQ4IDQ4IiB3aWR0aD0iNDgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE0IDI4bDEwLTEwIDEwIDEweiIgZmlsbD0id2hpdGUiLz48cGF0aCBkPSJNMCAwaDQ4djQ4aC00OHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4=); } 173 | 174 | .notie-date-arrow-down { 175 | background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjxzdmcgaGVpZ2h0PSI0OCIgdmlld0JveD0iMCAwIDQ4IDQ4IiB3aWR0aD0iNDgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE0IDIwbDEwIDEwIDEwLTEweiIgZmlsbD0id2hpdGUiLz48cGF0aCBkPSJNMCAwaDQ4djQ4aC00OHoiIGZpbGw9Im5vbmUiLz48L3N2Zz4="); } 176 | 177 | .notie-date-text { 178 | height: 50px; 179 | line-height: 50px; 180 | float: left; 181 | width: 33.333333%; } 182 | 183 | #notie-date-yes, #notie-date-no { 184 | float: left; 185 | width: 50%; 186 | height: 50px; 187 | line-height: 50px; 188 | color: #FFFFFF; 189 | background-color: #57BF57; 190 | cursor: pointer; } 191 | 192 | #notie-date-no { 193 | background-color: #E1715B; } -------------------------------------------------------------------------------- /src/assets/assets/css/reset.css: -------------------------------------------------------------------------------- 1 | /* http://meyerweb.com/eric/tools/css/reset/ 2 | v2.0 | 20110126 3 | License: none (public domain) 4 | */ 5 | 6 | html, body, div, span, applet, object, iframe, 7 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 8 | a, abbr, acronym, address, big, cite, code, 9 | del, dfn, em, img, ins, kbd, q, s, samp, 10 | small, strike, strong, sub, sup, tt, var, 11 | b, u, i, center, 12 | dl, dt, dd, ol, ul, li, 13 | fieldset, form, label, legend, 14 | table, caption, tbody, tfoot, thead, tr, th, td, 15 | article, aside, canvas, details, embed, 16 | figure, figcaption, footer, header, hgroup, 17 | menu, nav, output, ruby, section, summary, 18 | time, mark, audio, video { 19 | margin: 0; 20 | padding: 0; 21 | border: 0; 22 | font-size: 100%; 23 | font: inherit; 24 | vertical-align: baseline; 25 | } 26 | /* HTML5 display-role reset for older browsers */ 27 | article, aside, details, figcaption, figure, 28 | footer, header, hgroup, menu, nav, section, main { 29 | display: block; 30 | } 31 | body { 32 | line-height: 1; 33 | } 34 | ol, ul { 35 | list-style: none; 36 | } 37 | blockquote, q { 38 | quotes: none; 39 | } 40 | blockquote:before, blockquote:after, 41 | q:before, q:after { 42 | content: ''; 43 | content: none; 44 | } 45 | table { 46 | border-collapse: collapse; 47 | border-spacing: 0; 48 | } -------------------------------------------------------------------------------- /src/assets/assets/fonts/Pe-icon-7-stroke.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/fonts/Pe-icon-7-stroke.eot -------------------------------------------------------------------------------- /src/assets/assets/fonts/Pe-icon-7-stroke.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/fonts/Pe-icon-7-stroke.ttf -------------------------------------------------------------------------------- /src/assets/assets/fonts/Pe-icon-7-stroke.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/fonts/Pe-icon-7-stroke.woff -------------------------------------------------------------------------------- /src/assets/assets/img/background_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/background_header.png -------------------------------------------------------------------------------- /src/assets/assets/img/background_sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/background_sidebar.png -------------------------------------------------------------------------------- /src/assets/assets/img/dropdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/dropdown.png -------------------------------------------------------------------------------- /src/assets/assets/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/favicon.ico -------------------------------------------------------------------------------- /src/assets/assets/img/loading-bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/assets/img/logo_dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/logo_dashboard.png -------------------------------------------------------------------------------- /src/assets/assets/img/mockup_results.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/mockup_results.png -------------------------------------------------------------------------------- /src/assets/assets/img/patreon_logo_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/patreon_logo_black.png -------------------------------------------------------------------------------- /src/assets/assets/img/patreon_logo_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WorldBrain/Legacy-Research-Engine/7dc6425a3c971047cfa92413a7223a5808b90730/src/assets/assets/img/patreon_logo_white.png -------------------------------------------------------------------------------- /src/assets/assets/js/demo.js: -------------------------------------------------------------------------------- 1 | type = ['','info','success','warning','danger']; 2 | 3 | 4 | demo = { 5 | initPickColor: function(){ 6 | $('.pick-class-label').click(function(){ 7 | var new_class = $(this).attr('new-class'); 8 | var old_class = $('#display-buttons').attr('data-class'); 9 | var display_div = $('#display-buttons'); 10 | if(display_div.length) { 11 | var display_buttons = display_div.find('.btn'); 12 | display_buttons.removeClass(old_class); 13 | display_buttons.addClass(new_class); 14 | display_div.attr('data-class', new_class); 15 | } 16 | }); 17 | }, 18 | 19 | initChartist: function(){ 20 | 21 | var dataSales = { 22 | labels: ['9:00AM', '12:00AM', '3:00PM', '6:00PM', '9:00PM', '12:00PM', '3:00AM', '6:00AM'], 23 | series: [ 24 | [287, 385, 490, 492, 554, 586, 698, 695, 752, 788, 846, 944], 25 | [67, 152, 143, 240, 287, 335, 435, 437, 539, 542, 544, 647], 26 | [23, 113, 67, 108, 190, 239, 307, 308, 439, 410, 410, 509] 27 | ] 28 | }; 29 | 30 | var optionsSales = { 31 | lineSmooth: false, 32 | low: 0, 33 | high: 800, 34 | showArea: true, 35 | height: "245px", 36 | axisX: { 37 | showGrid: false, 38 | }, 39 | lineSmooth: Chartist.Interpolation.simple({ 40 | divisor: 3 41 | }), 42 | showLine: false, 43 | showPoint: false, 44 | }; 45 | 46 | var responsiveSales = [ 47 | ['screen and (max-width: 640px)', { 48 | axisX: { 49 | labelInterpolationFnc: function (value) { 50 | return value[0]; 51 | } 52 | } 53 | }] 54 | ]; 55 | 56 | Chartist.Line('#chartHours', dataSales, optionsSales, responsiveSales); 57 | 58 | 59 | var data = { 60 | labels: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 61 | series: [ 62 | [542, 443, 320, 780, 553, 453, 326, 434, 568, 610, 756, 895], 63 | [412, 243, 280, 580, 453, 353, 300, 364, 368, 410, 636, 695] 64 | ] 65 | }; 66 | 67 | var options = { 68 | seriesBarDistance: 10, 69 | axisX: { 70 | showGrid: false 71 | }, 72 | height: "245px" 73 | }; 74 | 75 | var responsiveOptions = [ 76 | ['screen and (max-width: 640px)', { 77 | seriesBarDistance: 5, 78 | axisX: { 79 | labelInterpolationFnc: function (value) { 80 | return value[0]; 81 | } 82 | } 83 | }] 84 | ]; 85 | 86 | Chartist.Bar('#chartActivity', data, options, responsiveOptions); 87 | 88 | var dataPreferences = { 89 | series: [ 90 | [25, 30, 20, 25] 91 | ] 92 | }; 93 | 94 | var optionsPreferences = { 95 | donut: true, 96 | donutWidth: 40, 97 | startAngle: 0, 98 | total: 100, 99 | showLabel: false, 100 | axisX: { 101 | showGrid: false 102 | } 103 | }; 104 | 105 | Chartist.Pie('#chartPreferences', dataPreferences, optionsPreferences); 106 | 107 | Chartist.Pie('#chartPreferences', { 108 | labels: ['62%','32%','6%'], 109 | series: [62, 32, 6] 110 | }); 111 | }, 112 | 113 | initGoogleMaps: function(){ 114 | var myLatlng = new google.maps.LatLng(40.748817, -73.985428); 115 | var mapOptions = { 116 | zoom: 13, 117 | center: myLatlng, 118 | scrollwheel: false, //we disable de scroll over the map, it is a really annoing when you scroll through page 119 | styles: [{"featureType":"water","stylers":[{"saturation":43},{"lightness":-11},{"hue":"#0088ff"}]},{"featureType":"road","elementType":"geometry.fill","stylers":[{"hue":"#ff0000"},{"saturation":-100},{"lightness":99}]},{"featureType":"road","elementType":"geometry.stroke","stylers":[{"color":"#808080"},{"lightness":54}]},{"featureType":"landscape.man_made","elementType":"geometry.fill","stylers":[{"color":"#ece2d9"}]},{"featureType":"poi.park","elementType":"geometry.fill","stylers":[{"color":"#ccdca1"}]},{"featureType":"road","elementType":"labels.text.fill","stylers":[{"color":"#767676"}]},{"featureType":"road","elementType":"labels.text.stroke","stylers":[{"color":"#ffffff"}]},{"featureType":"poi","stylers":[{"visibility":"off"}]},{"featureType":"landscape.natural","elementType":"geometry.fill","stylers":[{"visibility":"on"},{"color":"#b8cb93"}]},{"featureType":"poi.park","stylers":[{"visibility":"on"}]},{"featureType":"poi.sports_complex","stylers":[{"visibility":"on"}]},{"featureType":"poi.medical","stylers":[{"visibility":"on"}]},{"featureType":"poi.business","stylers":[{"visibility":"simplified"}]}] 120 | 121 | } 122 | var map = new google.maps.Map(document.getElementById("map"), mapOptions); 123 | 124 | var marker = new google.maps.Marker({ 125 | position: myLatlng, 126 | title:"Hello World!" 127 | }); 128 | 129 | // To add the marker to the map, call setMap(); 130 | marker.setMap(map); 131 | }, 132 | 133 | showNotification: function(from, align){ 134 | color = Math.floor((Math.random() * 4) + 1); 135 | 136 | $.notify({ 137 | icon: "pe-7s-gift", 138 | message: "Welcome to Light Bootstrap Dashboard - a beautiful freebie for every web developer." 139 | 140 | },{ 141 | type: type[color], 142 | timer: 4000, 143 | placement: { 144 | from: from, 145 | align: align 146 | } 147 | }); 148 | } 149 | 150 | 151 | } 152 | 153 | -------------------------------------------------------------------------------- /src/assets/assets/js/jquery.mobile.custom.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Mobile v1.4.4 | Copyright 2010, 2014 jQuery Foundation, Inc. | jquery.org/license */ 2 | 3 | (function(e,t,n){typeof define=="function"&&define.amd?define(["jquery"],function(r){return n(r,e,t),r.mobile}):n(e.jQuery,e,t)})(this,document,function(e,t,n,r){(function(e,n){e.extend(e.support,{orientation:"orientation"in t&&"onorientationchange"in t})})(e),function(e){e.event.special.throttledresize={setup:function(){e(this).bind("resize",n)},teardown:function(){e(this).unbind("resize",n)}};var t=250,n=function(){s=(new Date).getTime(),o=s-r,o>=t?(r=s,e(this).trigger("throttledresize")):(i&&clearTimeout(i),i=setTimeout(n,t-o))},r=0,i,s,o}(e),function(e,t){function p(){var e=s();e!==o&&(o=e,r.trigger(i))}var r=e(t),i="orientationchange",s,o,u,a,f={0:!0,180:!0},l,c,h;if(e.support.orientation){l=t.innerWidth||r.width(),c=t.innerHeight||r.height(),h=50,u=l>c&&l-c>h,a=f[t.orientation];if(u&&a||!u&&!a)f={"-90":!0,90:!0}}e.event.special.orientationchange=e.extend({},e.event.special.orientationchange,{setup:function(){if(e.support.orientation&&!e.event.special.orientationchange.disabled)return!1;o=s(),r.bind("throttledresize",p)},teardown:function(){if(e.support.orientation&&!e.event.special.orientationchange.disabled)return!1;r.unbind("throttledresize",p)},add:function(e){var t=e.handler;e.handler=function(e){return e.orientation=s(),t.apply(this,arguments)}}}),e.event.special.orientationchange.orientation=s=function(){var r=!0,i=n.documentElement;return e.support.orientation?r=f[t.orientation]:r=i&&i.clientWidth/i.clientHeight<1.1,r?"portrait":"landscape"},e.fn[i]=function(e){return e?this.bind(i,e):this.trigger(i)},e.attrFn&&(e.attrFn[i]=!0)}(e,this),function(e,t,n,r){function T(e){while(e&&typeof e.originalEvent!="undefined")e=e.originalEvent;return e}function N(t,n){var i=t.type,s,o,a,l,c,h,p,d,v;t=e.Event(t),t.type=n,s=t.originalEvent,o=e.event.props,i.search(/^(mouse|click)/)>-1&&(o=f);if(s)for(p=o.length,l;p;)l=o[--p],t[l]=s[l];i.search(/mouse(down|up)|click/)>-1&&!t.which&&(t.which=1);if(i.search(/^touch/)!==-1){a=T(s),i=a.touches,c=a.changedTouches,h=i&&i.length?i[0]:c&&c.length?c[0]:r;if(h)for(d=0,v=u.length;di||Math.abs(n.pageY-p)>i,d&&!r&&P("vmousecancel",t,s),P("vmousemove",t,s),_()}function I(e){if(g)return;A();var t=C(e.target),n,r;P("vmouseup",e,t),d||(n=P("vclick",e,t),n&&n.isDefaultPrevented()&&(r=T(e).changedTouches[0],v.push({touchID:E,x:r.clientX,y:r.clientY}),m=!0)),P("vmouseout",e,t),d=!1,_()}function q(t){var n=e.data(t,i),r;if(n)for(r in n)if(n[r])return!0;return!1}function R(){}function U(t){var n=t.substr(1);return{setup:function(){q(this)||e.data(this,i,{});var r=e.data(this,i);r[t]=!0,l[t]=(l[t]||0)+1,l[t]===1&&b.bind(n,H),e(this).bind(n,R),y&&(l.touchstart=(l.touchstart||0)+1,l.touchstart===1&&b.bind("touchstart",B).bind("touchend",I).bind("touchmove",F).bind("scroll",j))},teardown:function(){--l[t],l[t]||b.unbind(n,H),y&&(--l.touchstart,l.touchstart||b.unbind("touchstart",B).unbind("touchmove",F).unbind("touchend",I).unbind("scroll",j));var r=e(this),s=e.data(this,i);s&&(s[t]=!1),r.unbind(n,R),q(this)||r.removeData(i)}}}var i="virtualMouseBindings",s="virtualTouchID",o="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),u="clientX clientY pageX pageY screenX screenY".split(" "),a=e.event.mouseHooks?e.event.mouseHooks.props:[],f=e.event.props.concat(a),l={},c=0,h=0,p=0,d=!1,v=[],m=!1,g=!1,y="addEventListener"in n,b=e(n),w=1,E=0,S,x;e.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(x=0;xMath.floor(e.pageY)||e.pageX===0&&Math.floor(i)>Math.floor(e.pageX))i-=n,s-=r;else if(se.event.special.swipe.horizontalDistanceThreshold&&Math.abs(t.coords[1]-n.coords[1])n.coords[0]?"swipeleft":"swiperight";return l(r,"swipe",e.Event("swipe",{target:i,swipestart:t,swipestop:n}),!0),l(r,s,e.Event(s,{target:i,swipestart:t,swipestop:n}),!0),!0}return!1},eventInProgress:!1,setup:function(){var t,n=this,r=e(n),s={};t=e.data(this,"mobile-events"),t||(t={length:0},e.data(this,"mobile-events",t)),t.length++,t.swipe=s,s.start=function(t){if(e.event.special.swipe.eventInProgress)return;e.event.special.swipe.eventInProgress=!0;var r,o=e.event.special.swipe.start(t),u=t.target,l=!1;s.move=function(t){if(!o||t.isDefaultPrevented())return;r=e.event.special.swipe.stop(t),l||(l=e.event.special.swipe.handleSwipe(o,r,n,u),l&&(e.event.special.swipe.eventInProgress=!1)),Math.abs(o.coords[0]-r.coords[0])>e.event.special.swipe.scrollSupressionThreshold&&t.preventDefault()},s.stop=function(){l=!0,e.event.special.swipe.eventInProgress=!1,i.off(f,s.move),s.move=null},i.on(f,s.move).one(a,s.stop)},r.on(u,s.start)},teardown:function(){var t,n;t=e.data(this,"mobile-events"),t&&(n=t.swipe,delete t.swipe,t.length--,t.length===0&&e.removeData(this,"mobile-events")),n&&(n.start&&e(this).off(u,n.start),n.move&&i.off(f,n.move),n.stop&&i.off(a,n.stop))}},e.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe.left",swiperight:"swipe.right"},function(t,n){e.event.special[t]={setup:function(){e(this).bind(n,e.noop)},teardown:function(){e(this).unbind(n)}}})}(e,this)}); -------------------------------------------------------------------------------- /src/assets/assets/js/light-bootstrap-dashboard.js: -------------------------------------------------------------------------------- 1 | var searchVisible = 0; 2 | var transparent = true; 3 | 4 | var transparentDemo = true; 5 | var fixedTop = false; 6 | 7 | var navbar_initialized = false; 8 | 9 | $(document).ready(function(){ 10 | window_width = $(window).width(); 11 | 12 | // check if there is an image set for the sidebar's background 13 | lbd.checkSidebarImage(); 14 | 15 | // Init navigation toggle for small screens 16 | if(window_width <= 991){ 17 | lbd.initRightMenu(); 18 | } 19 | 20 | // Activate the tooltips 21 | $('[rel="tooltip"]').tooltip(); 22 | 23 | // Activate the switches with icons 24 | if($('.switch').length != 0){ 25 | $('.switch')['bootstrapSwitch'](); 26 | } 27 | // Activate regular switches 28 | if($("[data-toggle='switch']").length != 0){ 29 | $("[data-toggle='switch']").wrap('
').parent().bootstrapSwitch(); 30 | } 31 | 32 | $('.form-control').on("focus", function(){ 33 | $(this).parent('.input-group').addClass("input-group-focus"); 34 | }).on("blur", function(){ 35 | $(this).parent(".input-group").removeClass("input-group-focus"); 36 | }); 37 | 38 | }); 39 | 40 | // activate collapse right menu when the windows is resized 41 | $(window).resize(function(){ 42 | if($(window).width() <= 991){ 43 | lbd.initRightMenu(); 44 | } 45 | }); 46 | 47 | lbd = { 48 | misc:{ 49 | navbar_menu_visible: 0 50 | }, 51 | 52 | checkSidebarImage: function(){ 53 | $sidebar = $('.sidebar'); 54 | image_src = $sidebar.data('image'); 55 | 56 | if(image_src !== undefined){ 57 | sidebar_container = '