├── .gitignore ├── hooks ├── after-install.sh └── before-remove.sh ├── opt └── artikliotsing │ ├── public │ ├── bootstrap │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ ├── js │ │ │ ├── npm.js │ │ │ └── bootstrap.min.js │ │ └── css │ │ │ ├── bootstrap-theme.min.css │ │ │ ├── bootstrap-theme.css │ │ │ └── bootstrap-theme.css.map │ └── search.css │ ├── server.js │ ├── package.json │ ├── views │ ├── about.ejs │ ├── search.ejs │ ├── pagination.ejs │ ├── abi.ejs │ └── main.ejs │ ├── bin │ └── artikliotsing │ ├── lib │ ├── search.js │ ├── getarticle.js │ ├── web.js │ └── findarticle.js │ └── sources.json ├── etc ├── init │ └── artikliotsing.conf └── artikliotsing.d │ └── default.json ├── README.md └── install.sh /.gitignore: -------------------------------------------------------------------------------- 1 | config.json 2 | node_modules 3 | .DS_Store 4 | dist/*.deb 5 | npm-debug.log 6 | -------------------------------------------------------------------------------- /hooks/after-install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | NAME="artikliotsing" 4 | 5 | initctl start ${NAME} || true -------------------------------------------------------------------------------- /hooks/before-remove.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | NAME="artikliotsing" 4 | 5 | initctl stop ${NAME} || true 6 | 7 | rm -rf /var/run/${NAME}.pid 8 | rm -rf /var/log/${NAME}.log -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andris9/artikliotsing/master/opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andris9/artikliotsing/master/opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andris9/artikliotsing/master/opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/andris9/artikliotsing/master/opt/artikliotsing/public/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /opt/artikliotsing/server.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var config = require('config'); 4 | var log = require('npmlog'); 5 | 6 | if (!config.diffbotToken) { 7 | log.error('diffbot', 'Token not found! Configure at /etc/artikliotsing.d/default.json'); 8 | } 9 | 10 | require('./lib/web'); 11 | require('./lib/findarticle')(); 12 | require('./lib/getarticle')(); -------------------------------------------------------------------------------- /etc/init/artikliotsing.conf: -------------------------------------------------------------------------------- 1 | description "Otsing Eesti veebimeediast" 2 | 3 | start on runlevel [2345] 4 | stop on runlevel [!2345] 5 | 6 | respawn 7 | 8 | script 9 | NAME=artikliotsing 10 | exec /opt/${NAME}/bin/${NAME} \ 11 | --node-env="production" \ 12 | --config-dir="/etc/${NAME}.d" \ 13 | --pid-file="/var/run/${NAME}.pid" \ 14 | >>/var/log/${NAME}.log 2>&1 15 | end script 16 | -------------------------------------------------------------------------------- /etc/artikliotsing.d/default.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Artikliotsing", 3 | "url": "http://artiklid.tahvel.info", 4 | "port": 8080, 5 | "elasticsearch": { 6 | "search": "http://localhost:9200/articles/_search", 7 | "add": "http://localhost:9200/articles/article/ARTICLE_ID" 8 | }, 9 | "page_size": 10, 10 | "redis": { 11 | "host": "localhost", 12 | "port": 6379, 13 | "db": 10 14 | }, 15 | "diffbotToken": "", 16 | "debug": false 17 | } -------------------------------------------------------------------------------- /opt/artikliotsing/public/search.css: -------------------------------------------------------------------------------- 1 | .result{ 2 | padding:0; 3 | margin: 2px 0 15px 0; 4 | } 5 | .result-link{ 6 | font-size: 16px; 7 | line-height: 19.2px; 8 | } 9 | .result-link a{ 10 | color: rgb(17, 34, 204); 11 | } 12 | 13 | .result-content{ 14 | color: rgb(34, 34, 34); 15 | line-height: 16.1167px; 16 | font-size: 13px; 17 | } 18 | 19 | .result-date{ 20 | color: rgb(102, 102, 102); 21 | } 22 | 23 | .result-url{ 24 | color: rgb(0, 153, 51); 25 | line-height: 15.6px; 26 | font-size: 13px; 27 | } -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /opt/artikliotsing/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "artikliotsing", 3 | "private": true, 4 | "version": "1.0.15", 5 | "description": "Otsing Eesti veebimeediast", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/andris9/artikliotsing.git" 9 | }, 10 | "author": "Andris Reinman", 11 | "license": "MIT", 12 | "bugs": { 13 | "url": "https://github.com/andris9/artikliotsing/issues" 14 | }, 15 | "homepage": "https://github.com/andris9/artikliotsing", 16 | "dependencies": { 17 | "body-parser": "^1.12.2", 18 | "commander": "^2.7.1", 19 | "compression": "^1.4.3", 20 | "config": "^1.12.0", 21 | "ejs": "^2.3.1", 22 | "express": "^4.12.3", 23 | "feedster": "^1.0.1", 24 | "fetch": "^0.3.6", 25 | "hiredis": "^0.2.0", 26 | "method-override": "^2.3.2", 27 | "moment": "^2.9.0", 28 | "morgan": "^1.5.2", 29 | "nodepie": "^0.6.6", 30 | "npmlog": "^1.2.0", 31 | "redis": "^0.12.1", 32 | "resolver": "^0.1.12", 33 | "st": "^0.5.3" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /opt/artikliotsing/views/about.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Projektist

5 |

Kuna võrguväljaannete artikleid ei olnud võimalik mõistlikult otsida, saigi algatatud seesama projekt.

6 |

<%= title %> otsib vaid eestikeelsete väljaannete hulgast.

7 |

Hetkel jälgitavad väljaanded

8 | 13 |

Tarkvarast

14 |

artikliotsingu rakenduse kood on kirjutatud Node.JS platvormil. Andmete puhverdamiseks ning järjekordade haldamiseks on kasutusel Redis, artiklite salvestamiseks ja otsingu tegemiseks on kasutusel Lucene põhine ElasticSearch. Artiklite sisu leiab üles Diffbot.

15 |
16 |
17 |
-------------------------------------------------------------------------------- /opt/artikliotsing/bin/artikliotsing: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | 'use strict'; 4 | 5 | var fs = require('fs'); 6 | var program = require('commander'); 7 | var packageData = require('../package.json'); 8 | var log = require('npmlog'); 9 | 10 | program. 11 | version(packageData.version). 12 | usage('[options]'). 13 | option('--config-dir ', 'Configuration directory'). 14 | option('--log-level ', 'Log level: info, warn, error', /^(silly|verbose|info|http|warn|error)$/i). 15 | option('--node-env ', 'Node environment, eg. "production"'). 16 | option('--pid-file ', 'PID file location'). 17 | parse(process.argv); 18 | 19 | if (program.logLevel) { 20 | log.level = program.logLevel; 21 | log.info('App', 'Setting log level to %s', program.logLevel); 22 | } 23 | 24 | if (program.configDir) { 25 | process.env.NODE_CONFIG_DIR = program.configDir; 26 | log.info('App', 'Using config files from %s', program.configDir); 27 | } 28 | 29 | if (program.nodeEnv) { 30 | process.env.NODE_ENV = program.nodeEnv; 31 | log.info('App', 'Running as %s environment', program.nodeEnv); 32 | } 33 | 34 | if (program.pidFile) { 35 | fs.writeFileSync(program.pidFile, process.pid); 36 | log.info('App', 'Using pidfile to %s', program.configDir); 37 | } 38 | 39 | require('../server.js'); 40 | -------------------------------------------------------------------------------- /opt/artikliotsing/views/search.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 |

6 | Leiti 7 | <%= results && results.hits && results.hits.total || 0 %> 8 | tulemust<% 9 | if(results && results.hits && results.hits.hits.length){ 10 | %>, kuvan tulemused <%= from + 1 %> - <%= from + (results.hits.hits.length || 0) %>. 11 | <%}%><% 12 | if(!results || !results.hits || !results.hits.hits.length){%>.<%}%> 13 | Selle otsingu RSS ja JSON. 14 |

15 | 16 | <% visible_results.forEach(function(result){%> 17 |
18 | 19 |
<%= result.url.replace(/^https?:\/\//i, "") %>
20 |
<%= result.humanized_date %> - <%- fulltext?result.html:result.content %>
21 |
22 | <%})%> 23 | 24 |
25 |
26 | 27 | <% include pagination %> 28 |
-------------------------------------------------------------------------------- /opt/artikliotsing/views/pagination.ejs: -------------------------------------------------------------------------------- 1 | <% if(pages > 1){ %> 2 | 3 | 49 | 50 | <% } %> -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Artikliotsing 2 | 3 | ## Eeldused 4 | 5 | See juhis töötab Ubuntu põhistes masinates. Sobivad nii VirtualBox serverid kohalikus masinas, kui ka Amazon EC2, Rackspace vmt. virtuaalserverid. Eelnevalt midagi muud installida ei ole vaja. Parem olekski kasutada täiesti tühja Ubuntu 14.04+ serverit, kuna siis on konfliktide oht väiksem. 6 | 7 | Rakendus on arendatud ja testitud Ubuntu 14.04 LTS Server versiooniga. 8 | 9 | ## Install 10 | 11 | Rakendus töötab Ubuntu serveris ja selle saab installida *apg-get* pakihalduriga. Artikliotsing eeldab mõningaid täiendavaid rakendusi, mida standard repositooriumitest ei saa, nimelt *elasticsearch*, *redis-server* ja *nodejs*. Selleks, et kõik vajalikud eeldused koos Artikliotsingu rakendusega serverisse installida võid kasutada installerit. 12 | 13 | wget "https://raw.githubusercontent.com/andris9/artikliotsing/master/install.sh" 14 | chmod +x install.sh 15 | sudo ./install.sh 16 | 17 | Installiskript küsib kahte väärtust - [diffbot.com](http://diffbot.com) tokenit ning porti, millel veebiserverit jooksutada. Kui samas masinas on apache vmt. siis tõenäoliselt porti 80 kasutada ei saa ja tuleb valida midagi muud. Sellisel juhul tuleks tulemüürist jälgida, et see port oleks ka avatud. 18 | 19 | Kui tahad aga ise oma pakke hallata või kui sul on vajalikud rakendused juba olemas, võid kasutada otse artikliotsingu repositiooriumit: 20 | 21 | curl https://packagecloud.io/gpg.key | apt-key add - 22 | add-apt-repository "deb https://packagecloud.io/andris9/artikliotsing/ubuntu/ trusty main" 23 | 24 | ja seejärel 25 | 26 | apt-get update 27 | apt-get install artikliotsing 28 | service artikliotsing start 29 | 30 | Sellisel juhul muuda konfiguratsioonifaili /etc/artikliotsing.d/default.json ja lisa sinna diffbot token ja http pordi väärtus käsitsi. 31 | 32 | ### Uuendamine 33 | 34 | Edaspidi pole koodi uuendamiseks vaja teha muud kui: 35 | 36 | sudo apt-get update 37 | sudo apt-get install --only-upgrade artikliotsing 38 | 39 | ## Litsents 40 | 41 | **MIT** 42 | -------------------------------------------------------------------------------- /opt/artikliotsing/views/abi.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

Otsinguabi

5 |

Otsing kasutab Lucene süntaksit. Täpsema juhendi leiab Lucene kodulehelt (inglise keeles). Vaikimisi on vastes nõutud kõik otsisõnad, kuid seda saab reguleerida operaatoriga OR, näiteks tavaline telefon nõuab, et artiklis oleks sees nii sõna tavaline kui ka telefon, aga tavaline OR telefon nõuab, et artiklis eksisteeriks vaid emb-kumb märgitud sõnadest.

6 |

Otsing ei tuvasta automaatselt sõnade käändeid ja pöördeid, otsitakse vaid täpseid vasteid [1]. Määramata sõnalõpu jaoks võib viimaste tähtede asemele panna tärni, sellisel juhul otsitakse kõiki sõnu, mis algavad samade tähtedega. Näiteks kolla* leiab nii sõna kollane kui ka kollased.

7 |

Otsingu täpsustamiseks on võimalik kasutada järgmisi välju:

8 |
    9 |
  • 10 | title pealkirja otsinguks 11 |
  • 12 |
  • 13 | text sisu otsinguks otsinguks 14 |
  • 15 |
  • 16 | site allika määramiseks (domeeninimi ilma www osata, näiteks site:postimees.ee) 17 |
  • 18 |
19 |

Näiteks leidmaks artikleid, mille pealkirjas on sõna Kasepuu, saab kasutada otsingut title:Kasepuu. Juhul kui sõna asemel on vaja määrata fraas, tuleks see panna jutumärkide vahele title:"Kasepuu kasvab".

20 |
21 |

[1] Käänete ja pöörete automaatseks lahendamiseks saaks kasutada Estnltk Python teeki, kuid hetkel ei ole selle tugi veel implementeeritud.

22 |
23 |
24 |
25 |
-------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | if [ `whoami` != "root" ] ; then 6 | echo -en '\E[47;31m'"\033[1mYou must run this script as root. Sorry!\033[0m" 7 | tput sgr0 8 | echo "" 9 | exit 1 10 | fi 11 | 12 | read -e -p "Enter diffbot token: " DIFFBOT_TOKEN 13 | read -e -p "Enter web server port (typically 80): " HTTP_PORT 14 | 15 | REPOS="" 16 | USE_ES="" 17 | 18 | # Lisa Redis repo 19 | 20 | if [ `which redis-server` ] ; then 21 | echo -en "\033[1mReids on juba installitud, jätan vahele\033[0m" 22 | echo "" 23 | tput sgr0 24 | else 25 | echo -en "\033[1mInstallin Redis serveri\033[0m" 26 | echo "" 27 | tput sgr0 28 | apt-add-repository ppa:chris-lea/redis-server -y 29 | REPOS="$REPOS redis-server" 30 | fi 31 | 32 | # Lisa ElasticSearch repo 33 | if [ `which elasticsearch` ] ; then 34 | echo -en "\033[1mElasticSearch on juba installitud, jätan vahele\033[0m" 35 | echo "" 36 | tput sgr0 37 | else 38 | echo -en "\033[1mInstallin ElasticSearch serveri\033[0m" 39 | echo "" 40 | tput sgr0 41 | 42 | if [ `which java` ] ; then 43 | echo "Java on juba installitud, jätan vahele" 44 | else 45 | echo "Installin Java" 46 | REPOS="$REPOS openjdk-7-jre-headless" 47 | fi 48 | 49 | wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add - 50 | add-apt-repository "deb http://packages.elasticsearch.org/elasticsearch/1.4/debian stable main" 51 | REPOS="$REPOS elasticsearch" 52 | USE_ES="true" 53 | 54 | fi 55 | 56 | # Lisa Node.js repo 57 | if [ `which elasticsearch` ] ; then 58 | echo -en "\033[1mNode.js on juba installitud, jätan vahele\033[0m" 59 | echo "" 60 | tput sgr0 61 | else 62 | echo -en "\033[1mInstallin Node.js platvormi\033[0m" 63 | echo "" 64 | tput sgr0 65 | curl -sL https://deb.nodesource.com/setup | bash 66 | REPOS="$REPOS nodejs" 67 | fi 68 | 69 | # Lisa Artikliotsingu repo 70 | if [ -d "/etc/artikliotsing.d" ]; then 71 | echo "" 72 | tput sgr0 73 | else 74 | echo -en "\033[1mLisan artikliotsingu repo\033[0m" 75 | echo "" 76 | tput sgr0 77 | curl https://packagecloud.io/gpg.key | apt-key add - 78 | add-apt-repository "deb https://packagecloud.io/andris9/artikliotsing/ubuntu/ trusty main" 79 | fi 80 | 81 | apt-get update 82 | 83 | if [ -n "$REPOS" ]; then 84 | apt-get install -y $REPOS 85 | 86 | if [ -n "$USE_ES" ]; then 87 | sudo update-rc.d elasticsearch defaults 95 10 88 | /etc/init.d/elasticsearch start 89 | fi 90 | fi 91 | 92 | apt-get install -y artikliotsing 93 | 94 | initctl stop artikliotsing || true 95 | 96 | echo "{\"diffbotToken\": \"${DIFFBOT_TOKEN}\", \"port\": ${HTTP_PORT}}" > /etc/artikliotsing.d/production.json 97 | 98 | initctl start artikliotsing || true 99 | 100 | echo -en "\033[1mInstalleerimine õnnestus!\033[0m" 101 | echo "" 102 | tput sgr0 -------------------------------------------------------------------------------- /opt/artikliotsing/lib/search.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var config = require('config'); 4 | var fetch = require('fetch'); 5 | var moment = require('moment'); 6 | var log = require('npmlog'); 7 | 8 | moment.locale('en'); 9 | 10 | module.exports.paging = paging; 11 | module.exports.search = search; 12 | module.exports.formatResults = formatResults; 13 | 14 | function formatResults(results) { 15 | if (!results ||  !results.hits ||  !results.hits.hits) { 16 | return []; 17 | } 18 | return results.hits.hits.map(function(doc) { 19 | var element = { 20 | id: doc._id, 21 | url: doc._source.url, 22 | site: doc._source.site, 23 | humanized_date: moment(doc._source.date, false, 'et').fromNow(), 24 | date: new Date(doc._source.date), 25 | found: new Date(doc._source.found), 26 | title: keepStrong(doc.highlight && doc.highlight.title && doc.highlight.title.join(' ... ').trim() ||  doc._source.title), 27 | content: keepStrong(doc.highlight && doc.highlight.text && doc.highlight.text.join(' ... ').trim() || ''), 28 | html: doc._source.text ? '

' + doc._source.text.replace(//g, '>').replace(/\n+/g, '

') + '

' : '' 29 | }; 30 | 31 | if (doc._source && doc._source.media) { 32 | for (var i = 0, len = doc._source.media.length; i < len; i++) { 33 | if (doc._source.media[i].type == 'image') { 34 | element.image = doc._source.media[i].link; 35 | break; 36 | } 37 | } 38 | } 39 | 40 | if (doc._source.author) { 41 | element.author = doc._source.author; 42 | } 43 | 44 | return element; 45 | }); 46 | } 47 | 48 | function keepStrong(str) { 49 | return str.replace(//g, '>').replace(/<strong>/g, '').replace(/<\/strong>/g, ''); 50 | } 51 | 52 | function paging(page, pages) { 53 | var visible = 8, 54 | rangeMin = page - Math.round(visible / 2), 55 | rangeMax = page + Math.round(visible / 2), 56 | pageList = []; 57 | 58 | if (pages <= visible) { 59 | rangeMin = 1; 60 | rangeMax = pages; 61 | } else { 62 | if (rangeMin < 1) { 63 | rangeMax += Math.abs(rangeMin) + 1; 64 | rangeMin = 1; 65 | } else if (rangeMax > pages) { 66 | rangeMin -= rangeMax - pages; 67 | rangeMax = pages; 68 | } 69 | } 70 | 71 | for (var i = rangeMin; i <= rangeMax; i++) { 72 | pageList.push({ 73 | page: i, 74 | active: i == page 75 | }); 76 | } 77 | 78 | if (rangeMin > 1) { 79 | pageList.unshift({ 80 | disabled: true 81 | }); 82 | } 83 | 84 | if (rangeMax < pages) { 85 | pageList.push({ 86 | disabled: true 87 | }); 88 | } 89 | 90 | return pageList; 91 | } 92 | 93 | function search(query, from, size, callback) { 94 | var searchObj = { 95 | 'sort': [{ 96 | 'found': { 97 | 'order': 'desc' 98 | } 99 | }], 100 | 'query': { 101 | 'query_string': { 102 | 'fields': ['text', 'title^5'], 103 | 'query': query || '', 104 | 'default_operator': 'AND' 105 | } 106 | }, 107 | 'from': from || 0, 108 | 'size': size || 25, 109 | 'highlight': { 110 | 'pre_tags': [''], 111 | 'post_tags': [''], 112 | 'fields': { 113 | 'title': { 114 | 'fragment_size': 500, 115 | 'number_of_fragments': 1 116 | }, 117 | 'text': { 118 | 'fragment_size': 250, 119 | 'number_of_fragments': 1 120 | } 121 | } 122 | } 123 | }; 124 | 125 | fetch.fetchUrl(config.elasticsearch.search, { 126 | method: 'GET', 127 | payload: JSON.stringify(searchObj) 128 | }, function(err, meta, body) { 129 | var docs; 130 | if (err) { 131 | return callback(err); 132 | } 133 | if (meta.status != 200) { 134 | return callback(new Error('Invalid response status from Storage server ' + meta.status)); 135 | } 136 | 137 | try { 138 | docs = JSON.parse(body.toString()); 139 | } catch (E) { 140 | log.error('JSON', E); 141 | return callback(E); 142 | } 143 | 144 | return callback(null, docs); 145 | }); 146 | } -------------------------------------------------------------------------------- /opt/artikliotsing/views/main.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%= title %><% if(query){%> → <%= query %><%}%> 6 | 7 | 8 | 9 | 67 | 68 | 69 |
70 | 98 | 99 |
100 | 101 | 107 | 108 |
109 | 110 |
111 |
112 |
113 | 114 |
115 |
116 |
117 | 118 |
119 |
120 | 121 |
122 | 123 |
124 | 125 | <% if (body == "main") { %> 126 | <% include abi %> 127 | <% } %> 128 | 129 | <% if (body == "search") { %> 130 | <% include search %> 131 | <% } %> 132 | 133 | <% if (body == "about") { %> 134 | <% include about %> 135 | <% } %> 136 | 137 |
138 | 139 | 141 |
142 |
143 | 144 | 149 | 150 | 163 | 164 | -------------------------------------------------------------------------------- /opt/artikliotsing/lib/getarticle.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var config = require('config'); 4 | var redis = require('redis'); 5 | var redisClient = redis.createClient(config.redis.port, config.redis.host); 6 | var fetch = require('fetch'); 7 | var debug = !!config.debug; 8 | var crypto = require('crypto'); 9 | var log = require('npmlog'); 10 | 11 | var rewriteUrlRules = [{ 12 | from: /^http:\/\/(www\.)?ohtuleht\.ee\b/i, 13 | to: 'http://m.ohtuleht.ee' 14 | }, { 15 | from: /^(http:\/\/(?:[^.]+\.)?(?:tallinna|tartu)?(?:postimees|tarbija24|e24|elu24|ilmajaam|juhtimine|naine24|valgamaalane|sakala.ajaleht.ee|virumaateataja)\.ee\/(\d+))\/\b/i, 16 | to: '$1/print/' 17 | }, { 18 | from: /^(http:\/\/(?:[^.]+\.)?(?:delfi|epl|ekspress|maaleht|aialeht)\.ee)\/[^?]+\?id=(\d+)/i, 19 | to: '$1/archive/print.php?id=$2' 20 | }, { 21 | from: /^(http:\/\/(?:[^.]+\.)?(?:ap3|ituudised|best-marketing|ehitusuudised|logistikauudised|toostusuudised|pollumajandus|raamatupidaja|sekretar|kaubandus|bestsales)\.ee)\/(?:Print\.aspx|Default\.aspx)?(?=\?PublicationId)/i, 22 | to: '$1/Print.aspx' 23 | }, { 24 | from: /^(http:\/\/(?:www\.)?tartuekspress\.eu\/(?:index\.php)?\?page=\d+&id=\d+).*/i, 25 | to: '$1&print=1' 26 | }, { 27 | from: /^(http:\/\/(?:www\.)?kesknadal\.ee\/.*)/i, 28 | to: '$1&mode=print' 29 | }, { 30 | from: /^(http:\/\/(?:www\.)?kirikiri\.ee\/)article\.php(.*)/i, 31 | to: '$1print.php$2' 32 | }, { 33 | from: /^(http:\/\/(?:www\.)?riigikogu\.ee\/.*)/i, 34 | to: '$1&op2=print' 35 | }]; 36 | 37 | var rewriteTextRules = [{ 38 | from: /\s*Aadress http:\/\/.*$/i, 39 | to: '' 40 | }, { 41 | from: /\s*See leht on trükitud.*$/i, 42 | to: '' 43 | }, { 44 | from: /\s*([\S]|Print|Blogi|www\.delfi\.ee|ärileht.ee)\s*$/mi, 45 | to: '' 46 | }]; 47 | 48 | module.exports = fetchLoop; 49 | 50 | function fetchLoop() { 51 | 52 | 53 | redisClient.multi(). 54 | select(config.redis.db). 55 | rpop('article:list'). 56 | exec(function(err, replies) { 57 | var articleData; 58 | 59 | if (err) { 60 | log.error('Redis', err); 61 | setTimeout(fetchLoop, 5000); 62 | return; 63 | } 64 | 65 | articleData = replies && replies[1]; 66 | 67 | if (!articleData) { 68 | setTimeout(fetchLoop, 1000); 69 | return; 70 | } 71 | 72 | try { 73 | articleData = JSON.parse(articleData); 74 | } catch (E) { 75 | if (debug) { 76 | log.error('Redis', E); 77 | } 78 | setTimeout(fetchLoop, 5000); 79 | return; 80 | } 81 | 82 | if (!articleData.url) { 83 | if (debug) { 84 | log.error('JSON', 'JSON error: empty URL ' + Date()); 85 | } 86 | setTimeout(fetchLoop, 5000); 87 | return; 88 | } 89 | 90 | if (articleData.date) { 91 | articleData.date = new Date(articleData.date); 92 | } 93 | 94 | if (debug) { 95 | log.verbose('Getarticle', 'Fetching article from ' + articleData.url); 96 | } 97 | fetchArticle(articleData); 98 | }); 99 | 100 | } 101 | 102 | function fetchArticle(articleData) { 103 | var articleUrl = "http://www.diffbot.com/api/article?token=DIFFBOT_TOKEN&url=FETCH_URL". 104 | replace(/DIFFBOT_TOKEN/, config.diffbotToken). 105 | replace(/FETCH_URL/, encodeURIComponent(rewriteUrl(articleData.url))); 106 | fetch.fetchUrl(articleUrl, { 107 | timeout: 30 * 1000 108 | }, function(err, meta, body) { 109 | var data; 110 | 111 | if (err) { 112 | log.error('Fetch', articleUrl); 113 | log.error('Fetch', err); 114 | setTimeout(fetchLoop, 5000); 115 | return; 116 | } 117 | 118 | if (meta.status != 200) { 119 | log.error('Fetch', 'Invalid status %s for %s', meta.status, articleUrl); 120 | setTimeout(fetchLoop, 5000); 121 | return; 122 | } 123 | 124 | if (!body || !body.length) { 125 | log.error('Fetch', 'empty response for %s', articleUrl); 126 | setTimeout(fetchLoop, 5000); 127 | return; 128 | } 129 | 130 | try { 131 | data = JSON.parse(body && body.toString()); 132 | } catch (E) { 133 | log.error('Fetch', E); 134 | setTimeout(fetchLoop, 5000); 135 | return; 136 | } 137 | 138 | if (data.error && data.errorCode) { 139 | log.error('Fetch', data.error); 140 | setTimeout(fetchLoop, 5000); 141 | return; 142 | } 143 | 144 | if (!data.text) { 145 | log.error('Fetch', 'Empty article %s', articleUrl); 146 | process.nextTick(fetchLoop); 147 | return; 148 | } 149 | 150 | data.text = rewriteText(data.text ||  ''); 151 | 152 | Object.keys(data).forEach(function(key) { 153 | if (!articleData[key]) { 154 | articleData[key] = data[key]; 155 | } 156 | }); 157 | 158 | storeArticle(articleData); 159 | }); 160 | } 161 | 162 | function storeArticle(articleData) { 163 | fetch.fetchUrl(config.elasticsearch.add.replace(/ARTICLE_ID/, crypto.createHash('sha1').update(articleData.url).digest('hex')), { 164 | method: 'PUT', 165 | payload: JSON.stringify(articleData) 166 | }, function(err, meta) { 167 | if (err) { 168 | log.error('ElasticSearch', err); 169 | } 170 | 171 | if (meta && debug) { 172 | log.info('ElasticSearch', 'Store status %s for %s', meta.status, articleData.url); 173 | } 174 | 175 | process.nextTick(fetchLoop); 176 | }); 177 | } 178 | 179 | 180 | function rewriteUrl(url) { 181 | rewriteUrlRules.forEach(function(rule) { 182 | if (url.match(rule.from)) { 183 | url = url.replace(rule.from, rule.to); 184 | } 185 | }); 186 | return url; 187 | } 188 | 189 | function rewriteText(text) { 190 | rewriteTextRules.forEach(function(rule) { 191 | if (text.match(rule.from)) { 192 | text = text.replace(rule.from, rule.to); 193 | } 194 | }); 195 | return text; 196 | } -------------------------------------------------------------------------------- /opt/artikliotsing/lib/web.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var config = require('config'); 4 | var pathlib = require('path'); 5 | var express = require('express'); 6 | var http = require('http'); 7 | var searchlib = require('./search'); 8 | var sources = require('../sources.json'); 9 | var app = express(); 10 | var morgan = require('morgan'); 11 | var compression = require('compression'); 12 | var st = require('st'); 13 | var log = require('npmlog'); 14 | var bodyParser = require('body-parser'); 15 | var methodOverride = require('method-override'); 16 | var feedster = require('feedster'); 17 | var packageData = require('../package.json'); 18 | 19 | var mount = st({ 20 | path: pathlib.join(__dirname, '../public'), 21 | url: '/', 22 | dot: false, 23 | index: false, 24 | passthrough: true, 25 | 26 | cache: { // specify cache:false to turn off caching entirely 27 | content: { 28 | max: 1024 * 1024 * 64 29 | } 30 | }, 31 | 32 | gzip: false 33 | }); 34 | 35 | app.set('port', config.port || 8080); 36 | app.disable('x-powered-by'); 37 | app.set('views', pathlib.join(__dirname, '../views')); 38 | app.use(compression()); 39 | app.use(function(req, res, next) { 40 | mount(req, res, function() { 41 | next(); 42 | }); 43 | }); 44 | app.use(bodyParser.urlencoded({ 45 | extended: false 46 | })); 47 | app.use(bodyParser.json()); 48 | 49 | app.use(methodOverride('X-HTTP-Method-Override')); 50 | 51 | // Log requests to console 52 | app.use(morgan(":req[x-forwarded-for] [:date[clf]] \":method :url HTTP/:http-version\" :status :res[content-length] - :response-time ms", { 53 | stream: { 54 | write: function(message) { 55 | message = (message || '').toString(); 56 | if (message) { 57 | log.info('HTTP', message.replace('\n', '').trim()); 58 | } 59 | } 60 | }, 61 | skip: function(req, res) { 62 | // ignore ping requests 63 | if (res && req.query && req.query.monitor === 'true') { 64 | return true; 65 | } 66 | return false; 67 | } 68 | })); 69 | 70 | app.set('view engine', 'ejs'); 71 | 72 | app.get('/', function(req, res) { 73 | res.render('main', { 74 | body: 'main', 75 | query: '', 76 | title: config.title 77 | }); 78 | }); 79 | 80 | app.get('/about', function(req, res) { 81 | res.render('main', { 82 | body: 'about', 83 | query: '', 84 | sources: sources, 85 | title: config.title 86 | }); 87 | }); 88 | 89 | app.get('/search.json', function(req, res) { 90 | if (!req.query.q) { 91 | return res.redirect('/'); 92 | } 93 | searchlib.search(req.query.q, 0, config.page_size, function(err, results) { 94 | if (err) { 95 | res.status(500); 96 | res.set('Content-Type', 'application/json; Charset=utf-8'); 97 | return res.send(JSON.stringify({ 98 | error: err.message 99 | }, false, 4)); 100 | } 101 | res.set('Content-Type', 'application/json; Charset=utf-8'); 102 | res.send(JSON.stringify({ 103 | total: results.hits.total, 104 | results: searchlib.formatResults(results) 105 | }, false, 4)); 106 | }); 107 | }); 108 | 109 | app.get('/search.rss', serveRSS); 110 | app.get('/api/articles.rss', serveRSS); 111 | 112 | function serveRSS(req, res) { 113 | if (!req.query.q) { 114 | return res.redirect('/'); 115 | } 116 | searchlib.search(req.query.q, 0, config.page_size, function(err, results) { 117 | if (err) { 118 | res.status(500); 119 | res.set('Content-Type', 'text/plain; Charset=utf-8'); 120 | return res.send(err.message); 121 | } 122 | res.set('Content-Type', 'application/rss+xml; charset=utf-8'); 123 | 124 | var feed = feedster.createFeed({ 125 | title: config.title, 126 | description: 'Otsing Eesti veebimeediast: ' + req.query.q, 127 | link: config.url, 128 | generator: config.title + ' ' + packageData.version, 129 | language: 'et-ee', 130 | atomLink: { 131 | href: config.url + req.url, 132 | rel: 'self' // type is automatically for "self" 133 | } 134 | }); 135 | 136 | searchlib.formatResults(results).forEach(function(result) { 137 | var item = { 138 | title: result.title + ' – ' + result.site, 139 | pubDate: result.date, 140 | description: result.content, 141 | content: result.html, 142 | link: result.url, 143 | creator: result.author, 144 | guid: { 145 | value: result.id, 146 | isPermaLink: false 147 | } 148 | }; 149 | 150 | if (result.image) { 151 | item.media = { 152 | url: result.image, 153 | medium: 'image', 154 | title: 'Attached image' 155 | }; 156 | } 157 | 158 | feed.addItem(item); 159 | }); 160 | 161 | res.send(feed.render()); 162 | }); 163 | } 164 | 165 | app.get('/search', function(req, res) { 166 | if (!req.query.q) { 167 | return res.redirect('/'); 168 | } 169 | 170 | var page = Math.abs(req.query.page || 1), 171 | from = (page - 1) * config.page_size; 172 | 173 | searchlib.search(req.query.q, from, config.page_size, function(err, results) { 174 | if (err) { 175 | res.status(500); 176 | res.set('Content-Type', 'text/plain; Charset=utf-8'); 177 | return res.send(err.message); 178 | } 179 | 180 | var total = results && results.hits && results.hits.total || 0, 181 | pages = Math.ceil(total / config.page_size); 182 | 183 | if (page > pages) { 184 | page = pages || 1; 185 | } 186 | 187 | res.render('main', { 188 | body: 'search', 189 | query: req.query.q, 190 | encoded_query: encodeURIComponent(req.query.q), 191 | pages: pages, 192 | page: page, 193 | from: from, 194 | results: results, 195 | page_list: searchlib.paging(page, pages), 196 | visible_results: searchlib.formatResults(results), 197 | fulltext: (req.query.fulltext ||  '').toString().trim().toLowerCase() == 'true', 198 | title: config.title 199 | }); 200 | 201 | }); 202 | }); 203 | 204 | app.post('/search', function(req, res) { 205 | if (!req.body.q) { 206 | res.redirect('/'); 207 | } else { 208 | res.redirect('/search?q=' + encodeURIComponent(req.body.q ||  '')); 209 | } 210 | }); 211 | 212 | http.createServer(app).listen(app.get('port'), function() { 213 | log.info('Express', 'Express server listening on port %s', app.get('port')); 214 | try { 215 | process.setgid('nogroup'); 216 | process.setuid('nobody'); 217 | } catch (E) { 218 | log.error('App', 'Failed giving up root privileges'); 219 | } 220 | }); -------------------------------------------------------------------------------- /opt/artikliotsing/lib/findarticle.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var config = require('config'); 4 | var urllib = require('url'); 5 | var fetch = require('fetch'); 6 | var sources = require('../sources.json'); 7 | var sortedSources = processSources(sources); 8 | var resolver = require('resolver'); 9 | var redis = require('redis'); 10 | var redisClient = redis.createClient(config.redis.port, config.redis.host); 11 | var crypto = require('crypto'); 12 | var NodePie = require('nodepie'); 13 | var debug = !!config.debug; 14 | var urllib = require('url'); 15 | var log = require('npmlog'); 16 | 17 | module.exports = syncLoop; 18 | 19 | function syncLoop() { 20 | sources.unshift(sources.pop()); 21 | var source = sources[0]; 22 | 23 | if (debug) { 24 | log.verbose('syncLoop', 'Checking %s', source.id); 25 | } 26 | 27 | checkFeed(source.url, source.feed, function(err, items) { 28 | if (debug) { 29 | log.verbose('SyncLoop', 'Found %s new articles', items); 30 | } 31 | setTimeout(syncLoop, 10 * 1000); 32 | }); 33 | } 34 | 35 | function checkFeed(siteUrl, feedUrl, callback) { 36 | var feed; 37 | 38 | if (debug) { 39 | log.verbose('CheckFeed', 'Fetching %s', feedUrl); 40 | } 41 | fetch.fetchUrl(feedUrl, { 42 | timeout: 45 * 1000, 43 | disableDecoding: true 44 | }, function(err, meta, body) { 45 | if (err) { 46 | log.error('CheckFeed', err); 47 | return callback(err); 48 | } 49 | if (meta.status != 200) { 50 | log.error('CheckFeed', 'Status %s for %s', meta.status, feedUrl); 51 | return callback(null, false); 52 | } 53 | 54 | var items = []; 55 | var newItems = 0; 56 | var counter = 0; 57 | 58 | try { 59 | feed = new NodePie(body); 60 | feed.init(); 61 | } catch (E) { 62 | try { 63 | // common error - unallowed bytes in the file 64 | feed = new NodePie(new Buffer(body.toString().replace(/[\u0000-\u0009\u000B\u000C\u000E-\u001F]/g, ''), 'utf-8')); 65 | feed.init(); 66 | } catch (E) { 67 | log.error('NodePie', 'Error opening RSS/Atom file %s', feedUrl); 68 | log.error('NodePie', E); 69 | return callback(err); 70 | } 71 | } 72 | 73 | feed.getItems().reverse().forEach(function(item) { 74 | if (item.getDate() < new Date(Date.now() - (1000 * 3600 * 24 * 30))) { 75 | return; 76 | } 77 | items.push({ 78 | url: item.getPermalink(), 79 | date: item.getDate(), 80 | title: item.getTitle() || '', 81 | found: new Date(), 82 | author: item.getAuthor() || '' 83 | }); 84 | }); 85 | 86 | var processItems = function() { 87 | if (counter >= items.length) { 88 | return callback(null, newItems); 89 | } 90 | var item = items[counter++]; 91 | 92 | if (debug) { 93 | log.verbose('ProcessItems', 'Resolving %s', item.url); 94 | } 95 | resolve(item.url, function(err, url) { 96 | if (err) { 97 | log.error('ProcessItems', err); 98 | return process.nextTick(processItems); 99 | } 100 | item.url = url; 101 | item.site = detectSite(url, siteUrl); 102 | item.lang = (sortedSources[item.site] ||  {}).language ||  'et'; 103 | item.found = new Date(); 104 | 105 | if (item.url) { 106 | if (debug) { 107 | log.verbose('ProcessItems', 'Checking article %s', item.url); 108 | } 109 | checkArticle(item.url, function(err, exists) { 110 | if (err) { 111 | log.error('ProcessItems', err); 112 | return process.nextTick(processItems); 113 | } 114 | if (exists) { 115 | return process.nextTick(processItems); 116 | } 117 | 118 | log.info('ProcessItems', 'Found new article %s', item.url); 119 | 120 | newItems++; 121 | redisClient.multi(). 122 | select(config.redis.db). 123 | set('recent:' + md5(item.url), item.url). 124 | expire('recent:' + md5(item.url), 3600 * 24 * 40). 125 | lpush('article:list', JSON.stringify(item)). 126 | zadd('article:last', item.found.getTime(), JSON.stringify(item)). 127 | zremrangebyscore('article:last', 0, Date.now() - 24 * 3600 * 1000). 128 | exec(processItems); 129 | }); 130 | } else { 131 | return process.nextTick(processItems); 132 | } 133 | }); 134 | }; 135 | 136 | if (debug) { 137 | log.verbose('CheckFeed', 'Processing %s items', feed.getItemQuantity()); 138 | } 139 | processItems(); 140 | }); 141 | } 142 | 143 | function detectSite(itemUrl, siteUrl) { 144 | var itemUrlParts = urllib.parse(itemUrl, true, true), 145 | siteUrlParts = urllib.parse(siteUrl, true, true), 146 | 147 | itemDomain = itemUrlParts.hostname.replace(/^www\./i, '').trim(), 148 | siteDomain = siteUrlParts.hostname.replace(/^www\./i, '').trim(), 149 | 150 | domain = siteDomain; 151 | 152 | sources.forEach(function(source) { 153 | if (source.domains && source.domains.indexOf(itemDomain) >= 0) { 154 | domain = source.id; 155 | } 156 | }); 157 | 158 | return domain; 159 | } 160 | 161 | 162 | function checkArticle(url, callback) { 163 | if (debug) { 164 | log.verbose('CheckArticle', 'Resolving %s', url); 165 | } 166 | resolve(url, function(err, url) { 167 | if (err) { 168 | log.error('CheckArticle', err); 169 | return callback(err); 170 | } 171 | 172 | redisClient.multi(). 173 | select(config.redis.db). 174 | get('recent:' + md5(url)). 175 | exec(function(err, replies) { 176 | if (err) { 177 | log.error('Redis', err); 178 | return callback(err); 179 | } 180 | if (replies && replies[1]) { 181 | return callback(null, true); 182 | } 183 | 184 | return callback(null, false); 185 | }); 186 | }); 187 | } 188 | 189 | function resolve(sourceUrl, callback) { 190 | var key = 'link:' + md5(sourceUrl); 191 | redisClient.multi(). 192 | select(config.redis.db). 193 | get(key). 194 | exec(function(err, replies) { 195 | if (err) { 196 | return callback(err); 197 | } 198 | if (replies && replies[1]) { 199 | return callback(null, replies[1]); 200 | } 201 | resolver.resolve(sourceUrl, { 202 | removeParams: [/^utm_/, 'ref', 'rsscount'], 203 | userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0' 204 | }, function(err, url) { 205 | if (err) { 206 | return callback(err); 207 | } 208 | 209 | if (!url) { 210 | return callback(null, ''); 211 | } 212 | 213 | redisClient.multi(). 214 | select(config.redis.db). 215 | set(key, url). 216 | expire(key, 3600 * 24 * 7). 217 | exec(function() { 218 | return callback(null, url); 219 | }); 220 | }); 221 | }); 222 | } 223 | 224 | function md5(str) { 225 | var hash = crypto.createHash('md5'); 226 | hash.update(str); 227 | return hash.digest('hex'); 228 | } 229 | 230 | function processSources(sources) { 231 | var sorted = {}; 232 | sources.forEach(function(source) { 233 | if (!(source.id in sorted)) { 234 | sorted[source.id] = source; 235 | } 236 | }); 237 | return sorted; 238 | } -------------------------------------------------------------------------------- /opt/artikliotsing/sources.json: -------------------------------------------------------------------------------- 1 | [{ 2 | "id": "alkeemia.ee", 3 | "title": "Alkeemia", 4 | "url": "http://alkeemia.delfi.ee/", 5 | "feed": "http://alkeemia.delfi.ee/rss.xml", 6 | "language": "et", 7 | "domains": ["alkeemia.ee", "alkeemia.delfi.ee"] 8 | }, { 9 | "id": "arvamus.postimees.ee", 10 | "title": "Arvamus", 11 | "url": "http://arvamus.postimees.ee", 12 | "feed": "http://arvamus.postimees.ee/rss/", 13 | "language": "et", 14 | "domains": ["arvamus.postimees.ee"] 15 | }, { 16 | "id": "best-marketing.ee", 17 | "title": "Best Marketing", 18 | "url": "http://www.best-marketing.ee", 19 | "feed": "http://www.best-marketing.ee/RSS.aspx", 20 | "language": "et", 21 | "domains": ["best-marketing.ee"] 22 | }, { 23 | "id": "bestsales.ee", 24 | "title": "Best Sales", 25 | "url": "http://www.bestsales.ee", 26 | "feed": "http://www.bestsales.ee/RSS.aspx", 27 | "language": "et", 28 | "domains": ["bestsales.ee"] 29 | }, { 30 | "id": "delfi.ee", 31 | "title": "Delfi", 32 | "url": "http://www.delfi.ee", 33 | "feed": "http://feeds2.feedburner.com/delfiuudised", 34 | "language": "et", 35 | "domains": ["delfi.ee"] 36 | }, { 37 | "id": "arileht.delfi.ee", 38 | "title": "Ärileht", 39 | "url": "http://arileht.delfi.ee", 40 | "feed": "http://feeds2.feedburner.com/delfimajandus", 41 | "language": "et", 42 | "domains": ["majandus.delfi.ee", "arileht.delfi.ee"] 43 | }, { 44 | "id": "diplomaatia.ee", 45 | "title": "Diplomaatia", 46 | "url": "http://www.diplomaatia.ee", 47 | "feed": "http://www.diplomaatia.ee/rss/", 48 | "language": "et", 49 | "domains": ["diplomaatia.ee"] 50 | }, { 51 | "id": "e24.ee", 52 | "title": "E24", 53 | "url": "http://majandus24.postimees.ee/", 54 | "feed": "http://e24.postimees.ee/rss/", 55 | "language": "et", 56 | "domains": ["e24.ee", "e24.postimees.ee", "juhtimine.ee", "majandus24.postimees.ee"] 57 | }, { 58 | "id": "ekspress.ee", 59 | "title": "Eesti Ekspress", 60 | "url": "http://ekspress.delfi.ee/", 61 | "feed": "http://feeds.feedburner.com/EestiEkspressFeed", 62 | "language": "et", 63 | "domains": ["ekspress.ee", "ekspress.delfi.ee"] 64 | }, { 65 | "id": "epl.ee", 66 | "title": "Eesti Päevaleht", 67 | "url": "http://epl.delfi.ee/", 68 | "feed": "http://feeds.feedburner.com/eestipaevaleht", 69 | "language": "et", 70 | "domains": ["epl.ee", "epl.delfi.ee"] 71 | }, { 72 | "id": "ehitusuudised.ee", 73 | "title": "Ehitusuudised", 74 | "url": "http://www.ehitusuudised.ee", 75 | "feed": "http://www.ehitusuudised.ee/RSS.aspx", 76 | "language": "et", 77 | "domains": ["ehitusuudised.ee"] 78 | }, { 79 | "id": "elu24.ee", 80 | "title": "Elu24", 81 | "url": "http://elu24.postimees.ee/", 82 | "feed": "http://elu24.postimees.ee/rss/", 83 | "domains": ["elu24.ee", "elu24.postimees.ee"] 84 | }, { 85 | "id": "err.ee", 86 | "title": "ERR", 87 | "url": "http://uudised.err.ee/", 88 | "feed": "http://uudised.err.ee/rss", 89 | "language": "et", 90 | "domains": ["err.ee", "uudised.err.ee"] 91 | }, { 92 | "id": "kultuur.err.ee", 93 | "title": "ERR Kultuur", 94 | "url": "http://kultuur.err.ee", 95 | "feed": "http://kultuur.err.ee/rss", 96 | "language": "et", 97 | "domains": ["kultuur.err.ee"] 98 | }, { 99 | "id": "menu.err.ee", 100 | "title": "ERR Menu", 101 | "url": "http://menu.err.ee", 102 | "feed": "http://menu.err.ee/rss", 103 | "language": "et", 104 | "domains": ["menu.err.ee"] 105 | }, { 106 | "id": "novaator.err.ee", 107 | "title": "ERR Novaator", 108 | "url": "http://novaator.err.ee", 109 | "feed": "http://novaator.err.ee/rss", 110 | "language": "et", 111 | "domains": ["teadus.err.ee", "novaator.err.ee"] 112 | }, { 113 | "id": "sport.err.ee", 114 | "title": "ERR Sport", 115 | "url": "http://sport.err.ee", 116 | "feed": "http://sport.err.ee/rss", 117 | "language": "et", 118 | "domains": ["sport.err.ee"] 119 | }, { 120 | "id": "forte.ee", 121 | "title": "Forte", 122 | "url": "http://forte.delfi.ee/", 123 | "feed": "http://feeds2.feedburner.com/forteuudised", 124 | "language": "et", 125 | "domains": ["forte.ee", "forte.delfi.ee"] 126 | }, { 127 | "id": "ilmajaam.ee", 128 | "title": "Ilmajaam", 129 | "url": "http://ilmajaam.postimees.ee/", 130 | "feed": "http://ilmajaam.postimees.ee/rss/", 131 | "language": "et", 132 | "domains": ["ilmajaam.ee", "ilmajaam.postimees.ee"] 133 | }, { 134 | "id": "ituudised.ee", 135 | "title": "IT Uudised", 136 | "url": "http://www.ituudised.ee", 137 | "feed": "http://www.ituudised.ee/RSS.aspx", 138 | "language": "et", 139 | "domains": ["ituudised.ee"] 140 | }, { 141 | "id": "jt.ee", 142 | "title": "Järva Teataja", 143 | "url": "http://www.jt.ee", 144 | "feed": "http://www.jt.ee/rss/", 145 | "language": "et", 146 | "domains": ["jt.ee"] 147 | }, { 148 | "id": "kaubandus.ee", 149 | "title": "Kaubandus", 150 | "url": "http://www.kaubandus.ee", 151 | "feed": "http://www.kaubandus.ee/RSS.aspx", 152 | "language": "et", 153 | "domains": ["kaubandus.ee"] 154 | }, { 155 | "id": "kes-kus.ee", 156 | "title": "Kes-Kus", 157 | "url": "http://kes-kus.ee", 158 | "feed": "http://kes-kus.ee/feed/", 159 | "language": "et", 160 | "domains": ["kes-kus.ee"] 161 | }, { 162 | "id": "kesknadal.ee", 163 | "title": "Kesknädal", 164 | "url": "http://www.kesknadal.ee", 165 | "feed": "http://kesknadal.ee/est/uudiskiri", 166 | "language": "et", 167 | "domains": ["kesknadal.ee"] 168 | }, { 169 | "id": "kirikiri.ee", 170 | "title": "Kirikiri", 171 | "url": "http://www.kirikiri.ee", 172 | "feed": "http://www.kirikiri.ee/backend.php3", 173 | "language": "et", 174 | "domains": ["kirikiri.ee"] 175 | }, { 176 | "id": "kuulutaja.ee", 177 | "title": "Kuulutaja", 178 | "url": "http://www.kuulutaja.ee", 179 | "feed": "http://www.kuulutaja.ee/feed/", 180 | "language": "et", 181 | "domains": ["kuulutaja.ee"] 182 | }, { 183 | "id": "kylauudis.ee", 184 | "title": "Külauudised", 185 | "url": "http://www.kylauudis.ee", 186 | "feed": "http://www.kylauudis.ee/feed/", 187 | "language": "et", 188 | "domains": ["kylauudis.ee"] 189 | }, { 190 | "id": "logistikauudised.ee", 191 | "title": "Logistikauudised", 192 | "url": "http://www.logistikauudised.ee", 193 | "feed": "http://www.logistikauudised.ee/RSS.aspx", 194 | "language": "et", 195 | "domains": ["logistikauudised.ee"] 196 | }, { 197 | "id": "le.ee", 198 | "title": "Lääne Elu", 199 | "url": "http://online.le.ee/", 200 | "feed": "http://online.le.ee/feed/", 201 | "language": "et", 202 | "domains": ["le.ee", "online.le.ee"] 203 | }, { 204 | "id": "maaleht.ee", 205 | "title": "Maaleht", 206 | "url": "http://maaleht.delfi.ee/", 207 | "feed": "http://feeds2.feedburner.com/maaleht", 208 | "language": "et", 209 | "domains": ["maaleht.ee", "maaleht.delfi.ee"] 210 | }, { 211 | "id": "memokraat.ee", 212 | "title": "Memokraat", 213 | "url": "http://www.memokraat.ee", 214 | "feed": "http://feeds2.feedburner.com/Memokraat", 215 | "language": "et", 216 | "domains": ["memokraat.ee"] 217 | }, { 218 | "id": "muurileht.ee", 219 | "title": "Müürileht", 220 | "url": "http://www.muurileht.ee", 221 | "feed": "http://www.muurileht.ee/feed/", 222 | "language": "et", 223 | "domains": ["muurileht.ee"] 224 | }, { 225 | "id": "naine24.ee", 226 | "title": "Naine24", 227 | "url": "http://naine24.postimees.ee/", 228 | "feed": "http://naine24.postimees.ee/rss/", 229 | "language": "et", 230 | "domains": ["naine24.ee", "naine24.postimees.ee"] 231 | }, { 232 | "id": "naistekas.ee", 233 | "title": "Naistekas", 234 | "url": "http://naistekas.delfi.ee/", 235 | "feed": "http://feeds.feedburner.com/naistekas", 236 | "language": "et", 237 | "domains": ["naistekas.ee", "naistekas.delfi.ee"] 238 | }, { 239 | "id": "nommesonumid.blogspot.com", 240 | "title": "Nõmme Sõnumid", 241 | "url": "http://nommesonumid.blogspot.com", 242 | "feed": "http://nommesonumid.blogspot.com/feeds/posts/default", 243 | "language": "et", 244 | "domains": ["nommesonumid.blogspot.com"] 245 | }, { 246 | "id": "pealinn.ee", 247 | "title": "Pealinn", 248 | "url": "http://www.pealinn.ee", 249 | "feed": "http://www.pealinn.ee/rss.php?type=news", 250 | "language": "et", 251 | "domains": ["pealinn.ee"] 252 | }, { 253 | "id": "postimees.ee", 254 | "title": "Postimees", 255 | "url": "http://www.postimees.ee", 256 | "feed": "http://www.postimees.ee/rss/", 257 | "language": "et", 258 | "domains": ["postimees.ee"] 259 | }, { 260 | "id": "publik.ee", 261 | "title": "Publik", 262 | "url": "http://publik.delfi.ee/", 263 | "feed": "http://feeds2.feedburner.com/publikuudised", 264 | "language": "et", 265 | "domains": ["publik.ee", "publik.delfi.ee"] 266 | }, { 267 | "id": "parnupostimees.ee", 268 | "title": "Pärnu Postimees", 269 | "url": "http://www.parnupostimees.ee", 270 | "feed": "http://www.parnupostimees.ee/rss/", 271 | "language": "et", 272 | "domains": ["parnupostimees.ee"] 273 | }, { 274 | "id": "pohjarannik.ee", 275 | "title": "Põhjarannik", 276 | "url": "http://pr.pohjarannik.ee/", 277 | "feed": "http://pr.pohjarannik.ee/?feed=rss2", 278 | "language": "et", 279 | "domains": ["pohjarannik.ee", "pr.pohjarannik.ee"] 280 | }, { 281 | "id": "pollumajandus.ee", 282 | "title": "Põllumajandus", 283 | "url": "http://www.pollumajandus.ee", 284 | "feed": "http://www.pollumajandus.ee/RSS.aspx", 285 | "language": "et", 286 | "domains": ["pollumajandus.ee"] 287 | }, { 288 | "id": "tallinn.ee", 289 | "title": "Raepress", 290 | "url": "http://www.tallinn.ee", 291 | "feed": "http://www.tallinn.ee/rss-raepress", 292 | "language": "et", 293 | "domains": ["tallinn.ee"] 294 | }, { 295 | "id": "raamatupidaja.ee", 296 | "title": "Raamatupidaja", 297 | "url": "http://www.raamatupidaja.ee", 298 | "feed": "http://www.raamatupidaja.ee/RSS.aspx", 299 | "language": "et", 300 | "domains": ["raamatupidaja.ee"] 301 | }, { 302 | "id": "riigikaitse.ee", 303 | "title": "Riigikaitse.EE", 304 | "url": "http://riigikaitse.lehed.ee/", 305 | "feed": "http://feeds.feedburner.com/Riigikaitse", 306 | "language": "et", 307 | "domains": ["riigikaitse.ee", "riigikaitse.lehed.ee"] 308 | }, { 309 | "id": "riigikogu.ee", 310 | "title": "Riigikogu pressiteated", 311 | "url": "http://www.riigikogu.ee", 312 | "feed": "http://feeds2.feedburner.com/RiigikoguPressiteated", 313 | "language": "et", 314 | "domains": ["riigikogu.ee"] 315 | }, { 316 | "id": "saarlane.ee", 317 | "title": "Saarlane", 318 | "url": "http://www.saarlane.ee", 319 | "feed": "http://www.saarlane.ee/rss/getinfo.asp?kat=all", 320 | "language": "et", 321 | "domains": ["saarlane.ee"] 322 | }, { 323 | "id": "saartehaal.ee", 324 | "title": "Saarte Hääl", 325 | "url": "http://www.saartehaal.ee", 326 | "feed": "http://www.saartehaal.ee/rss/", 327 | "language": "et", 328 | "domains": ["saartehaal.ee"] 329 | }, { 330 | "id": "sakala.ajaleht.ee", 331 | "title": "Sakala", 332 | "url": "http://www.sakala.ajaleht.ee", 333 | "feed": "http://www.sakala.ajaleht.ee/rss/", 334 | "language": "et", 335 | "domains": ["sakala.ajaleht.ee"] 336 | }, { 337 | "id": "sekretar.ee", 338 | "title": "Sekretär", 339 | "url": "http://www.sekretar.ee", 340 | "feed": "http://www.sekretar.ee/RSS.aspx", 341 | "language": "et", 342 | "domains": ["sekretar.ee"] 343 | }, { 344 | "id": "sirp.ee", 345 | "title": "Sirp", 346 | "url": "http://www.sirp.ee", 347 | "feed": "http://www.sirp.ee/feed/", 348 | "language": "et", 349 | "domains": ["sirp.ee"] 350 | }, { 351 | "id": "tallinnapostimees.ee", 352 | "title": "Tallinna City", 353 | "url": "http://tallinncity.postimees.ee/", 354 | "feed": "http://tallinncity.postimees.ee/rss/", 355 | "language": "et", 356 | "domains": ["tallinnapostimees.ee", "tallinncity.postimees.ee"] 357 | }, { 358 | "id": "tarbija24.ee", 359 | "title": "Tarbija24", 360 | "url": "http://tarbija24.postimees.ee/", 361 | "feed": "http://tarbija24.postimees.ee/rss/", 362 | "language": "et", 363 | "domains": ["tarbija24.ee", "tarbija24.postimees.ee"] 364 | }, { 365 | "id": "tartupostimees.ee", 366 | "title": "Tartu Postimees", 367 | "url": "http://tartu.postimees.ee/", 368 | "feed": "http://tartu.postimees.ee/rss/", 369 | "language": "et", 370 | "domains": ["tartupostimees.ee", "tartu.postimees.ee"] 371 | }, { 372 | "id": "telegram.ee", 373 | "title": "Telegram", 374 | "url": "http://www.telegram.ee", 375 | "feed": "http://www.telegram.ee/feed", 376 | "language": "et", 377 | "domains": ["telegram.ee"] 378 | }, { 379 | "id": "toostusuudised.ee", 380 | "title": "Tööstusuudised", 381 | "url": "http://www.toostusuudised.ee", 382 | "feed": "http://www.toostusuudised.ee/RSS.aspx", 383 | "language": "et", 384 | "domains": ["toostusuudised.ee"] 385 | }, { 386 | "id": "valgamaalane.ee", 387 | "title": "Valgamaalane", 388 | "url": "http://www.valgamaalane.ee", 389 | "feed": "http://www.valgamaalane.ee/rss/", 390 | "language": "et", 391 | "domains": ["valgamaalane.ee"] 392 | }, { 393 | "id": "valitsus.ee", 394 | "title": "Valitsuse pressiteated", 395 | "url": "http://www.valitsus.ee", 396 | "feed": "https://valitsus.ee/et/news/1+3/feed", 397 | "language": "et", 398 | "domains": ["valitsus.ee"] 399 | }, { 400 | "id": "virumaateataja.ee", 401 | "title": "Virumaa Teataja", 402 | "url": "http://www.virumaateataja.ee", 403 | "feed": "http://www.virumaateataja.ee/rss/", 404 | "language": "et", 405 | "domains": ["virumaateataja.ee"] 406 | }, { 407 | "id": "vorumaateataja.ee", 408 | "title": "Võrumaa Teataja", 409 | "url": "http://www.vorumaateataja.ee", 410 | "feed": "http://www.vorumaateataja.ee/ee/?format=feed&type=rss", 411 | "language": "et", 412 | "domains": ["vorumaateataja.ee"] 413 | }, { 414 | "id": "aripaev.ee", 415 | "title": "Äripäev", 416 | "url": "http://www.aripaev.ee/", 417 | "feed": "http://www.aripaev.ee/RSS.aspx", 418 | "language": "et", 419 | "domains": ["ap3.ee", "aripaev.ee"] 420 | }, { 421 | "id": "ohtuleht.ee", 422 | "title": "Õhtuleht", 423 | "url": "http://www.ohtuleht.ee", 424 | "feed": "http://www.ohtuleht.ee/rss", 425 | "language": "et", 426 | "domains": ["ohtuleht.ee"] 427 | }, { 428 | "id": "opleht.ee", 429 | "title": "Õpetajate leht", 430 | "url": "http://www.opleht.ee", 431 | "feed": "http://opleht.ee/feed/", 432 | "language": "et", 433 | "domains": ["opleht.ee"] 434 | }] -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.4 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default:disabled,.btn-default[disabled]{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary:disabled,.btn-primary[disabled]{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success:disabled,.btn-success[disabled]{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info:disabled,.btn-info[disabled]{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning:disabled,.btn-warning[disabled]{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger:disabled,.btn-danger[disabled]{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.4 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | 7 | .btn-default, 8 | .btn-primary, 9 | .btn-success, 10 | .btn-info, 11 | .btn-warning, 12 | .btn-danger { 13 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); 14 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 15 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); 16 | } 17 | .btn-default:active, 18 | .btn-primary:active, 19 | .btn-success:active, 20 | .btn-info:active, 21 | .btn-warning:active, 22 | .btn-danger:active, 23 | .btn-default.active, 24 | .btn-primary.active, 25 | .btn-success.active, 26 | .btn-info.active, 27 | .btn-warning.active, 28 | .btn-danger.active { 29 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 30 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 31 | } 32 | .btn-default .badge, 33 | .btn-primary .badge, 34 | .btn-success .badge, 35 | .btn-info .badge, 36 | .btn-warning .badge, 37 | .btn-danger .badge { 38 | text-shadow: none; 39 | } 40 | .btn:active, 41 | .btn.active { 42 | background-image: none; 43 | } 44 | .btn-default { 45 | text-shadow: 0 1px 0 #fff; 46 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); 47 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); 48 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); 49 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); 50 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); 51 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 52 | background-repeat: repeat-x; 53 | border-color: #dbdbdb; 54 | border-color: #ccc; 55 | } 56 | .btn-default:hover, 57 | .btn-default:focus { 58 | background-color: #e0e0e0; 59 | background-position: 0 -15px; 60 | } 61 | .btn-default:active, 62 | .btn-default.active { 63 | background-color: #e0e0e0; 64 | border-color: #dbdbdb; 65 | } 66 | .btn-default.disabled, 67 | .btn-default:disabled, 68 | .btn-default[disabled] { 69 | background-color: #e0e0e0; 70 | background-image: none; 71 | } 72 | .btn-primary { 73 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); 74 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); 75 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); 76 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); 77 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); 78 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 79 | background-repeat: repeat-x; 80 | border-color: #245580; 81 | } 82 | .btn-primary:hover, 83 | .btn-primary:focus { 84 | background-color: #265a88; 85 | background-position: 0 -15px; 86 | } 87 | .btn-primary:active, 88 | .btn-primary.active { 89 | background-color: #265a88; 90 | border-color: #245580; 91 | } 92 | .btn-primary.disabled, 93 | .btn-primary:disabled, 94 | .btn-primary[disabled] { 95 | background-color: #265a88; 96 | background-image: none; 97 | } 98 | .btn-success { 99 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); 100 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); 101 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); 102 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); 103 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); 104 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 105 | background-repeat: repeat-x; 106 | border-color: #3e8f3e; 107 | } 108 | .btn-success:hover, 109 | .btn-success:focus { 110 | background-color: #419641; 111 | background-position: 0 -15px; 112 | } 113 | .btn-success:active, 114 | .btn-success.active { 115 | background-color: #419641; 116 | border-color: #3e8f3e; 117 | } 118 | .btn-success.disabled, 119 | .btn-success:disabled, 120 | .btn-success[disabled] { 121 | background-color: #419641; 122 | background-image: none; 123 | } 124 | .btn-info { 125 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 126 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); 127 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); 128 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); 129 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); 130 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 131 | background-repeat: repeat-x; 132 | border-color: #28a4c9; 133 | } 134 | .btn-info:hover, 135 | .btn-info:focus { 136 | background-color: #2aabd2; 137 | background-position: 0 -15px; 138 | } 139 | .btn-info:active, 140 | .btn-info.active { 141 | background-color: #2aabd2; 142 | border-color: #28a4c9; 143 | } 144 | .btn-info.disabled, 145 | .btn-info:disabled, 146 | .btn-info[disabled] { 147 | background-color: #2aabd2; 148 | background-image: none; 149 | } 150 | .btn-warning { 151 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 152 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); 153 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); 154 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); 155 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); 156 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 157 | background-repeat: repeat-x; 158 | border-color: #e38d13; 159 | } 160 | .btn-warning:hover, 161 | .btn-warning:focus { 162 | background-color: #eb9316; 163 | background-position: 0 -15px; 164 | } 165 | .btn-warning:active, 166 | .btn-warning.active { 167 | background-color: #eb9316; 168 | border-color: #e38d13; 169 | } 170 | .btn-warning.disabled, 171 | .btn-warning:disabled, 172 | .btn-warning[disabled] { 173 | background-color: #eb9316; 174 | background-image: none; 175 | } 176 | .btn-danger { 177 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 178 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); 179 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); 180 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); 181 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); 182 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 183 | background-repeat: repeat-x; 184 | border-color: #b92c28; 185 | } 186 | .btn-danger:hover, 187 | .btn-danger:focus { 188 | background-color: #c12e2a; 189 | background-position: 0 -15px; 190 | } 191 | .btn-danger:active, 192 | .btn-danger.active { 193 | background-color: #c12e2a; 194 | border-color: #b92c28; 195 | } 196 | .btn-danger.disabled, 197 | .btn-danger:disabled, 198 | .btn-danger[disabled] { 199 | background-color: #c12e2a; 200 | background-image: none; 201 | } 202 | .thumbnail, 203 | .img-thumbnail { 204 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 205 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 206 | } 207 | .dropdown-menu > li > a:hover, 208 | .dropdown-menu > li > a:focus { 209 | background-color: #e8e8e8; 210 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 211 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 212 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 213 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 214 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 215 | background-repeat: repeat-x; 216 | } 217 | .dropdown-menu > .active > a, 218 | .dropdown-menu > .active > a:hover, 219 | .dropdown-menu > .active > a:focus { 220 | background-color: #2e6da4; 221 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 222 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 223 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 224 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 225 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 226 | background-repeat: repeat-x; 227 | } 228 | .navbar-default { 229 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); 230 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); 231 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); 232 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); 233 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 234 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 235 | background-repeat: repeat-x; 236 | border-radius: 4px; 237 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 238 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); 239 | } 240 | .navbar-default .navbar-nav > .open > a, 241 | .navbar-default .navbar-nav > .active > a { 242 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 243 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); 244 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); 245 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); 246 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); 247 | background-repeat: repeat-x; 248 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 249 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); 250 | } 251 | .navbar-brand, 252 | .navbar-nav > li > a { 253 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25); 254 | } 255 | .navbar-inverse { 256 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); 257 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); 258 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); 259 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); 260 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 261 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); 262 | background-repeat: repeat-x; 263 | } 264 | .navbar-inverse .navbar-nav > .open > a, 265 | .navbar-inverse .navbar-nav > .active > a { 266 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); 267 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); 268 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); 269 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); 270 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); 271 | background-repeat: repeat-x; 272 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 273 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); 274 | } 275 | .navbar-inverse .navbar-brand, 276 | .navbar-inverse .navbar-nav > li > a { 277 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); 278 | } 279 | .navbar-static-top, 280 | .navbar-fixed-top, 281 | .navbar-fixed-bottom { 282 | border-radius: 0; 283 | } 284 | @media (max-width: 767px) { 285 | .navbar .navbar-nav .open .dropdown-menu > .active > a, 286 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, 287 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { 288 | color: #fff; 289 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 290 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 291 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 292 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 293 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 294 | background-repeat: repeat-x; 295 | } 296 | } 297 | .alert { 298 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2); 299 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 300 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); 301 | } 302 | .alert-success { 303 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 304 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 305 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); 306 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 307 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 308 | background-repeat: repeat-x; 309 | border-color: #b2dba1; 310 | } 311 | .alert-info { 312 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 313 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 314 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); 315 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 316 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 317 | background-repeat: repeat-x; 318 | border-color: #9acfea; 319 | } 320 | .alert-warning { 321 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 322 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 323 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); 324 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 325 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 326 | background-repeat: repeat-x; 327 | border-color: #f5e79e; 328 | } 329 | .alert-danger { 330 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 331 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 332 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); 333 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 334 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 335 | background-repeat: repeat-x; 336 | border-color: #dca7a7; 337 | } 338 | .progress { 339 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 340 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 341 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); 342 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 343 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 344 | background-repeat: repeat-x; 345 | } 346 | .progress-bar { 347 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); 348 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); 349 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); 350 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); 351 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); 352 | background-repeat: repeat-x; 353 | } 354 | .progress-bar-success { 355 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); 356 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); 357 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); 358 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 359 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 360 | background-repeat: repeat-x; 361 | } 362 | .progress-bar-info { 363 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 364 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 365 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); 366 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 367 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 368 | background-repeat: repeat-x; 369 | } 370 | .progress-bar-warning { 371 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 372 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 373 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); 374 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 375 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 376 | background-repeat: repeat-x; 377 | } 378 | .progress-bar-danger { 379 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); 380 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); 381 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); 382 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 383 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 384 | background-repeat: repeat-x; 385 | } 386 | .progress-bar-striped { 387 | background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 388 | background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 389 | background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); 390 | } 391 | .list-group { 392 | border-radius: 4px; 393 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 394 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075); 395 | } 396 | .list-group-item.active, 397 | .list-group-item.active:hover, 398 | .list-group-item.active:focus { 399 | text-shadow: 0 -1px 0 #286090; 400 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); 401 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); 402 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); 403 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); 404 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); 405 | background-repeat: repeat-x; 406 | border-color: #2b669a; 407 | } 408 | .list-group-item.active .badge, 409 | .list-group-item.active:hover .badge, 410 | .list-group-item.active:focus .badge { 411 | text-shadow: none; 412 | } 413 | .panel { 414 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 415 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05); 416 | } 417 | .panel-default > .panel-heading { 418 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 419 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 420 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); 421 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 422 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 423 | background-repeat: repeat-x; 424 | } 425 | .panel-primary > .panel-heading { 426 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 427 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); 428 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); 429 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); 430 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); 431 | background-repeat: repeat-x; 432 | } 433 | .panel-success > .panel-heading { 434 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 435 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 436 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); 437 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 438 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 439 | background-repeat: repeat-x; 440 | } 441 | .panel-info > .panel-heading { 442 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 443 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 444 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); 445 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 446 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 447 | background-repeat: repeat-x; 448 | } 449 | .panel-warning > .panel-heading { 450 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 451 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 452 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); 453 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 454 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 455 | background-repeat: repeat-x; 456 | } 457 | .panel-danger > .panel-heading { 458 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 459 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 460 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); 461 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 462 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 463 | background-repeat: repeat-x; 464 | } 465 | .well { 466 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 467 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 468 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); 469 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 470 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 471 | background-repeat: repeat-x; 472 | border-color: #dcdcdc; 473 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 474 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); 475 | } 476 | /*# sourceMappingURL=bootstrap-theme.css.map */ 477 | -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.4 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.4",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.4",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.4",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.4",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=c(d),f={relatedTarget:this};e.hasClass("open")&&(e.trigger(b=a.Event("hide.bs.dropdown",f)),b.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f)))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.4",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c&&c.$tip&&c.$tip.is(":visible")?void(c.hoverState="in"):(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.options.container?a(this.options.container):this.$element.parent(),p=this.getPosition(o);h="bottom"==h&&k.bottom+m>p.bottom?"top":"top"==h&&k.top-mp.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type)})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.4",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.4",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.4",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=a(document.body).height();"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); -------------------------------------------------------------------------------- /opt/artikliotsing/public/bootstrap/css/bootstrap-theme.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","bootstrap-theme.css","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAcA;;;;;;EAME,0CAAA;ECgDA,6FAAA;EACQ,qFAAA;EC5DT;AFgBC;;;;;;;;;;;;EC2CA,0DAAA;EACQ,kDAAA;EC7CT;AFVD;;;;;;EAiBI,mBAAA;EECH;AFiCC;;EAEE,wBAAA;EE/BH;AFoCD;EGnDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EAgC2C,2BAAA;EAA2B,oBAAA;EEzBvE;AFLC;;EAEE,2BAAA;EACA,8BAAA;EEOH;AFJC;;EAEE,2BAAA;EACA,uBAAA;EEMH;AFHC;;;EAGE,2BAAA;EACA,wBAAA;EEKH;AFUD;EGpDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEgCD;AF9BC;;EAEE,2BAAA;EACA,8BAAA;EEgCH;AF7BC;;EAEE,2BAAA;EACA,uBAAA;EE+BH;AF5BC;;;EAGE,2BAAA;EACA,wBAAA;EE8BH;AFdD;EGrDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEyDD;AFvDC;;EAEE,2BAAA;EACA,8BAAA;EEyDH;AFtDC;;EAEE,2BAAA;EACA,uBAAA;EEwDH;AFrDC;;;EAGE,2BAAA;EACA,wBAAA;EEuDH;AFtCD;EGtDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEkFD;AFhFC;;EAEE,2BAAA;EACA,8BAAA;EEkFH;AF/EC;;EAEE,2BAAA;EACA,uBAAA;EEiFH;AF9EC;;;EAGE,2BAAA;EACA,wBAAA;EEgFH;AF9DD;EGvDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EE2GD;AFzGC;;EAEE,2BAAA;EACA,8BAAA;EE2GH;AFxGC;;EAEE,2BAAA;EACA,uBAAA;EE0GH;AFvGC;;;EAGE,2BAAA;EACA,wBAAA;EEyGH;AFtFD;EGxDI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EAEA,wHAAA;ECnBF,qEAAA;EJiCA,6BAAA;EACA,uBAAA;EEoID;AFlIC;;EAEE,2BAAA;EACA,8BAAA;EEoIH;AFjIC;;EAEE,2BAAA;EACA,uBAAA;EEmIH;AFhIC;;;EAGE,2BAAA;EACA,wBAAA;EEkIH;AFxGD;;EChBE,oDAAA;EACQ,4CAAA;EC4HT;AFnGD;;EGzEI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHwEF,2BAAA;EEyGD;AFvGD;;;EG9EI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH8EF,2BAAA;EE6GD;AFpGD;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EJ6GA,oBAAA;EC/CA,6FAAA;EACQ,qFAAA;EC0JT;AF/GD;;EG3FI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,0DAAA;EACQ,kDAAA;ECoKT;AF5GD;;EAEE,gDAAA;EE8GD;AF1GD;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ECnBF,qEAAA;EF+OD;AFlHD;;EG9GI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EF2CF,yDAAA;EACQ,iDAAA;EC0LT;AF5HD;;EAYI,2CAAA;EEoHH;AF/GD;;;EAGE,kBAAA;EEiHD;AF5FD;EAfI;;;IAGE,aAAA;IG3IF,0EAAA;IACA,qEAAA;IACA,+FAAA;IAAA,wEAAA;IACA,6BAAA;IACA,wHAAA;ID0PD;EACF;AFxGD;EACE,+CAAA;ECzGA,4FAAA;EACQ,oFAAA;ECoNT;AFhGD;EGpKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4GD;AFvGD;EGrKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoHD;AF9GD;EGtKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EE4HD;AFrHD;EGvKI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH4JF,uBAAA;EEoID;AFrHD;EG/KI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDuSH;AFlHD;EGzLI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED8SH;AFxHD;EG1LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDqTH;AF9HD;EG3LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED4TH;AFpID;EG5LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDmUH;AF1ID;EG7LI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED0UH;AF7ID;EGhKI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDgTH;AFzID;EACE,oBAAA;EC5JA,oDAAA;EACQ,4CAAA;ECwST;AF1ID;;;EAGE,+BAAA;EGjNE,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EH+MF,uBAAA;EEgJD;AFrJD;;;EAQI,mBAAA;EEkJH;AFxID;ECjLE,mDAAA;EACQ,2CAAA;EC4TT;AFlID;EG1OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED+WH;AFxID;EG3OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDsXH;AF9ID;EG5OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED6XH;AFpJD;EG7OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDoYH;AF1JD;EG9OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;ED2YH;AFhKD;EG/OI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EDkZH;AFhKD;EGtPI,0EAAA;EACA,qEAAA;EACA,+FAAA;EAAA,wEAAA;EACA,6BAAA;EACA,wHAAA;EHoPF,uBAAA;ECzMA,2FAAA;EACQ,mFAAA;ECgXT","file":"bootstrap-theme.css","sourcesContent":["\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &:disabled,\n &[disabled] {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n",".btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default:disabled,\n.btn-default[disabled] {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary:disabled,\n.btn-primary[disabled] {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success:disabled,\n.btn-success[disabled] {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info:disabled,\n.btn-info[disabled] {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning:disabled,\n.btn-warning[disabled] {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger:disabled,\n.btn-danger[disabled] {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} --------------------------------------------------------------------------------