Initial commit
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.idea
|
||||
node_modules
|
||||
nativeDroid2-master
|
9
.npmignore
Normal file
@ -0,0 +1,9 @@
|
||||
Gruntfile.js
|
||||
tasks
|
||||
node_modules
|
||||
nativeDroid2-master
|
||||
.idea
|
||||
.git
|
||||
.travis.yml
|
||||
appveyor.yml
|
||||
test
|
7
.travis.yml
Normal file
@ -0,0 +1,7 @@
|
||||
os:
|
||||
- linux
|
||||
language: node_js
|
||||
node_js:
|
||||
- '4'
|
||||
- '8'
|
||||
- '10'
|
269
Gruntfile.js
Normal file
@ -0,0 +1,269 @@
|
||||
// To use this file in WebStorm, right click on the file name in the Project Panel (normally left) and select "Open Grunt Console"
|
||||
|
||||
/** @namespace __dirname */
|
||||
/* jshint -W097 */// jshint strict:false
|
||||
/*jslint node: true */
|
||||
"use strict";
|
||||
|
||||
module.exports = function (grunt) {
|
||||
|
||||
var srcDir = __dirname + '/';
|
||||
var dstDir = srcDir + '.build/';
|
||||
var pkg = grunt.file.readJSON('package.json');
|
||||
var iopackage = grunt.file.readJSON('io-package.json');
|
||||
var version = (pkg && pkg.version) ? pkg.version : iopackage.common.version;
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
pkg: pkg,
|
||||
clean: {
|
||||
all: ['tmp/*.json', 'tmp/*.zip', 'tmp/*.jpg', 'tmp/*.jpeg', 'tmp/*.png',
|
||||
dstDir + '*.json', dstDir + '*.zip', dstDir + '*.jpg', dstDir + '*.jpeg', dstDir + '*.png']
|
||||
},
|
||||
replace: {
|
||||
core: {
|
||||
options: {
|
||||
patterns: [
|
||||
{
|
||||
match: /version:\s*"[\.0-9]*"/,
|
||||
replacement: 'version: "' + version + '"'
|
||||
},
|
||||
{
|
||||
match: /"version":\s*"[\.0-9]*",/g,
|
||||
replacement: '"version": "' + version + '",'
|
||||
},
|
||||
{
|
||||
match: /\# yunkong2 mobile [\.0-9]*/,
|
||||
replacement: '# yunkong2 mobile ' + version
|
||||
},
|
||||
{
|
||||
match: /\# dev \d*/,
|
||||
replacement: '# dev 0'
|
||||
}
|
||||
]
|
||||
},
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
flatten: true,
|
||||
src: [
|
||||
srcDir + 'package.json',
|
||||
srcDir + 'io-package.json'
|
||||
],
|
||||
dest: srcDir
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
flatten: true,
|
||||
src: [
|
||||
srcDir + 'www/index.html',
|
||||
srcDir + 'www/cache.manifest'
|
||||
],
|
||||
dest: srcDir + 'www'
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
flatten: true,
|
||||
src: [
|
||||
srcDir + 'www/js/mobile.js'
|
||||
],
|
||||
dest: srcDir + 'www/js'
|
||||
}
|
||||
]
|
||||
},
|
||||
prepublish: {
|
||||
options: {
|
||||
patterns: [
|
||||
{
|
||||
match: /\<\!--html manifest="cache.manifest" lang="de" xmlns="http:\/\/www.w3.org\/1999\/html"--\>/,
|
||||
replacement: '<html manifest="cache.manifest" lang="de" xmlns="http://www.w3.org/1999/html">'
|
||||
}
|
||||
]
|
||||
},
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
flatten: true,
|
||||
src: [
|
||||
srcDir + 'www/index.html'
|
||||
],
|
||||
dest: srcDir + 'www'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
// Javascript code styler
|
||||
jscs: require(__dirname + '/tasks/jscs.js'),
|
||||
// Lint
|
||||
jshint: require(__dirname + '/tasks/jshint.js'),
|
||||
http: {
|
||||
get_hjscs: {
|
||||
options: {
|
||||
url: 'https://git.spacen.net/yunkong2/yunkong2.js-controller/master/tasks/jscs.js'
|
||||
},
|
||||
dest: 'tasks/jscs.js'
|
||||
},
|
||||
get_jshint: {
|
||||
options: {
|
||||
url: 'https://git.spacen.net/yunkong2/yunkong2.js-controller/master/tasks/jshint.js'
|
||||
},
|
||||
dest: 'tasks/jshint.js'
|
||||
},/*
|
||||
get_gruntfile: {
|
||||
options: {
|
||||
url: 'https://git.spacen.net/yunkong2/yunkong2.build/master/adapters/Gruntfile.js'
|
||||
},
|
||||
dest: 'Gruntfile.js'
|
||||
},*/
|
||||
get_utilsfile: {
|
||||
options: {
|
||||
url: 'https://git.spacen.net/yunkong2/yunkong2.build/master/adapters/utils.js'
|
||||
},
|
||||
dest: 'lib/utils.js'
|
||||
},
|
||||
get_jscsRules: {
|
||||
options: {
|
||||
url: 'https://git.spacen.net/yunkong2/yunkong2.js-controller/master/tasks/jscsRules.js'
|
||||
},
|
||||
dest: 'tasks/jscsRules.js'
|
||||
},
|
||||
get_iconOnline: {
|
||||
options: {
|
||||
encoding: null,
|
||||
url: iopackage.common.extIcon || 'https://git.spacen.net/yunkong2/yunkong2.js-controller/master/adapter/example/admin/example.png'
|
||||
},
|
||||
dest: dstDir + 'yunkong2.adapter.' + iopackage.common.name + '.png'
|
||||
|
||||
},
|
||||
get_iconOffline: {
|
||||
options: {
|
||||
encoding: null,
|
||||
url: iopackage.common.extIcon || 'https://git.spacen.net/yunkong2/yunkong2.js-controller/master/adapter/example/admin/example.png'
|
||||
},
|
||||
dest: dstDir + 'yunkong2.adapter.offline.' + iopackage.common.name + '.png'
|
||||
|
||||
}
|
||||
},
|
||||
compress: {
|
||||
adapter: {
|
||||
options: {
|
||||
archive: dstDir + 'yunkong2.adapter.' + iopackage.common.name + '.zip'
|
||||
},
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
src: ['**', '!tasks/*', '!Gruntfile.js', '!node_modules/**/*', '!build/**/*'],
|
||||
dest: '/',
|
||||
cwd: srcDir
|
||||
}
|
||||
]
|
||||
},
|
||||
adapterOffline: {
|
||||
options: {
|
||||
archive: dstDir + 'yunkong2.adapter.offline.' + iopackage.common.name + '.zip'
|
||||
},
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
src: ['**',
|
||||
'!tasks/*',
|
||||
'!Gruntfile.js',
|
||||
'!build/**/*',
|
||||
'!node_modules/grunt/**/*',
|
||||
'!node_modules/grunt*/**/*'
|
||||
],
|
||||
dest: '/',
|
||||
cwd: srcDir
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
exec: {
|
||||
npm: {
|
||||
cmd: 'npm install'
|
||||
}
|
||||
},
|
||||
copy: {
|
||||
json: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
cwd: srcDir,
|
||||
src: ['io-package.json'],
|
||||
dest: dstDir,
|
||||
rename: function (dest, src) {
|
||||
return dstDir + 'yunkong2.adapter.offline.' + iopackage.common.name + '.json';
|
||||
}
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
cwd: srcDir,
|
||||
src: ['io-package.json'],
|
||||
dest: dstDir,
|
||||
rename: function (dest, src) {
|
||||
return dstDir + 'yunkong2.adapter.' + iopackage.common.name + '.json';
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
grunt.registerTask('updateReadme', function () {
|
||||
var readme = grunt.file.read('README.md');
|
||||
var pos = readme.indexOf('## Changelog\r\n');
|
||||
if (pos != -1) {
|
||||
var readmeStart = readme.substring(0, pos + '## Changelog\r\n'.length);
|
||||
var readmeEnd = readme.substring(pos + '## Changelog\r\n'.length);
|
||||
|
||||
if (iopackage.common && readme.indexOf(iopackage.common.version) == -1) {
|
||||
var timestamp = new Date();
|
||||
var date = timestamp.getFullYear() + '-' +
|
||||
("0" + (timestamp.getMonth() + 1).toString(10)).slice(-2) + '-' +
|
||||
("0" + (timestamp.getDate()).toString(10)).slice(-2);
|
||||
|
||||
var news = "";
|
||||
if (iopackage.common.whatsNew) {
|
||||
for (var i = 0; i < iopackage.common.whatsNew.length; i++) {
|
||||
if (typeof iopackage.common.whatsNew[i] == 'string') {
|
||||
news += '* ' + iopackage.common.whatsNew[i] + '\r\n';
|
||||
} else {
|
||||
news += '* ' + iopackage.common.whatsNew[i].en + '\r\n';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
grunt.file.write('README.md', readmeStart + '### ' + iopackage.common.version + ' (' + date + ')\r\n' + (news ? news + '\r\n\r\n' : '\r\n') + readmeEnd);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-replace');
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-jscs');
|
||||
grunt.loadNpmTasks('grunt-http');
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-contrib-compress');
|
||||
grunt.loadNpmTasks('grunt-exec');
|
||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
|
||||
grunt.registerTask('default', [
|
||||
'exec',
|
||||
'http',
|
||||
'clean',
|
||||
'replace:core',
|
||||
'updateReadme',
|
||||
'compress',
|
||||
'copy',
|
||||
'jshint',
|
||||
'jscs'
|
||||
]);
|
||||
grunt.registerTask('prepublish', [
|
||||
'http',
|
||||
'replace'
|
||||
]);
|
||||
|
||||
grunt.registerTask('p', [
|
||||
'replace'
|
||||
]);
|
||||
};
|
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015-2016 bluefox<dogafox@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
291
README.md
Normal file
@ -0,0 +1,291 @@
|
||||
![Logo](admin/mobile.png)
|
||||
# yunkong2.mobile
|
||||
=================
|
||||
|
||||
[![NPM version](http://img.shields.io/npm/v/yunkong2.mobile.svg)](https://www.npmjs.com/package/yunkong2.mobile)
|
||||
[![Downloads](https://img.shields.io/npm/dm/yunkong2.mobile.svg)](https://www.npmjs.com/package/yunkong2.mobile)
|
||||
|
||||
[![NPM](https://nodei.co/npm/yunkong2.mobile.png?downloads=true)](https://nodei.co/npm/yunkong2.mobile/)
|
||||
|
||||
jQuery Mobile based user interface.
|
||||
|
||||
![Screen](img/screen.png)
|
||||
|
||||
## Usage
|
||||
To use mobile UI you need to create the logical structure in admin.
|
||||
|
||||
E.g.:
|
||||
Go to the tab "Enums" and create new enum, e.g. "customs".
|
||||
![Slider](img/starting1.png)
|
||||
|
||||
Create new enum group in "enum.customs", e.g. "controls"
|
||||
![Slider](img/starting2.png)
|
||||
|
||||
Add some states to "enum.customs.controls"
|
||||
![Slider](img/starting3.png)
|
||||
|
||||
![Slider](img/starting4.png)
|
||||
|
||||
Go to mobile page, press on "Info" (top, right) and press "Refresh" to load objects from yunkong2
|
||||
![Slider](img/starting5.png)
|
||||
|
||||
After reload you can go to "Customs => controls"
|
||||
![Slider](img/starting6.png)
|
||||
|
||||
|
||||
## Supported types
|
||||
|
||||
### Sliders:
|
||||
|
||||
![Slider](img/widget-slider.png)
|
||||
|
||||
- role = "level.dimmer"
|
||||
- role = "level.blind"
|
||||
- role consists "level", common.type is "number", common.write is "true" and common.max is defined
|
||||
- common.type = "number", common.write is "true" and common.max is defined
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
{
|
||||
"_id": "javascript.0.mobile.inputSlider",
|
||||
"type": "state",
|
||||
"common": {
|
||||
"name": "Slider",
|
||||
"type": "number",
|
||||
"read": true,
|
||||
"write": true,
|
||||
"min": 0,
|
||||
"max": 100
|
||||
},
|
||||
"native": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Buttons (must be explicit set to visible via edit mode):
|
||||
|
||||
![Button](img/widget-button.png)
|
||||
|
||||
- role consists "button"
|
||||
- role consists "action"
|
||||
|
||||
Buttons are invisible by default. They just writes "true" if pressed.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
{
|
||||
"_id": "javascript.0.mobile.inputButton",
|
||||
"type": "state",
|
||||
"common": {
|
||||
"name": "Button",
|
||||
"role": "button",
|
||||
"type": "boolean",
|
||||
"write": true
|
||||
},
|
||||
"native": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Switch:
|
||||
|
||||
![Switch](img/widget-switch.png)
|
||||
|
||||
- common.type = "boolean", common.write is "true"
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
{
|
||||
"_id": "javascript.0.mobile.inputSwitch",
|
||||
"type": "state",
|
||||
"common": {
|
||||
"name": "Switch",
|
||||
"type": "boolean",
|
||||
"write": true
|
||||
},
|
||||
"native": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Set with input field:
|
||||
|
||||
![Input field](img/widget-input-number.png)
|
||||
|
||||
- common.type = "number", common.max is undefined, common.write is "true", common.states is undefined
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
{
|
||||
"_id": "javascript.0.mobile.inputNumber",
|
||||
"type": "state",
|
||||
"common": {
|
||||
"name": "Number",
|
||||
"type": "number",
|
||||
"write": true
|
||||
},
|
||||
"native": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Set with states:
|
||||
|
||||
![States](img/widget-value-states.png)
|
||||
|
||||
- common.type = "number", common.max is undefined, common.write is "true", common.states is defined
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
{
|
||||
"_id": "javascript.0.mobile.inputNumber",
|
||||
"type": "state",
|
||||
"common": {
|
||||
"name": "Number",
|
||||
"type": "number",
|
||||
"write": true,
|
||||
"states": {
|
||||
"1": "Value 1",
|
||||
"2": "Value 2"
|
||||
}
|
||||
},
|
||||
"native": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Show boolean value:
|
||||
|
||||
![Boolean value](img/widget-value-boolean.png)
|
||||
|
||||
- common.write is "false" and common.type is "boolean"
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
{
|
||||
"_id": "javascript.0.mobile.valueBoolean",
|
||||
"type": "state",
|
||||
"common": {
|
||||
"name": "Boolean value",
|
||||
"type": "bolean"
|
||||
},
|
||||
"native": {}
|
||||
}
|
||||
```
|
||||
|
||||
### Show value:
|
||||
|
||||
![Number value](img/widget-value-number.png)
|
||||
|
||||
- common.write is "false" and common.type is not "boolean"
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
{
|
||||
"_id": "javascript.0.mobile.valueNumber",
|
||||
"type": "state",
|
||||
"common": {
|
||||
"name": "Number value",
|
||||
"type": "number",
|
||||
"unit": "%"
|
||||
},
|
||||
"native": {}
|
||||
}
|
||||
```
|
||||
|
||||
## ToDO:
|
||||
- edit of Icon
|
||||
- show some widgets with more icons
|
||||
- tablet view
|
||||
|
||||
## Changelog
|
||||
|
||||
#### 0.4.12 (2017-11-14)
|
||||
* (Apollon77) update adapter type
|
||||
|
||||
#### 0.4.11 (2017-07-12)
|
||||
* (BasGo) Fixed blind states
|
||||
|
||||
#### 0.4.10 (2016-11-08)
|
||||
* (bluefox) Better cloud support
|
||||
|
||||
#### 0.4.9 (2016-10-29)
|
||||
* (bluefox) Fix rooms rendering
|
||||
* (bluefox) add green, red, blue, white types
|
||||
|
||||
#### 0.4.8 (2016-10-09)
|
||||
* (bluefox) implement type blind
|
||||
|
||||
#### 0.4.7 (2016-09-10)
|
||||
* (bluefox) make narrow screen on wide displays
|
||||
* (bluefox) fix some widgets
|
||||
|
||||
#### 0.4.6 (2016-09-03)
|
||||
* (bluefox) support of custom images
|
||||
* (bluefox) fix input number and select value
|
||||
|
||||
#### 0.4.5 (2016-07-01)
|
||||
* (bluefox) fix open first page
|
||||
|
||||
#### 0.4.4 (2016-06-24)
|
||||
* (bluefox) reload if problems occur
|
||||
|
||||
#### 0.4.3 (2016-06-24)
|
||||
* (bluefox) just check invalid objects
|
||||
|
||||
#### 0.4.2 (2016-06-14)
|
||||
* (bluefox) update version number
|
||||
|
||||
#### 0.4.1 (2016-05-12)
|
||||
* (bluefox) fix control of logical states
|
||||
|
||||
#### 0.4.0
|
||||
* (bluefox) add theme switcher
|
||||
|
||||
#### 0.3.0
|
||||
* (bluefox) fix problem with room names with spaces
|
||||
* (bluefox) implement side panel
|
||||
|
||||
#### 0.2.2
|
||||
* (bluefox) fix locations in edit mode
|
||||
* (bluefox) enable visibility of indicators
|
||||
|
||||
#### 0.2.1
|
||||
* (bluefox) fix some errors
|
||||
|
||||
#### 0.2.0
|
||||
* (bluefox) sorting and edit name
|
||||
|
||||
#### 0.1.1
|
||||
* (bluefox) fix errors for some devices
|
||||
|
||||
#### 0.1.0
|
||||
* (bluefox) edit of visibility
|
||||
|
||||
#### 0.0.4
|
||||
* (bluefox) first version. No edit possible.
|
||||
|
||||
## License
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015-2016 bluefox <dogafox@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
91
admin/index.html
Normal file
@ -0,0 +1,91 @@
|
||||
<html>
|
||||
|
||||
<!-- these 4 files always have to be included -->
|
||||
<link rel="stylesheet" type="text/css" href="../../lib/css/themes/jquery-ui/redmond/jquery-ui.min.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="../../lib/css/jquery.multiselect-1.13.css"/>
|
||||
<script type="text/javascript" src="../../lib/js/jquery-1.11.1.min.js"></script>
|
||||
<script type="text/javascript" src="../../socket.io/socket.io.js"></script>
|
||||
<script type="text/javascript" src="../../lib/js/jquery-ui-1.10.3.full.min.js"></script>
|
||||
|
||||
<!-- these two file always have to be included -->
|
||||
<link rel="stylesheet" type="text/css" href="../../css/adapter.css"/>
|
||||
<script type="text/javascript" src="../../js/translate.js"></script>
|
||||
<script type="text/javascript" src="../../js/adapter-settings.js"></script>
|
||||
|
||||
<style>
|
||||
.table_header {
|
||||
background-color: blue;
|
||||
color: white;
|
||||
}
|
||||
.ip {
|
||||
width: 150px;
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
<!-- you have to define 2 functions in the global scope: -->
|
||||
<script type="text/javascript">
|
||||
function setValue(id, value) {
|
||||
// example: select elements with id=key and class=value and insert value
|
||||
if ($('#' + id + '.value').attr('type') == 'checkbox') {
|
||||
$('#' + id + '.value').prop('checked', value).change(function() {
|
||||
changed = true;
|
||||
$('#save').button("enable");
|
||||
});
|
||||
} else {
|
||||
$('#' + id + '.value').val(value).change(function() {
|
||||
changed = true;
|
||||
$('#save').button("enable");
|
||||
}).keyup(function() {
|
||||
// Chack that only numbers entered
|
||||
if ($(this).hasClass('number')) {
|
||||
var val = $(this).val();
|
||||
if (val) {
|
||||
var newVal = '';
|
||||
for (var i = 0; i < val.length; i++) {
|
||||
if (val[i] >= '0' && val[i] <= '9') {
|
||||
newVal += val[i];
|
||||
}
|
||||
}
|
||||
|
||||
if (val != newVal) $(this).val(newVal);
|
||||
}
|
||||
}
|
||||
|
||||
changed = true;
|
||||
$('#save').button("enable");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// the function loadSettings has to exist ...
|
||||
function load(settings) {
|
||||
if (!settings) return;
|
||||
|
||||
changed = false;
|
||||
$('#save').button("disable");
|
||||
|
||||
devices = settings.devices || [];
|
||||
|
||||
for (var key in settings) {
|
||||
setValue(key, settings[key]);
|
||||
}
|
||||
}
|
||||
|
||||
// ... and the function save has to exist.
|
||||
// you have to make sure the callback is called with the settings object as first param!
|
||||
function save(callback) {
|
||||
callback(null);
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- you have to put your config page in a div with id adapter-container -->
|
||||
<div id="adapter-container">
|
||||
|
||||
<table><tr>
|
||||
<td><img src="mobile.png"></td>
|
||||
<td style="padding-top: 20px;padding-left: 10px"><h3 class="translate">mobile adapter settings</h3></td>
|
||||
</tr></table>
|
||||
|
||||
<div class="translate">There is nothing to setup</h4>
|
||||
</div>
|
||||
</html>
|
BIN
admin/mobile.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
21
appveyor.yml
Normal file
@ -0,0 +1,21 @@
|
||||
version: 'test-{build}'
|
||||
environment:
|
||||
matrix:
|
||||
- nodejs_version: '4'
|
||||
- nodejs_version: '8'
|
||||
- nodejs_version: '10'
|
||||
platform:
|
||||
- x86
|
||||
clone_folder: 'c:\projects\%APPVEYOR_PROJECT_NAME%'
|
||||
install:
|
||||
- ps: 'Install-Product node $env:nodejs_version $env:platform'
|
||||
- ps: '$NpmVersion = (npm -v).Substring(0,1)'
|
||||
- ps: 'if($NpmVersion -eq 5) { npm install -g npm@5 }'
|
||||
- ps: npm --version
|
||||
- npm install
|
||||
test_script:
|
||||
- echo %cd%
|
||||
- node --version
|
||||
- npm --version
|
||||
- npm test
|
||||
build: 'off'
|
BIN
img/screen.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
img/starting1.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
img/starting2.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/starting3.png
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
img/starting4.png
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
img/starting5.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
img/starting6.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/widget-button.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
img/widget-input-number.png
Normal file
After Width: | Height: | Size: 5.2 KiB |
BIN
img/widget-input-states.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
img/widget-slider.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
img/widget-switch.png
Normal file
After Width: | Height: | Size: 4.6 KiB |
BIN
img/widget-value-boolean.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
BIN
img/widget-value-number.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
114
io-package.json
Normal file
@ -0,0 +1,114 @@
|
||||
{
|
||||
"common": {
|
||||
"name": "mobile",
|
||||
"version": "0.4.11",
|
||||
"news": {
|
||||
"0.4.12": {
|
||||
"en": "Update adapter type",
|
||||
"de": "Update Adaptertyp",
|
||||
"ru": "Обновить тип драйвера"
|
||||
},
|
||||
"0.4.11": {
|
||||
"en": "Fixed blind states",
|
||||
"de": "Rolladenstatus korrigiert",
|
||||
"ru": "Исправлены слепые состояния"
|
||||
},
|
||||
"0.4.10": {
|
||||
"en": "Better support of cloud",
|
||||
"de": "Bessere cloud Unterstützung",
|
||||
"ru": "Поддержка облака"
|
||||
},
|
||||
"0.4.9": {
|
||||
"en": "Fix rooms rendering\nadd green, red, blue, white types",
|
||||
"de": "Korrigiere Räumeaufbau\nHinzugefügt: rot, blau, grün- Typen",
|
||||
"ru": "Исправлено построение комнат\nДобавлены новые типы: красный, синий..."
|
||||
},
|
||||
"0.4.8": {
|
||||
"en": "implement type blind",
|
||||
"de": "Typ Rolladen ist fertig",
|
||||
"ru": "Добавлен тип жалюзи"
|
||||
},
|
||||
"0.4.7": {
|
||||
"en": "fix input number and select value",
|
||||
"de": "Korrigieren Nummereingabe und Wertauswahl",
|
||||
"ru": "исправить ввод номера и выбор значения"
|
||||
},
|
||||
"0.4.6": {
|
||||
"en": "fix input number and select value",
|
||||
"de": "Korrigieren Nummereingabe und Wertauswahl",
|
||||
"ru": "исправить ввод номера и выбор значения"
|
||||
},
|
||||
"0.4.5": {
|
||||
"en": "fix open first page",
|
||||
"de": "fix open first page",
|
||||
"ru": "fix open first page"
|
||||
},
|
||||
"0.4.4": {
|
||||
"en": "reload if problems occur",
|
||||
"de": "reload if problems occur",
|
||||
"ru": "reload if problems occur"
|
||||
},
|
||||
"0.4.3": {
|
||||
"en": "check invalid objects",
|
||||
"de": "check invalid objects",
|
||||
"ru": "check invalid objects"
|
||||
},
|
||||
"0.4.2": {
|
||||
"en": "update version number",
|
||||
"de": "update version number",
|
||||
"ru": "update version number"
|
||||
}
|
||||
},
|
||||
"title": "Mobile UI",
|
||||
"desc": {
|
||||
"en": "jQuery Mobile based yunkong2 user interface",
|
||||
"de": "yunkong2 GUI für mobile Geräte",
|
||||
"ru": "yunkong2 визуализация для мобильных устройств"
|
||||
},
|
||||
"platform": "javascript/Node.js",
|
||||
"onlyWWW": "true",
|
||||
"loglevel": "info",
|
||||
"dependencies": [
|
||||
"web"
|
||||
],
|
||||
"icon": "mobile.png",
|
||||
"extIcon": "https://git.spacen.net/yunkong2/yunkong2.mobile/master/admin/mobile.png",
|
||||
"keywords": [
|
||||
"user",
|
||||
"interface",
|
||||
"webapp",
|
||||
"jquerymobile",
|
||||
"ui"
|
||||
],
|
||||
"readme": "https://git.spacen.net/yunkong2/yunkong2.mobile/blob/master/README.md",
|
||||
"singleton": true,
|
||||
"preserveSettings": "mobile",
|
||||
"authors": [
|
||||
"bluefox <dogafox@gmail.com>"
|
||||
],
|
||||
"localLink": "%web_protocol%://%ip%:%web_port%/mobile/index.html",
|
||||
"type": "visualization",
|
||||
"license": "MIT",
|
||||
"noConfig": true,
|
||||
"welcomeScreen": {
|
||||
"link": "mobile/index.html",
|
||||
"name": "mobile",
|
||||
"img": "mobile.admin/mobile.png",
|
||||
"color": "black",
|
||||
"order": 2
|
||||
}
|
||||
},
|
||||
"native": {
|
||||
"root": [
|
||||
"enum.favorites.Admin",
|
||||
"enum.rooms",
|
||||
"enum.functions"
|
||||
],
|
||||
"swatches": {
|
||||
"header": "b",
|
||||
"content": "c",
|
||||
"footer": "a"
|
||||
}
|
||||
},
|
||||
"objects": []
|
||||
}
|
47
package.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"name": "yunkong2.mobile",
|
||||
"description": "jQuery Mobile based yunkong2 user interface",
|
||||
"version": "0.4.12",
|
||||
"author": {
|
||||
"name": "bluefox",
|
||||
"email": "dogafox@gmail.com"
|
||||
},
|
||||
"contributors": [
|
||||
"bluefox <dogafox@gmail.com>"
|
||||
],
|
||||
"homepage": "https://git.spacen.net/yunkong2/yunkong2.mobile",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://git.spacen.net/yunkong2/yunkong2.mobile"
|
||||
},
|
||||
"licenses": [
|
||||
{
|
||||
"type": "MIT",
|
||||
"url": "https://git.spacen.net/yunkong2/yunkong2.mobile/blob/master/LICENSE"
|
||||
}
|
||||
],
|
||||
"keywords": [
|
||||
"yunkong2",
|
||||
"GUI",
|
||||
"web interface",
|
||||
"home automation",
|
||||
"SCADA"
|
||||
],
|
||||
"devDependencies": {
|
||||
"grunt": "^1.0.1",
|
||||
"grunt-replace": "^1.0.1",
|
||||
"grunt-contrib-jshint": "^1.1.0",
|
||||
"grunt-jscs": "^3.0.1",
|
||||
"grunt-http": "^2.2.0",
|
||||
"mocha": "^4.1.0",
|
||||
"chai": "^4.1.2"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://git.spacen.net/yunkong2/yunkong2.mobile/issues"
|
||||
},
|
||||
"main": "widgets/hqwidgets.html",
|
||||
"scripts": {
|
||||
"test": "echo \"No test specified\" && exit 0"
|
||||
},
|
||||
"license": "MIT"
|
||||
}
|
17
tasks/jscs.js
Normal file
@ -0,0 +1,17 @@
|
||||
var srcDir = __dirname + "/../";
|
||||
|
||||
module.exports = {
|
||||
all: {
|
||||
src: [
|
||||
srcDir + "*.js",
|
||||
srcDir + "lib/*.js",
|
||||
srcDir + "adapter/example/*.js",
|
||||
srcDir + "tasks/**/*.js",
|
||||
srcDir + "www/**/*.js",
|
||||
'!' + srcDir + "www/lib/**/*.js",
|
||||
'!' + srcDir + 'node_modules/**/*.js',
|
||||
'!' + srcDir + 'adapter/*/node_modules/**/*.js'
|
||||
],
|
||||
options: require('./jscsRules.js')
|
||||
}
|
||||
};
|
36
tasks/jscsRules.js
Normal file
@ -0,0 +1,36 @@
|
||||
module.exports = {
|
||||
force: true,
|
||||
"requireCurlyBraces": ["else", "for", "while", "do", "try", "catch"], /*"if",*/
|
||||
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
|
||||
"requireSpaceBeforeBlockStatements": true,
|
||||
"requireParenthesesAroundIIFE": true,
|
||||
"disallowSpacesInFunctionDeclaration": {"beforeOpeningRoundBrace": true},
|
||||
"disallowSpacesInNamedFunctionExpression": {"beforeOpeningRoundBrace": true},
|
||||
"requireSpacesInFunctionExpression": {"beforeOpeningCurlyBrace": true},
|
||||
"requireSpacesInAnonymousFunctionExpression": {"beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true},
|
||||
"requireSpacesInNamedFunctionExpression": {"beforeOpeningCurlyBrace": true},
|
||||
"requireSpacesInFunctionDeclaration": {"beforeOpeningCurlyBrace": true},
|
||||
"disallowMultipleVarDecl": true,
|
||||
"requireBlocksOnNewline": true,
|
||||
"disallowEmptyBlocks": true,
|
||||
"disallowSpacesInsideObjectBrackets": true,
|
||||
"disallowSpacesInsideArrayBrackets": true,
|
||||
"disallowSpaceAfterObjectKeys": true,
|
||||
"disallowSpacesInsideParentheses": true,
|
||||
"requireCommaBeforeLineBreak": true,
|
||||
//"requireAlignedObjectValues": "all",
|
||||
"requireOperatorBeforeLineBreak": ["?", "+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
|
||||
// "disallowLeftStickedOperators": ["?", "+", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
|
||||
// "requireRightStickedOperators": ["!"],
|
||||
// "requireSpaceAfterBinaryOperators": ["?", "+", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
|
||||
//"disallowSpaceAfterBinaryOperators": [","],
|
||||
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
|
||||
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
|
||||
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
|
||||
"requireSpaceAfterBinaryOperators": ["?", ">", ",", ">=", "<=", "<", "+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
|
||||
//"validateIndentation": 4,
|
||||
//"validateQuoteMarks": { "mark": "\"", "escape": true },
|
||||
"disallowMixedSpacesAndTabs": true,
|
||||
"disallowKeywordsOnNewLine": ["else", "catch"]
|
||||
|
||||
};
|
17
tasks/jshint.js
Normal file
@ -0,0 +1,17 @@
|
||||
var srcDir = __dirname + "/../";
|
||||
|
||||
module.exports = {
|
||||
options: {
|
||||
force: true
|
||||
},
|
||||
all: [
|
||||
srcDir + "*.js",
|
||||
srcDir + "lib/*.js",
|
||||
srcDir + "adapter/example/*.js",
|
||||
srcDir + "tasks/**/*.js",
|
||||
srcDir + "www/**/*.js",
|
||||
'!' + srcDir + "www/lib/**/*.js",
|
||||
'!' + srcDir + 'node_modules/**/*.js',
|
||||
'!' + srcDir + 'adapter/*/node_modules/**/*.js'
|
||||
]
|
||||
};
|
91
test/testPackageFiles.js
Normal file
@ -0,0 +1,91 @@
|
||||
/* jshint -W097 */
|
||||
/* jshint strict:false */
|
||||
/* jslint node: true */
|
||||
/* jshint expr: true */
|
||||
var expect = require('chai').expect;
|
||||
var fs = require('fs');
|
||||
|
||||
describe('Test package.json and io-package.json', function() {
|
||||
it('Test package files', function (done) {
|
||||
console.log();
|
||||
|
||||
var fileContentIOPackage = fs.readFileSync(__dirname + '/../io-package.json', 'utf8');
|
||||
var ioPackage = JSON.parse(fileContentIOPackage);
|
||||
|
||||
var fileContentNPMPackage = fs.readFileSync(__dirname + '/../package.json', 'utf8');
|
||||
var npmPackage = JSON.parse(fileContentNPMPackage);
|
||||
|
||||
expect(ioPackage).to.be.an('object');
|
||||
expect(npmPackage).to.be.an('object');
|
||||
|
||||
expect(ioPackage.common.version, 'ERROR: Version number in io-package.json needs to exist').to.exist;
|
||||
expect(npmPackage.version, 'ERROR: Version number in package.json needs to exist').to.exist;
|
||||
|
||||
expect(ioPackage.common.version, 'ERROR: Version numbers in package.json and io-package.json needs to match').to.be.equal(npmPackage.version);
|
||||
|
||||
if (!ioPackage.common.news || !ioPackage.common.news[ioPackage.common.version]) {
|
||||
console.log('WARNING: No news entry for current version exists in io-package.json, no rollback in Admin possible!');
|
||||
console.log();
|
||||
}
|
||||
|
||||
expect(npmPackage.author, 'ERROR: Author in package.json needs to exist').to.exist;
|
||||
expect(ioPackage.common.authors, 'ERROR: Authors in io-package.json needs to exist').to.exist;
|
||||
|
||||
if (ioPackage.common.name.indexOf('template') !== 0) {
|
||||
if (Array.isArray(ioPackage.common.authors)) {
|
||||
expect(ioPackage.common.authors.length, 'ERROR: Author in io-package.json needs to be set').to.not.be.equal(0);
|
||||
if (ioPackage.common.authors.length === 1) {
|
||||
expect(ioPackage.common.authors[0], 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name <my@email.com>');
|
||||
}
|
||||
}
|
||||
else {
|
||||
expect(ioPackage.common.authors, 'ERROR: Author in io-package.json needs to be a real name').to.not.be.equal('my Name <my@email.com>');
|
||||
}
|
||||
}
|
||||
else {
|
||||
console.log('WARNING: Testing for set authors field in io-package skipped because template adapter');
|
||||
console.log();
|
||||
}
|
||||
expect(fs.existsSync(__dirname + '/../README.md'), 'ERROR: README.md needs to exist! Please create one with description, detail information and changelog. English is mandatory.').to.be.true;
|
||||
if (!ioPackage.common.titleLang || typeof ioPackage.common.titleLang !== 'object') {
|
||||
console.log('WARNING: titleLang is not existing in io-package.json. Please add');
|
||||
console.log();
|
||||
}
|
||||
if (
|
||||
ioPackage.common.title.indexOf('yunkong2') !== -1 ||
|
||||
ioPackage.common.title.indexOf('yunkong2') !== -1 ||
|
||||
ioPackage.common.title.indexOf('adapter') !== -1 ||
|
||||
ioPackage.common.title.indexOf('Adapter') !== -1
|
||||
) {
|
||||
console.log('WARNING: title contains Adapter or yunkong2. It is clear anyway, that it is adapter for yunkong2.');
|
||||
console.log();
|
||||
}
|
||||
|
||||
if (ioPackage.common.name.indexOf('vis-') !== 0) {
|
||||
if (!ioPackage.common.materialize || !fs.existsSync(__dirname + '/../admin/index_m.html') || !fs.existsSync(__dirname + '/../gulpfile.js')) {
|
||||
console.log('WARNING: Admin3 support is missing! Please add it');
|
||||
console.log();
|
||||
}
|
||||
if (ioPackage.common.materialize) {
|
||||
expect(fs.existsSync(__dirname + '/../admin/index_m.html'), 'Admin3 support is enabled in io-package.json, but index_m.html is missing!').to.be.true;
|
||||
}
|
||||
}
|
||||
|
||||
var licenseFileExists = fs.existsSync(__dirname + '/../LICENSE');
|
||||
var fileContentReadme = fs.readFileSync(__dirname + '/../README.md', 'utf8');
|
||||
if (fileContentReadme.indexOf('## Changelog') === -1) {
|
||||
console.log('Warning: The README.md should have a section ## Changelog');
|
||||
console.log();
|
||||
}
|
||||
expect((licenseFileExists || fileContentReadme.indexOf('## License') !== -1), 'A LICENSE must exist as LICENSE file or as part of the README.md').to.be.true;
|
||||
if (!licenseFileExists) {
|
||||
console.log('Warning: The License should also exist as LICENSE file');
|
||||
console.log();
|
||||
}
|
||||
if (fileContentReadme.indexOf('## License') === -1) {
|
||||
console.log('Warning: The README.md should also have a section ## License to be shown in Admin3');
|
||||
console.log();
|
||||
}
|
||||
done();
|
||||
});
|
||||
});
|
0
www/.gitignore
vendored
Normal file
11
www/cache.manifest
Normal file
@ -0,0 +1,11 @@
|
||||
CACHE MANIFEST
|
||||
|
||||
# yunkong2 mobile 0.4.10
|
||||
# dev 0
|
||||
|
||||
NETWORK:
|
||||
*
|
||||
|
||||
CACHE:
|
||||
|
||||
FALLBACK:
|
BIN
www/css/OpenSans-Bold.ttf
Normal file
BIN
www/css/OpenSans-Italic.ttf
Normal file
202
www/css/OpenSans-LICENSE.txt
Normal file
@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
BIN
www/css/OpenSans-Regular.ttf
Normal file
1051
www/css/mobile.css
Normal file
BIN
www/img/alarmOff.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
www/img/alarmOn.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
www/img/battery.png
Normal file
After Width: | Height: | Size: 450 B |
BIN
www/img/blind0.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
www/img/blind10.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
www/img/blind100.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
www/img/blind20.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
www/img/blind30.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
www/img/blind40.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
www/img/blind50.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
www/img/blind60.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
www/img/blind70.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
www/img/blind80.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
www/img/blind90.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
www/img/bulbOff.pdn
Normal file
BIN
www/img/bulbOff.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
www/img/bulbOn.png
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
www/img/down.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
www/img/error.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
www/img/favicon.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
www/img/gear.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
www/img/lastChange.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
www/img/rgb-blue.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
www/img/rgb-green.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
www/img/rgb-red.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
BIN
www/img/rgb-white.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
www/img/socketOff.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
www/img/socketOn.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
94
www/img/temp_control.svg
Normal file
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="361px"
|
||||
height="361px" viewBox="0 0 361 361" style="enable-background:new 0 0 361 361;" xml:space="preserve">
|
||||
<g id="temp_x5F_control">
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M79.873,161.084c15.77-35.481,45.484-61.806,82.354-73.811
|
||||
c39.982-13.018,84.019-7.971,122.167,8.59c5.852,2.541,10.949-6.073,5.047-8.635c-40.863-17.74-86.938-23.159-129.873-9.598
|
||||
c-39.156,12.367-71.634,40.84-88.331,78.406C68.644,161.875,77.258,166.968,79.873,161.084L79.873,161.084z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M79.038,162.129c26.971-26.788,63.205-41.83,101.209-42.087
|
||||
c38.527-0.261,75.737,15.62,103.048,42.59c4.59,4.533,11.664-2.535,7.07-7.071c-29.012-28.651-67.952-45.045-108.745-45.515
|
||||
c-40.924-0.472-80.707,16.263-109.654,45.012C67.386,159.606,74.459,166.676,79.038,162.129L79.038,162.129z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M281.918,92.442c0,22.218,0,44.436,0,66.654c0,6.449,10,6.449,10,0c0-22.218,0-44.436,0-66.654
|
||||
C291.918,85.993,281.918,85.993,281.918,92.442L281.918,92.442z"/>
|
||||
</g>
|
||||
</g>
|
||||
<path style="fill:none;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" d="M178.171,253.709
|
||||
c0,1.932-1.696,3.497-3.788,3.497h-13.888c-2.092,0-3.788-1.565-3.788-3.497v-96.958c0-1.931,1.696-3.497,3.788-3.497h13.888
|
||||
c2.092,0,3.788,1.566,3.788,3.497V253.709z"/>
|
||||
<path style="fill:#FFFFFF;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" d="M183.852,282.879
|
||||
c0,2.094-1.329,3.788-2.969,3.788h-26.888c-1.64,0-2.969-1.694-2.969-3.788v-21.885c0-2.092,1.329-3.787,2.969-3.787h26.888
|
||||
c1.64,0,2.969,1.695,2.969,3.787V282.879z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M193.301,165.83c3.788,0,7.576,0,11.364,0c6.448,0,6.448-10,0-10c-3.788,0-7.576,0-11.364,0
|
||||
C186.853,155.83,186.853,165.83,193.301,165.83L193.301,165.83z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M193.301,191.081c3.788,0,7.576,0,11.364,0c6.448,0,6.448-10,0-10c-3.788,0-7.576,0-11.364,0
|
||||
C186.853,181.081,186.853,191.081,193.301,191.081L193.301,191.081z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M193.301,216.964c3.788,0,7.576,0,11.364,0c6.448,0,6.448-10,0-10c-3.788,0-7.576,0-11.364,0
|
||||
C186.853,206.964,186.853,216.964,193.301,216.964L193.301,216.964z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M193.301,244.109c3.788,0,7.576,0,11.364,0c6.448,0,6.448-10,0-10c-3.788,0-7.576,0-11.364,0
|
||||
C186.853,234.109,186.853,244.109,193.301,244.109L193.301,244.109z"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<rect x="156.706" y="222.539" style="fill:#FFFFFF;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" width="21.464" height="44.559"/>
|
||||
<path style="fill:#FFFFFF;" d="M231.549,179.343c0.813-0.336,1.66-0.72,2.541-1.155c0.883-0.434,1.744-0.91,2.584-1.428
|
||||
c0.84-0.518,1.645-1.063,2.414-1.638c0.771-0.574,1.463-1.183,2.08-1.827h4.367V202.4h-6.258v-20.957
|
||||
c-0.84,0.561-1.778,1.07-2.814,1.533c-1.035,0.461-2.044,0.86-3.023,1.196L231.549,179.343z"/>
|
||||
<path style="fill:#FFFFFF;" d="M268.893,187.785c0,4.9-0.932,8.659-2.793,11.277c-1.862,2.617-4.431,3.926-7.707,3.926
|
||||
c-3.275,0-5.845-1.309-7.707-3.926c-1.862-2.618-2.793-6.377-2.793-11.277c0-2.436,0.245-4.592,0.735-6.469
|
||||
c0.489-1.875,1.196-3.458,2.121-4.746c0.924-1.288,2.03-2.268,3.317-2.94c1.288-0.672,2.73-1.008,4.326-1.008
|
||||
c3.276,0,5.845,1.309,7.707,3.927C267.961,179.168,268.893,182.913,268.893,187.785z M262.509,187.785
|
||||
c0-1.456-0.07-2.779-0.21-3.969c-0.141-1.19-0.364-2.219-0.672-3.087c-0.309-0.868-0.729-1.54-1.26-2.016
|
||||
c-0.533-0.476-1.191-0.714-1.975-0.714c-0.784,0-1.436,0.238-1.953,0.714c-0.518,0.477-0.938,1.148-1.26,2.016
|
||||
c-0.322,0.869-0.553,1.897-0.693,3.087c-0.141,1.189-0.209,2.513-0.209,3.969s0.068,2.786,0.209,3.99
|
||||
c0.141,1.203,0.371,2.24,0.693,3.107c0.322,0.868,0.742,1.541,1.26,2.016c0.518,0.477,1.169,0.715,1.953,0.715
|
||||
c0.783,0,1.441-0.238,1.975-0.715c0.531-0.475,0.951-1.147,1.26-2.016c0.308-0.867,0.531-1.904,0.672-3.107
|
||||
C262.438,190.571,262.509,189.241,262.509,187.785z"/>
|
||||
<path style="fill:#FFFFFF;" d="M291.749,187.785c0,4.9-0.932,8.659-2.794,11.277c-1.861,2.617-4.43,3.926-7.706,3.926
|
||||
s-5.845-1.309-7.707-3.926c-1.862-2.618-2.793-6.377-2.793-11.277c0-2.436,0.245-4.592,0.735-6.469
|
||||
c0.488-1.875,1.196-3.458,2.121-4.746c0.924-1.288,2.029-2.268,3.317-2.94s2.729-1.008,4.326-1.008
|
||||
c3.276,0,5.845,1.309,7.706,3.927C290.817,179.168,291.749,182.913,291.749,187.785z M285.365,187.785
|
||||
c0-1.456-0.07-2.779-0.211-3.969c-0.141-1.19-0.363-2.219-0.672-3.087c-0.309-0.868-0.729-1.54-1.26-2.016
|
||||
c-0.532-0.476-1.19-0.714-1.974-0.714c-0.784,0-1.436,0.238-1.953,0.714c-0.519,0.477-0.938,1.148-1.261,2.016
|
||||
c-0.322,0.869-0.553,1.897-0.692,3.087c-0.141,1.189-0.21,2.513-0.21,3.969s0.069,2.786,0.21,3.99
|
||||
c0.14,1.203,0.37,2.24,0.692,3.107c0.322,0.868,0.742,1.541,1.261,2.016c0.518,0.477,1.169,0.715,1.953,0.715
|
||||
c0.783,0,1.441-0.238,1.974-0.715c0.531-0.475,0.951-1.147,1.26-2.016c0.309-0.867,0.531-1.904,0.672-3.107
|
||||
C285.295,190.571,285.365,189.241,285.365,187.785z"/>
|
||||
<path style="fill:#FFFFFF;" d="M90.917,186.99c0,4.9-0.932,8.66-2.793,11.277c-1.862,2.619-4.431,3.928-7.707,3.928
|
||||
c-3.276,0-5.845-1.309-7.707-3.928c-1.863-2.617-2.793-6.377-2.793-11.277c0-2.436,0.245-4.592,0.735-6.467
|
||||
c0.489-1.875,1.197-3.458,2.121-4.746c0.924-1.288,2.03-2.268,3.318-2.94c1.288-0.672,2.73-1.008,4.326-1.008
|
||||
c3.276,0,5.844,1.309,7.707,3.927C89.986,178.375,90.917,182.119,90.917,186.99z M84.533,186.99c0-1.455-0.07-2.777-0.21-3.969
|
||||
c-0.141-1.189-0.364-2.218-0.672-3.086c-0.309-0.868-0.729-1.54-1.26-2.016c-0.532-0.476-1.19-0.714-1.974-0.714
|
||||
c-0.785,0-1.436,0.238-1.953,0.714c-0.519,0.477-0.938,1.148-1.26,2.016c-0.322,0.868-0.553,1.897-0.693,3.086
|
||||
c-0.141,1.191-0.21,2.514-0.21,3.969c0,1.457,0.069,2.787,0.21,3.99c0.14,1.205,0.371,2.24,0.693,3.108
|
||||
c0.322,0.868,0.742,1.54,1.26,2.017c0.518,0.477,1.168,0.713,1.953,0.713c0.783,0,1.441-0.236,1.974-0.713
|
||||
c0.532-0.477,0.952-1.148,1.26-2.017c0.308-0.868,0.531-1.903,0.672-3.108C84.463,189.777,84.533,188.447,84.533,186.99z"/>
|
||||
</g>
|
||||
<g id="Ebene_1">
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.3 KiB |
40
www/img/temp_temperature.svg
Normal file
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="361px"
|
||||
height="361px" viewBox="0 0 361 361" style="enable-background:new 0 0 361 361;" xml:space="preserve">
|
||||
<g id="temp_x5F_temperature">
|
||||
<path style="fill:none;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" d="M186.5,234.46c0,3.06-2.687,5.54-6,5.54h-22
|
||||
c-3.313,0-6-2.48-6-5.54V80.874c0-3.06,2.687-5.54,6-5.54h22c3.313,0,6,2.48,6,5.54V234.46z"/>
|
||||
<path style="fill:#FFFFFF;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" d="M195.5,280.667c0,3.313-2.106,6-4.704,6
|
||||
h-42.592c-2.598,0-4.704-2.687-4.704-6V246c0-3.313,2.106-6,4.704-6h42.592c2.598,0,4.704,2.688,4.704,6V280.667z"/>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M199.5,92.333c6,0,12,0,18,0c6.448,0,6.448-10,0-10c-6,0-12,0-18,0
|
||||
C193.052,82.333,193.052,92.333,199.5,92.333L199.5,92.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M199.5,132.333c6,0,12,0,18,0c6.448,0,6.448-10,0-10c-6,0-12,0-18,0
|
||||
C193.052,122.333,193.052,132.333,199.5,132.333L199.5,132.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M199.5,173.333c6,0,12,0,18,0c6.448,0,6.448-10,0-10c-6,0-12,0-18,0
|
||||
C193.052,163.333,193.052,173.333,199.5,173.333L199.5,173.333z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path style="fill:#FFFFFF;" d="M199.5,216.334c6,0,12,0,18,0c6.448,0,6.448-10,0-10c-6,0-12,0-18,0
|
||||
C193.052,206.334,193.052,216.334,199.5,216.334L199.5,216.334z"/>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<rect x="152.499" y="185.084" style="fill:#FFFFFF;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" width="34.001" height="70.583"/>
|
||||
</g>
|
||||
<g id="Ebene_1">
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
BIN
www/img/unreach.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
www/img/up.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
23
www/img/weather_humidity.svg
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="361px"
|
||||
height="361px" viewBox="0 0 361 361" style="enable-background:new 0 0 361 361;" xml:space="preserve">
|
||||
<g id="weather_x5F_humidity">
|
||||
<path style="fill:none;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" d="M254.833,147.792
|
||||
c0,12.357-10.018,22.375-22.375,22.375s-22.375-10.018-22.375-22.375c0-4.726,1.659-8.584,3.134-12.723
|
||||
c2.625-7.363,11.609-33.311,19.241-33.311c7.649,0,17.032,26.988,19.271,33.353C253.18,139.241,254.833,143.084,254.833,147.792z"
|
||||
/>
|
||||
<path style="fill:none;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" d="M224.833,247.792
|
||||
c0,12.357-10.018,22.375-22.375,22.375s-22.375-10.018-22.375-22.375c0-4.726,1.659-8.584,3.134-12.723
|
||||
c2.625-7.362,11.609-33.311,19.241-33.311c7.649,0,17.032,26.988,19.271,33.353C223.18,239.24,224.833,243.084,224.833,247.792z"/>
|
||||
<path style="fill:none;stroke:#FFFFFF;stroke-width:10;stroke-miterlimit:10;" d="M158.333,280.833
|
||||
c0,3.222-3.116,5.834-6.958,5.834H96.291c-3.842,0-6.958-2.612-6.958-5.834V81.002c0-3.223,3.116-5.835,6.958-5.835h55.084
|
||||
c3.842,0,6.958,2.612,6.958,5.835V280.833z"/>
|
||||
<path style="fill:#FFFFFF;" d="M145.833,180.792c0,12.357-10.018,22.375-22.375,22.375s-22.375-10.018-22.375-22.375
|
||||
c0-4.726,1.659-8.584,3.134-12.723c2.625-7.363,11.61-33.311,19.241-33.311c7.649,0,17.033,26.988,19.27,33.353
|
||||
C144.179,172.241,145.833,176.084,145.833,180.792z"/>
|
||||
</g>
|
||||
<g id="Ebene_1">
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
BIN
www/img/windowClosed.png
Normal file
After Width: | Height: | Size: 891 B |
BIN
www/img/windowOpened.png
Normal file
After Width: | Height: | Size: 670 B |
BIN
www/img/windowTilted.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
123
www/index.html
Normal file
@ -0,0 +1,123 @@
|
||||
<!doctype html>
|
||||
<html manifest="cache.manifest" lang="de" xmlns="http://www.w3.org/1999/html">
|
||||
|
||||
<!-- version: "0.4.10" -->
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="HandheldFriendly" content="True">
|
||||
<meta name="mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta http-equiv="cleartype" content="on">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
|
||||
<meta name="viewport" id="vp" content="initial-scale=1.0,user-scalable=no,maximum-scale=1" media="(device-height: 568px)" />
|
||||
|
||||
<title>yunkong2.mobile</title>
|
||||
|
||||
<link rel="apple-touch-icon" href="img/favicon.png" />
|
||||
<link rel="apple-touch-icon" href="img/favicon.png" sizes="76x76" />
|
||||
<link rel="apple-touch-icon" href="img/favicon.png" sizes="120x120" />
|
||||
<link rel="apple-touch-icon" href="img/favicon.png" sizes="152x152" />
|
||||
<link rel="apple-touch-startup-image" href="img/favicon.png" />
|
||||
<link rel="apple-touch-startup-image" href="img/favicon.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" />
|
||||
<link rel="apple-touch-startup-image" href="img/favicon.png" media="(device-width: 768px) and (device-height: 1024px) and (orientation: portrait)" />
|
||||
<link rel="apple-touch-startup-image" href="img/favicon.png" media="(device-width: 768px) and (device-height: 1024px) and (orientation: landscape)" />
|
||||
|
||||
<!-- Hier den Pfad/Dateinamen anpassen für individuelle jqueryMobile Themes -->
|
||||
<!--link rel="stylesheet" href="lib/css/jquery.mobile-1.4.5.min.css" /-->
|
||||
<link rel="stylesheet" id="css-mobile"/>
|
||||
<link rel="stylesheet" id="css-mobile-icons"/>
|
||||
<link rel="stylesheet" href="lib/css/jquery.mobile.structure-1.4.5.min.css" />
|
||||
<link rel="shortcut icon" sizes="196x196" href="img/favicon.png">
|
||||
<link rel="shortcut icon" href="img/favicon.png" type="image/x-icon">
|
||||
<link rel="icon" href="img/favicon.png" type="image/x-icon">
|
||||
<link rel="stylesheet" href="css/mobile.css" />
|
||||
|
||||
<!--<link rel="stylesheet" href="css/add2home-2.0.8.css" />-->
|
||||
|
||||
<script type="text/javascript" src="../../lib/js/jquery-1.11.1.min.js"></script>
|
||||
<!--script type="text/javascript" src="lib/js/jquery-1.11.3.js"></script-->
|
||||
<script type="text/javascript" src="lib/js/loStorage.min.js"></script>
|
||||
<script type="text/javascript" src="../../lib/js/socket.io.js"></script>
|
||||
<script type="text/javascript">
|
||||
if (typeof $ === 'undefined') {
|
||||
if (location.host.toLowerCase().indexOf('yunkong2.') !== -1) {
|
||||
window.location = '/';
|
||||
}
|
||||
}
|
||||
$(document).on('mobileinit', function () {
|
||||
$.mobile.autoInitializePage = false;
|
||||
$.mobile.loader.prototype.options.text = 'loading';
|
||||
$.mobile.loader.prototype.options.textVisible = true;
|
||||
$.mobile.loader.prototype.options.theme = 'a';
|
||||
$.mobile.loader.prototype.options.textonly = false;
|
||||
$.mobile.loader.prototype.options.html = '<span class="ui-bar ui-overlay-c ui-corner-all"></span>';
|
||||
});
|
||||
</script>
|
||||
<script type="text/javascript" src="../../lib/js/jquery-ui-1.11.4.full.min.js"></script>
|
||||
<script type="text/javascript" src="lib/js/jquery.mobile-1.4.5.min.js"></script>
|
||||
<script type="text/javascript" src="lib/js/jquery.ui.touch-punch.min.js"></script>
|
||||
<script type="text/javascript" src="../../lib/js/translate.js"></script>
|
||||
<script type="text/javascript" src="_socket/info.js"></script>
|
||||
<script type="text/javascript" src="js/conn.js"></script>
|
||||
<script type="text/javascript" src="js/mobile.js"></script>
|
||||
<!--<script type="text/javascript" src="js/add2home-2.0.8.js"></script>-->
|
||||
</head>
|
||||
|
||||
<body style="height: 100%;">
|
||||
<div id="server-disconnect" data-history="false">
|
||||
<div class="splash-screen-text">...</div>
|
||||
<div class="splash-screen-circle-outer"></div>
|
||||
<div class="splash-screen-circle-inner"></div>
|
||||
</div>
|
||||
|
||||
<div id="edit_indicator" class="ui-shadow ui-btn-corner-all ui-btn-inline translate"
|
||||
style="border: 1px solid #044062; box-shadow: 0 1px 0 rgba(255,255,255,.3); display: none; font-weight: 700; top: 8px; text-shadow: 0 1px 0 #194b7e; font-family: Helvetica,Arial,sans-serif; color:#fff; padding:3px; padding-left: 10px; padding-right: 10px; position: absolute; right: 40px; background-color: orange; z-index:10000;">Edit mode</div>
|
||||
|
||||
<div id="info" data-role="page" data-history="false" data-theme="a">
|
||||
<div data-role="header" data-position="" data-id="f2" data-theme="a">
|
||||
<a id="mobile-info-back" data-rel="back" data-role="button" data-icon="arrow-l" data-inline="true" data-iconpos="notext" class="mobile-info ui-btn-left"></a>
|
||||
<h1><span class="translate">Info</span> <span class="mobile-version"></span></h1>
|
||||
</div>
|
||||
<div data-role="content" data-theme="a">
|
||||
<h3>yunkong2.mobile</h3>
|
||||
Copyright © 2015-2016 <a data-ajax="false" href="https://git.spacen.net/yunkong2/yunkong2.mobile" target="_blank">Bluefox</a><br/>
|
||||
<span class="translate">License: </span><b>MIT</b>
|
||||
<p style="font-size: 16px" class="translate">Used icons</p>
|
||||
<p>
|
||||
<a class="mobile-editswitch mobile-refresh translate" data-ajax="false" data-role="button" data-icon="refresh" href="?refresh" target="_self">Refresh</a>
|
||||
<div><span class="translate">Last synchronized: </span><span class="last-synchronised"></span></div>
|
||||
<a class="mobile-editswitch mobile-noedit translate" data-ajax="false" data-role="button" data-icon="gear">Edit-Mode</a>
|
||||
<a class="mobile-editswitch mobile-edit translate" data-ajax="false" data-role="button" data-icon="gear">Finish Edit-Mode</a>
|
||||
<span class="translate">edit description</span><br>
|
||||
<h3 class="translate">Theme</h3>
|
||||
<input type="button" data-inline="true" value="Light" class="mobile-theme-selector" data-theme="light" />
|
||||
<input type="button" data-inline="true" value="Dark" class="mobile-theme-selector" data-theme="default" />
|
||||
<input type="button" data-inline="true" value="Grey" class="mobile-theme-selector" data-theme="grey" />
|
||||
</p>
|
||||
<p>
|
||||
<a data-ajax="false" data-role="button" data-icon="info" class="translate" href="https://git.spacen.net/yunkong2/yunkong2.mobile" target="_blank">Documentation</a>
|
||||
<p>
|
||||
<a class="mobile-editswitch mobile-reset translate" data-ajax="false" data-role="button" data-icon="delete">Reset layout</a>
|
||||
</p>
|
||||
<p>
|
||||
<fieldset data-role="controlgroup" id="enabledIndicators"></fieldset>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="popup" id="popupEditName" data-theme="a" class="ui-corner-all" data-history="false">
|
||||
<div style="text-align: center">
|
||||
<h3 class="translate">Edit name</h3>
|
||||
<!--label for="name_edit" class="ui-hidden-accessible" class="translate">Name:</label-->
|
||||
<input type="text" id="name_edit" placeholder="name" data-theme="a" class="translateP" style="width: 90%; border: 1px solid gray; height: 2em; padding-left: 1em">
|
||||
<a class="ui-btn ui-corner-all ui-shadow ui-btn-inline ui-btn-b ui-icon-check ui-btn-icon-left" data-rel="back" data-transition="flow" class="translate" id="ok_edit">Ok</a>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="panel" data-position="left" data-position-fixed="false" data-display="overlay" id="nav-panel" data-theme="a" style="z-index: 1000; display: none">
|
||||
<ul data-role="listview" data-theme="a" data-divider-theme="b" style="margin-top:-16px;" class="nav-search" id="nav-panel-ul"></ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
1355
www/js/conn.js
Normal file
2364
www/js/mobile.js
Normal file
BIN
www/lib/css/default/images/ajax-loader.gif
Normal file
After Width: | Height: | Size: 6.1 KiB |
3
www/lib/css/default/jquery.mobile.icons.min.css
vendored
Normal file
217
www/lib/css/default/jquery.mobile.min.css
vendored
Normal file
@ -0,0 +1,217 @@
|
||||
/*!
|
||||
* jQuery Mobile 1.4.5
|
||||
* Git HEAD hash: 68e55e78b292634d3991c795f06f5e37a512decc <> Date: Fri Oct 31 2014 17:33:30 UTC
|
||||
* http://jquerymobile.com
|
||||
*
|
||||
* Copyright 2010, 2014 jQuery Foundation, Inc. and othercontributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Globals */
|
||||
/* Font
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
body,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
button,
|
||||
.ui-btn {
|
||||
font-size: 1em;
|
||||
line-height: 1.3;
|
||||
font-family: sans-serif /*{global-font-family}*/;
|
||||
}
|
||||
legend,
|
||||
.ui-input-text input,
|
||||
.ui-input-search input {
|
||||
color: inherit;
|
||||
text-shadow: inherit;
|
||||
}
|
||||
/* Form labels (overrides font-weight bold in bars, and mini font-size) */
|
||||
.ui-mobile label,
|
||||
div.ui-controlgroup-label {
|
||||
font-weight: normal;
|
||||
font-size: 16px;
|
||||
}
|
||||
/* Separators
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
/* Field contain separator (< 28em) */
|
||||
.ui-field-contain {
|
||||
border-bottom-color: #828282;
|
||||
border-bottom-color: rgba(0,0,0,.15);
|
||||
border-bottom-width: 1px;
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
/* Table opt-in classes: strokes between each row, and alternating row stripes */
|
||||
/* Classes table-stroke and table-stripe are deprecated in 1.4. */
|
||||
.table-stroke thead th,
|
||||
.table-stripe thead th,
|
||||
.table-stripe tbody tr:last-child {
|
||||
border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback */
|
||||
border-bottom: 1px solid rgba(0,0,0,.1);
|
||||
}
|
||||
.table-stroke tbody th,
|
||||
.table-stroke tbody td {
|
||||
border-bottom: 1px solid #e6e6e6; /* non-RGBA fallback */
|
||||
border-bottom: 1px solid rgba(0,0,0,.05);
|
||||
}
|
||||
.table-stripe.table-stroke tbody tr:last-child th,
|
||||
.table-stripe.table-stroke tbody tr:last-child td {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.table-stripe tbody tr:nth-child(odd) td,
|
||||
.table-stripe tbody tr:nth-child(odd) th {
|
||||
background-color: #eeeeee; /* non-RGBA fallback */
|
||||
background-color: rgba(0,0,0,.04);
|
||||
}
|
||||
/* Buttons
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
.ui-btn,
|
||||
label.ui-btn {
|
||||
font-weight: bold;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
.ui-btn {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.ui-btn-active {
|
||||
cursor: pointer;
|
||||
}
|
||||
/* Corner rounding
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
/* Class ui-btn-corner-all deprecated in 1.4 */
|
||||
.ui-corner-all {
|
||||
-webkit-border-radius: .6em /*{global-radii-blocks}*/;
|
||||
border-radius: .6em /*{global-radii-blocks}*/;
|
||||
}
|
||||
/* Buttons */
|
||||
.ui-btn-corner-all,
|
||||
.ui-btn.ui-corner-all,
|
||||
/* Slider track */
|
||||
.ui-slider-track.ui-corner-all,
|
||||
/* Flipswitch */
|
||||
.ui-flipswitch.ui-corner-all,
|
||||
/* Count bubble */
|
||||
.ui-li-count {
|
||||
-webkit-border-radius: .3125em /*{global-radii-buttons}*/;
|
||||
border-radius: .3125em /*{global-radii-buttons}*/;
|
||||
}
|
||||
/* Icon-only buttons */
|
||||
.ui-btn-icon-notext.ui-btn-corner-all,
|
||||
.ui-btn-icon-notext.ui-corner-all {
|
||||
-webkit-border-radius: 1em;
|
||||
border-radius: 1em;
|
||||
}
|
||||
/* Radius clip workaround for cleaning up corner trapping */
|
||||
.ui-btn-corner-all,
|
||||
.ui-corner-all {
|
||||
-webkit-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
/* Popup arrow */
|
||||
.ui-popup.ui-corner-all > .ui-popup-arrow-guide {
|
||||
left: .6em /*{global-radii-blocks}*/;
|
||||
right: .6em /*{global-radii-blocks}*/;
|
||||
top: .6em /*{global-radii-blocks}*/;
|
||||
bottom: .6em /*{global-radii-blocks}*/;
|
||||
}
|
||||
/* Shadow
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
.ui-shadow {
|
||||
-webkit-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
-moz-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
}
|
||||
.ui-shadow-inset {
|
||||
-webkit-box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
-moz-box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
}
|
||||
.ui-overlay-shadow {
|
||||
-webkit-box-shadow: 0 0 12px rgba(0,0,0,.6);
|
||||
-moz-box-shadow: 0 0 12px rgba(0,0,0,.6);
|
||||
box-shadow: 0 0 12px rgba(0,0,0,.6);
|
||||
}
|
||||
/* Icons
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
.ui-btn-icon-left:after,
|
||||
.ui-btn-icon-right:after,
|
||||
.ui-btn-icon-top:after,
|
||||
.ui-btn-icon-bottom:after,
|
||||
.ui-btn-icon-notext:after {
|
||||
background-color: #666666 /*{global-icon-color}*/;
|
||||
background-color: rgba(0,0,0,.15) /*{global-icon-disc}*/;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
-webkit-border-radius: 1em;
|
||||
border-radius: 1em;
|
||||
}
|
||||
/* Alt icons */
|
||||
.ui-alt-icon.ui-btn:after,
|
||||
.ui-alt-icon .ui-btn:after,
|
||||
html .ui-alt-icon.ui-checkbox-off:after,
|
||||
html .ui-alt-icon.ui-radio-off:after,
|
||||
html .ui-alt-icon .ui-checkbox-off:after,
|
||||
html .ui-alt-icon .ui-radio-off:after {
|
||||
background-color: #666666 /*{global-icon-color}*/;
|
||||
background-color: rgba(0,0,0,.15) /*{global-icon-disc}*/;
|
||||
}
|
||||
/* No disc */
|
||||
.ui-nodisc-icon.ui-btn:after,
|
||||
.ui-nodisc-icon .ui-btn:after {
|
||||
background-color: transparent;
|
||||
}
|
||||
/* Icon shadow */
|
||||
.ui-shadow-icon.ui-btn:after,
|
||||
.ui-shadow-icon .ui-btn:after {
|
||||
-webkit-box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/;
|
||||
-moz-box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/;
|
||||
box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/;
|
||||
}
|
||||
/* Checkbox and radio */
|
||||
.ui-btn.ui-checkbox-off:after,
|
||||
.ui-btn.ui-checkbox-on:after,
|
||||
.ui-btn.ui-radio-off:after,
|
||||
.ui-btn.ui-radio-on:after {
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin: -9px 2px 0 2px;
|
||||
}
|
||||
.ui-checkbox-off:after,
|
||||
.ui-btn.ui-radio-off:after {
|
||||
filter: Alpha(Opacity=30);
|
||||
opacity: .3;
|
||||
}
|
||||
.ui-btn.ui-checkbox-off:after,
|
||||
.ui-btn.ui-checkbox-on:after {
|
||||
-webkit-border-radius: .1875em;
|
||||
border-radius: .1875em;
|
||||
}
|
||||
.ui-btn.ui-checkbox-off:after {
|
||||
background-color: #666;
|
||||
background-color: rgba(0,0,0,.3);
|
||||
}
|
||||
.ui-radio .ui-btn.ui-radio-on:after {
|
||||
background-image: none;
|
||||
background-color: #fff;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
}
|
||||
.ui-alt-icon.ui-btn.ui-radio-on:after,
|
||||
.ui-alt-icon .ui-btn.ui-radio-on:after {
|
||||
background-color: #000;
|
||||
}
|
||||
/* Loader */
|
||||
.ui-icon-loading {
|
||||
background: url("images/ajax-loader.gif");
|
||||
background-size: 2.875em 2.875em;
|
||||
}.ui-bar-a,.ui-page-theme-a .ui-bar-inherit,html .ui-bar-a .ui-bar-inherit,html .ui-body-a .ui-bar-inherit,html body .ui-group-theme-a .ui-bar-inherit{background-color:#1d1d1d ;border-color:#1b1b1b ;color:#ffffff ;text-shadow:0 1px 0 #111111 ;font-weight:bold;}.ui-bar-a{border-width:1px;border-style:solid;}.ui-overlay-a,.ui-page-theme-a,.ui-page-theme-a .ui-panel-wrapper{background-color:#252525 ;border-color:#454545 ;color:#ffffff ;text-shadow:0 1px 0 #111111 ;}.ui-body-a,.ui-page-theme-a .ui-body-inherit,html .ui-bar-a .ui-body-inherit,html .ui-body-a .ui-body-inherit,html body .ui-group-theme-a .ui-body-inherit,html .ui-panel-page-container-a{background-color:#2a2a2a ;border-color:#1d1d1d ;color:#ffffff ;text-shadow:0 1px 0 #111111 ;}.ui-body-a{border-width:1px;border-style:solid;}.ui-page-theme-a a,html .ui-bar-a a,html .ui-body-a a,html body .ui-group-theme-a a{color:#22aadd ;font-weight:bold;}.ui-page-theme-a a:visited,html .ui-bar-a a:visited,html .ui-body-a a:visited,html body .ui-group-theme-a a:visited{ color:#22aadd ;}.ui-page-theme-a a:hover,html .ui-bar-a a:hover,html .ui-body-a a:hover,html body .ui-group-theme-a a:hover{color:#0088bb ;}.ui-page-theme-a a:active,html .ui-bar-a a:active,html .ui-body-a a:active,html body .ui-group-theme-a a:active{color:#0088bb ;}.ui-page-theme-a .ui-btn,html .ui-bar-a .ui-btn,html .ui-body-a .ui-btn,html body .ui-group-theme-a .ui-btn,html head + body .ui-btn.ui-btn-a,.ui-page-theme-a .ui-btn:visited,html .ui-bar-a .ui-btn:visited,html .ui-body-a .ui-btn:visited,html body .ui-group-theme-a .ui-btn:visited,html head + body .ui-btn.ui-btn-a:visited{background-color:#333333 ;border-color:#1f1f1f ;color:#ffffff ;text-shadow:0 1px 0 #111111 ;}.ui-page-theme-a .ui-btn:hover,html .ui-bar-a .ui-btn:hover,html .ui-body-a .ui-btn:hover,html body .ui-group-theme-a .ui-btn:hover,html head + body .ui-btn.ui-btn-a:hover{background-color:#373737 ;border-color:#1f1f1f ;color:#ffffff ;text-shadow:0 1px 0 #111111 ;}.ui-page-theme-a .ui-btn:active,html .ui-bar-a .ui-btn:active,html .ui-body-a .ui-btn:active,html body .ui-group-theme-a .ui-btn:active,html head + body .ui-btn.ui-btn-a:active{background-color:#404040 ;border-color:#1f1f1f ;color:#ffffff ;text-shadow:0 1px 0 #111111 ;}.ui-page-theme-a .ui-btn.ui-btn-active,html .ui-bar-a .ui-btn.ui-btn-active,html .ui-body-a .ui-btn.ui-btn-active,html body .ui-group-theme-a .ui-btn.ui-btn-active,html head + body .ui-btn.ui-btn-a.ui-btn-active,.ui-page-theme-a .ui-checkbox-on:after,html .ui-bar-a .ui-checkbox-on:after,html .ui-body-a .ui-checkbox-on:after,html body .ui-group-theme-a .ui-checkbox-on:after,.ui-btn.ui-checkbox-on.ui-btn-a:after,.ui-page-theme-a .ui-flipswitch-active,html .ui-bar-a .ui-flipswitch-active,html .ui-body-a .ui-flipswitch-active,html body .ui-group-theme-a .ui-flipswitch-active,html body .ui-flipswitch.ui-bar-a.ui-flipswitch-active,.ui-page-theme-a .ui-slider-track .ui-btn-active,html .ui-bar-a .ui-slider-track .ui-btn-active,html .ui-body-a .ui-slider-track .ui-btn-active,html body .ui-group-theme-a .ui-slider-track .ui-btn-active,html body div.ui-slider-track.ui-body-a .ui-btn-active{background-color:#22aadd ;border-color:#125d79 ;color:#ffffff ;text-shadow:0 1px 0 #0088bb ;}.ui-page-theme-a .ui-radio-on:after,html .ui-bar-a .ui-radio-on:after,html .ui-body-a .ui-radio-on:after,html body .ui-group-theme-a .ui-radio-on:after,.ui-btn.ui-radio-on.ui-btn-a:after{border-color:#22aadd ;}.ui-page-theme-a .ui-btn:focus,html .ui-bar-a .ui-btn:focus,html .ui-body-a .ui-btn:focus,html body .ui-group-theme-a .ui-btn:focus,html head + body .ui-btn.ui-btn-a:focus,.ui-page-theme-a .ui-focus,html .ui-bar-a .ui-focus,html .ui-body-a .ui-focus,html body .ui-group-theme-a .ui-focus,html head + body .ui-btn-a.ui-focus,html head + body .ui-body-a.ui-focus{-webkit-box-shadow:0 0 12px #22aadd ;-moz-box-shadow:0 0 12px #22aadd ;box-shadow:0 0 12px #22aadd ;}.ui-disabled,.ui-state-disabled,button[disabled],.ui-select .ui-btn.ui-state-disabled{filter:Alpha(Opacity=30);opacity:.3;cursor:default !important;pointer-events:none;}.ui-btn:focus,.ui-btn.ui-focus{outline:0;}.ui-noboxshadow .ui-shadow,.ui-noboxshadow .ui-shadow-inset,.ui-noboxshadow .ui-overlay-shadow,.ui-noboxshadow .ui-shadow-icon.ui-btn:after,.ui-noboxshadow .ui-shadow-icon .ui-btn:after,.ui-noboxshadow .ui-focus,.ui-noboxshadow .ui-btn:focus,.ui-noboxshadow input:focus,.ui-noboxshadow .ui-panel{-webkit-box-shadow:none !important;-moz-box-shadow:none !important;box-shadow:none !important;}.ui-noboxshadow .ui-btn:focus,.ui-noboxshadow .ui-focus{outline-width:1px;outline-style:auto;}
|
BIN
www/lib/css/grey/images/ajax-loader.gif
Normal file
After Width: | Height: | Size: 6.1 KiB |
3
www/lib/css/grey/jquery.mobile.icons.min.css
vendored
Normal file
217
www/lib/css/grey/jquery.mobile.min.css
vendored
Normal file
@ -0,0 +1,217 @@
|
||||
/*!
|
||||
* jQuery Mobile 1.4.5
|
||||
* Git HEAD hash: 68e55e78b292634d3991c795f06f5e37a512decc <> Date: Fri Oct 31 2014 17:33:30 UTC
|
||||
* http://jquerymobile.com
|
||||
*
|
||||
* Copyright 2010, 2014 jQuery Foundation, Inc. and othercontributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/* Globals */
|
||||
/* Font
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
html {
|
||||
font-size: 100%;
|
||||
}
|
||||
body,
|
||||
input,
|
||||
select,
|
||||
textarea,
|
||||
button,
|
||||
.ui-btn {
|
||||
font-size: 1em;
|
||||
line-height: 1.3;
|
||||
font-family: sans-serif /*{global-font-family}*/;
|
||||
}
|
||||
legend,
|
||||
.ui-input-text input,
|
||||
.ui-input-search input {
|
||||
color: inherit;
|
||||
text-shadow: inherit;
|
||||
}
|
||||
/* Form labels (overrides font-weight bold in bars, and mini font-size) */
|
||||
.ui-mobile label,
|
||||
div.ui-controlgroup-label {
|
||||
font-weight: normal;
|
||||
font-size: 16px;
|
||||
}
|
||||
/* Separators
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
/* Field contain separator (< 28em) */
|
||||
.ui-field-contain {
|
||||
border-bottom-color: #828282;
|
||||
border-bottom-color: rgba(0,0,0,.15);
|
||||
border-bottom-width: 1px;
|
||||
border-bottom-style: solid;
|
||||
}
|
||||
/* Table opt-in classes: strokes between each row, and alternating row stripes */
|
||||
/* Classes table-stroke and table-stripe are deprecated in 1.4. */
|
||||
.table-stroke thead th,
|
||||
.table-stripe thead th,
|
||||
.table-stripe tbody tr:last-child {
|
||||
border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback */
|
||||
border-bottom: 1px solid rgba(0,0,0,.1);
|
||||
}
|
||||
.table-stroke tbody th,
|
||||
.table-stroke tbody td {
|
||||
border-bottom: 1px solid #e6e6e6; /* non-RGBA fallback */
|
||||
border-bottom: 1px solid rgba(0,0,0,.05);
|
||||
}
|
||||
.table-stripe.table-stroke tbody tr:last-child th,
|
||||
.table-stripe.table-stroke tbody tr:last-child td {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.table-stripe tbody tr:nth-child(odd) td,
|
||||
.table-stripe tbody tr:nth-child(odd) th {
|
||||
background-color: #eeeeee; /* non-RGBA fallback */
|
||||
background-color: rgba(0,0,0,.04);
|
||||
}
|
||||
/* Buttons
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
.ui-btn,
|
||||
label.ui-btn {
|
||||
font-weight: bold;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
}
|
||||
.ui-btn {
|
||||
text-decoration: none !important;
|
||||
}
|
||||
.ui-btn-active {
|
||||
cursor: pointer;
|
||||
}
|
||||
/* Corner rounding
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
/* Class ui-btn-corner-all deprecated in 1.4 */
|
||||
.ui-corner-all {
|
||||
-webkit-border-radius: .6em /*{global-radii-blocks}*/;
|
||||
border-radius: .6em /*{global-radii-blocks}*/;
|
||||
}
|
||||
/* Buttons */
|
||||
.ui-btn-corner-all,
|
||||
.ui-btn.ui-corner-all,
|
||||
/* Slider track */
|
||||
.ui-slider-track.ui-corner-all,
|
||||
/* Flipswitch */
|
||||
.ui-flipswitch.ui-corner-all,
|
||||
/* Count bubble */
|
||||
.ui-li-count {
|
||||
-webkit-border-radius: .3125em /*{global-radii-buttons}*/;
|
||||
border-radius: .3125em /*{global-radii-buttons}*/;
|
||||
}
|
||||
/* Icon-only buttons */
|
||||
.ui-btn-icon-notext.ui-btn-corner-all,
|
||||
.ui-btn-icon-notext.ui-corner-all {
|
||||
-webkit-border-radius: 1em;
|
||||
border-radius: 1em;
|
||||
}
|
||||
/* Radius clip workaround for cleaning up corner trapping */
|
||||
.ui-btn-corner-all,
|
||||
.ui-corner-all {
|
||||
-webkit-background-clip: padding;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
/* Popup arrow */
|
||||
.ui-popup.ui-corner-all > .ui-popup-arrow-guide {
|
||||
left: .6em /*{global-radii-blocks}*/;
|
||||
right: .6em /*{global-radii-blocks}*/;
|
||||
top: .6em /*{global-radii-blocks}*/;
|
||||
bottom: .6em /*{global-radii-blocks}*/;
|
||||
}
|
||||
/* Shadow
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
.ui-shadow {
|
||||
-webkit-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
-moz-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
}
|
||||
.ui-shadow-inset {
|
||||
-webkit-box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
-moz-box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/;
|
||||
}
|
||||
.ui-overlay-shadow {
|
||||
-webkit-box-shadow: 0 0 12px rgba(0,0,0,.6);
|
||||
-moz-box-shadow: 0 0 12px rgba(0,0,0,.6);
|
||||
box-shadow: 0 0 12px rgba(0,0,0,.6);
|
||||
}
|
||||
/* Icons
|
||||
-----------------------------------------------------------------------------------------------------------*/
|
||||
.ui-btn-icon-left:after,
|
||||
.ui-btn-icon-right:after,
|
||||
.ui-btn-icon-top:after,
|
||||
.ui-btn-icon-bottom:after,
|
||||
.ui-btn-icon-notext:after {
|
||||
background-color: #666666 /*{global-icon-color}*/;
|
||||
background-color: rgba(0,0,0,.15) /*{global-icon-disc}*/;
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
-webkit-border-radius: 1em;
|
||||
border-radius: 1em;
|
||||
}
|
||||
/* Alt icons */
|
||||
.ui-alt-icon.ui-btn:after,
|
||||
.ui-alt-icon .ui-btn:after,
|
||||
html .ui-alt-icon.ui-checkbox-off:after,
|
||||
html .ui-alt-icon.ui-radio-off:after,
|
||||
html .ui-alt-icon .ui-checkbox-off:after,
|
||||
html .ui-alt-icon .ui-radio-off:after {
|
||||
background-color: #666666 /*{global-icon-color}*/;
|
||||
background-color: rgba(0,0,0,.15) /*{global-icon-disc}*/;
|
||||
}
|
||||
/* No disc */
|
||||
.ui-nodisc-icon.ui-btn:after,
|
||||
.ui-nodisc-icon .ui-btn:after {
|
||||
background-color: transparent;
|
||||
}
|
||||
/* Icon shadow */
|
||||
.ui-shadow-icon.ui-btn:after,
|
||||
.ui-shadow-icon .ui-btn:after {
|
||||
-webkit-box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/;
|
||||
-moz-box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/;
|
||||
box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/;
|
||||
}
|
||||
/* Checkbox and radio */
|
||||
.ui-btn.ui-checkbox-off:after,
|
||||
.ui-btn.ui-checkbox-on:after,
|
||||
.ui-btn.ui-radio-off:after,
|
||||
.ui-btn.ui-radio-on:after {
|
||||
display: block;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin: -9px 2px 0 2px;
|
||||
}
|
||||
.ui-checkbox-off:after,
|
||||
.ui-btn.ui-radio-off:after {
|
||||
filter: Alpha(Opacity=30);
|
||||
opacity: .3;
|
||||
}
|
||||
.ui-btn.ui-checkbox-off:after,
|
||||
.ui-btn.ui-checkbox-on:after {
|
||||
-webkit-border-radius: .1875em;
|
||||
border-radius: .1875em;
|
||||
}
|
||||
.ui-btn.ui-checkbox-off:after {
|
||||
background-color: #666;
|
||||
background-color: rgba(0,0,0,.3);
|
||||
}
|
||||
.ui-radio .ui-btn.ui-radio-on:after {
|
||||
background-image: none;
|
||||
background-color: #fff;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-width: 5px;
|
||||
border-style: solid;
|
||||
}
|
||||
.ui-alt-icon.ui-btn.ui-radio-on:after,
|
||||
.ui-alt-icon .ui-btn.ui-radio-on:after {
|
||||
background-color: #000;
|
||||
}
|
||||
/* Loader */
|
||||
.ui-icon-loading {
|
||||
background: url("images/ajax-loader.gif");
|
||||
background-size: 2.875em 2.875em;
|
||||
}.ui-bar-a,.ui-page-theme-a .ui-bar-inherit,html .ui-bar-a .ui-bar-inherit,html .ui-body-a .ui-bar-inherit,html body .ui-group-theme-a .ui-bar-inherit{background-color:#cccccc ;border-color:#707070 ;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;font-weight:bold;}.ui-bar-a{border-width:1px;border-style:solid;}.ui-overlay-a,.ui-page-theme-a,.ui-page-theme-a .ui-panel-wrapper{background-color:#808080 ;border-color:#808080 ;color:#ffffff ;text-shadow:0 1px 0 #444444 ;}.ui-body-a,.ui-page-theme-a .ui-body-inherit,html .ui-bar-a .ui-body-inherit,html .ui-body-a .ui-body-inherit,html body .ui-group-theme-a .ui-body-inherit,html .ui-panel-page-container-a{background-color:#4d4d4d ;border-color:#6b6b6b ;color:#ffffff ;text-shadow:0 1px 0 #444444 ;}.ui-body-a{border-width:1px;border-style:solid;}.ui-page-theme-a a,html .ui-bar-a a,html .ui-body-a a,html body .ui-group-theme-a a{color:#3388cc ;font-weight:bold;}.ui-page-theme-a a:visited,html .ui-bar-a a:visited,html .ui-body-a a:visited,html body .ui-group-theme-a a:visited{ color:#3388cc ;}.ui-page-theme-a a:hover,html .ui-bar-a a:hover,html .ui-body-a a:hover,html body .ui-group-theme-a a:hover{color:#005599 ;}.ui-page-theme-a a:active,html .ui-bar-a a:active,html .ui-body-a a:active,html body .ui-group-theme-a a:active{color:#005599 ;}.ui-page-theme-a .ui-btn,html .ui-bar-a .ui-btn,html .ui-body-a .ui-btn,html body .ui-group-theme-a .ui-btn,html head + body .ui-btn.ui-btn-a,.ui-page-theme-a .ui-btn:visited,html .ui-bar-a .ui-btn:visited,html .ui-body-a .ui-btn:visited,html body .ui-group-theme-a .ui-btn:visited,html head + body .ui-btn.ui-btn-a:visited{background-color:#f6f6f6 ;border-color:#dddddd ;color:#333333 ;text-shadow:0 1px 0 #f3f3f3 ;}.ui-page-theme-a .ui-btn:hover,html .ui-bar-a .ui-btn:hover,html .ui-body-a .ui-btn:hover,html body .ui-group-theme-a .ui-btn:hover,html head + body .ui-btn.ui-btn-a:hover{background-color:#ededed ;border-color:#dddddd ;color:#333333 ;text-shadow:0 1px 0 #f3f3f3 ;}.ui-page-theme-a .ui-btn:active,html .ui-bar-a .ui-btn:active,html .ui-body-a .ui-btn:active,html body .ui-group-theme-a .ui-btn:active,html head + body .ui-btn.ui-btn-a:active{background-color:#e8e8e8 ;border-color:#dddddd ;color:#333333 ;text-shadow:0 1px 0 #f3f3f3 ;}.ui-page-theme-a .ui-btn.ui-btn-active,html .ui-bar-a .ui-btn.ui-btn-active,html .ui-body-a .ui-btn.ui-btn-active,html body .ui-group-theme-a .ui-btn.ui-btn-active,html head + body .ui-btn.ui-btn-a.ui-btn-active,.ui-page-theme-a .ui-checkbox-on:after,html .ui-bar-a .ui-checkbox-on:after,html .ui-body-a .ui-checkbox-on:after,html body .ui-group-theme-a .ui-checkbox-on:after,.ui-btn.ui-checkbox-on.ui-btn-a:after,.ui-page-theme-a .ui-flipswitch-active,html .ui-bar-a .ui-flipswitch-active,html .ui-body-a .ui-flipswitch-active,html body .ui-group-theme-a .ui-flipswitch-active,html body .ui-flipswitch.ui-bar-a.ui-flipswitch-active,.ui-page-theme-a .ui-slider-track .ui-btn-active,html .ui-bar-a .ui-slider-track .ui-btn-active,html .ui-body-a .ui-slider-track .ui-btn-active,html body .ui-group-theme-a .ui-slider-track .ui-btn-active,html body div.ui-slider-track.ui-body-a .ui-btn-active{background-color:#cccccc ;border-color:#707070 ;color:#000000 ;text-shadow:0 1px 0 #eeeeee ;}.ui-page-theme-a .ui-radio-on:after,html .ui-bar-a .ui-radio-on:after,html .ui-body-a .ui-radio-on:after,html body .ui-group-theme-a .ui-radio-on:after,.ui-btn.ui-radio-on.ui-btn-a:after{border-color:#cccccc ;}.ui-page-theme-a .ui-btn:focus,html .ui-bar-a .ui-btn:focus,html .ui-body-a .ui-btn:focus,html body .ui-group-theme-a .ui-btn:focus,html head + body .ui-btn.ui-btn-a:focus,.ui-page-theme-a .ui-focus,html .ui-bar-a .ui-focus,html .ui-body-a .ui-focus,html body .ui-group-theme-a .ui-focus,html head + body .ui-btn-a.ui-focus,html head + body .ui-body-a.ui-focus{-webkit-box-shadow:0 0 12px #cccccc ;-moz-box-shadow:0 0 12px #cccccc ;box-shadow:0 0 12px #cccccc ;}.ui-disabled,.ui-state-disabled,button[disabled],.ui-select .ui-btn.ui-state-disabled{filter:Alpha(Opacity=30);opacity:.3;cursor:default !important;pointer-events:none;}.ui-btn:focus,.ui-btn.ui-focus{outline:0;}.ui-noboxshadow .ui-shadow,.ui-noboxshadow .ui-shadow-inset,.ui-noboxshadow .ui-overlay-shadow,.ui-noboxshadow .ui-shadow-icon.ui-btn:after,.ui-noboxshadow .ui-shadow-icon .ui-btn:after,.ui-noboxshadow .ui-focus,.ui-noboxshadow .ui-btn:focus,.ui-noboxshadow input:focus,.ui-noboxshadow .ui-panel{-webkit-box-shadow:none !important;-moz-box-shadow:none !important;box-shadow:none !important;}.ui-noboxshadow .ui-btn:focus,.ui-noboxshadow .ui-focus{outline-width:1px;outline-style:auto;}
|
3
www/lib/css/jquery.mobile.structure-1.4.5.min.css
vendored
Normal file
3
www/lib/css/light/jquery.mobile.icons.min.css
vendored
Normal file
217
www/lib/css/light/jquery.mobile.min.css
vendored
Normal file
10
www/lib/js/jquery.mobile-1.4.5.min.js
vendored
Normal file
1
www/lib/js/jquery.mobile-1.4.5.min.map
Normal file
11
www/lib/js/jquery.ui.touch-punch.min.js
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
/*!
|
||||
* jQuery UI Touch Punch 0.2.3
|
||||
*
|
||||
* Copyright 2011–2014, Dave Furfero
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
*
|
||||
* Depends:
|
||||
* jquery.ui.widget.js
|
||||
* jquery.ui.mouse.js
|
||||
*/
|
||||
!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);
|
2
www/lib/js/loStorage.min.js
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
// // Copyright (c) 2012 Florian H., https://git.spacen.net/js-coder https://git.spacen.net/js-coder/lostorage.js
|
||||
!function(e,t){var n={isArray:Array.isArray||function(e){return Object.prototype.toString.call(e)==="[object Array]"},isPlainObj:function(e){return e===Object(e)},toArray:function(e){return Array.prototype.slice.call(e)},prepareArgs:function(e,t){return e=n.toArray(e),e.unshift(t),e},getObjKeyByValue:function(e,t){for(var n in e)if(e.hasOwnProperty(n)&&e[n]===t)return n},prepareReturn:function(t){return e[n.getObjKeyByValue(o,t)]},retrieve:function(e,n){return e==t?n:e},serialize:function(e){return JSON.stringify(e)},unserialize:function(e){return e==t?t:JSON.parse(e)}},r=function(){return r.get.apply(this,arguments)},i={storage:function(){return storage.get.apply(storage,arguments)},session:function(){return session.get.apply(session,arguments)}};r.set=function(e,t,r){if(n.isPlainObj(t))for(var i in t)t.hasOwnProperty(i)&&e.setItem(i,n.serialize(t[i]));else e.setItem(t,n.serialize(r));return n.prepareReturn(e)},r.invert=function(e,t){return this.set(e,t,!this.get(e,t))},r.add=function(e,t,n){return this.set(e,t,this.get(e,t)+parseInt(n,10))},r.increase=function(e,t,r){return this.add(e,t,n.retrieve(r,1))},r.decrease=function(e,t,r){return this.add(e,t,-n.retrieve(r,1))},r.concat=function(e,t,n){return this.set(e,t,this.get(e,t)+n)},r.push=function(e,t,r){var i=n.toArray(arguments),s=this.get(e,t,[]);return i.splice(0,2),s.push.apply(s,i),this.set(e,t,s)},r.extend=function(e,t,r,i){var s=this.get(e,t,{});if(n.isPlainObj(r))for(var o in r)r.hasOwnProperty(o)&&(s[o]=r[o]);else s[r]=i;return this.set(e,t,s)},r.remove=function(e,t){t=n.isArray(t)?t:n.toArray(arguments);for(var r=0,i=t.length;r<i;r++)delete e[t[r]];return n.prepareReturn(e)},r.empty=function(e){return e.clear(),n.prepareReturn(e)},r.get=function(e,r,i){i=i||t;if(n.isArray(r)){var s={};for(var o=0,u=r.length;o<u;o++){var a=r[o];s[a]=this.get(e,a,i)}return s}return n.retrieve(n.unserialize(e.getItem(r)),i)},r.all=function(e){var t={};for(var r=0,i=e.length;r<i;r++){var s=e.key(r);t[s]=n.unserialize(e.getItem(s))}return t};var s="set invert add increase decrease concat push extend remove empty get all".split(" "),o={storage:localStorage,session:sessionStorage};for(var u=0,a=s.length;u<a;u++){var f=s[u];for(var l in o){if(!o.hasOwnProperty(l))continue;var c=o[l];i[l][f]=function(e,t){return function(){var i=n.prepareArgs(arguments,t);return r[e].apply(r,i)}}(f,c)}}var h={storage:i.storage,session:i.session};typeof define=="function"&&define.amd?define(function(){return h}):typeof exports!="undefined"?module.exports=h:(e.storage=i.storage,e.session=i.session)}(window);
|
12
www/offline.html
Normal file
@ -0,0 +1,12 @@
|
||||
<!doctype html>
|
||||
<html manifest="cache.manifest" lang="de" xmlns="http://www.w3.org/1999/html">
|
||||
<head>
|
||||
<link rel="stylesheet" href="../lib/css/jquery.mobile-1.3.2.min.css" />
|
||||
</head>
|
||||
<body style="background-color: #0092d9; padding:30px; font-size: 16px; font-weight: bold; font-family: Helvetica,Arial,sans-serif;">
|
||||
<div style="width: 320px; margin-left:-160px; position: absolute; left: 50%">
|
||||
<p>Keine Verbindung zum Server</p>
|
||||
<a class="ui-btn ui-shadow ui-btn-corner-all ui-btn-icon-left ui-btn-up-b" href="./" target="_self" ><span class="ui-btn-inner"><span class="ui-btn-text">Neu laden</span><span class="ui-icon ui-icon-refresh ui-icon-shadow"> </span></span></a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|