Initial-Release
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi.
|
||||
*/
|
||||
|
||||
var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi');
|
||||
var currentApi = nativeApi;
|
||||
|
||||
module.exports = {
|
||||
get: function() { return currentApi; },
|
||||
setPreferPrompt: function(value) {
|
||||
currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi;
|
||||
},
|
||||
// Used only by tests.
|
||||
set: function(value) {
|
||||
currentApi = value;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
|
||||
* This is used pre-JellyBean, where addJavascriptInterface() is disabled.
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
exec: function(bridgeSecret, service, action, callbackId, argsJson) {
|
||||
return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
|
||||
},
|
||||
setNativeToJsBridgeMode: function(bridgeSecret, value) {
|
||||
prompt(value, 'gap_bridge_mode:' + bridgeSecret);
|
||||
},
|
||||
retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
|
||||
return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
|
||||
}
|
||||
};
|
||||
283
platforms/android/build/intermediates/assets/debug/www/cordova-js-src/exec.js
vendored
Normal file
@@ -0,0 +1,283 @@
|
||||
/*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Execute a cordova command. It is up to the native side whether this action
|
||||
* is synchronous or asynchronous. The native side can return:
|
||||
* Synchronous: PluginResult object as a JSON string
|
||||
* Asynchronous: Empty string ""
|
||||
* If async, the native side will cordova.callbackSuccess or cordova.callbackError,
|
||||
* depending upon the result of the action.
|
||||
*
|
||||
* @param {Function} success The success callback
|
||||
* @param {Function} fail The fail callback
|
||||
* @param {String} service The name of the service to use
|
||||
* @param {String} action Action to be run in cordova
|
||||
* @param {String[]} [args] Zero or more arguments to pass to the method
|
||||
*/
|
||||
var cordova = require('cordova'),
|
||||
nativeApiProvider = require('cordova/android/nativeapiprovider'),
|
||||
utils = require('cordova/utils'),
|
||||
base64 = require('cordova/base64'),
|
||||
channel = require('cordova/channel'),
|
||||
jsToNativeModes = {
|
||||
PROMPT: 0,
|
||||
JS_OBJECT: 1
|
||||
},
|
||||
nativeToJsModes = {
|
||||
// Polls for messages using the JS->Native bridge.
|
||||
POLLING: 0,
|
||||
// For LOAD_URL to be viable, it would need to have a work-around for
|
||||
// the bug where the soft-keyboard gets dismissed when a message is sent.
|
||||
LOAD_URL: 1,
|
||||
// For the ONLINE_EVENT to be viable, it would need to intercept all event
|
||||
// listeners (both through addEventListener and window.ononline) as well
|
||||
// as set the navigator property itself.
|
||||
ONLINE_EVENT: 2
|
||||
},
|
||||
jsToNativeBridgeMode, // Set lazily.
|
||||
nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT,
|
||||
pollEnabled = false,
|
||||
bridgeSecret = -1;
|
||||
|
||||
var messagesFromNative = [];
|
||||
var isProcessing = false;
|
||||
var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve();
|
||||
var nextTick = resolvedPromise ? function(fn) { resolvedPromise.then(fn); } : function(fn) { setTimeout(fn); };
|
||||
|
||||
function androidExec(success, fail, service, action, args) {
|
||||
if (bridgeSecret < 0) {
|
||||
// If we ever catch this firing, we'll need to queue up exec()s
|
||||
// and fire them once we get a secret. For now, I don't think
|
||||
// it's possible for exec() to be called since plugins are parsed but
|
||||
// not run until until after onNativeReady.
|
||||
throw new Error('exec() called without bridgeSecret');
|
||||
}
|
||||
// Set default bridge modes if they have not already been set.
|
||||
// By default, we use the failsafe, since addJavascriptInterface breaks too often
|
||||
if (jsToNativeBridgeMode === undefined) {
|
||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
|
||||
}
|
||||
|
||||
// Process any ArrayBuffers in the args into a string.
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
if (utils.typeName(args[i]) == 'ArrayBuffer') {
|
||||
args[i] = base64.fromArrayBuffer(args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
var callbackId = service + cordova.callbackId++,
|
||||
argsJson = JSON.stringify(args);
|
||||
|
||||
if (success || fail) {
|
||||
cordova.callbacks[callbackId] = {success:success, fail:fail};
|
||||
}
|
||||
|
||||
var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson);
|
||||
// If argsJson was received by Java as null, try again with the PROMPT bridge mode.
|
||||
// This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666.
|
||||
if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && msgs === "@Null arguments.") {
|
||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT);
|
||||
androidExec(success, fail, service, action, args);
|
||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
|
||||
} else if (msgs) {
|
||||
messagesFromNative.push(msgs);
|
||||
// Always process async to avoid exceptions messing up stack.
|
||||
nextTick(processMessages);
|
||||
}
|
||||
}
|
||||
|
||||
androidExec.init = function() {
|
||||
bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode);
|
||||
channel.onNativeReady.fire();
|
||||
};
|
||||
|
||||
function pollOnceFromOnlineEvent() {
|
||||
pollOnce(true);
|
||||
}
|
||||
|
||||
function pollOnce(opt_fromOnlineEvent) {
|
||||
if (bridgeSecret < 0) {
|
||||
// This can happen when the NativeToJsMessageQueue resets the online state on page transitions.
|
||||
// We know there's nothing to retrieve, so no need to poll.
|
||||
return;
|
||||
}
|
||||
var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent);
|
||||
if (msgs) {
|
||||
messagesFromNative.push(msgs);
|
||||
// Process sync since we know we're already top-of-stack.
|
||||
processMessages();
|
||||
}
|
||||
}
|
||||
|
||||
function pollingTimerFunc() {
|
||||
if (pollEnabled) {
|
||||
pollOnce();
|
||||
setTimeout(pollingTimerFunc, 50);
|
||||
}
|
||||
}
|
||||
|
||||
function hookOnlineApis() {
|
||||
function proxyEvent(e) {
|
||||
cordova.fireWindowEvent(e.type);
|
||||
}
|
||||
// The network module takes care of firing online and offline events.
|
||||
// It currently fires them only on document though, so we bridge them
|
||||
// to window here (while first listening for exec()-releated online/offline
|
||||
// events).
|
||||
window.addEventListener('online', pollOnceFromOnlineEvent, false);
|
||||
window.addEventListener('offline', pollOnceFromOnlineEvent, false);
|
||||
cordova.addWindowEventHandler('online');
|
||||
cordova.addWindowEventHandler('offline');
|
||||
document.addEventListener('online', proxyEvent, false);
|
||||
document.addEventListener('offline', proxyEvent, false);
|
||||
}
|
||||
|
||||
hookOnlineApis();
|
||||
|
||||
androidExec.jsToNativeModes = jsToNativeModes;
|
||||
androidExec.nativeToJsModes = nativeToJsModes;
|
||||
|
||||
androidExec.setJsToNativeBridgeMode = function(mode) {
|
||||
if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) {
|
||||
mode = jsToNativeModes.PROMPT;
|
||||
}
|
||||
nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT);
|
||||
jsToNativeBridgeMode = mode;
|
||||
};
|
||||
|
||||
androidExec.setNativeToJsBridgeMode = function(mode) {
|
||||
if (mode == nativeToJsBridgeMode) {
|
||||
return;
|
||||
}
|
||||
if (nativeToJsBridgeMode == nativeToJsModes.POLLING) {
|
||||
pollEnabled = false;
|
||||
}
|
||||
|
||||
nativeToJsBridgeMode = mode;
|
||||
// Tell the native side to switch modes.
|
||||
// Otherwise, it will be set by androidExec.init()
|
||||
if (bridgeSecret >= 0) {
|
||||
nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode);
|
||||
}
|
||||
|
||||
if (mode == nativeToJsModes.POLLING) {
|
||||
pollEnabled = true;
|
||||
setTimeout(pollingTimerFunc, 1);
|
||||
}
|
||||
};
|
||||
|
||||
function buildPayload(payload, message) {
|
||||
var payloadKind = message.charAt(0);
|
||||
if (payloadKind == 's') {
|
||||
payload.push(message.slice(1));
|
||||
} else if (payloadKind == 't') {
|
||||
payload.push(true);
|
||||
} else if (payloadKind == 'f') {
|
||||
payload.push(false);
|
||||
} else if (payloadKind == 'N') {
|
||||
payload.push(null);
|
||||
} else if (payloadKind == 'n') {
|
||||
payload.push(+message.slice(1));
|
||||
} else if (payloadKind == 'A') {
|
||||
var data = message.slice(1);
|
||||
payload.push(base64.toArrayBuffer(data));
|
||||
} else if (payloadKind == 'S') {
|
||||
payload.push(window.atob(message.slice(1)));
|
||||
} else if (payloadKind == 'M') {
|
||||
var multipartMessages = message.slice(1);
|
||||
while (multipartMessages !== "") {
|
||||
var spaceIdx = multipartMessages.indexOf(' ');
|
||||
var msgLen = +multipartMessages.slice(0, spaceIdx);
|
||||
var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen);
|
||||
multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1);
|
||||
buildPayload(payload, multipartMessage);
|
||||
}
|
||||
} else {
|
||||
payload.push(JSON.parse(message));
|
||||
}
|
||||
}
|
||||
|
||||
// Processes a single message, as encoded by NativeToJsMessageQueue.java.
|
||||
function processMessage(message) {
|
||||
var firstChar = message.charAt(0);
|
||||
if (firstChar == 'J') {
|
||||
// This is deprecated on the .java side. It doesn't work with CSP enabled.
|
||||
eval(message.slice(1));
|
||||
} else if (firstChar == 'S' || firstChar == 'F') {
|
||||
var success = firstChar == 'S';
|
||||
var keepCallback = message.charAt(1) == '1';
|
||||
var spaceIdx = message.indexOf(' ', 2);
|
||||
var status = +message.slice(2, spaceIdx);
|
||||
var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1);
|
||||
var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx);
|
||||
var payloadMessage = message.slice(nextSpaceIdx + 1);
|
||||
var payload = [];
|
||||
buildPayload(payload, payloadMessage);
|
||||
cordova.callbackFromNative(callbackId, success, status, payload, keepCallback);
|
||||
} else {
|
||||
console.log("processMessage failed: invalid message: " + JSON.stringify(message));
|
||||
}
|
||||
}
|
||||
|
||||
function processMessages() {
|
||||
// Check for the reentrant case.
|
||||
if (isProcessing) {
|
||||
return;
|
||||
}
|
||||
if (messagesFromNative.length === 0) {
|
||||
return;
|
||||
}
|
||||
isProcessing = true;
|
||||
try {
|
||||
var msg = popMessageFromQueue();
|
||||
// The Java side can send a * message to indicate that it
|
||||
// still has messages waiting to be retrieved.
|
||||
if (msg == '*' && messagesFromNative.length === 0) {
|
||||
nextTick(pollOnce);
|
||||
return;
|
||||
}
|
||||
processMessage(msg);
|
||||
} finally {
|
||||
isProcessing = false;
|
||||
if (messagesFromNative.length > 0) {
|
||||
nextTick(processMessages);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function popMessageFromQueue() {
|
||||
var messageBatch = messagesFromNative.shift();
|
||||
if (messageBatch == '*') {
|
||||
return '*';
|
||||
}
|
||||
|
||||
var spaceIdx = messageBatch.indexOf(' ');
|
||||
var msgLen = +messageBatch.slice(0, spaceIdx);
|
||||
var message = messageBatch.substr(spaceIdx + 1, msgLen);
|
||||
messageBatch = messageBatch.slice(spaceIdx + msgLen + 1);
|
||||
if (messageBatch) {
|
||||
messagesFromNative.unshift(messageBatch);
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
module.exports = androidExec;
|
||||
91
platforms/android/build/intermediates/assets/debug/www/cordova-js-src/platform.js
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
id: 'android',
|
||||
bootstrap: function() {
|
||||
var channel = require('cordova/channel'),
|
||||
cordova = require('cordova'),
|
||||
exec = require('cordova/exec'),
|
||||
modulemapper = require('cordova/modulemapper');
|
||||
|
||||
// Get the shared secret needed to use the bridge.
|
||||
exec.init();
|
||||
|
||||
// TODO: Extract this as a proper plugin.
|
||||
modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app');
|
||||
|
||||
var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
|
||||
|
||||
// Inject a listener for the backbutton on the document.
|
||||
var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
|
||||
backButtonChannel.onHasSubscribersChange = function() {
|
||||
// If we just attached the first handler or detached the last handler,
|
||||
// let native know we need to override the back button.
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [this.numHandlers == 1]);
|
||||
};
|
||||
|
||||
// Add hardware MENU and SEARCH button handlers
|
||||
cordova.addDocumentEventHandler('menubutton');
|
||||
cordova.addDocumentEventHandler('searchbutton');
|
||||
|
||||
function bindButtonChannel(buttonName) {
|
||||
// generic button bind used for volumeup/volumedown buttons
|
||||
var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
|
||||
volumeButtonChannel.onHasSubscribersChange = function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]);
|
||||
};
|
||||
}
|
||||
// Inject a listener for the volume buttons on the document.
|
||||
bindButtonChannel('volumeup');
|
||||
bindButtonChannel('volumedown');
|
||||
|
||||
// Let native code know we are all done on the JS side.
|
||||
// Native code will then un-hide the WebView.
|
||||
channel.onCordovaReady.subscribe(function() {
|
||||
exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []);
|
||||
exec(null, null, APP_PLUGIN_NAME, "show", []);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function onMessageFromNative(msg) {
|
||||
var cordova = require('cordova');
|
||||
var action = msg.action;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
// Button events
|
||||
case 'backbutton':
|
||||
case 'menubutton':
|
||||
case 'searchbutton':
|
||||
// App life cycle events
|
||||
case 'pause':
|
||||
case 'resume':
|
||||
// Volume events
|
||||
case 'volumedownbutton':
|
||||
case 'volumeupbutton':
|
||||
cordova.fireDocumentEvent(action);
|
||||
break;
|
||||
default:
|
||||
throw new Error('Unknown event action ' + action);
|
||||
}
|
||||
}
|
||||
108
platforms/android/build/intermediates/assets/debug/www/cordova-js-src/plugin/android/app.js
vendored
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
var exec = require('cordova/exec');
|
||||
var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
|
||||
|
||||
module.exports = {
|
||||
/**
|
||||
* Clear the resource cache.
|
||||
*/
|
||||
clearCache:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "clearCache", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Load the url into the webview or into new browser instance.
|
||||
*
|
||||
* @param url The URL to load
|
||||
* @param props Properties that can be passed in to the activity:
|
||||
* wait: int => wait msec before loading URL
|
||||
* loadingDialog: "Title,Message" => display a native loading dialog
|
||||
* loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error
|
||||
* clearHistory: boolean => clear webview history (default=false)
|
||||
* openExternal: boolean => open in a new browser (default=false)
|
||||
*
|
||||
* Example:
|
||||
* navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000});
|
||||
*/
|
||||
loadUrl:function(url, props) {
|
||||
exec(null, null, APP_PLUGIN_NAME, "loadUrl", [url, props]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Cancel loadUrl that is waiting to be loaded.
|
||||
*/
|
||||
cancelLoadUrl:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "cancelLoadUrl", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Clear web history in this web view.
|
||||
* Instead of BACK button loading the previous web page, it will exit the app.
|
||||
*/
|
||||
clearHistory:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "clearHistory", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Go to previous page displayed.
|
||||
* This is the same as pressing the backbutton on Android device.
|
||||
*/
|
||||
backHistory:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "backHistory", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Override the default behavior of the Android back button.
|
||||
* If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired.
|
||||
*
|
||||
* Note: The user should not have to call this method. Instead, when the user
|
||||
* registers for the "backbutton" event, this is automatically done.
|
||||
*
|
||||
* @param override T=override, F=cancel override
|
||||
*/
|
||||
overrideBackbutton:function(override) {
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [override]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Override the default behavior of the Android volume button.
|
||||
* If overridden, when the volume button is pressed, the "volume[up|down]button"
|
||||
* JavaScript event will be fired.
|
||||
*
|
||||
* Note: The user should not have to call this method. Instead, when the user
|
||||
* registers for the "volume[up|down]button" event, this is automatically done.
|
||||
*
|
||||
* @param button volumeup, volumedown
|
||||
* @param override T=override, F=cancel override
|
||||
*/
|
||||
overrideButton:function(button, override) {
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideButton", [button, override]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Exit and terminate the application.
|
||||
*/
|
||||
exitApp:function() {
|
||||
return exec(null, null, APP_PLUGIN_NAME, "exitApp", []);
|
||||
}
|
||||
};
|
||||
1979
platforms/android/build/intermediates/assets/debug/www/cordova.js
vendored
Normal file
63
platforms/android/build/intermediates/assets/debug/www/cordova_plugins.js
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
cordova.define('cordova/plugin_list', function(require, exports, module) {
|
||||
module.exports = [
|
||||
{
|
||||
"file": "plugins/com.smartmobilesoftware.androidinappbilling/www/inappbilling.js",
|
||||
"id": "com.smartmobilesoftware.androidinappbilling.InAppBillingPlugin",
|
||||
"pluginId": "com.smartmobilesoftware.androidinappbilling",
|
||||
"clobbers": [
|
||||
"inappbilling"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-device/www/device.js",
|
||||
"id": "cordova-plugin-device.device",
|
||||
"pluginId": "cordova-plugin-device",
|
||||
"clobbers": [
|
||||
"device"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
|
||||
"id": "cordova-plugin-splashscreen.SplashScreen",
|
||||
"pluginId": "cordova-plugin-splashscreen",
|
||||
"clobbers": [
|
||||
"navigator.splashscreen"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
|
||||
"id": "cordova-plugin-statusbar.statusbar",
|
||||
"pluginId": "cordova-plugin-statusbar",
|
||||
"clobbers": [
|
||||
"window.StatusBar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-whitelist/whitelist.js",
|
||||
"id": "cordova-plugin-whitelist.whitelist",
|
||||
"pluginId": "cordova-plugin-whitelist",
|
||||
"runs": true
|
||||
},
|
||||
{
|
||||
"file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
|
||||
"id": "ionic-plugin-keyboard.keyboard",
|
||||
"pluginId": "ionic-plugin-keyboard",
|
||||
"clobbers": [
|
||||
"cordova.plugins.Keyboard"
|
||||
],
|
||||
"runs": true
|
||||
}
|
||||
];
|
||||
module.exports.metadata =
|
||||
// TOP OF METADATA
|
||||
{
|
||||
"com.smartmobilesoftware.androidinappbilling": "3.0.2",
|
||||
"cordova-plugin-console": "1.0.2",
|
||||
"cordova-plugin-device": "1.1.0",
|
||||
"cordova-plugin-splashscreen": "3.0.0",
|
||||
"cordova-plugin-statusbar": "2.0.0",
|
||||
"cordova-plugin-whitelist": "1.2.0",
|
||||
"ionic-plugin-keyboard": "1.0.8"
|
||||
}
|
||||
// BOTTOM OF METADATA
|
||||
});
|
||||
@@ -0,0 +1,56 @@
|
||||
/* Empty. Add your own CSS if you like */
|
||||
.lobster{
|
||||
font-family: 'Lobster', cursive;
|
||||
}
|
||||
|
||||
.lobsterMiddle{
|
||||
font-family: 'Lobster', cursive;
|
||||
font-size: 1.2em;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.lobstershadow{
|
||||
font-family: 'Lobster', cursive;
|
||||
text-shadow: 4px 4px 4px #aaa;
|
||||
}
|
||||
|
||||
|
||||
.oswald{
|
||||
font-family: 'Oswald', sans-serif;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.item-divider{
|
||||
background-image: linear-gradient(
|
||||
hsla(340, 100%, 35%, 1) 20%,
|
||||
hsl(340,100%,54%) 90%
|
||||
);
|
||||
color:white;
|
||||
}
|
||||
|
||||
.tabs-addddssertive > .tabs{
|
||||
background-image: linear-gradient(
|
||||
hsla(340, 100%, 35%, 1) 20%,
|
||||
hsl(340,100%,54%) 90%
|
||||
) !important;
|
||||
}
|
||||
|
||||
.tabs-assertive > .tabs{
|
||||
background-color: #BD0340 !important;
|
||||
}
|
||||
|
||||
.bar-custom{
|
||||
background-image: linear-gradient(
|
||||
hsla(340, 100%, 35%, 1) 20%,
|
||||
hsl(340,100%,54%) 90%
|
||||
) !important;
|
||||
}
|
||||
|
||||
|
||||
.button-custom{
|
||||
background-color: #C60545;
|
||||
text-decoration: none;
|
||||
border: 1px solid #C60545;
|
||||
border-color: #F9135F #F9135F #F9135F #F9135F;
|
||||
color: #fff
|
||||
}
|
||||
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 260 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 233 KiB |
|
After Width: | Height: | Size: 558 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,45 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
|
||||
<title></title>
|
||||
|
||||
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
|
||||
<link href='https://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>
|
||||
<link href='https://fonts.googleapis.com/css?family=Oswald:400,300,700' rel='stylesheet' type='text/css'>
|
||||
<link href="css/style.css" rel="stylesheet">
|
||||
|
||||
<!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
|
||||
<link href="css/ionic.app.css" rel="stylesheet">
|
||||
-->
|
||||
|
||||
<!-- ionic/angularjs js -->
|
||||
<script src="lib/ionic/js/ionic.bundle.js"></script>
|
||||
|
||||
<!-- cordova script (this will be a 404 during development) -->
|
||||
<script src="cordova.js"></script>
|
||||
|
||||
<!-- your app's js -->
|
||||
<script src="js/app.js"></script>
|
||||
<script src="js/controllers.js"></script>
|
||||
<script src="js/services.js"></script>
|
||||
</head>
|
||||
<body ng-app="starter" class="platform-android platform-cordova platform-webview">
|
||||
<!--
|
||||
The nav bar that will be updated as we navigate between views.
|
||||
-->
|
||||
<ion-nav-bar class="bar-assertive bar-custom">
|
||||
<ion-nav-back-button>
|
||||
</ion-nav-back-button>
|
||||
</ion-nav-bar>
|
||||
<!--
|
||||
The views will be rendered in the <ion-nav-view> directive below
|
||||
Templates are in the /templates folder (but you could also
|
||||
have templates inline in this html file if you'd like).
|
||||
-->
|
||||
<ion-nav-view></ion-nav-view>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,86 @@
|
||||
// Ionic Starter App
|
||||
|
||||
// angular.module is a global place for creating, registering and retrieving Angular modules
|
||||
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
|
||||
// the 2nd parameter is an array of 'requires'
|
||||
// 'starter.services' is found in services.js
|
||||
// 'starter.controllers' is found in controllers.js
|
||||
angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])
|
||||
|
||||
.run(function($ionicPlatform, $ionicPopup) {
|
||||
$ionicPlatform.ready(function() {
|
||||
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
|
||||
// for form inputs)
|
||||
if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
|
||||
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
|
||||
cordova.plugins.Keyboard.disableScroll(true);
|
||||
|
||||
}
|
||||
if (window.StatusBar) {
|
||||
// org.apache.cordova.statusbar required
|
||||
StatusBar.styleDefault();
|
||||
}
|
||||
|
||||
function successHandler (result) {
|
||||
var strResult = "";
|
||||
if(typeof result === 'object') {
|
||||
strResult = JSON.stringify(result);
|
||||
} else {
|
||||
strResult = result;
|
||||
}
|
||||
alert("SUCCESS: \r\n"+strResult );
|
||||
}
|
||||
|
||||
function errorHandler (error) {
|
||||
alert("ERROR: \r\n"+error );
|
||||
}
|
||||
|
||||
|
||||
if((window.device && device.platform == "Android") && typeof inappbilling !== "undefined") {
|
||||
inappbilling.init(successHandler, errorHandler, {showLog:true});
|
||||
}
|
||||
|
||||
});
|
||||
})
|
||||
|
||||
.config(function($stateProvider, $urlRouterProvider, $ionicConfigProvider) {
|
||||
|
||||
// Ionic uses AngularUI Router which uses the concept of states
|
||||
// Learn more here: https://github.com/angular-ui/ui-router
|
||||
// Set up the various states which the app can be in.
|
||||
// Each state's controller can be found in controllers.js
|
||||
$stateProvider
|
||||
|
||||
// setup an abstract state for the tabs directive
|
||||
.state('tab', {
|
||||
url: '/tab',
|
||||
abstract: true,
|
||||
templateUrl: 'templates/tabs.html'
|
||||
})
|
||||
|
||||
// Each tab has its own nav history stack:
|
||||
|
||||
.state('tab.dash', {
|
||||
url: '/dash',
|
||||
views: {
|
||||
'tab-dash': {
|
||||
templateUrl: 'templates/tab-dash.html',
|
||||
controller: 'DashCtrl'
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
.state('tab.buys', {
|
||||
url: '/buys',
|
||||
views: {
|
||||
'tab-buys': {
|
||||
templateUrl: 'templates/tab-buys.html',
|
||||
controller: 'BuysCtrl'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// if none of the above states are matched, use this as the fallback
|
||||
$urlRouterProvider.otherwise('/tab/dash');
|
||||
$ionicConfigProvider.tabs.position('bottom');
|
||||
});
|
||||
@@ -0,0 +1,85 @@
|
||||
angular.module('starter.controllers', [])
|
||||
|
||||
.controller('DashCtrl', function($scope,$ionicPopup) {
|
||||
|
||||
$scope.preis="";
|
||||
$scope.name="";
|
||||
$scope.freitext="";
|
||||
var showAlert=0;
|
||||
|
||||
$scope.validate = function() {
|
||||
showAlert=0;
|
||||
if ($scope.name.length < 1){
|
||||
showAlert=1;
|
||||
}
|
||||
if ($scope.freitext.length < 1){
|
||||
showAlert=1;
|
||||
}
|
||||
|
||||
if (showAlert==1){
|
||||
$scope.showAlert();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
$scope.showAlert = function() {
|
||||
var alertPopup = $ionicPopup.alert({
|
||||
title: 'Uuuupppsssiii',
|
||||
template: 'Bitte prüfe deine Eingaben.'
|
||||
});
|
||||
alertPopup.then(function(res) {
|
||||
console.log('Thank you for not eating my delicious ice cream cone');
|
||||
});
|
||||
};
|
||||
|
||||
function successHandler (result) {
|
||||
var strResult = "";
|
||||
if(typeof result === 'object') {
|
||||
strResult = JSON.stringify(result);
|
||||
} else {
|
||||
strResult = result;
|
||||
}
|
||||
alert("SUCCESS: \r\n"+strResult );
|
||||
}
|
||||
|
||||
function errorHandler (error) {
|
||||
alert("ERROR: \r\n"+error );
|
||||
}
|
||||
|
||||
$scope.buyAdFree = function() {
|
||||
|
||||
|
||||
|
||||
|
||||
if((window.device && device.platform == "Android") && typeof inappbilling !== "undefined") {
|
||||
|
||||
|
||||
alert($scope.preis);
|
||||
inappbilling.buy(successHandler, errorHandler,"3xrose");
|
||||
inappbilling.consumePurchase(successHandler, errorHandler, "3xrose");
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
.controller('BuysCtrl', function($scope) {
|
||||
// With the new view caching in Ionic, Controllers are only called
|
||||
// when they are recreated or on app start, instead of every page change.
|
||||
// To listen for when this page is active (for example, to refresh data),
|
||||
// listen for the $ionicView.enter event:
|
||||
//
|
||||
//$scope.$on('$ionicView.enter', function(e) {
|
||||
//});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
.controller('Dummy', function($scope) {
|
||||
});
|
||||
@@ -0,0 +1,50 @@
|
||||
angular.module('starter.services', [])
|
||||
|
||||
.factory('Chats', function() {
|
||||
// Might use a resource here that returns a JSON array
|
||||
|
||||
// Some fake testing data
|
||||
var chats = [{
|
||||
id: 0,
|
||||
name: 'Ben Sparrow',
|
||||
lastText: 'You on your way?',
|
||||
face: 'img/ben.png'
|
||||
}, {
|
||||
id: 1,
|
||||
name: 'Max Lynx',
|
||||
lastText: 'Hey, it\'s me',
|
||||
face: 'img/max.png'
|
||||
}, {
|
||||
id: 2,
|
||||
name: 'Adam Bradleyson',
|
||||
lastText: 'I should buy a boat',
|
||||
face: 'img/adam.jpg'
|
||||
}, {
|
||||
id: 3,
|
||||
name: 'Perry Governor',
|
||||
lastText: 'Look at my mukluks!',
|
||||
face: 'img/perry.png'
|
||||
}, {
|
||||
id: 4,
|
||||
name: 'Mike Harrington',
|
||||
lastText: 'This is wicked good ice cream.',
|
||||
face: 'img/mike.png'
|
||||
}];
|
||||
|
||||
return {
|
||||
all: function() {
|
||||
return chats;
|
||||
},
|
||||
remove: function(chat) {
|
||||
chats.splice(chats.indexOf(chat), 1);
|
||||
},
|
||||
get: function(chatId) {
|
||||
for (var i = 0; i < chats.length; i++) {
|
||||
if (chats[i].id === parseInt(chatId)) {
|
||||
return chats[i];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
};
|
||||
});
|
||||
23
platforms/android/build/intermediates/assets/debug/www/lib/ionic/css/ionic.min.css
vendored
Normal file
|
After Width: | Height: | Size: 326 KiB |
4232
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/angular-ui/angular-ui-router.js
vendored
Normal file
3721
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/angular/angular-animate.js
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
AngularJS v1.4.3
|
||||
(c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(F,t,W){'use strict';function ua(a,b,c){if(!a)throw ngMinErr("areq",b||"?",c||"required");return a}function va(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Ea(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function ba(a,b,c){var d="";a=X(a)?a:a&&U(a)&&a.length?a.split(/\s+/):[];u(a,function(a,s){a&&0<a.length&&(d+=0<s?" ":"",d+=c?b+a:a+b)});return d}function Fa(a){if(a instanceof G)switch(a.length){case 0:return[];
|
||||
case 1:if(1===a[0].nodeType)return a;break;default:return G(ka(a))}if(1===a.nodeType)return G(a)}function ka(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1==c.nodeType)return c}}function Ga(a,b,c){u(b,function(b){a.addClass(b,c)})}function Ha(a,b,c){u(b,function(b){a.removeClass(b,c)})}function ha(a){return function(b,c){c.addClass&&(Ga(a,b,c.addClass),c.addClass=null);c.removeClass&&(Ha(a,b,c.removeClass),c.removeClass=null)}}function ia(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
|
||||
H;a.domOperation=function(){a.$$domOperationFired=!0;b();b=H};a.$$prepared=!0}return a}function ca(a,b){wa(a,b);xa(a,b)}function wa(a,b){b.from&&(a.css(b.from),b.from=null)}function xa(a,b){b.to&&(a.css(b.to),b.to=null)}function R(a,b,c){var d=(b.addClass||"")+" "+(c.addClass||""),e=(b.removeClass||"")+" "+(c.removeClass||"");a=Ia(a.attr("class"),d,e);ya(b,c);b.addClass=a.addClass?a.addClass:null;b.removeClass=a.removeClass?a.removeClass:null;return b}function Ia(a,b,c){function d(a){U(a)&&(a=a.split(" "));
|
||||
var b={};u(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);u(b,function(a,b){e[b]=1});c=d(c);u(c,function(a,b){e[b]=1===e[b]?null:-1});var s={addClass:"",removeClass:""};u(e,function(b,c){var d,e;1===b?(d="addClass",e=!a[c]):-1===b&&(d="removeClass",e=a[c]);e&&(s[d].length&&(s[d]+=" "),s[d]+=c)});return s}function z(a){return a instanceof t.element?a[0]:a}function za(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};u(c,function(a,b){var c=e[a];if(c){var k=c.charAt(0);
|
||||
if("-"===k||"+"===k||0<=k)c=Ja(c);0===c&&(c=null);d[b]=c}});return d}function Ja(a){var b=0;a=a.split(/\s*,\s*/);u(a,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function la(a){return 0===a||null!=a}function Aa(a,b){var c=O,d=a+"s";b?c+="Duration":d+=" linear all";return[c,d]}function ja(a,b){var c=b?"-"+b+"s":"";da(a,[ea,c]);return[ea,c]}function ma(a,b){var c=b?"paused":"",d=V+"PlayState";da(a,[d,c]);return[d,c]}function da(a,
|
||||
b){a.style[b[0]]=b[1]}function Ba(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}var H=t.noop,ya=t.extend,G=t.element,u=t.forEach,X=t.isArray,U=t.isString,na=t.isObject,Ka=t.isUndefined,La=t.isDefined,Ca=t.isFunction,oa=t.isElement,O,pa,V,qa;F.ontransitionend===W&&F.onwebkittransitionend!==W?(O="WebkitTransition",pa="webkitTransitionEnd transitionend"):
|
||||
(O="transition",pa="transitionend");F.onanimationend===W&&F.onwebkitanimationend!==W?(V="WebkitAnimation",qa="webkitAnimationEnd animationend"):(V="animation",qa="animationend");var ra=V+"Delay",sa=V+"Duration",ea=O+"Delay";F=O+"Duration";var Ma={transitionDuration:F,transitionDelay:ea,transitionProperty:O+"Property",animationDuration:sa,animationDelay:ra,animationIterationCount:V+"IterationCount"},Na={transitionDuration:F,transitionDelay:ea,animationDuration:sa,animationDelay:ra};t.module("ngAnimate",
|
||||
[]).directive("ngAnimateChildren",[function(){return function(a,b,c){a=c.ngAnimateChildren;t.isString(a)&&0===a.length?b.data("$$ngAnimateChildren",!0):c.$observe("ngAnimateChildren",function(a){b.data("$$ngAnimateChildren","on"===a||"true"===a)})}}]).factory("$$rAFMutex",["$$rAF",function(a){return function(){var b=!1;a(function(){b=!0});return function(c){b?c():a(c)}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d.push([].concat(a));c()}function c(){if(d.length){for(var b=[],n=
|
||||
0;n<d.length;n++){var h=d[n];h.shift()();h.length&&b.push(h)}d=b;e||a(function(){e||c()})}}var d=[],e;b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).factory("$$AnimateRunner",["$q","$$rAFMutex",function(a,b){function c(a){this.setHost(a);this._doneCallbacks=[];this._runInAnimationFrame=b();this._state=0}c.chain=function(a,b){function c(){if(n===a.length)b(!0);else a[n](function(a){!1===a?b(!1):(n++,c())})}var n=0;c()};c.all=function(a,b){function c(s){h=h&&s;++n===
|
||||
a.length&&b(h)}var n=0,h=!0;u(a,function(a){a.done(c)})};c.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:H,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&
|
||||
this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._runInAnimationFrame(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(u(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return c}]).provider("$$animateQueue",["$animateProvider",
|
||||
function(a){function b(a,b,c,h){return d[a].some(function(a){return a(b,c,h)})}function c(a,b){a=a||{};var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;return b?c&&d:c||d}var d=this.rules={skip:[],cancel:[],join:[]};d.join.push(function(a,b,d){return!b.structural&&c(b.options)});d.skip.push(function(a,b,d){return!b.structural&&!c(b.options)});d.skip.push(function(a,b,c){return"leave"==c.event&&b.structural});d.skip.push(function(a,b,c){return c.structural&&!b.structural});d.cancel.push(function(a,
|
||||
b,c){return c.structural&&b.structural});d.cancel.push(function(a,b,c){return 2===c.state&&b.structural});d.cancel.push(function(a,b,c){a=b.options;c=c.options;return a.addClass&&a.addClass===c.removeClass||a.removeClass&&a.removeClass===c.addClass});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite",function(d,s,n,h,k,D,A,Z,I){function w(a,b){var c=z(a),f=[],m=l[b];m&&u(m,function(a){a.node.contains(c)&&f.push(a.callback)});
|
||||
return f}function B(a,b,c,f){d(function(){u(w(b,a),function(a){a(b,c,f)})})}function r(a,S,p){function d(b,c,f,p){B(c,a,f,p);b.progress(c,f,p)}function g(b){Da(a,p);ca(a,p);p.domOperation();l.complete(!b)}var P,E;if(a=Fa(a))P=z(a),E=a.parent();p=ia(p);var l=new A;if(!P)return g(),l;X(p.addClass)&&(p.addClass=p.addClass.join(" "));X(p.removeClass)&&(p.removeClass=p.removeClass.join(" "));p.from&&!na(p.from)&&(p.from=null);p.to&&!na(p.to)&&(p.to=null);var e=[P.className,p.addClass,p.removeClass].join(" ");
|
||||
if(!v(e))return g(),l;var M=0<=["enter","move","leave"].indexOf(S),h=!x||L.get(P),e=!h&&m.get(P)||{},k=!!e.state;h||k&&1==e.state||(h=!ta(a,E,S));if(h)return g(),l;M&&K(a);h={structural:M,element:a,event:S,close:g,options:p,runner:l};if(k){if(b("skip",a,h,e)){if(2===e.state)return g(),l;R(a,e.options,p);return e.runner}if(b("cancel",a,h,e))2===e.state?e.runner.end():e.structural?e.close():R(a,h.options,e.options);else if(b("join",a,h,e))if(2===e.state)R(a,p,{});else return S=h.event=e.event,p=R(a,
|
||||
e.options,h.options),l}else R(a,p,{});(k=h.structural)||(k="animate"===h.event&&0<Object.keys(h.options.to||{}).length||c(h.options));if(!k)return g(),C(a),l;M&&f(E);var r=(e.counter||0)+1;h.counter=r;ga(a,1,h);s.$$postDigest(function(){var b=m.get(P),v=!b,b=b||{},e=a.parent()||[],E=0<e.length&&("animate"===b.event||b.structural||c(b.options));if(v||b.counter!==r||!E){v&&(Da(a,p),ca(a,p));if(v||M&&b.event!==S)p.domOperation(),l.end();E||C(a)}else S=!b.structural&&c(b.options,!0)?"setClass":b.event,
|
||||
b.structural&&f(e),ga(a,2),b=D(a,S,b.options),b.done(function(b){g(!b);(b=m.get(P))&&b.counter===r&&C(z(a));d(l,S,"close",{})}),l.setHost(b),d(l,S,"start",{})});return l}function K(a){a=z(a).querySelectorAll("[data-ng-animate]");u(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate")),c=m.get(a);switch(b){case 2:c.runner.end();case 1:c&&m.remove(a)}})}function C(a){a=z(a);a.removeAttribute("data-ng-animate");m.remove(a)}function E(a,b){return z(a)===z(b)}function f(a){a=z(a);do{if(!a||1!==
|
||||
a.nodeType)break;var b=m.get(a);if(b){var f=a;!b.structural&&c(b.options)&&(2===b.state&&b.runner.end(),C(f))}a=a.parentNode}while(1)}function ta(a,b,c){var f=c=!1,d=!1,v;for((a=a.data("$ngAnimatePin"))&&(b=a);b&&b.length;){f||(f=E(b,n));a=b[0];if(1!==a.nodeType)break;var e=m.get(a)||{};d||(d=e.structural||L.get(a));if(Ka(v)||!0===v)a=b.data("$$ngAnimateChildren"),La(a)&&(v=a);if(d&&!1===v)break;f||(f=E(b,n),f||(a=b.data("$ngAnimatePin"))&&(b=a));c||(c=E(b,g));b=b.parent()}return(!d||v)&&f&&c}function ga(a,
|
||||
b,c){c=c||{};c.state=b;a=z(a);a.setAttribute("data-ng-animate",b);c=(b=m.get(a))?ya(b,c):c;m.put(a,c)}var m=new k,L=new k,x=null,M=s.$watch(function(){return 0===Z.totalPendingRequests},function(a){a&&(M(),s.$$postDigest(function(){s.$$postDigest(function(){null===x&&(x=!0)})}))}),g=G(h[0].body),l={},P=a.classNameFilter(),v=P?function(a){return P.test(a)}:function(){return!0},Da=ha(I);return{on:function(a,b,c){b=ka(b);l[a]=l[a]||[];l[a].push({node:b,callback:c})},off:function(a,b,c){function f(a,
|
||||
b,c){var d=ka(b);return a.filter(function(a){return!(a.node===d&&(!c||a.callback===c))})}var d=l[a];d&&(l[a]=1===arguments.length?null:f(d,b,c))},pin:function(a,b){ua(oa(a),"element","not an element");ua(oa(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,f){c=c||{};c.domOperation=f;return r(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!x;else if(oa(a)){var f=z(a),d=L.get(f);1===c?b=!d:(b=!!b)?d&&L.remove(f):L.put(f,!0)}else b=x=!!a;return b}}}]}]).provider("$$animation",
|
||||
["$animateProvider",function(a){function b(a){return a.data("$$animationRunner")}var c=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$rAFScheduler",function(a,e,s,n,h){var k=[],D=ha(a),A=0,Z=0,I=[];return function(w,B,r){function K(a){a=a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];u(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function C(a){var b=[],c={};u(a,function(a,f){var d=z(a.element),
|
||||
m=0<=["enter","move"].indexOf(a.event),d=a.structural?K(d):[];if(d.length){var g=m?"to":"from";u(d,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][g]={animationID:f,element:G(a)}})}else b.push(a)});var f={},d={};u(c,function(c,m){var g=c.from,e=c.to;if(g&&e){var l=a[g.animationID],h=a[e.animationID],x=g.animationID.toString();if(!d[x]){var B=d[x]={structural:!0,beforeStart:function(){l.beforeStart();h.beforeStart()},close:function(){l.close();h.close()},classes:E(l.classes,h.classes),
|
||||
from:l,to:h,anchors:[]};B.classes.length?b.push(B):(b.push(l),b.push(h))}d[x].anchors.push({out:g.element,"in":e.element})}else g=g?g.animationID:e.animationID,e=g.toString(),f[e]||(f[e]=!0,b.push(a[g]))});return b}function E(a,b){a=a.split(" ");b=b.split(" ");for(var c=[],f=0;f<a.length;f++){var d=a[f];if("ng-"!==d.substring(0,3))for(var g=0;g<b.length;g++)if(d===b[g]){c.push(d);break}}return c.join(" ")}function f(a){for(var b=c.length-1;0<=b;b--){var f=c[b];if(s.has(f)&&(f=s.get(f)(a)))return f}}
|
||||
function ta(a,c){a.from&&a.to?(b(a.from.element).setHost(c),b(a.to.element).setHost(c)):b(a.element).setHost(c)}function ga(){var a=b(w);!a||"leave"===B&&r.$$domOperationFired||a.end()}function m(b){w.off("$destroy",ga);w.removeData("$$animationRunner");D(w,r);ca(w,r);r.domOperation();g&&a.removeClass(w,g);w.removeClass("ng-animate");x.complete(!b)}r=ia(r);var L=0<=["enter","move","leave"].indexOf(B),x=new n({end:function(){m()},cancel:function(){m(!0)}});if(!c.length)return m(),x;w.data("$$animationRunner",
|
||||
x);var M=va(w.attr("class"),va(r.addClass,r.removeClass)),g=r.tempClasses;g&&(M+=" "+g,r.tempClasses=null);var l;L||(l=A,A+=1);k.push({element:w,classes:M,event:B,classBasedIndex:l,structural:L,options:r,beforeStart:function(){w.addClass("ng-animate");g&&a.addClass(w,g)},close:m});w.on("$destroy",ga);if(1<k.length)return x;e.$$postDigest(function(){Z=A;A=0;I.length=0;var a=[];u(k,function(c){b(c.element)&&a.push(c)});k.length=0;u(C(a),function(a){function c(){a.beforeStart();var d,g=a.close,e=a.anchors?
|
||||
a.from.element||a.to.element:a.element;b(e)&&z(e).parentNode&&(e=f(a))&&(d=e.start);d?(d=d(),d.done(function(a){g(!a)}),ta(a,d)):g()}a.structural?c():(I.push({node:z(a.element),fn:c}),a.classBasedIndex===Z-1&&(I=I.sort(function(a,b){return b.node.contains(a.node)}).map(function(a){return a.fn}),h(I)))})});return x}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Ba(),c=Ba();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$document","$sniffer","$$rAFScheduler",function(a,
|
||||
e,s,n,h,k,D){function A(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++r))+"-"+a.getAttribute("class")+"-"+b}function Z(h,f,B,k){var m;0<b.count(B)&&(m=c.get(B),m||(f=ba(f,"-stagger"),e.addClass(h,f),m=za(a,h,k),m.animationDuration=Math.max(m.animationDuration,0),m.transitionDuration=Math.max(m.transitionDuration,0),e.removeClass(h,f),c.put(B,m)));return m||{}}function I(a){C.push(a);D.waitUntilQuiet(function(){b.flush();c.flush();for(var a=K.offsetWidth+1,d=0;d<
|
||||
C.length;d++)C[d](a);C.length=0})}function w(c,f,e){f=b.get(e);f||(f=za(a,c,Ma),"infinite"===f.animationIterationCount&&(f.animationIterationCount=1));b.put(e,f);c=f;e=c.animationDelay;f=c.transitionDelay;c.maxDelay=e&&f?Math.max(e,f):e||f;c.maxDuration=Math.max(c.animationDuration*c.animationIterationCount,c.transitionDuration);return c}var B=ha(e),r=0,K=z(h).body,C=[];return function(a,c){function d(){m()}function h(){m(!0)}function m(b){if(!(K||C&&D)){K=!0;D=!1;e.removeClass(a,Y);e.removeClass(a,
|
||||
W);ma(g,!1);ja(g,!1);u(l,function(a){g.style[a[0]]=""});B(a,c);ca(a,c);if(c.onDone)c.onDone();p&&p.complete(!b)}}function L(a){q.blockTransition&&ja(g,a);q.blockKeyframeAnimation&&ma(g,!!a)}function x(){p=new s({end:d,cancel:h});m();return{$$willAnimate:!1,start:function(){return p},end:d}}function M(){function b(){if(!K){L(!1);u(l,function(a){g.style[a[0]]=a[1]});B(a,c);e.addClass(a,W);if(q.recalculateTimingStyles){fa=g.className+" "+Y;$=A(g,fa);y=w(g,fa,$);Q=y.maxDelay;H=Math.max(Q,0);J=y.maxDuration;
|
||||
if(0===J){m();return}q.hasTransitions=0<y.transitionDuration;q.hasAnimations=0<y.animationDuration}if(q.applyTransitionDelay||q.applyAnimationDelay){Q="boolean"!==typeof c.delay&&la(c.delay)?parseFloat(c.delay):Q;H=Math.max(Q,0);var k;q.applyTransitionDelay&&(y.transitionDelay=Q,k=[ea,Q+"s"],l.push(k),g.style[k[0]]=k[1]);q.applyAnimationDelay&&(y.animationDelay=Q,k=[ra,Q+"s"],l.push(k),g.style[k[0]]=k[1])}F=1E3*H;G=1E3*J;if(c.easing){var r=c.easing;q.hasTransitions&&(k=O+"TimingFunction",l.push([k,
|
||||
r]),g.style[k]=r);q.hasAnimations&&(k=V+"TimingFunction",l.push([k,r]),g.style[k]=r)}y.transitionDuration&&p.push(pa);y.animationDuration&&p.push(qa);x=Date.now();a.on(p.join(" "),h);n(d,F+1.5*G);xa(a,c)}}function d(){m()}function h(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||b.timeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-x,0)>=F&&b>=J&&(C=!0,m())}if(!K)if(g.parentNode){var x,p=[],k=function(a){if(C)D&&a&&(D=!1,m());else if(D=!a,y.animationDuration)if(a=
|
||||
ma(g,D),D)l.push(a);else{var b=l,c=b.indexOf(a);0<=a&&b.splice(c,1)}},r=0<U&&(y.transitionDuration&&0===T.transitionDuration||y.animationDuration&&0===T.animationDuration)&&Math.max(T.animationDelay,T.transitionDelay);r?n(b,Math.floor(r*U*1E3),!1):b();t.resume=function(){k(!0)};t.pause=function(){k(!1)}}else m()}var g=z(a);if(!g||!g.parentNode)return x();c=ia(c);var l=[],r=a.attr("class"),v=Ea(c),K,D,C,p,t,H,F,J,G;if(0===c.duration||!k.animations&&!k.transitions)return x();var aa=c.event&&X(c.event)?
|
||||
c.event.join(" "):c.event,R="",N="";aa&&c.structural?R=ba(aa,"ng-",!0):aa&&(R=aa);c.addClass&&(N+=ba(c.addClass,"-add"));c.removeClass&&(N.length&&(N+=" "),N+=ba(c.removeClass,"-remove"));c.applyClassesEarly&&N.length&&(B(a,c),N="");var Y=[R,N].join(" ").trim(),fa=r+" "+Y,W=ba(Y,"-active"),r=v.to&&0<Object.keys(v.to).length;if(!(0<(c.keyframeStyle||"").length||r||Y))return x();var $,T;0<c.stagger?(v=parseFloat(c.stagger),T={transitionDelay:v,animationDelay:v,transitionDuration:0,animationDuration:0}):
|
||||
($=A(g,fa),T=Z(g,Y,$,Na));e.addClass(a,Y);c.transitionStyle&&(v=[O,c.transitionStyle],da(g,v),l.push(v));0<=c.duration&&(v=0<g.style[O].length,v=Aa(c.duration,v),da(g,v),l.push(v));c.keyframeStyle&&(v=[V,c.keyframeStyle],da(g,v),l.push(v));var U=T?0<=c.staggerIndex?c.staggerIndex:b.count($):0;(aa=0===U)&&ja(g,9999);var y=w(g,fa,$),Q=y.maxDelay;H=Math.max(Q,0);J=y.maxDuration;var q={};q.hasTransitions=0<y.transitionDuration;q.hasAnimations=0<y.animationDuration;q.hasTransitionAll=q.hasTransitions&&
|
||||
"all"==y.transitionProperty;q.applyTransitionDuration=r&&(q.hasTransitions&&!q.hasTransitionAll||q.hasAnimations&&!q.hasTransitions);q.applyAnimationDuration=c.duration&&q.hasAnimations;q.applyTransitionDelay=la(c.delay)&&(q.applyTransitionDuration||q.hasTransitions);q.applyAnimationDelay=la(c.delay)&&q.hasAnimations;q.recalculateTimingStyles=0<N.length;if(q.applyTransitionDuration||q.applyAnimationDuration)J=c.duration?parseFloat(c.duration):J,q.applyTransitionDuration&&(q.hasTransitions=!0,y.transitionDuration=
|
||||
J,v=0<g.style[O+"Property"].length,l.push(Aa(J,v))),q.applyAnimationDuration&&(q.hasAnimations=!0,y.animationDuration=J,l.push([sa,J+"s"]));if(0===J&&!q.recalculateTimingStyles)return x();null==c.duration&&0<y.transitionDuration&&(q.recalculateTimingStyles=q.recalculateTimingStyles||aa);F=1E3*H;G=1E3*J;c.skipBlocking||(q.blockTransition=0<y.transitionDuration,q.blockKeyframeAnimation=0<y.animationDuration&&0<T.animationDelay&&0===T.animationDuration);wa(a,c);q.blockTransition||ja(g,!1);L(J);return{$$willAnimate:!0,
|
||||
end:d,start:function(){if(!K)return t={end:d,cancel:h,resume:null,pause:null},p=new s(t),I(M),p}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$document","$sniffer",function(a,c,d,e,s,n){function h(a){return a.replace(/\bng-\S+\b/g,"")}function k(a,b){U(a)&&(a=a.split(" "));U(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function D(c,
|
||||
e,A){function D(a){var b={},c=z(a).getBoundingClientRect();u(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=I.scrollTop;break;case "left":d+=I.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function s(){var c=h(A.attr("class")||""),d=k(c,t),c=k(t,c),d=a(n,{to:D(A),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function f(){n.remove();e.removeClass("ng-animate-shim");A.removeClass("ng-animate-shim")}var n=G(z(e).cloneNode(!0)),
|
||||
t=h(n.attr("class")||"");e.addClass("ng-animate-shim");A.addClass("ng-animate-shim");n.addClass("ng-anchor");w.append(n);var m;c=function(){var c=a(n,{addClass:"ng-anchor-out",delay:!0,from:D(e)});return c.$$willAnimate?c:null}();if(!c&&(m=s(),!m))return f();var L=c||m;return{start:function(){function a(){c&&c.end()}var b,c=L.start();c.done(function(){c=null;if(!m&&(m=s()))return c=m.start(),c.done(function(){c=null;f();b.complete()}),c;f();b.complete()});return b=new d({end:a,cancel:a})}}}function A(a,
|
||||
b,c,e){var h=t(a),f=t(b),k=[];u(e,function(a){(a=D(c,a.out,a["in"]))&&k.push(a)});if(h||f||0!==k.length)return{start:function(){function a(){u(b,function(a){a.end()})}var b=[];h&&b.push(h.start());f&&b.push(f.start());u(k,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function t(c){var d=c.element,e=c.options||{};c.structural?(e.structural=e.applyClassesEarly=!0,e.event=c.event,"leave"===e.event&&(e.onDone=e.domOperation)):e.event=null;
|
||||
c=a(d,e);return c.$$willAnimate?c:null}if(!n.animations&&!n.transitions)return H;var I=z(s).body;c=z(e);var w=G(I.parentNode===c?I:c);return function(a){return a.from&&a.to?A(a.from,a.to,a.classes,a.anchors):t(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$rAFMutex","$$jqLite",function(b,c,d,e){function s(c){c=X(c)?c:c.split(" ");for(var d=[],e={},A=0;A<c.length;A++){var n=c[A],s=a.$$registeredAnimations[n];s&&!e[n]&&(d.push(b.get(s)),e[n]=
|
||||
!0)}return d}var n=ha(e);return function(a,b,d,e){function t(){e.domOperation();n(a,e)}function z(a,b,d,e,g){switch(d){case "animate":b=[b,e.from,e.to,g];break;case "setClass":b=[b,r,K,g];break;case "addClass":b=[b,r,g];break;case "removeClass":b=[b,K,g];break;default:b=[b,g]}b.push(e);if(a=a.apply(a,b))if(Ca(a.start)&&(a=a.start()),a instanceof c)a.done(g);else if(Ca(a))return a;return H}function w(a,b,d,e,g){var f=[];u(e,function(e){var h=e[g];h&&f.push(function(){var e,g,f=!1,l=function(a){f||
|
||||
(f=!0,(g||H)(a),e.complete(!a))};e=new c({end:function(){l()},cancel:function(){l(!0)}});g=z(h,a,b,d,function(a){l(!1===a)});return e})});return f}function B(a,b,d,e,g){var f=w(a,b,d,e,g);if(0===f.length){var h,k;"beforeSetClass"===g?(h=w(a,"removeClass",d,e,"beforeRemoveClass"),k=w(a,"addClass",d,e,"beforeAddClass")):"setClass"===g&&(h=w(a,"removeClass",d,e,"removeClass"),k=w(a,"addClass",d,e,"addClass"));h&&(f=f.concat(h));k&&(f=f.concat(k))}if(0!==f.length)return function(a){var b=[];f.length&&
|
||||
u(f,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){u(b,function(b){a?b.cancel():b.end()})}}}3===arguments.length&&na(d)&&(e=d,d=null);e=ia(e);d||(d=a.attr("class")||"",e.addClass&&(d+=" "+e.addClass),e.removeClass&&(d+=" "+e.removeClass));var r=e.addClass,K=e.removeClass,C=s(d),E,f;if(C.length){var F,G;"leave"==b?(G="leave",F="afterLeave"):(G="before"+b.charAt(0).toUpperCase()+b.substr(1),F=b);"enter"!==b&&"move"!==b&&(E=B(a,b,e,C,G));f=B(a,b,e,C,F)}if(E||f)return{start:function(){function b(c){n=
|
||||
!0;t();ca(a,e);g.complete(c)}var d,k=[];E&&k.push(function(a){d=E(a)});k.length?k.push(function(a){t();a(!0)}):t();f&&k.push(function(a){d=f(a)});var n=!1,g=new c({end:function(){n||((d||H)(void 0),b(void 0))},cancel:function(){n||((d||H)(!0),b(!0))}});c.chain(k,b);return g}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}
|
||||
return function(a){if(a.from&&a.to){var b=d(a.from),n=d(a.to);if(b||n)return{start:function(){function a(){return function(){u(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());n&&d.push(n.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});return e}}}else return d(a)}}]}])})(window,window.angular);
|
||||
//# sourceMappingURL=angular-animate.min.js.map
|
||||
669
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/angular/angular-resource.js
vendored
Normal file
@@ -0,0 +1,669 @@
|
||||
/**
|
||||
* @license AngularJS v1.4.3
|
||||
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
* License: MIT
|
||||
*/
|
||||
(function(window, angular, undefined) {'use strict';
|
||||
|
||||
var $resourceMinErr = angular.$$minErr('$resource');
|
||||
|
||||
// Helper functions and regex to lookup a dotted path on an object
|
||||
// stopping at undefined/null. The path must be composed of ASCII
|
||||
// identifiers (just like $parse)
|
||||
var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;
|
||||
|
||||
function isValidDottedPath(path) {
|
||||
return (path != null && path !== '' && path !== 'hasOwnProperty' &&
|
||||
MEMBER_NAME_REGEX.test('.' + path));
|
||||
}
|
||||
|
||||
function lookupDottedPath(obj, path) {
|
||||
if (!isValidDottedPath(path)) {
|
||||
throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path);
|
||||
}
|
||||
var keys = path.split('.');
|
||||
for (var i = 0, ii = keys.length; i < ii && obj !== undefined; i++) {
|
||||
var key = keys[i];
|
||||
obj = (obj !== null) ? obj[key] : undefined;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a shallow copy of an object and clear other fields from the destination
|
||||
*/
|
||||
function shallowClearAndCopy(src, dst) {
|
||||
dst = dst || {};
|
||||
|
||||
angular.forEach(dst, function(value, key) {
|
||||
delete dst[key];
|
||||
});
|
||||
|
||||
for (var key in src) {
|
||||
if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {
|
||||
dst[key] = src[key];
|
||||
}
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name ngResource
|
||||
* @description
|
||||
*
|
||||
* # ngResource
|
||||
*
|
||||
* The `ngResource` module provides interaction support with RESTful services
|
||||
* via the $resource service.
|
||||
*
|
||||
*
|
||||
* <div doc-module-components="ngResource"></div>
|
||||
*
|
||||
* See {@link ngResource.$resource `$resource`} for usage.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $resource
|
||||
* @requires $http
|
||||
*
|
||||
* @description
|
||||
* A factory which creates a resource object that lets you interact with
|
||||
* [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
|
||||
*
|
||||
* The returned resource object has action methods which provide high-level behaviors without
|
||||
* the need to interact with the low level {@link ng.$http $http} service.
|
||||
*
|
||||
* Requires the {@link ngResource `ngResource`} module to be installed.
|
||||
*
|
||||
* By default, trailing slashes will be stripped from the calculated URLs,
|
||||
* which can pose problems with server backends that do not expect that
|
||||
* behavior. This can be disabled by configuring the `$resourceProvider` like
|
||||
* this:
|
||||
*
|
||||
* ```js
|
||||
app.config(['$resourceProvider', function($resourceProvider) {
|
||||
// Don't strip trailing slashes from calculated URLs
|
||||
$resourceProvider.defaults.stripTrailingSlashes = false;
|
||||
}]);
|
||||
* ```
|
||||
*
|
||||
* @param {string} url A parameterized URL template with parameters prefixed by `:` as in
|
||||
* `/user/:username`. If you are using a URL with a port number (e.g.
|
||||
* `http://example.com:8080/api`), it will be respected.
|
||||
*
|
||||
* If you are using a url with a suffix, just add the suffix, like this:
|
||||
* `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`
|
||||
* or even `$resource('http://example.com/resource/:resource_id.:format')`
|
||||
* If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
|
||||
* collapsed down to a single `.`. If you need this sequence to appear and not collapse then you
|
||||
* can escape it with `/\.`.
|
||||
*
|
||||
* @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
|
||||
* `actions` methods. If any of the parameter value is a function, it will be executed every time
|
||||
* when a param value needs to be obtained for a request (unless the param was overridden).
|
||||
*
|
||||
* Each key value in the parameter object is first bound to url template if present and then any
|
||||
* excess keys are appended to the url search query after the `?`.
|
||||
*
|
||||
* Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
|
||||
* URL `/path/greet?salutation=Hello`.
|
||||
*
|
||||
* If the parameter value is prefixed with `@` then the value for that parameter will be extracted
|
||||
* from the corresponding property on the `data` object (provided when calling an action method). For
|
||||
* example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of `someParam`
|
||||
* will be `data.someProp`.
|
||||
*
|
||||
* @param {Object.<Object>=} actions Hash with declaration of custom actions that should extend
|
||||
* the default set of resource actions. The declaration should be created in the format of {@link
|
||||
* ng.$http#usage $http.config}:
|
||||
*
|
||||
* {action1: {method:?, params:?, isArray:?, headers:?, ...},
|
||||
* action2: {method:?, params:?, isArray:?, headers:?, ...},
|
||||
* ...}
|
||||
*
|
||||
* Where:
|
||||
*
|
||||
* - **`action`** – {string} – The name of action. This name becomes the name of the method on
|
||||
* your resource object.
|
||||
* - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,
|
||||
* `DELETE`, `JSONP`, etc).
|
||||
* - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of
|
||||
* the parameter value is a function, it will be executed every time when a param value needs to
|
||||
* be obtained for a request (unless the param was overridden).
|
||||
* - **`url`** – {string} – action specific `url` override. The url templating is supported just
|
||||
* like for the resource-level urls.
|
||||
* - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,
|
||||
* see `returns` section.
|
||||
* - **`transformRequest`** –
|
||||
* `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
|
||||
* transform function or an array of such functions. The transform function takes the http
|
||||
* request body and headers and returns its transformed (typically serialized) version.
|
||||
* By default, transformRequest will contain one function that checks if the request data is
|
||||
* an object and serializes to using `angular.toJson`. To prevent this behavior, set
|
||||
* `transformRequest` to an empty array: `transformRequest: []`
|
||||
* - **`transformResponse`** –
|
||||
* `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
|
||||
* transform function or an array of such functions. The transform function takes the http
|
||||
* response body and headers and returns its transformed (typically deserialized) version.
|
||||
* By default, transformResponse will contain one function that checks if the response looks like
|
||||
* a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, set
|
||||
* `transformResponse` to an empty array: `transformResponse: []`
|
||||
* - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
|
||||
* GET request, otherwise if a cache instance built with
|
||||
* {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
|
||||
* caching.
|
||||
* - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that
|
||||
* should abort the request when resolved.
|
||||
* - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the
|
||||
* XHR object. See
|
||||
* [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)
|
||||
* for more information.
|
||||
* - **`responseType`** - `{string}` - see
|
||||
* [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
|
||||
* - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -
|
||||
* `response` and `responseError`. Both `response` and `responseError` interceptors get called
|
||||
* with `http response` object. See {@link ng.$http $http interceptors}.
|
||||
*
|
||||
* @param {Object} options Hash with custom settings that should extend the
|
||||
* default `$resourceProvider` behavior. The only supported option is
|
||||
*
|
||||
* Where:
|
||||
*
|
||||
* - **`stripTrailingSlashes`** – {boolean} – If true then the trailing
|
||||
* slashes from any calculated URL will be stripped. (Defaults to true.)
|
||||
*
|
||||
* @returns {Object} A resource "class" object with methods for the default set of resource actions
|
||||
* optionally extended with custom `actions`. The default set contains these actions:
|
||||
* ```js
|
||||
* { 'get': {method:'GET'},
|
||||
* 'save': {method:'POST'},
|
||||
* 'query': {method:'GET', isArray:true},
|
||||
* 'remove': {method:'DELETE'},
|
||||
* 'delete': {method:'DELETE'} };
|
||||
* ```
|
||||
*
|
||||
* Calling these methods invoke an {@link ng.$http} with the specified http method,
|
||||
* destination and parameters. When the data is returned from the server then the object is an
|
||||
* instance of the resource class. The actions `save`, `remove` and `delete` are available on it
|
||||
* as methods with the `$` prefix. This allows you to easily perform CRUD operations (create,
|
||||
* read, update, delete) on server-side data like this:
|
||||
* ```js
|
||||
* var User = $resource('/user/:userId', {userId:'@id'});
|
||||
* var user = User.get({userId:123}, function() {
|
||||
* user.abc = true;
|
||||
* user.$save();
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* It is important to realize that invoking a $resource object method immediately returns an
|
||||
* empty reference (object or array depending on `isArray`). Once the data is returned from the
|
||||
* server the existing reference is populated with the actual data. This is a useful trick since
|
||||
* usually the resource is assigned to a model which is then rendered by the view. Having an empty
|
||||
* object results in no rendering, once the data arrives from the server then the object is
|
||||
* populated with the data and the view automatically re-renders itself showing the new data. This
|
||||
* means that in most cases one never has to write a callback function for the action methods.
|
||||
*
|
||||
* The action methods on the class object or instance object can be invoked with the following
|
||||
* parameters:
|
||||
*
|
||||
* - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])`
|
||||
* - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])`
|
||||
* - non-GET instance actions: `instance.$action([parameters], [success], [error])`
|
||||
*
|
||||
*
|
||||
* Success callback is called with (value, responseHeaders) arguments, where the value is
|
||||
* the populated resource instance or collection object. The error callback is called
|
||||
* with (httpResponse) argument.
|
||||
*
|
||||
* Class actions return empty instance (with additional properties below).
|
||||
* Instance actions return promise of the action.
|
||||
*
|
||||
* The Resource instances and collection have these additional properties:
|
||||
*
|
||||
* - `$promise`: the {@link ng.$q promise} of the original server interaction that created this
|
||||
* instance or collection.
|
||||
*
|
||||
* On success, the promise is resolved with the same resource instance or collection object,
|
||||
* updated with data from server. This makes it easy to use in
|
||||
* {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view
|
||||
* rendering until the resource(s) are loaded.
|
||||
*
|
||||
* On failure, the promise is resolved with the {@link ng.$http http response} object, without
|
||||
* the `resource` property.
|
||||
*
|
||||
* If an interceptor object was provided, the promise will instead be resolved with the value
|
||||
* returned by the interceptor.
|
||||
*
|
||||
* - `$resolved`: `true` after first server interaction is completed (either with success or
|
||||
* rejection), `false` before that. Knowing if the Resource has been resolved is useful in
|
||||
* data-binding.
|
||||
*
|
||||
* @example
|
||||
*
|
||||
* # Credit card resource
|
||||
*
|
||||
* ```js
|
||||
// Define CreditCard class
|
||||
var CreditCard = $resource('/user/:userId/card/:cardId',
|
||||
{userId:123, cardId:'@id'}, {
|
||||
charge: {method:'POST', params:{charge:true}}
|
||||
});
|
||||
|
||||
// We can retrieve a collection from the server
|
||||
var cards = CreditCard.query(function() {
|
||||
// GET: /user/123/card
|
||||
// server returns: [ {id:456, number:'1234', name:'Smith'} ];
|
||||
|
||||
var card = cards[0];
|
||||
// each item is an instance of CreditCard
|
||||
expect(card instanceof CreditCard).toEqual(true);
|
||||
card.name = "J. Smith";
|
||||
// non GET methods are mapped onto the instances
|
||||
card.$save();
|
||||
// POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
|
||||
// server returns: {id:456, number:'1234', name: 'J. Smith'};
|
||||
|
||||
// our custom method is mapped as well.
|
||||
card.$charge({amount:9.99});
|
||||
// POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
|
||||
});
|
||||
|
||||
// we can create an instance as well
|
||||
var newCard = new CreditCard({number:'0123'});
|
||||
newCard.name = "Mike Smith";
|
||||
newCard.$save();
|
||||
// POST: /user/123/card {number:'0123', name:'Mike Smith'}
|
||||
// server returns: {id:789, number:'0123', name: 'Mike Smith'};
|
||||
expect(newCard.id).toEqual(789);
|
||||
* ```
|
||||
*
|
||||
* The object returned from this function execution is a resource "class" which has "static" method
|
||||
* for each action in the definition.
|
||||
*
|
||||
* Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and
|
||||
* `headers`.
|
||||
* When the data is returned from the server then the object is an instance of the resource type and
|
||||
* all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
|
||||
* operations (create, read, update, delete) on server-side data.
|
||||
|
||||
```js
|
||||
var User = $resource('/user/:userId', {userId:'@id'});
|
||||
User.get({userId:123}, function(user) {
|
||||
user.abc = true;
|
||||
user.$save();
|
||||
});
|
||||
```
|
||||
*
|
||||
* It's worth noting that the success callback for `get`, `query` and other methods gets passed
|
||||
* in the response that came from the server as well as $http header getter function, so one
|
||||
* could rewrite the above example and get access to http headers as:
|
||||
*
|
||||
```js
|
||||
var User = $resource('/user/:userId', {userId:'@id'});
|
||||
User.get({userId:123}, function(u, getResponseHeaders){
|
||||
u.abc = true;
|
||||
u.$save(function(u, putResponseHeaders) {
|
||||
//u => saved user object
|
||||
//putResponseHeaders => $http header getter
|
||||
});
|
||||
});
|
||||
```
|
||||
*
|
||||
* You can also access the raw `$http` promise via the `$promise` property on the object returned
|
||||
*
|
||||
```
|
||||
var User = $resource('/user/:userId', {userId:'@id'});
|
||||
User.get({userId:123})
|
||||
.$promise.then(function(user) {
|
||||
$scope.user = user;
|
||||
});
|
||||
```
|
||||
|
||||
* # Creating a custom 'PUT' request
|
||||
* In this example we create a custom method on our resource to make a PUT request
|
||||
* ```js
|
||||
* var app = angular.module('app', ['ngResource', 'ngRoute']);
|
||||
*
|
||||
* // Some APIs expect a PUT request in the format URL/object/ID
|
||||
* // Here we are creating an 'update' method
|
||||
* app.factory('Notes', ['$resource', function($resource) {
|
||||
* return $resource('/notes/:id', null,
|
||||
* {
|
||||
* 'update': { method:'PUT' }
|
||||
* });
|
||||
* }]);
|
||||
*
|
||||
* // In our controller we get the ID from the URL using ngRoute and $routeParams
|
||||
* // We pass in $routeParams and our Notes factory along with $scope
|
||||
* app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',
|
||||
function($scope, $routeParams, Notes) {
|
||||
* // First get a note object from the factory
|
||||
* var note = Notes.get({ id:$routeParams.id });
|
||||
* $id = note.id;
|
||||
*
|
||||
* // Now call update passing in the ID first then the object you are updating
|
||||
* Notes.update({ id:$id }, note);
|
||||
*
|
||||
* // This will PUT /notes/ID with the note object in the request payload
|
||||
* }]);
|
||||
* ```
|
||||
*/
|
||||
angular.module('ngResource', ['ng']).
|
||||
provider('$resource', function() {
|
||||
var provider = this;
|
||||
|
||||
this.defaults = {
|
||||
// Strip slashes by default
|
||||
stripTrailingSlashes: true,
|
||||
|
||||
// Default actions configuration
|
||||
actions: {
|
||||
'get': {method: 'GET'},
|
||||
'save': {method: 'POST'},
|
||||
'query': {method: 'GET', isArray: true},
|
||||
'remove': {method: 'DELETE'},
|
||||
'delete': {method: 'DELETE'}
|
||||
}
|
||||
};
|
||||
|
||||
this.$get = ['$http', '$q', function($http, $q) {
|
||||
|
||||
var noop = angular.noop,
|
||||
forEach = angular.forEach,
|
||||
extend = angular.extend,
|
||||
copy = angular.copy,
|
||||
isFunction = angular.isFunction;
|
||||
|
||||
/**
|
||||
* We need our custom method because encodeURIComponent is too aggressive and doesn't follow
|
||||
* http://www.ietf.org/rfc/rfc3986.txt with regards to the character set
|
||||
* (pchar) allowed in path segments:
|
||||
* segment = *pchar
|
||||
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
|
||||
* pct-encoded = "%" HEXDIG HEXDIG
|
||||
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
|
||||
* / "*" / "+" / "," / ";" / "="
|
||||
*/
|
||||
function encodeUriSegment(val) {
|
||||
return encodeUriQuery(val, true).
|
||||
replace(/%26/gi, '&').
|
||||
replace(/%3D/gi, '=').
|
||||
replace(/%2B/gi, '+');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method is intended for encoding *key* or *value* parts of query component. We need a
|
||||
* custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't
|
||||
* have to be encoded per http://tools.ietf.org/html/rfc3986:
|
||||
* query = *( pchar / "/" / "?" )
|
||||
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
|
||||
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||
* pct-encoded = "%" HEXDIG HEXDIG
|
||||
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
|
||||
* / "*" / "+" / "," / ";" / "="
|
||||
*/
|
||||
function encodeUriQuery(val, pctEncodeSpaces) {
|
||||
return encodeURIComponent(val).
|
||||
replace(/%40/gi, '@').
|
||||
replace(/%3A/gi, ':').
|
||||
replace(/%24/g, '$').
|
||||
replace(/%2C/gi, ',').
|
||||
replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
|
||||
}
|
||||
|
||||
function Route(template, defaults) {
|
||||
this.template = template;
|
||||
this.defaults = extend({}, provider.defaults, defaults);
|
||||
this.urlParams = {};
|
||||
}
|
||||
|
||||
Route.prototype = {
|
||||
setUrlParams: function(config, params, actionUrl) {
|
||||
var self = this,
|
||||
url = actionUrl || self.template,
|
||||
val,
|
||||
encodedVal;
|
||||
|
||||
var urlParams = self.urlParams = {};
|
||||
forEach(url.split(/\W/), function(param) {
|
||||
if (param === 'hasOwnProperty') {
|
||||
throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name.");
|
||||
}
|
||||
if (!(new RegExp("^\\d+$").test(param)) && param &&
|
||||
(new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) {
|
||||
urlParams[param] = true;
|
||||
}
|
||||
});
|
||||
url = url.replace(/\\:/g, ':');
|
||||
|
||||
params = params || {};
|
||||
forEach(self.urlParams, function(_, urlParam) {
|
||||
val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
|
||||
if (angular.isDefined(val) && val !== null) {
|
||||
encodedVal = encodeUriSegment(val);
|
||||
url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) {
|
||||
return encodedVal + p1;
|
||||
});
|
||||
} else {
|
||||
url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match,
|
||||
leadingSlashes, tail) {
|
||||
if (tail.charAt(0) == '/') {
|
||||
return tail;
|
||||
} else {
|
||||
return leadingSlashes + tail;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// strip trailing slashes and set the url (unless this behavior is specifically disabled)
|
||||
if (self.defaults.stripTrailingSlashes) {
|
||||
url = url.replace(/\/+$/, '') || '/';
|
||||
}
|
||||
|
||||
// then replace collapse `/.` if found in the last URL path segment before the query
|
||||
// E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
|
||||
url = url.replace(/\/\.(?=\w+($|\?))/, '.');
|
||||
// replace escaped `/\.` with `/.`
|
||||
config.url = url.replace(/\/\\\./, '/.');
|
||||
|
||||
|
||||
// set params - delegate param encoding to $http
|
||||
forEach(params, function(value, key) {
|
||||
if (!self.urlParams[key]) {
|
||||
config.params = config.params || {};
|
||||
config.params[key] = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function resourceFactory(url, paramDefaults, actions, options) {
|
||||
var route = new Route(url, options);
|
||||
|
||||
actions = extend({}, provider.defaults.actions, actions);
|
||||
|
||||
function extractParams(data, actionParams) {
|
||||
var ids = {};
|
||||
actionParams = extend({}, paramDefaults, actionParams);
|
||||
forEach(actionParams, function(value, key) {
|
||||
if (isFunction(value)) { value = value(); }
|
||||
ids[key] = value && value.charAt && value.charAt(0) == '@' ?
|
||||
lookupDottedPath(data, value.substr(1)) : value;
|
||||
});
|
||||
return ids;
|
||||
}
|
||||
|
||||
function defaultResponseInterceptor(response) {
|
||||
return response.resource;
|
||||
}
|
||||
|
||||
function Resource(value) {
|
||||
shallowClearAndCopy(value || {}, this);
|
||||
}
|
||||
|
||||
Resource.prototype.toJSON = function() {
|
||||
var data = extend({}, this);
|
||||
delete data.$promise;
|
||||
delete data.$resolved;
|
||||
return data;
|
||||
};
|
||||
|
||||
forEach(actions, function(action, name) {
|
||||
var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
|
||||
|
||||
Resource[name] = function(a1, a2, a3, a4) {
|
||||
var params = {}, data, success, error;
|
||||
|
||||
/* jshint -W086 */ /* (purposefully fall through case statements) */
|
||||
switch (arguments.length) {
|
||||
case 4:
|
||||
error = a4;
|
||||
success = a3;
|
||||
//fallthrough
|
||||
case 3:
|
||||
case 2:
|
||||
if (isFunction(a2)) {
|
||||
if (isFunction(a1)) {
|
||||
success = a1;
|
||||
error = a2;
|
||||
break;
|
||||
}
|
||||
|
||||
success = a2;
|
||||
error = a3;
|
||||
//fallthrough
|
||||
} else {
|
||||
params = a1;
|
||||
data = a2;
|
||||
success = a3;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
if (isFunction(a1)) success = a1;
|
||||
else if (hasBody) data = a1;
|
||||
else params = a1;
|
||||
break;
|
||||
case 0: break;
|
||||
default:
|
||||
throw $resourceMinErr('badargs',
|
||||
"Expected up to 4 arguments [params, data, success, error], got {0} arguments",
|
||||
arguments.length);
|
||||
}
|
||||
/* jshint +W086 */ /* (purposefully fall through case statements) */
|
||||
|
||||
var isInstanceCall = this instanceof Resource;
|
||||
var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));
|
||||
var httpConfig = {};
|
||||
var responseInterceptor = action.interceptor && action.interceptor.response ||
|
||||
defaultResponseInterceptor;
|
||||
var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||
|
||||
undefined;
|
||||
|
||||
forEach(action, function(value, key) {
|
||||
if (key != 'params' && key != 'isArray' && key != 'interceptor') {
|
||||
httpConfig[key] = copy(value);
|
||||
}
|
||||
});
|
||||
|
||||
if (hasBody) httpConfig.data = data;
|
||||
route.setUrlParams(httpConfig,
|
||||
extend({}, extractParams(data, action.params || {}), params),
|
||||
action.url);
|
||||
|
||||
var promise = $http(httpConfig).then(function(response) {
|
||||
var data = response.data,
|
||||
promise = value.$promise;
|
||||
|
||||
if (data) {
|
||||
// Need to convert action.isArray to boolean in case it is undefined
|
||||
// jshint -W018
|
||||
if (angular.isArray(data) !== (!!action.isArray)) {
|
||||
throw $resourceMinErr('badcfg',
|
||||
'Error in resource configuration for action `{0}`. Expected response to ' +
|
||||
'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',
|
||||
angular.isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);
|
||||
}
|
||||
// jshint +W018
|
||||
if (action.isArray) {
|
||||
value.length = 0;
|
||||
forEach(data, function(item) {
|
||||
if (typeof item === "object") {
|
||||
value.push(new Resource(item));
|
||||
} else {
|
||||
// Valid JSON values may be string literals, and these should not be converted
|
||||
// into objects. These items will not have access to the Resource prototype
|
||||
// methods, but unfortunately there
|
||||
value.push(item);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
shallowClearAndCopy(data, value);
|
||||
value.$promise = promise;
|
||||
}
|
||||
}
|
||||
|
||||
value.$resolved = true;
|
||||
|
||||
response.resource = value;
|
||||
|
||||
return response;
|
||||
}, function(response) {
|
||||
value.$resolved = true;
|
||||
|
||||
(error || noop)(response);
|
||||
|
||||
return $q.reject(response);
|
||||
});
|
||||
|
||||
promise = promise.then(
|
||||
function(response) {
|
||||
var value = responseInterceptor(response);
|
||||
(success || noop)(value, response.headers);
|
||||
return value;
|
||||
},
|
||||
responseErrorInterceptor);
|
||||
|
||||
if (!isInstanceCall) {
|
||||
// we are creating instance / collection
|
||||
// - set the initial promise
|
||||
// - return the instance / collection
|
||||
value.$promise = promise;
|
||||
value.$resolved = false;
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
// instance call
|
||||
return promise;
|
||||
};
|
||||
|
||||
|
||||
Resource.prototype['$' + name] = function(params, success, error) {
|
||||
if (isFunction(params)) {
|
||||
error = success; success = params; params = {};
|
||||
}
|
||||
var result = Resource[name].call(this, params, this, success, error);
|
||||
return result.$promise || result;
|
||||
};
|
||||
});
|
||||
|
||||
Resource.bind = function(additionalParamDefaults) {
|
||||
return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);
|
||||
};
|
||||
|
||||
return Resource;
|
||||
}
|
||||
|
||||
return resourceFactory;
|
||||
}];
|
||||
});
|
||||
|
||||
|
||||
})(window, window.angular);
|
||||
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
AngularJS v1.4.3
|
||||
(c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(I,d,B){'use strict';function D(f,q){q=q||{};d.forEach(q,function(d,h){delete q[h]});for(var h in f)!f.hasOwnProperty(h)||"$"===h.charAt(0)&&"$"===h.charAt(1)||(q[h]=f[h]);return q}var x=d.$$minErr("$resource"),C=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var f=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};
|
||||
this.$get=["$http","$q",function(q,h){function u(d,g){this.template=d;this.defaults=s({},f.defaults,g);this.urlParams={}}function w(y,g,l,m){function c(b,k){var c={};k=s({},g,k);r(k,function(a,k){v(a)&&(a=a());var d;if(a&&a.charAt&&"@"==a.charAt(0)){d=b;var e=a.substr(1);if(null==e||""===e||"hasOwnProperty"===e||!C.test("."+e))throw x("badmember",e);for(var e=e.split("."),n=0,g=e.length;n<g&&d!==B;n++){var h=e[n];d=null!==d?d[h]:B}}else d=a;c[k]=d});return c}function F(b){return b.resource}function e(b){D(b||
|
||||
{},this)}var G=new u(y,m);l=s({},f.defaults.actions,l);e.prototype.toJSON=function(){var b=s({},this);delete b.$promise;delete b.$resolved;return b};r(l,function(b,k){var g=/^(POST|PUT|PATCH)$/i.test(b.method);e[k]=function(a,z,m,y){var n={},f,l,A;switch(arguments.length){case 4:A=y,l=m;case 3:case 2:if(v(z)){if(v(a)){l=a;A=z;break}l=z;A=m}else{n=a;f=z;l=m;break}case 1:v(a)?l=a:g?f=a:n=a;break;case 0:break;default:throw x("badargs",arguments.length);}var u=this instanceof e,p=u?f:b.isArray?[]:new e(f),
|
||||
t={},w=b.interceptor&&b.interceptor.response||F,C=b.interceptor&&b.interceptor.responseError||B;r(b,function(b,a){"params"!=a&&"isArray"!=a&&"interceptor"!=a&&(t[a]=H(b))});g&&(t.data=f);G.setUrlParams(t,s({},c(f,b.params||{}),n),b.url);n=q(t).then(function(a){var c=a.data,g=p.$promise;if(c){if(d.isArray(c)!==!!b.isArray)throw x("badcfg",k,b.isArray?"array":"object",d.isArray(c)?"array":"object",t.method,t.url);b.isArray?(p.length=0,r(c,function(a){"object"===typeof a?p.push(new e(a)):p.push(a)})):
|
||||
(D(c,p),p.$promise=g)}p.$resolved=!0;a.resource=p;return a},function(a){p.$resolved=!0;(A||E)(a);return h.reject(a)});n=n.then(function(a){var b=w(a);(l||E)(b,a.headers);return b},C);return u?n:(p.$promise=n,p.$resolved=!1,p)};e.prototype["$"+k]=function(a,b,c){v(a)&&(c=b,b=a,a={});a=e[k].call(this,a,this,b,c);return a.$promise||a}});e.bind=function(b){return w(y,s({},g,b),l)};return e}var E=d.noop,r=d.forEach,s=d.extend,H=d.copy,v=d.isFunction;u.prototype={setUrlParams:function(f,g,l){var m=this,
|
||||
c=l||m.template,h,e,q=m.urlParams={};r(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw x("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+b+"(\\W|$)")).test(c)&&(q[b]=!0)});c=c.replace(/\\:/g,":");g=g||{};r(m.urlParams,function(b,k){h=g.hasOwnProperty(k)?g[k]:m.defaults[k];d.isDefined(h)&&null!==h?(e=encodeURIComponent(h).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,
|
||||
"+"),c=c.replace(new RegExp(":"+k+"(\\W|$)","g"),function(b,a){return e+a})):c=c.replace(new RegExp("(/?):"+k+"(\\W|$)","g"),function(b,a,c){return"/"==c.charAt(0)?c:a+c})});m.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");f.url=c.replace(/\/\\\./,"/.");r(g,function(b,c){m.urlParams[c]||(f.params=f.params||{},f.params[c]=b)})}};return w}]})})(window,window.angular);
|
||||
//# sourceMappingURL=angular-resource.min.js.map
|
||||
683
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/angular/angular-sanitize.js
vendored
Normal file
@@ -0,0 +1,683 @@
|
||||
/**
|
||||
* @license AngularJS v1.4.3
|
||||
* (c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
* License: MIT
|
||||
*/
|
||||
(function(window, angular, undefined) {'use strict';
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
* Any commits to this file should be reviewed with security in mind. *
|
||||
* Changes to this file can potentially create security vulnerabilities. *
|
||||
* An approval from 2 Core members with history of modifying *
|
||||
* this file is required. *
|
||||
* *
|
||||
* Does the change somehow allow for arbitrary javascript to be executed? *
|
||||
* Or allows for someone to change the prototype of built-in objects? *
|
||||
* Or gives undesired access to variables likes document or window? *
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
var $sanitizeMinErr = angular.$$minErr('$sanitize');
|
||||
|
||||
/**
|
||||
* @ngdoc module
|
||||
* @name ngSanitize
|
||||
* @description
|
||||
*
|
||||
* # ngSanitize
|
||||
*
|
||||
* The `ngSanitize` module provides functionality to sanitize HTML.
|
||||
*
|
||||
*
|
||||
* <div doc-module-components="ngSanitize"></div>
|
||||
*
|
||||
* See {@link ngSanitize.$sanitize `$sanitize`} for usage.
|
||||
*/
|
||||
|
||||
/*
|
||||
* HTML Parser By Misko Hevery (misko@hevery.com)
|
||||
* based on: HTML Parser By John Resig (ejohn.org)
|
||||
* Original code by Erik Arvidsson, Mozilla Public License
|
||||
* http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
|
||||
*
|
||||
* // Use like so:
|
||||
* htmlParser(htmlString, {
|
||||
* start: function(tag, attrs, unary) {},
|
||||
* end: function(tag) {},
|
||||
* chars: function(text) {},
|
||||
* comment: function(text) {}
|
||||
* });
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* @ngdoc service
|
||||
* @name $sanitize
|
||||
* @kind function
|
||||
*
|
||||
* @description
|
||||
* The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
|
||||
* then serialized back to properly escaped html string. This means that no unsafe input can make
|
||||
* it into the returned string, however, since our parser is more strict than a typical browser
|
||||
* parser, it's possible that some obscure input, which would be recognized as valid HTML by a
|
||||
* browser, won't make it through the sanitizer. The input may also contain SVG markup.
|
||||
* The whitelist is configured using the functions `aHrefSanitizationWhitelist` and
|
||||
* `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.
|
||||
*
|
||||
* @param {string} html HTML input.
|
||||
* @returns {string} Sanitized HTML.
|
||||
*
|
||||
* @example
|
||||
<example module="sanitizeExample" deps="angular-sanitize.js">
|
||||
<file name="index.html">
|
||||
<script>
|
||||
angular.module('sanitizeExample', ['ngSanitize'])
|
||||
.controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
|
||||
$scope.snippet =
|
||||
'<p style="color:blue">an html\n' +
|
||||
'<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
|
||||
'snippet</p>';
|
||||
$scope.deliberatelyTrustDangerousSnippet = function() {
|
||||
return $sce.trustAsHtml($scope.snippet);
|
||||
};
|
||||
}]);
|
||||
</script>
|
||||
<div ng-controller="ExampleController">
|
||||
Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Directive</td>
|
||||
<td>How</td>
|
||||
<td>Source</td>
|
||||
<td>Rendered</td>
|
||||
</tr>
|
||||
<tr id="bind-html-with-sanitize">
|
||||
<td>ng-bind-html</td>
|
||||
<td>Automatically uses $sanitize</td>
|
||||
<td><pre><div ng-bind-html="snippet"><br/></div></pre></td>
|
||||
<td><div ng-bind-html="snippet"></div></td>
|
||||
</tr>
|
||||
<tr id="bind-html-with-trust">
|
||||
<td>ng-bind-html</td>
|
||||
<td>Bypass $sanitize by explicitly trusting the dangerous value</td>
|
||||
<td>
|
||||
<pre><div ng-bind-html="deliberatelyTrustDangerousSnippet()">
|
||||
</div></pre>
|
||||
</td>
|
||||
<td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
|
||||
</tr>
|
||||
<tr id="bind-default">
|
||||
<td>ng-bind</td>
|
||||
<td>Automatically escapes</td>
|
||||
<td><pre><div ng-bind="snippet"><br/></div></pre></td>
|
||||
<td><div ng-bind="snippet"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</file>
|
||||
<file name="protractor.js" type="protractor">
|
||||
it('should sanitize the html snippet by default', function() {
|
||||
expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
|
||||
toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
|
||||
});
|
||||
|
||||
it('should inline raw snippet if bound to a trusted value', function() {
|
||||
expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
|
||||
toBe("<p style=\"color:blue\">an html\n" +
|
||||
"<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
|
||||
"snippet</p>");
|
||||
});
|
||||
|
||||
it('should escape snippet without any filter', function() {
|
||||
expect(element(by.css('#bind-default div')).getInnerHtml()).
|
||||
toBe("<p style=\"color:blue\">an html\n" +
|
||||
"<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
|
||||
"snippet</p>");
|
||||
});
|
||||
|
||||
it('should update', function() {
|
||||
element(by.model('snippet')).clear();
|
||||
element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
|
||||
expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
|
||||
toBe('new <b>text</b>');
|
||||
expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
|
||||
'new <b onclick="alert(1)">text</b>');
|
||||
expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
|
||||
"new <b onclick=\"alert(1)\">text</b>");
|
||||
});
|
||||
</file>
|
||||
</example>
|
||||
*/
|
||||
function $SanitizeProvider() {
|
||||
this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
|
||||
return function(html) {
|
||||
var buf = [];
|
||||
htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
|
||||
return !/^unsafe/.test($$sanitizeUri(uri, isImage));
|
||||
}));
|
||||
return buf.join('');
|
||||
};
|
||||
}];
|
||||
}
|
||||
|
||||
function sanitizeText(chars) {
|
||||
var buf = [];
|
||||
var writer = htmlSanitizeWriter(buf, angular.noop);
|
||||
writer.chars(chars);
|
||||
return buf.join('');
|
||||
}
|
||||
|
||||
|
||||
// Regular Expressions for parsing tags and attributes
|
||||
var START_TAG_REGEXP =
|
||||
/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,
|
||||
END_TAG_REGEXP = /^<\/\s*([\w:-]+)[^>]*>/,
|
||||
ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
|
||||
BEGIN_TAG_REGEXP = /^</,
|
||||
BEGING_END_TAGE_REGEXP = /^<\//,
|
||||
COMMENT_REGEXP = /<!--(.*?)-->/g,
|
||||
DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,
|
||||
CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
|
||||
SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
|
||||
// Match everything outside of normal chars and " (quote character)
|
||||
NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g;
|
||||
|
||||
|
||||
// Good source of info about elements and attributes
|
||||
// http://dev.w3.org/html5/spec/Overview.html#semantics
|
||||
// http://simon.html5.org/html-elements
|
||||
|
||||
// Safe Void Elements - HTML5
|
||||
// http://dev.w3.org/html5/spec/Overview.html#void-elements
|
||||
var voidElements = makeMap("area,br,col,hr,img,wbr");
|
||||
|
||||
// Elements that you can, intentionally, leave open (and which close themselves)
|
||||
// http://dev.w3.org/html5/spec/Overview.html#optional-tags
|
||||
var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
|
||||
optionalEndTagInlineElements = makeMap("rp,rt"),
|
||||
optionalEndTagElements = angular.extend({},
|
||||
optionalEndTagInlineElements,
|
||||
optionalEndTagBlockElements);
|
||||
|
||||
// Safe Block Elements - HTML5
|
||||
var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," +
|
||||
"aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," +
|
||||
"h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul"));
|
||||
|
||||
// Inline Elements - HTML5
|
||||
var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," +
|
||||
"bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
|
||||
"samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
|
||||
|
||||
// SVG Elements
|
||||
// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
|
||||
// Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.
|
||||
// They can potentially allow for arbitrary javascript to be executed. See #11290
|
||||
var svgElements = makeMap("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph," +
|
||||
"hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline," +
|
||||
"radialGradient,rect,stop,svg,switch,text,title,tspan,use");
|
||||
|
||||
// Special Elements (can contain anything)
|
||||
var specialElements = makeMap("script,style");
|
||||
|
||||
var validElements = angular.extend({},
|
||||
voidElements,
|
||||
blockElements,
|
||||
inlineElements,
|
||||
optionalEndTagElements,
|
||||
svgElements);
|
||||
|
||||
//Attributes that have href and hence need to be sanitized
|
||||
var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href");
|
||||
|
||||
var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
|
||||
'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
|
||||
'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
|
||||
'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
|
||||
'valign,value,vspace,width');
|
||||
|
||||
// SVG attributes (without "id" and "name" attributes)
|
||||
// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
|
||||
var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
|
||||
'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +
|
||||
'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +
|
||||
'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +
|
||||
'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +
|
||||
'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +
|
||||
'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +
|
||||
'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +
|
||||
'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +
|
||||
'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +
|
||||
'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +
|
||||
'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +
|
||||
'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +
|
||||
'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +
|
||||
'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);
|
||||
|
||||
var validAttrs = angular.extend({},
|
||||
uriAttrs,
|
||||
svgAttrs,
|
||||
htmlAttrs);
|
||||
|
||||
function makeMap(str, lowercaseKeys) {
|
||||
var obj = {}, items = str.split(','), i;
|
||||
for (i = 0; i < items.length; i++) {
|
||||
obj[lowercaseKeys ? angular.lowercase(items[i]) : items[i]] = true;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @example
|
||||
* htmlParser(htmlString, {
|
||||
* start: function(tag, attrs, unary) {},
|
||||
* end: function(tag) {},
|
||||
* chars: function(text) {},
|
||||
* comment: function(text) {}
|
||||
* });
|
||||
*
|
||||
* @param {string} html string
|
||||
* @param {object} handler
|
||||
*/
|
||||
function htmlParser(html, handler) {
|
||||
if (typeof html !== 'string') {
|
||||
if (html === null || typeof html === 'undefined') {
|
||||
html = '';
|
||||
} else {
|
||||
html = '' + html;
|
||||
}
|
||||
}
|
||||
var index, chars, match, stack = [], last = html, text;
|
||||
stack.last = function() { return stack[stack.length - 1]; };
|
||||
|
||||
while (html) {
|
||||
text = '';
|
||||
chars = true;
|
||||
|
||||
// Make sure we're not in a script or style element
|
||||
if (!stack.last() || !specialElements[stack.last()]) {
|
||||
|
||||
// Comment
|
||||
if (html.indexOf("<!--") === 0) {
|
||||
// comments containing -- are not allowed unless they terminate the comment
|
||||
index = html.indexOf("--", 4);
|
||||
|
||||
if (index >= 0 && html.lastIndexOf("-->", index) === index) {
|
||||
if (handler.comment) handler.comment(html.substring(4, index));
|
||||
html = html.substring(index + 3);
|
||||
chars = false;
|
||||
}
|
||||
// DOCTYPE
|
||||
} else if (DOCTYPE_REGEXP.test(html)) {
|
||||
match = html.match(DOCTYPE_REGEXP);
|
||||
|
||||
if (match) {
|
||||
html = html.replace(match[0], '');
|
||||
chars = false;
|
||||
}
|
||||
// end tag
|
||||
} else if (BEGING_END_TAGE_REGEXP.test(html)) {
|
||||
match = html.match(END_TAG_REGEXP);
|
||||
|
||||
if (match) {
|
||||
html = html.substring(match[0].length);
|
||||
match[0].replace(END_TAG_REGEXP, parseEndTag);
|
||||
chars = false;
|
||||
}
|
||||
|
||||
// start tag
|
||||
} else if (BEGIN_TAG_REGEXP.test(html)) {
|
||||
match = html.match(START_TAG_REGEXP);
|
||||
|
||||
if (match) {
|
||||
// We only have a valid start-tag if there is a '>'.
|
||||
if (match[4]) {
|
||||
html = html.substring(match[0].length);
|
||||
match[0].replace(START_TAG_REGEXP, parseStartTag);
|
||||
}
|
||||
chars = false;
|
||||
} else {
|
||||
// no ending tag found --- this piece should be encoded as an entity.
|
||||
text += '<';
|
||||
html = html.substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
if (chars) {
|
||||
index = html.indexOf("<");
|
||||
|
||||
text += index < 0 ? html : html.substring(0, index);
|
||||
html = index < 0 ? "" : html.substring(index);
|
||||
|
||||
if (handler.chars) handler.chars(decodeEntities(text));
|
||||
}
|
||||
|
||||
} else {
|
||||
// IE versions 9 and 10 do not understand the regex '[^]', so using a workaround with [\W\w].
|
||||
html = html.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
|
||||
function(all, text) {
|
||||
text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1");
|
||||
|
||||
if (handler.chars) handler.chars(decodeEntities(text));
|
||||
|
||||
return "";
|
||||
});
|
||||
|
||||
parseEndTag("", stack.last());
|
||||
}
|
||||
|
||||
if (html == last) {
|
||||
throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " +
|
||||
"of html: {0}", html);
|
||||
}
|
||||
last = html;
|
||||
}
|
||||
|
||||
// Clean up any remaining tags
|
||||
parseEndTag();
|
||||
|
||||
function parseStartTag(tag, tagName, rest, unary) {
|
||||
tagName = angular.lowercase(tagName);
|
||||
if (blockElements[tagName]) {
|
||||
while (stack.last() && inlineElements[stack.last()]) {
|
||||
parseEndTag("", stack.last());
|
||||
}
|
||||
}
|
||||
|
||||
if (optionalEndTagElements[tagName] && stack.last() == tagName) {
|
||||
parseEndTag("", tagName);
|
||||
}
|
||||
|
||||
unary = voidElements[tagName] || !!unary;
|
||||
|
||||
if (!unary) {
|
||||
stack.push(tagName);
|
||||
}
|
||||
|
||||
var attrs = {};
|
||||
|
||||
rest.replace(ATTR_REGEXP,
|
||||
function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {
|
||||
var value = doubleQuotedValue
|
||||
|| singleQuotedValue
|
||||
|| unquotedValue
|
||||
|| '';
|
||||
|
||||
attrs[name] = decodeEntities(value);
|
||||
});
|
||||
if (handler.start) handler.start(tagName, attrs, unary);
|
||||
}
|
||||
|
||||
function parseEndTag(tag, tagName) {
|
||||
var pos = 0, i;
|
||||
tagName = angular.lowercase(tagName);
|
||||
if (tagName) {
|
||||
// Find the closest opened tag of the same type
|
||||
for (pos = stack.length - 1; pos >= 0; pos--) {
|
||||
if (stack[pos] == tagName) break;
|
||||
}
|
||||
}
|
||||
|
||||
if (pos >= 0) {
|
||||
// Close all the open elements, up the stack
|
||||
for (i = stack.length - 1; i >= pos; i--)
|
||||
if (handler.end) handler.end(stack[i]);
|
||||
|
||||
// Remove the open elements from the stack
|
||||
stack.length = pos;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var hiddenPre=document.createElement("pre");
|
||||
/**
|
||||
* decodes all entities into regular string
|
||||
* @param value
|
||||
* @returns {string} A string with decoded entities.
|
||||
*/
|
||||
function decodeEntities(value) {
|
||||
if (!value) { return ''; }
|
||||
|
||||
hiddenPre.innerHTML = value.replace(/</g,"<");
|
||||
// innerText depends on styling as it doesn't display hidden elements.
|
||||
// Therefore, it's better to use textContent not to cause unnecessary reflows.
|
||||
return hiddenPre.textContent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escapes all potentially dangerous characters, so that the
|
||||
* resulting string can be safely inserted into attribute or
|
||||
* element text.
|
||||
* @param value
|
||||
* @returns {string} escaped text
|
||||
*/
|
||||
function encodeEntities(value) {
|
||||
return value.
|
||||
replace(/&/g, '&').
|
||||
replace(SURROGATE_PAIR_REGEXP, function(value) {
|
||||
var hi = value.charCodeAt(0);
|
||||
var low = value.charCodeAt(1);
|
||||
return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
|
||||
}).
|
||||
replace(NON_ALPHANUMERIC_REGEXP, function(value) {
|
||||
return '&#' + value.charCodeAt(0) + ';';
|
||||
}).
|
||||
replace(/</g, '<').
|
||||
replace(/>/g, '>');
|
||||
}
|
||||
|
||||
/**
|
||||
* create an HTML/XML writer which writes to buffer
|
||||
* @param {Array} buf use buf.jain('') to get out sanitized html string
|
||||
* @returns {object} in the form of {
|
||||
* start: function(tag, attrs, unary) {},
|
||||
* end: function(tag) {},
|
||||
* chars: function(text) {},
|
||||
* comment: function(text) {}
|
||||
* }
|
||||
*/
|
||||
function htmlSanitizeWriter(buf, uriValidator) {
|
||||
var ignore = false;
|
||||
var out = angular.bind(buf, buf.push);
|
||||
return {
|
||||
start: function(tag, attrs, unary) {
|
||||
tag = angular.lowercase(tag);
|
||||
if (!ignore && specialElements[tag]) {
|
||||
ignore = tag;
|
||||
}
|
||||
if (!ignore && validElements[tag] === true) {
|
||||
out('<');
|
||||
out(tag);
|
||||
angular.forEach(attrs, function(value, key) {
|
||||
var lkey=angular.lowercase(key);
|
||||
var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
|
||||
if (validAttrs[lkey] === true &&
|
||||
(uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
|
||||
out(' ');
|
||||
out(key);
|
||||
out('="');
|
||||
out(encodeEntities(value));
|
||||
out('"');
|
||||
}
|
||||
});
|
||||
out(unary ? '/>' : '>');
|
||||
}
|
||||
},
|
||||
end: function(tag) {
|
||||
tag = angular.lowercase(tag);
|
||||
if (!ignore && validElements[tag] === true) {
|
||||
out('</');
|
||||
out(tag);
|
||||
out('>');
|
||||
}
|
||||
if (tag == ignore) {
|
||||
ignore = false;
|
||||
}
|
||||
},
|
||||
chars: function(chars) {
|
||||
if (!ignore) {
|
||||
out(encodeEntities(chars));
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
// define ngSanitize module and register $sanitize service
|
||||
angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
|
||||
|
||||
/* global sanitizeText: false */
|
||||
|
||||
/**
|
||||
* @ngdoc filter
|
||||
* @name linky
|
||||
* @kind function
|
||||
*
|
||||
* @description
|
||||
* Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
|
||||
* plain email address links.
|
||||
*
|
||||
* Requires the {@link ngSanitize `ngSanitize`} module to be installed.
|
||||
*
|
||||
* @param {string} text Input text.
|
||||
* @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
|
||||
* @returns {string} Html-linkified text.
|
||||
*
|
||||
* @usage
|
||||
<span ng-bind-html="linky_expression | linky"></span>
|
||||
*
|
||||
* @example
|
||||
<example module="linkyExample" deps="angular-sanitize.js">
|
||||
<file name="index.html">
|
||||
<script>
|
||||
angular.module('linkyExample', ['ngSanitize'])
|
||||
.controller('ExampleController', ['$scope', function($scope) {
|
||||
$scope.snippet =
|
||||
'Pretty text with some links:\n'+
|
||||
'http://angularjs.org/,\n'+
|
||||
'mailto:us@somewhere.org,\n'+
|
||||
'another@somewhere.org,\n'+
|
||||
'and one more: ftp://127.0.0.1/.';
|
||||
$scope.snippetWithTarget = 'http://angularjs.org/';
|
||||
}]);
|
||||
</script>
|
||||
<div ng-controller="ExampleController">
|
||||
Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Filter</td>
|
||||
<td>Source</td>
|
||||
<td>Rendered</td>
|
||||
</tr>
|
||||
<tr id="linky-filter">
|
||||
<td>linky filter</td>
|
||||
<td>
|
||||
<pre><div ng-bind-html="snippet | linky"><br></div></pre>
|
||||
</td>
|
||||
<td>
|
||||
<div ng-bind-html="snippet | linky"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="linky-target">
|
||||
<td>linky target</td>
|
||||
<td>
|
||||
<pre><div ng-bind-html="snippetWithTarget | linky:'_blank'"><br></div></pre>
|
||||
</td>
|
||||
<td>
|
||||
<div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="escaped-html">
|
||||
<td>no filter</td>
|
||||
<td><pre><div ng-bind="snippet"><br></div></pre></td>
|
||||
<td><div ng-bind="snippet"></div></td>
|
||||
</tr>
|
||||
</table>
|
||||
</file>
|
||||
<file name="protractor.js" type="protractor">
|
||||
it('should linkify the snippet with urls', function() {
|
||||
expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
|
||||
toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +
|
||||
'another@somewhere.org, and one more: ftp://127.0.0.1/.');
|
||||
expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
|
||||
});
|
||||
|
||||
it('should not linkify snippet without the linky filter', function() {
|
||||
expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
|
||||
toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +
|
||||
'another@somewhere.org, and one more: ftp://127.0.0.1/.');
|
||||
expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
|
||||
});
|
||||
|
||||
it('should update', function() {
|
||||
element(by.model('snippet')).clear();
|
||||
element(by.model('snippet')).sendKeys('new http://link.');
|
||||
expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
|
||||
toBe('new http://link.');
|
||||
expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
|
||||
expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
|
||||
.toBe('new http://link.');
|
||||
});
|
||||
|
||||
it('should work with the target property', function() {
|
||||
expect(element(by.id('linky-target')).
|
||||
element(by.binding("snippetWithTarget | linky:'_blank'")).getText()).
|
||||
toBe('http://angularjs.org/');
|
||||
expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
|
||||
});
|
||||
</file>
|
||||
</example>
|
||||
*/
|
||||
angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
|
||||
var LINKY_URL_REGEXP =
|
||||
/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"”’]/i,
|
||||
MAILTO_REGEXP = /^mailto:/i;
|
||||
|
||||
return function(text, target) {
|
||||
if (!text) return text;
|
||||
var match;
|
||||
var raw = text;
|
||||
var html = [];
|
||||
var url;
|
||||
var i;
|
||||
while ((match = raw.match(LINKY_URL_REGEXP))) {
|
||||
// We can not end in these as they are sometimes found at the end of the sentence
|
||||
url = match[0];
|
||||
// if we did not match ftp/http/www/mailto then assume mailto
|
||||
if (!match[2] && !match[4]) {
|
||||
url = (match[3] ? 'http://' : 'mailto:') + url;
|
||||
}
|
||||
i = match.index;
|
||||
addText(raw.substr(0, i));
|
||||
addLink(url, match[0].replace(MAILTO_REGEXP, ''));
|
||||
raw = raw.substring(i + match[0].length);
|
||||
}
|
||||
addText(raw);
|
||||
return $sanitize(html.join(''));
|
||||
|
||||
function addText(text) {
|
||||
if (!text) {
|
||||
return;
|
||||
}
|
||||
html.push(sanitizeText(text));
|
||||
}
|
||||
|
||||
function addLink(url, text) {
|
||||
html.push('<a ');
|
||||
if (angular.isDefined(target)) {
|
||||
html.push('target="',
|
||||
target,
|
||||
'" ');
|
||||
}
|
||||
html.push('href="',
|
||||
url.replace(/"/g, '"'),
|
||||
'">');
|
||||
addText(text);
|
||||
html.push('</a>');
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
|
||||
})(window, window.angular);
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
AngularJS v1.4.3
|
||||
(c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(n,h,p){'use strict';function E(a){var f=[];r(f,h.noop).chars(a);return f.join("")}function g(a,f){var d={},c=a.split(","),b;for(b=0;b<c.length;b++)d[f?h.lowercase(c[b]):c[b]]=!0;return d}function F(a,f){function d(a,b,d,l){b=h.lowercase(b);if(s[b])for(;e.last()&&t[e.last()];)c("",e.last());u[b]&&e.last()==b&&c("",b);(l=v[b]||!!l)||e.push(b);var m={};d.replace(G,function(b,a,f,c,d){m[a]=q(f||c||d||"")});f.start&&f.start(b,m,l)}function c(b,a){var c=0,d;if(a=h.lowercase(a))for(c=e.length-
|
||||
1;0<=c&&e[c]!=a;c--);if(0<=c){for(d=e.length-1;d>=c;d--)f.end&&f.end(e[d]);e.length=c}}"string"!==typeof a&&(a=null===a||"undefined"===typeof a?"":""+a);var b,k,e=[],m=a,l;for(e.last=function(){return e[e.length-1]};a;){l="";k=!0;if(e.last()&&w[e.last()])a=a.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*"+e.last()+"[^>]*>","i"),function(a,b){b=b.replace(H,"$1").replace(I,"$1");f.chars&&f.chars(q(b));return""}),c("",e.last());else{if(0===a.indexOf("\x3c!--"))b=a.indexOf("--",4),0<=b&&a.lastIndexOf("--\x3e",
|
||||
b)===b&&(f.comment&&f.comment(a.substring(4,b)),a=a.substring(b+3),k=!1);else if(x.test(a)){if(b=a.match(x))a=a.replace(b[0],""),k=!1}else if(J.test(a)){if(b=a.match(y))a=a.substring(b[0].length),b[0].replace(y,c),k=!1}else K.test(a)&&((b=a.match(z))?(b[4]&&(a=a.substring(b[0].length),b[0].replace(z,d)),k=!1):(l+="<",a=a.substring(1)));k&&(b=a.indexOf("<"),l+=0>b?a:a.substring(0,b),a=0>b?"":a.substring(b),f.chars&&f.chars(q(l)))}if(a==m)throw L("badparse",a);m=a}c()}function q(a){if(!a)return"";A.innerHTML=
|
||||
a.replace(/</g,"<");return A.textContent}function B(a){return a.replace(/&/g,"&").replace(M,function(a){var d=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(d-55296)+(a-56320)+65536)+";"}).replace(N,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"<").replace(/>/g,">")}function r(a,f){var d=!1,c=h.bind(a,a.push);return{start:function(a,k,e){a=h.lowercase(a);!d&&w[a]&&(d=a);d||!0!==C[a]||(c("<"),c(a),h.forEach(k,function(d,e){var k=h.lowercase(e),g="img"===a&&"src"===k||
|
||||
"background"===k;!0!==O[k]||!0===D[k]&&!f(d,g)||(c(" "),c(e),c('="'),c(B(d)),c('"'))}),c(e?"/>":">"))},end:function(a){a=h.lowercase(a);d||!0!==C[a]||(c("</"),c(a),c(">"));a==d&&(d=!1)},chars:function(a){d||c(B(a))}}}var L=h.$$minErr("$sanitize"),z=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,y=/^<\/\s*([\w:-]+)[^>]*>/,G=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,K=/^</,J=/^<\//,H=/\x3c!--(.*?)--\x3e/g,x=/<!DOCTYPE([^>]*?)>/i,
|
||||
I=/<!\[CDATA\[(.*?)]]\x3e/g,M=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,N=/([^\#-~| |!])/g,v=g("area,br,col,hr,img,wbr");n=g("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr");p=g("rp,rt");var u=h.extend({},p,n),s=h.extend({},n,g("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),t=h.extend({},p,g("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
|
||||
n=g("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan,use");var w=g("script,style"),C=h.extend({},v,s,t,u,n),D=g("background,cite,href,longdesc,src,usemap,xlink:href");n=g("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width");
|
||||
p=g("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",
|
||||
!0);var O=h.extend({},D,p,n),A=document.createElement("pre");h.module("ngSanitize",[]).provider("$sanitize",function(){this.$get=["$$sanitizeUri",function(a){return function(f){var d=[];F(f,r(d,function(c,b){return!/^unsafe/.test(a(c,b))}));return d.join("")}}]});h.module("ngSanitize").filter("linky",["$sanitize",function(a){var f=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,d=/^mailto:/i;return function(c,b){function k(a){a&&g.push(E(a))}function e(a,
|
||||
c){g.push("<a ");h.isDefined(b)&&g.push('target="',b,'" ');g.push('href="',a.replace(/"/g,"""),'">');k(c);g.push("</a>")}if(!c)return c;for(var m,l=c,g=[],n,p;m=l.match(f);)n=m[0],m[2]||m[4]||(n=(m[3]?"http://":"mailto:")+n),p=m.index,k(l.substr(0,p)),e(n,m[0].replace(d,"")),l=l.substring(p+m[0].length);k(l);return a(g.join(""))}}])})(window,window.angular);
|
||||
//# sourceMappingURL=angular-sanitize.min.js.map
|
||||
28364
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/angular/angular.js
vendored
Normal file
290
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/angular/angular.min.js
vendored
Normal file
@@ -0,0 +1,290 @@
|
||||
/*
|
||||
AngularJS v1.4.3
|
||||
(c) 2010-2015 Google, Inc. http://angularjs.org
|
||||
License: MIT
|
||||
*/
|
||||
(function(O,U,t){'use strict';function J(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.3/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ea(b){if(null==b||Wa(b))return!1;var a="length"in Object(b)&&b.length;
|
||||
return b.nodeType===qa&&a?!0:L(b)||G(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function m(b,a,c){var d,e;if(b)if(z(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(G(b)||Ea(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==m)b.forEach(a,c,b);else if(nc(b))for(d in b)a.call(c,b[d],d,b);else if("function"===typeof b.hasOwnProperty)for(d in b)b.hasOwnProperty(d)&&
|
||||
a.call(c,b[d],d,b);else for(d in b)Xa.call(b,d)&&a.call(c,b[d],d,b);return b}function oc(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function pc(b){return function(a,c){b(c,a)}}function Ud(){return++nb}function qc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function Nb(b,a,c){for(var d=b.$$hashKey,e=0,f=a.length;e<f;++e){var g=a[e];if(H(g)||z(g))for(var h=Object.keys(g),l=0,k=h.length;l<k;l++){var n=h[l],r=g[n];c&&H(r)?aa(r)?b[n]=new Date(r.valueOf()):(H(b[n])||
|
||||
(b[n]=G(r)?[]:{}),Nb(b[n],[r],!0)):b[n]=r}}qc(b,d);return b}function P(b){return Nb(b,za.call(arguments,1),!1)}function Vd(b){return Nb(b,za.call(arguments,1),!0)}function W(b){return parseInt(b,10)}function Ob(b,a){return P(Object.create(b),a)}function v(){}function Ya(b){return b}function ra(b){return function(){return b}}function rc(b){return z(b.toString)&&b.toString!==Object.prototype.toString}function A(b){return"undefined"===typeof b}function w(b){return"undefined"!==typeof b}function H(b){return null!==
|
||||
b&&"object"===typeof b}function nc(b){return null!==b&&"object"===typeof b&&!sc(b)}function L(b){return"string"===typeof b}function V(b){return"number"===typeof b}function aa(b){return"[object Date]"===sa.call(b)}function z(b){return"function"===typeof b}function Za(b){return"[object RegExp]"===sa.call(b)}function Wa(b){return b&&b.window===b}function $a(b){return b&&b.$evalAsync&&b.$watch}function ab(b){return"boolean"===typeof b}function tc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}
|
||||
function Wd(b){var a={};b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ta(b){return M(b.nodeName||b[0]&&b[0].nodeName)}function bb(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return c}function fa(b,a,c,d){if(Wa(b)||$a(b))throw Fa("cpws");if(uc.test(sa.call(a)))throw Fa("cpta");if(a){if(b===a)throw Fa("cpi");c=c||[];d=d||[];H(b)&&(c.push(b),d.push(a));var e;if(G(b))for(e=a.length=0;e<b.length;e++)a.push(fa(b[e],null,c,d));else{var f=a.$$hashKey;G(a)?a.length=0:m(a,function(b,
|
||||
c){delete a[c]});if(nc(b))for(e in b)a[e]=fa(b[e],null,c,d);else if(b&&"function"===typeof b.hasOwnProperty)for(e in b)b.hasOwnProperty(e)&&(a[e]=fa(b[e],null,c,d));else for(e in b)Xa.call(b,e)&&(a[e]=fa(b[e],null,c,d));qc(a,f)}}else if(a=b,H(b)){if(c&&-1!==(f=c.indexOf(b)))return d[f];if(G(b))return fa(b,[],c,d);if(uc.test(sa.call(b)))a=new b.constructor(b);else if(aa(b))a=new Date(b.getTime());else if(Za(b))a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex;else return e=
|
||||
Object.create(sc(b)),fa(b,e,c,d);d&&(c.push(b),d.push(a))}return a}function ia(b,a){if(G(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(H(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=b[c];return a||b}function ka(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(G(b)){if(!G(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ka(b[d],a[d]))return!1;return!0}}else{if(aa(b))return aa(a)?
|
||||
ka(b.getTime(),a.getTime()):!1;if(Za(b))return Za(a)?b.toString()==a.toString():!1;if($a(b)||$a(a)||Wa(b)||Wa(a)||G(a)||aa(a)||Za(a))return!1;c=ga();for(d in b)if("$"!==d.charAt(0)&&!z(b[d])){if(!ka(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!(d in c||"$"===d.charAt(0)||a[d]===t||z(a[d])))return!1;return!0}return!1}function cb(b,a,c){return b.concat(za.call(a,c))}function vc(b,a){var c=2<arguments.length?za.call(arguments,2):[];return!z(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?
|
||||
a.apply(b,cb(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Xd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=t:Wa(a)?c="$WINDOW":a&&U===a?c="$DOCUMENT":$a(a)&&(c="$SCOPE");return c}function db(b,a){if("undefined"===typeof b)return t;V(a)||(a=a?2:null);return JSON.stringify(b,Xd,a)}function wc(b){return L(b)?JSON.parse(b):b}function xc(b,a){var c=Date.parse("Jan 01, 1970 00:00:00 "+b)/6E4;return isNaN(c)?a:c}function Pb(b,
|
||||
a,c){c=c?-1:1;var d=xc(a,b.getTimezoneOffset());a=b;b=c*(d-b.getTimezoneOffset());a=new Date(a.getTime());a.setMinutes(a.getMinutes()+b);return a}function ua(b){b=y(b).clone();try{b.empty()}catch(a){}var c=y("<div>").append(b).html();try{return b[0].nodeType===Na?M(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+M(b)})}catch(d){return M(c)}}function yc(b){try{return decodeURIComponent(b)}catch(a){}}function zc(b){var a={},c,d;m((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,
|
||||
"%20").split("="),d=yc(c[0]),w(d)&&(b=w(c[1])?yc(c[1]):!0,Xa.call(a,d)?G(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Qb(b){var a=[];m(b,function(b,d){G(b)?m(b,function(b){a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))}):a.push(ma(d,!0)+(!0===b?"":"="+ma(b,!0)))});return a.length?a.join("&"):""}function ob(b){return ma(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ma(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,
|
||||
"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Yd(b,a){var c,d,e=Oa.length;for(d=0;d<e;++d)if(c=Oa[d]+a,L(c=b.getAttribute(c)))return c;return null}function Zd(b,a){var c,d,e={};m(Oa,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});m(Oa,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Yd(c,"strict-di"),a(c,d?[d]:[],e))}function Ac(b,a,c){H(c)||
|
||||
(c={});c=P({strictDi:!1},c);var d=function(){b=y(b);if(b.injector()){var d=b[0]===U?"document":ua(b);throw Fa("btstrpd",d.replace(/</,"<").replace(/>/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=eb(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d},e=
|
||||
/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;O&&e.test(O.name)&&(c.debugInfoEnabled=!0,O.name=O.name.replace(e,""));if(O&&!f.test(O.name))return d();O.name=O.name.replace(f,"");ca.resumeBootstrap=function(b){m(b,function(b){a.push(b)});return d()};z(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()}function $d(){O.name="NG_ENABLE_DEBUG_INFO!"+O.name;O.location.reload()}function ae(b){b=ca.element(b).injector();if(!b)throw Fa("test");return b.get("$$testability")}function Bc(b,a){a=a||
|
||||
"_";return b.replace(be,function(b,d){return(d?a:"")+b.toLowerCase()})}function ce(){var b;if(!Cc){var a=pb();la=O.jQuery;w(a)&&(la=null===a?t:O[a]);la&&la.fn.on?(y=la,P(la.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),b=la.cleanData,la.cleanData=function(a){var d;if(Rb)Rb=!1;else for(var e=0,f;null!=(f=a[e]);e++)(d=la._data(f,"events"))&&d.$destroy&&la(f).triggerHandler("$destroy");b(a)}):y=Q;ca.element=y;Cc=!0}}function Sb(b,
|
||||
a,c){if(!b)throw Fa("areq",a||"?",c||"required");return b}function Qa(b,a,c){c&&G(b)&&(b=b[b.length-1]);Sb(z(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ra(b,a){if("hasOwnProperty"===b)throw Fa("badname",a);}function Dc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&z(b)?vc(e,b):b}function qb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==
|
||||
b);return y(c)}function ga(){return Object.create(null)}function de(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=J("$injector"),d=J("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||J;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(b,c,e,f){f||(f=d);return function(){f[e||"push"]([b,c,arguments]);return C}}function b(a,c){return function(b,e){e&&z(e)&&
|
||||
(e.$$moduleName=f);d.push([a,c,arguments]);return C}}if(!g)throw c("nomod",f);var d=[],e=[],s=[],x=a("$injector","invoke","push",e),C={_invokeQueue:d,_configBlocks:e,_runBlocks:s,requires:g,name:f,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider",
|
||||
"register"),directive:b("$compileProvider","directive"),config:x,run:function(a){s.push(a);return this}};h&&x(h);return C})}})}function ee(b){P(b,{bootstrap:Ac,copy:fa,extend:P,merge:Vd,equals:ka,element:y,forEach:m,injector:eb,noop:v,bind:vc,toJson:db,fromJson:wc,identity:Ya,isUndefined:A,isDefined:w,isString:L,isFunction:z,isObject:H,isNumber:V,isElement:tc,isArray:G,version:fe,isDate:aa,lowercase:M,uppercase:rb,callbacks:{counter:0},getTestability:ae,$$minErr:J,$$csp:fb,reloadWithDebugInfo:$d});
|
||||
gb=de(O);try{gb("ngLocale")}catch(a){gb("ngLocale",[]).provider("$locale",ge)}gb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:he});a.provider("$compile",Ec).directive({a:ie,input:Fc,textarea:Fc,form:je,script:ke,select:le,style:me,option:ne,ngBind:oe,ngBindHtml:pe,ngBindTemplate:qe,ngClass:re,ngClassEven:se,ngClassOdd:te,ngCloak:ue,ngController:ve,ngForm:we,ngHide:xe,ngIf:ye,ngInclude:ze,ngInit:Ae,ngNonBindable:Be,ngPluralize:Ce,ngRepeat:De,ngShow:Ee,ngStyle:Fe,ngSwitch:Ge,
|
||||
ngSwitchWhen:He,ngSwitchDefault:Ie,ngOptions:Je,ngTransclude:Ke,ngModel:Le,ngList:Me,ngChange:Ne,pattern:Gc,ngPattern:Gc,required:Hc,ngRequired:Hc,minlength:Ic,ngMinlength:Ic,maxlength:Jc,ngMaxlength:Jc,ngValue:Oe,ngModelOptions:Pe}).directive({ngInclude:Qe}).directive(sb).directive(Kc);a.provider({$anchorScroll:Re,$animate:Se,$$animateQueue:Te,$$AnimateRunner:Ue,$browser:Ve,$cacheFactory:We,$controller:Xe,$document:Ye,$exceptionHandler:Ze,$filter:Lc,$interpolate:$e,$interval:af,$http:bf,$httpParamSerializer:cf,
|
||||
$httpParamSerializerJQLike:df,$httpBackend:ef,$location:ff,$log:gf,$parse:hf,$rootScope:jf,$q:kf,$$q:lf,$sce:mf,$sceDelegate:nf,$sniffer:of,$templateCache:pf,$templateRequest:qf,$$testability:rf,$timeout:sf,$window:tf,$$rAF:uf,$$jqLite:vf,$$HashMap:wf,$$cookieReader:xf})}])}function hb(b){return b.replace(yf,function(a,b,d,e){return e?d.toUpperCase():d}).replace(zf,"Moz$1")}function Mc(b){b=b.nodeType;return b===qa||!b||9===b}function Nc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Tb.test(b)){c=
|
||||
c||e.appendChild(a.createElement("div"));d=(Af.exec(b)||["",""])[1].toLowerCase();d=na[d]||na._default;c.innerHTML=d[1]+b.replace(Bf,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=cb(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";m(f,function(a){e.appendChild(a)});return e}function Q(b){if(b instanceof Q)return b;var a;L(b)&&(b=R(b),a=!0);if(!(this instanceof Q)){if(a&&"<"!=b.charAt(0))throw Ub("nosel");return new Q(b)}if(a){a=U;
|
||||
var c;b=(c=Cf.exec(b))?[a.createElement(c[1])]:(c=Nc(b,a))?c.childNodes:[]}Oc(this,b)}function Vb(b){return b.cloneNode(!0)}function tb(b,a){a||ub(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)ub(c[d])}function Pc(b,a,c,d){if(w(d))throw Ub("offargs");var e=(d=vb(b))&&d.events,f=d&&d.handle;if(f)if(a)m(a.split(" "),function(a){if(w(c)){var d=e[a];bb(d||[],c);if(d&&0<d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,
|
||||
f,!1),delete e[a]}function ub(b,a){var c=b.ng339,d=c&&ib[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Pc(b)),delete ib[c],b.ng339=t))}function vb(b,a){var c=b.ng339,c=c&&ib[c];a&&!c&&(b.ng339=c=++Df,c=ib[c]={events:{},data:{},handle:t});return c}function Wb(b,a,c){if(Mc(b)){var d=w(c),e=!d&&a&&!H(a),f=!a;b=(b=vb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;if(e)return b&&b[a];P(b,a)}}}function wb(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+
|
||||
" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function xb(b,a){a&&b.setAttribute&&m(a.split(" "),function(a){b.setAttribute("class",R((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+R(a)+" "," ")))})}function yb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");m(a.split(" "),function(a){a=R(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",R(c))}}function Oc(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=
|
||||
a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Qc(b,a){return zb(b,"$"+(a||"ngController")+"Controller")}function zb(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=G(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=y.data(b,a[d]))!==t)return c;b=b.parentNode||11===b.nodeType&&b.host}}function Rc(b){for(tb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}function Xb(b,a){a||tb(b);var c=b.parentNode;c&&c.removeChild(b)}function Ef(b,
|
||||
a){a=a||O;if("complete"===a.document.readyState)a.setTimeout(b);else y(a).on("load",b)}function Sc(b,a){var c=Ab[a.toLowerCase()];return c&&Tc[ta(b)]&&c}function Ff(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Uc[a]}function Gf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=a[e||c.type],g=f?f.length:0;if(g){if(A(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=
|
||||
!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=ia(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||f[l].call(b,c)}};c.elem=b;return c}function vf(){this.$get=function(){return P(Q,{hasClass:function(b,a){b.attr&&(b=b[0]);return wb(b,a)},addClass:function(b,a){b.attr&&(b=b[0]);return yb(b,a)},removeClass:function(b,a){b.attr&&(b=b[0]);return xb(b,a)}})}}function Ga(b,a){var c=b&&b.$$hashKey;
|
||||
if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Ud)():c+":"+b}function Sa(b,a){if(a){var c=0;this.nextUid=function(){return++c}}m(b,this.put,this)}function Hf(b){return(b=b.toString().replace(Vc,"").match(Wc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function eb(b,a){function c(a){return function(b,c){if(H(b))m(b,pc(a));else return a(b,c)}}function d(a,b){Ra(a,"service");if(z(b)||G(b))b=s.instantiate(b);
|
||||
if(!b.$get)throw Ha("pget",a);return r[a+"Provider"]=b}function e(a,b){return function(){var c=C.invoke(b,this);if(A(c))throw Ha("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;m(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=s.get(e[0]);f[e[1]].apply(f,e[2])}}if(!n.get(a)){n.put(a,!0);try{L(a)?(c=gb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):z(a)?b.push(s.invoke(a)):G(a)?
|
||||
b.push(s.invoke(a)):Qa(a,"module")}catch(e){throw G(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ha("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===l)throw Ha("cdep",a+" <- "+k.join(" <- "));return b[a]}try{return k.unshift(a),b[a]=l,b[a]=c(a,e)}catch(f){throw b[a]===l&&delete b[a],f;}finally{k.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=eb.$$annotate(b,
|
||||
a,g),l,s,n;s=0;for(l=k.length;s<l;s++){n=k[s];if("string"!==typeof n)throw Ha("itkn",n);h.push(f&&f.hasOwnProperty(n)?f[n]:d(n,g))}G(b)&&(b=b[l]);return b.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((G(a)?a[a.length-1]:a).prototype||null);a=e(a,d,b,c);return H(a)||z(a)?a:d},get:d,annotate:eb.$$annotate,has:function(a){return r.hasOwnProperty(a+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var l={},k=[],n=new Sa([],!0),r={$provide:{provider:c(d),factory:c(f),service:c(function(a,
|
||||
b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:c(function(a,b){return f(a,ra(b),!1)}),constant:c(function(a,b){Ra(a,"constant");r[a]=b;x[a]=b}),decorator:function(a,b){var c=s.get(a+"Provider"),d=c.$get;c.$get=function(){var a=C.invoke(d,c);return C.invoke(b,null,{$delegate:a})}}}},s=r.$injector=h(r,function(a,b){ca.isString(b)&&k.push(b);throw Ha("unpr",k.join(" <- "));}),x={},C=x.$injector=h(x,function(a,b){var c=s.get(a+"Provider",b);return C.invoke(c.$get,c,t,a)});m(g(b),
|
||||
function(a){a&&C.invoke(a)});return C}function Re(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ta(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;z(c)?c=c():tc(c)?(c=c[0],c="fixed"!==a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):V(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,
|
||||
0)}function g(a){a=L(a)?a:c.hash();var b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||Ef(function(){d.$evalAsync(g)})});return g}]}function jb(b,a){if(!b&&!a)return"";if(!b)return a;if(!a)return b;G(b)&&(b=b.join(" "));G(a)&&(a=a.join(" "));return b+" "+a}function If(b){L(b)&&(b=b.split(" "));var a=ga();m(b,function(b){b.length&&(a[b]=!0)});return a}function Ia(b){return H(b)?
|
||||
b:{}}function Jf(b,a,c,d){function e(a){try{a.apply(null,za.call(arguments,1))}finally{if(C--,0===C)for(;F.length;)try{F.pop()()}catch(b){c.error(b)}}}function f(){g();h()}function g(){a:{try{u=n.state;break a}catch(a){}u=void 0}u=A(u)?null:u;ka(u,D)&&(u=D);D=u}function h(){if(K!==l.url()||p!==u)K=l.url(),p=u,m(B,function(a){a(l.url(),u)})}var l=this,k=b.location,n=b.history,r=b.setTimeout,s=b.clearTimeout,x={};l.isMock=!1;var C=0,F=[];l.$$completeOutstandingRequest=e;l.$$incOutstandingRequestCount=
|
||||
function(){C++};l.notifyWhenNoOutstandingRequests=function(a){0===C?a():F.push(a)};var u,p,K=k.href,q=a.find("base"),I=null;g();p=u;l.url=function(a,c,e){A(e)&&(e=null);k!==b.location&&(k=b.location);n!==b.history&&(n=b.history);if(a){var f=p===e;if(K===a&&(!d.history||f))return l;var h=K&&Ja(K)===Ja(a);K=a;p=e;if(!d.history||h&&f){if(!h||I)I=a;c?k.replace(a):h?(c=k,e=a.indexOf("#"),a=-1===e?"":a.substr(e),c.hash=a):k.href=a}else n[c?"replaceState":"pushState"](e,"",a),g(),p=u;return l}return I||
|
||||
k.href.replace(/%27/g,"'")};l.state=function(){return u};var B=[],N=!1,D=null;l.onUrlChange=function(a){if(!N){if(d.history)y(b).on("popstate",f);y(b).on("hashchange",f);N=!0}B.push(a);return a};l.$$applicationDestroyed=function(){y(b).off("hashchange popstate",f)};l.$$checkUrlChange=h;l.baseHref=function(){var a=q.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};l.defer=function(a,b){var c;C++;c=r(function(){delete x[c];e(a)},b||0);x[c]=!0;return c};l.defer.cancel=function(a){return x[a]?
|
||||
(delete x[a],s(a),e(v),!0):!1}}function Ve(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new Jf(b,d,a,c)}]}function We(){this.$get=function(){function b(b,d){function e(a){a!=r&&(s?s==a&&(s=a.n):s=a,f(a.n,a.p),f(a,r),r=a,r.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw J("$cacheFactory")("iid",b);var g=0,h=P({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,n={},r=null,s=null;return a[b]={put:function(a,b){if(!A(b)){if(k<Number.MAX_VALUE){var c=
|
||||
n[a]||(n[a]={key:a});e(c)}a in l||g++;l[a]=b;g>k&&this.remove(s.key);return b}},get:function(a){if(k<Number.MAX_VALUE){var b=n[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=n[a];if(!b)return;b==r&&(r=b.p);b==s&&(s=b.n);f(b.n,b.p);delete n[a]}delete l[a];g--},removeAll:function(){l={};g=0;n={};r=s=null},destroy:function(){n=h=l=null;delete a[b]},info:function(){return P({},h,{size:g})}}}var a={};b.info=function(){var b={};m(a,function(a,e){b[e]=a.info()});return b};
|
||||
b.get=function(b){return a[b]};return b}}function pf(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function Ec(b,a){function c(a,b,c){var d=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,e={};m(a,function(a,f){var g=a.match(d);if(!g)throw ea("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f}});return e}function d(a){var b=a.charAt(0);if(!b||b!==M(b))throw ea("baddir",a);if(a!==a.trim())throw ea("baddir",
|
||||
a);}var e={},f=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,g=/(([\w\-]+)(?:\:([^;]+))?;?)/,h=Wd("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,k=/^(on[a-z]+|formaction)$/;this.directive=function s(a,f){Ra(a,"directive");L(a)?(d(a),Sb(f,"directiveFactory"),e.hasOwnProperty(a)||(e[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,d){var f=[];m(e[a],function(e,g){try{var h=b.invoke(e);z(h)?h={compile:ra(h)}:!h.compile&&h.link&&(h.compile=ra(h.link));h.priority=h.priority||
|
||||
0;h.index=g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";var k=h,l=h,s=h.name,n={isolateScope:null,bindToController:null};H(l.scope)&&(!0===l.bindToController?(n.bindToController=c(l.scope,s,!0),n.isolateScope={}):n.isolateScope=c(l.scope,s,!1));H(l.bindToController)&&(n.bindToController=c(l.bindToController,s,!0));if(H(n.bindToController)){var C=l.controller,$=l.controllerAs;if(!C)throw ea("noctrl",s);var ha;a:if($&&L($))ha=$;else{if(L(C)){var m=Xc.exec(C);
|
||||
if(m){ha=m[3];break a}}ha=void 0}if(!ha)throw ea("noident",s);}var q=k.$$bindings=n;H(q.isolateScope)&&(h.$$isolateBindings=q.isolateScope);h.$$moduleName=e.$$moduleName;f.push(h)}catch(t){d(t)}});return f}])),e[a].push(f)):m(a,pc(s));return this};this.aHrefSanitizationWhitelist=function(b){return w(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return w(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};
|
||||
var n=!0;this.debugInfoEnabled=function(a){return w(a)?(n=a,this):n};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,d,u,p,K,q,I,B,N){function D(a,b){try{a.addClass(b)}catch(c){}}function Z(a,b,c,d,e){a instanceof y||(a=y(a));m(a,function(b,c){b.nodeType==Na&&b.nodeValue.match(/\S+/)&&(a[c]=y(b).wrap("<span></span>").parent()[0])});var f=S(a,b,a,c,d,e);Z.$$addScopeClass(a);
|
||||
var g=null;return function(b,c,d){Sb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ta(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?y(Yb(g,y("<div>").append(a).html())):c?Pa.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);Z.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){function g(a,
|
||||
c,d,e){var f,k,l,s,n,B,C;if(p)for(C=Array(c.length),s=0;s<h.length;s+=3)f=h[s],C[f]=c[f];else C=c;s=0;for(n=h.length;s<n;)if(k=C[h[s++]],c=h[s++],f=h[s++],c){if(c.scope){if(l=a.$new(),Z.$$addScopeInfo(y(k),l),B=c.$$destroyBindings)c.$$destroyBindings=null,l.$on("$destroyed",B)}else l=a;B=c.transcludeOnThisElement?$(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?$(a,b):null;c(f,l,k,d,B,c)}else f&&f(a,k.childNodes,t,e)}for(var h=[],k,l,s,n,p,B=0;B<a.length;B++){k=new aa;l=ha(a[B],[],k,0===B?
|
||||
d:t,e);(f=l.length?E(l,a[B],k,b,c,null,[],[],f):null)&&f.scope&&Z.$$addScopeClass(k.$$element);k=f&&f.terminal||!(s=a[B].childNodes)||!s.length?null:S(s,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(B,f,k),n=!0,p=p||f;f=null}return n?g:null}function $(a,b,c){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function ha(a,b,c,d,e){var h=c.$attr,k;switch(a.nodeType){case qa:w(b,
|
||||
wa(ta(a)),"E",d,e);for(var l,s,n,p=a.attributes,B=0,C=p&&p.length;B<C;B++){var x=!1,S=!1;l=p[B];k=l.name;s=R(l.value);l=wa(k);if(n=ia.test(l))k=k.replace(Zc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});var F=l.replace(/(Start|End)$/,"");A(F)&&l===F+"Start"&&(x=k,S=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6));l=wa(k.toLowerCase());h[l]=k;if(n||!c.hasOwnProperty(l))c[l]=s,Sc(a,l)&&(c[l]=!0);V(a,b,s,l,n);w(b,l,"A",d,e,x,S)}a=a.className;H(a)&&(a=a.animVal);if(L(a)&&
|
||||
""!==a)for(;k=g.exec(a);)l=wa(k[2]),w(b,l,"C",d,e)&&(c[l]=R(k[3])),a=a.substr(k.index+k[0].length);break;case Na:if(11===Ua)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Na;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);xa(b,a.nodeValue);break;case 8:try{if(k=f.exec(a.nodeValue))l=wa(k[1]),w(b,l,"M",d,e)&&(c[l]=R(k[2]))}catch($){}}b.sort(Aa);return b}function va(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ea("uterdir",b,c);
|
||||
a.nodeType==qa&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return y(d)}function Yc(a,b,c){return function(d,e,f,g,h){e=va(e[0],b,c);return a(d,e,f,g,h)}}function E(a,b,d,e,f,g,h,k,s){function n(a,b,c,d){if(a){c&&(a=Yc(a,c,d));a.require=E.require;a.directiveName=w;if(u===E||E.$$isolateScope)a=X(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=Yc(b,c,d));b.require=E.require;b.directiveName=w;if(u===E||E.$$isolateScope)b=X(b,{isolateScope:!0});k.push(b)}}
|
||||
function B(a,b,c,d){var e;if(L(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;e||(d="$"+b+"Controller",e=g?c.inheritedData(d):c.data(d));if(!e&&!f)throw ea("ctreq",b,a);}else if(G(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=B(a,b[g],c,d);return e||null}function x(a,b,c,d,e,f){var g=ga(),h;for(h in d){var k=d[h],l={$scope:k===u||k.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},s=k.controller;"@"==s&&(s=b[k.name]);l=p(s,
|
||||
l,!0,k.controllerAs);g[k.name]=l;q||a.data("$"+k.name+"Controller",l.instance)}return g}function S(a,c,e,f,g,l){function s(a,b,c){var d;$a(a)||(c=b,b=a,a=t);q&&(d=m);c||(c=q?ja.parent():ja);return g(a,b,d,c,va)}var n,p,C,F,m,ha,ja;b===e?(f=d,ja=d.$$element):(ja=y(e),f=new aa(ja,d));u&&(F=c.$new(!0));g&&(ha=s,ha.$$boundTransclude=g);N&&(m=x(ja,f,ha,N,F,c));u&&(Z.$$addScopeInfo(ja,F,!0,!(D&&(D===u||D===u.$$originalDirective))),Z.$$addScopeClass(ja,!0),F.$$isolateBindings=u.$$isolateBindings,W(c,f,F,
|
||||
F.$$isolateBindings,u,F));if(m){var K=u||$,I;K&&m[K.name]&&(p=K.$$bindings.bindToController,(C=m[K.name])&&C.identifier&&p&&(I=C,l.$$destroyBindings=W(c,f,C.instance,p,K)));for(n in m){C=m[n];var E=C();E!==C.instance&&(C.instance=E,ja.data("$"+n+"Controller",E),C===I&&(l.$$destroyBindings(),l.$$destroyBindings=W(c,f,E,p,K)))}}n=0;for(l=h.length;n<l;n++)p=h[n],Y(p,p.isolateScope?F:c,ja,f,p.require&&B(p.directiveName,p.require,ja,m),ha);var va=c;u&&(u.template||null===u.templateUrl)&&(va=F);a&&a(va,
|
||||
e.childNodes,t,g);for(n=k.length-1;0<=n;n--)p=k[n],Y(p,p.isolateScope?F:c,ja,f,p.require&&B(p.directiveName,p.require,ja,m),ha)}s=s||{};for(var F=-Number.MAX_VALUE,$=s.newScopeDirective,N=s.controllerDirectives,u=s.newIsolateScopeDirective,D=s.templateDirective,m=s.nonTlbTranscludeDirective,K=!1,I=!1,q=s.hasElementTranscludeDirective,ba=d.$$element=y(b),E,w,v,A=e,Aa,xa=0,Ta=a.length;xa<Ta;xa++){E=a[xa];var M=E.$$start,P=E.$$end;M&&(ba=va(b,M,P));v=t;if(F>E.priority)break;if(v=E.scope)E.templateUrl||
|
||||
(H(v)?(O("new/isolated scope",u||$,E,ba),u=E):O("new/isolated scope",u,E,ba)),$=$||E;w=E.name;!E.templateUrl&&E.controller&&(v=E.controller,N=N||ga(),O("'"+w+"' controller",N[w],E,ba),N[w]=E);if(v=E.transclude)K=!0,E.$$tlb||(O("transclusion",m,E,ba),m=E),"element"==v?(q=!0,F=E.priority,v=ba,ba=d.$$element=y(U.createComment(" "+w+": "+d[w]+" ")),b=ba[0],T(f,za.call(v,0),b),A=Z(v,e,F,g&&g.name,{nonTlbTranscludeDirective:m})):(v=y(Vb(b)).contents(),ba.empty(),A=Z(v,e));if(E.template)if(I=!0,O("template",
|
||||
D,E,ba),D=E,v=z(E.template)?E.template(ba,d):E.template,v=fa(v),E.replace){g=E;v=Tb.test(v)?$c(Yb(E.templateNamespace,R(v))):[];b=v[0];if(1!=v.length||b.nodeType!==qa)throw ea("tplrt",w,"");T(f,ba,b);Ta={$attr:{}};v=ha(b,[],Ta);var Q=a.splice(xa+1,a.length-(xa+1));u&&ad(v);a=a.concat(v).concat(Q);J(d,Ta);Ta=a.length}else ba.html(v);if(E.templateUrl)I=!0,O("template",D,E,ba),D=E,E.replace&&(g=E),S=Lf(a.splice(xa,a.length-xa),ba,d,f,K&&A,h,k,{controllerDirectives:N,newScopeDirective:$!==E&&$,newIsolateScopeDirective:u,
|
||||
templateDirective:D,nonTlbTranscludeDirective:m}),Ta=a.length;else if(E.compile)try{Aa=E.compile(ba,d,A),z(Aa)?n(null,Aa,M,P):Aa&&n(Aa.pre,Aa.post,M,P)}catch(Kf){c(Kf,ua(ba))}E.terminal&&(S.terminal=!0,F=Math.max(F,E.priority))}S.scope=$&&!0===$.scope;S.transcludeOnThisElement=K;S.templateOnThisElement=I;S.transclude=A;s.hasElementTranscludeDirective=q;return S}function ad(a){for(var b=0,c=a.length;b<c;b++)a[b]=Ob(a[b],{$$isolateScope:!0})}function w(b,d,f,g,h,k,l){if(d===h)return null;h=null;if(e.hasOwnProperty(d)){var n;
|
||||
d=a.get(d+"Directive");for(var p=0,B=d.length;p<B;p++)try{n=d[p],(g===t||g>n.priority)&&-1!=n.restrict.indexOf(f)&&(k&&(n=Ob(n,{$$start:k,$$end:l})),b.push(n),h=n)}catch(x){c(x)}}return h}function A(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=c[d],b.multiElement)return!0;return!1}function J(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;m(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});m(b,function(b,f){"class"==
|
||||
f?(D(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function Lf(a,b,c,e,f,g,h,k){var l=[],s,n,p=b[0],B=a.shift(),C=Ob(B,{templateUrl:null,transclude:null,replace:null,$$originalDirective:B}),x=z(B.templateUrl)?B.templateUrl(b,c):B.templateUrl,N=B.templateNamespace;b.empty();d(x).then(function(d){var F,u;d=fa(d);if(B.replace){d=Tb.test(d)?$c(Yb(N,R(d))):
|
||||
[];F=d[0];if(1!=d.length||F.nodeType!==qa)throw ea("tplrt",B.name,x);d={$attr:{}};T(e,b,F);var K=ha(F,[],d);H(B.scope)&&ad(K);a=K.concat(a);J(c,d)}else F=p,b.html(d);a.unshift(C);s=E(a,F,c,f,b,B,g,h,k);m(e,function(a,c){a==F&&(e[c]=b[0])});for(n=S(b[0].childNodes,f);l.length;){d=l.shift();u=l.shift();var I=l.shift(),va=l.shift(),K=b[0];if(!d.$$destroyed){if(u!==p){var Z=u.className;k.hasElementTranscludeDirective&&B.replace||(K=Vb(F));T(I,y(u),K);D(y(K),Z)}u=s.transcludeOnThisElement?$(d,s.transclude,
|
||||
va):va;s(n,d,K,e,u,s)}}l=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(s.transcludeOnThisElement&&(a=$(b,s.transclude,e)),s(n,b,c,d,a,s)))}}function Aa(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function O(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw ea("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ua(d));}function xa(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=
|
||||
a.parent();var b=!!a.length;b&&Z.$$addBindingClass(a);return function(a,c){var e=c.parent();b||Z.$$addBindingClass(e);Z.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Yb(a,b){a=M(a||"html");switch(a){case "svg":case "math":var c=U.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function Q(a,b){if("srcdoc"==b)return I.HTML;var c=ta(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||
|
||||
"ngSrc"==b))return I.RESOURCE_URL}function V(a,c,d,e,f){var g=Q(a,e);f=h[e]||f;var l=b(d,!0,g,f);if(l){if("multiple"===e&&"select"===ta(a))throw ea("selmulti",ua(a));c.push({priority:100,compile:function(){return{pre:function(a,c,h){c=h.$$observers||(h.$$observers={});if(k.test(e))throw ea("nodomevents");var s=h[e];s!==d&&(l=s&&b(s,!0,g,f),d=s);l&&(h[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(h.$$observers&&h.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!=b?h.$updateClass(a,b):h.$set(e,
|
||||
a)}))}}}})}}function T(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=U.createDocumentFragment();a.appendChild(d);y.hasData(d)&&(y(c).data(y(d).data()),la?(Rb=!0,la.cleanData([d])):delete y.cache[d[y.expando]]);d=1;for(e=b.length;d<e;d++)f=b[d],y(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function X(a,
|
||||
b){return P(function(){return a.apply(null,arguments)},a,b)}function Y(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ua(d))}}function W(a,c,d,e,f,g){var h;m(e,function(e,g){var k=e.attrName,l=e.optional,s=e.mode,n,p,B,C;Xa.call(c,k)||(c[k]=t);switch(s){case "@":c[k]||l||(d[g]=t);c.$observe(k,function(a){d[g]=a});c.$$observers[k].$$scope=a;c[k]&&(d[g]=b(c[k])(a));break;case "=":if(l&&!c[k])break;p=u(c[k]);C=p.literal?ka:function(a,b){return a===b||a!==a&&b!==b};B=p.assign||function(){n=d[g]=p(a);throw ea("nonassign",
|
||||
c[k],f.name);};n=d[g]=p(a);l=function(b){C(b,d[g])||(C(b,n)?B(a,b=d[g]):d[g]=b);return n=b};l.$stateful=!0;l=e.collection?a.$watchCollection(c[k],l):a.$watch(u(c[k],l),null,p.literal);h=h||[];h.push(l);break;case "&":p=u(c[k]);if(p===v&&l)break;d[g]=function(b){return p(a,b)}}});e=h?function(){for(var a=0,b=h.length;a<b;++a)h[a]()}:v;return g&&e!==v?(g.$on("$destroy",e),v):e}var aa=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=
|
||||
a};aa.prototype={$normalize:wa,$addClass:function(a){a&&0<a.length&&B.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&B.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=bd(a,b);c&&c.length&&B.addClass(this.$$element,c);(c=bd(b,a))&&c.length&&B.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Sc(f,a),h=Ff(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Bc(a,
|
||||
"-"));g=ta(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=N(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=R(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(h)?k:/(,)/,h=h.split(k),k=Math.floor(h.length/2),l=0;l<k;l++)var s=2*l,g=g+N(R(h[s]),!0),g=g+(" "+R(h[s+1]));h=R(h[2*l]).split(/\s/);g+=N(R(h[0]),!0);2===h.length&&(g+=" "+R(h[1]));this[a]=b=g}!1!==d&&(null===b||b===t?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&m(a[f],
|
||||
function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ga()),e=d[a]||(d[a]=[]);e.push(b);K.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){bb(e,b)}}};var ca=b.startSymbol(),da=b.endSymbol(),fa="{{"==ca||"}}"==da?Ya:function(a){return a.replace(/\{\{/g,ca).replace(/}}/g,da)},ia=/^ngAttr[A-Z]/;Z.$$addBindingInfo=n?function(a,b){var c=a.data("$binding")||[];G(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:v;Z.$$addBindingClass=
|
||||
n?function(a){D(a,"ng-binding")}:v;Z.$$addScopeInfo=n?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:v;Z.$$addScopeClass=n?function(a,b){D(a,b?"ng-isolate-scope":"ng-scope")}:v;return Z}]}function wa(b){return hb(b.replace(Zc,""))}function bd(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function $c(b){b=y(b);var a=b.length;if(1>=a)return b;for(;a--;)8===
|
||||
b[a].nodeType&&Mf.call(b,a,1);return b}function Xe(){var b={},a=!1;this.register=function(a,d){Ra(a,"controller");H(a)?P(b,a):b[a]=d};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(c,d){function e(a,b,c,d){if(!a||!H(a.$scope))throw J("$controller")("noscp",d,b);a.$scope[b]=c}return function(f,g,h,l){var k,n,r;h=!0===h;l&&L(l)&&(r=l);if(L(f)){l=f.match(Xc);if(!l)throw Nf("ctrlfmt",f);n=l[1];r=r||l[3];f=b.hasOwnProperty(n)?b[n]:Dc(g.$scope,n,!0)||(a?Dc(d,n,!0):t);Qa(f,
|
||||
n,!0)}if(h)return h=(G(f)?f[f.length-1]:f).prototype,k=Object.create(h||null),r&&e(g,r,k,n||f.name),P(function(){var a=c.invoke(f,k,g,n);a!==k&&(H(a)||z(a))&&(k=a,r&&e(g,r,k,n||f.name));return k},{instance:k,identifier:r});k=c.instantiate(f,g,n);r&&e(g,r,k,n||f.name);return k}}]}function Ye(){this.$get=["$window",function(b){return y(b.document)}]}function Ze(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Zb(b){return H(b)?aa(b)?b.toISOString():db(b):b}
|
||||
function cf(){this.$get=function(){return function(b){if(!b)return"";var a=[];oc(b,function(b,d){null===b||A(b)||(G(b)?m(b,function(b,c){a.push(ma(d)+"="+ma(Zb(b)))}):a.push(ma(d)+"="+ma(Zb(b))))});return a.join("&")}}}function df(){this.$get=function(){return function(b){function a(b,e,f){null===b||A(b)||(G(b)?m(b,function(b){a(b,e+"[]")}):H(b)&&!aa(b)?oc(b,function(b,c){a(b,e+(f?"":"[")+c+(f?"":"]"))}):c.push(ma(e)+"="+ma(Zb(b))))}if(!b)return"";var c=[];a(b,"",!0);return c.join("&")}}}function $b(b,
|
||||
a){if(L(b)){var c=b.replace(Of,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(cd))||(d=(d=c.match(Pf))&&Qf[d[0]].test(c));d&&(b=wc(c))}}return b}function dd(b){var a=ga(),c;L(b)?m(b.split("\n"),function(b){c=b.indexOf(":");var e=M(R(b.substr(0,c)));b=R(b.substr(c+1));e&&(a[e]=a[e]?a[e]+", "+b:b)}):H(b)&&m(b,function(b,c){var f=M(c),g=R(b);f&&(a[f]=a[f]?a[f]+", "+g:g)});return a}function ed(b){var a;return function(c){a||(a=dd(b));return c?(c=a[M(c)],void 0===c&&(c=null),c):a}}function fd(b,
|
||||
a,c,d){if(z(d))return d(b,a,c);m(d,function(d){b=d(b,a,c)});return b}function bf(){var b=this.defaults={transformResponse:[$b],transformRequest:[function(a){return H(a)&&"[object File]"!==sa.call(a)&&"[object Blob]"!==sa.call(a)&&"[object FormData]"!==sa.call(a)?db(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ia(ac),put:ia(ac),patch:ia(ac)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},a=!1;this.useApplyAsync=function(b){return w(b)?
|
||||
(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=P({},a);b.data=a.data?fd(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}function d(a,b){var c,e={};m(a,function(a,d){z(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}if(!ca.isObject(a))throw J("$http")("badreq",a);var e=P({method:"get",transformRequest:b.transformRequest,
|
||||
transformResponse:b.transformResponse,paramSerializer:b.paramSerializer},a);e.headers=function(a){var c=b.headers,e=P({},a.headers),f,g,h,c=P({},c.common,c[M(a.method)]);a:for(f in c){g=M(f);for(h in e)if(M(h)===g)continue a;e[f]=c[f]}return d(e,ia(a))}(a);e.method=rb(e.method);e.paramSerializer=L(e.paramSerializer)?l.get(e.paramSerializer):e.paramSerializer;var f=[function(a){var d=a.headers,e=fd(a.data,ed(d),t,a.transformRequest);A(e)&&m(d,function(a,b){"content-type"===M(b)&&delete d[b]});A(a.withCredentials)&&
|
||||
!A(b.withCredentials)&&(a.withCredentials=b.withCredentials);return n(a,e).then(c,c)},t],g=h.when(e);for(m(x,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){Qa(a,"fn");g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=function(a){Qa(a,"fn");g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g}
|
||||
function n(c,f){function l(b,c,d,e){function f(){n(c,b,d,e)}N&&(200<=b&&300>b?N.put(S,[b,c,dd(d),e]):N.remove(S));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function n(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?I.resolve:I.reject)({data:a,status:b,headers:ed(d),config:c,statusText:e})}function x(a){n(a.data,a.status,ia(a.headers()),a.statusText)}function m(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,1)}var I=h.defer(),B=I.promise,N,D,q=c.headers,S=r(c.url,c.paramSerializer(c.params));
|
||||
k.pendingRequests.push(c);B.then(m,m);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(N=H(c.cache)?c.cache:H(b.cache)?b.cache:s);N&&(D=N.get(S),w(D)?D&&z(D.then)?D.then(x,x):G(D)?n(D[1],D[0],ia(D[2]),D[3]):n(D,200,{},"OK"):N.put(S,B));A(D)&&((D=gd(c.url)?e()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(q[c.xsrfHeaderName||b.xsrfHeaderName]=D),d(c.method,S,f,l,q,c.timeout,c.withCredentials,c.responseType));return B}function r(a,b){0<b.length&&(a+=(-1==a.indexOf("?")?"?":"&")+b);
|
||||
return a}var s=f("$http");b.paramSerializer=L(b.paramSerializer)?l.get(b.paramSerializer):b.paramSerializer;var x=[];m(c,function(a){x.unshift(L(a)?l.get(a):l.invoke(a))});k.pendingRequests=[];(function(a){m(arguments,function(a){k[a]=function(b,c){return k(P({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){m(arguments,function(a){k[a]=function(b,c,d){return k(P({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");k.defaults=b;return k}]}function Rf(){return new O.XMLHttpRequest}
|
||||
function ef(){this.$get=["$browser","$window","$document",function(b,a,c){return Sf(b,Rf,b.defer,a.angular.callbacks,c[0])}]}function Sf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),n=null;f.type="text/javascript";f.src=a;f.async=!0;n=function(a){f.removeEventListener("load",n,!1);f.removeEventListener("error",n,!1);e.body.removeChild(f);f=null;var g=-1,x="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),x=a.type,g="error"===a.type?404:200);c&&c(g,x)};f.addEventListener("load",
|
||||
n,!1);f.addEventListener("error",n,!1);e.body.appendChild(f);return n}return function(e,h,l,k,n,r,s,x){function C(){p&&p();K&&K.abort()}function F(a,d,e,f,g){I!==t&&c.cancel(I);p=K=null;a(d,e,f,g);b.$$completeOutstandingRequest(v)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==M(e)){var u="_"+(d.counter++).toString(36);d[u]=function(a){d[u].data=a;d[u].called=!0};var p=f(h.replace("JSON_CALLBACK","angular.callbacks."+u),u,function(a,b){F(k,a,d[u].data,"",b);d[u]=v})}else{var K=a();K.open(e,
|
||||
h,!0);m(n,function(a,b){w(a)&&K.setRequestHeader(b,a)});K.onload=function(){var a=K.statusText||"",b="response"in K?K.response:K.responseText,c=1223===K.status?204:K.status;0===c&&(c=b?200:"file"==Ba(h).protocol?404:0);F(k,c,b,K.getAllResponseHeaders(),a)};e=function(){F(k,-1,null,null,"")};K.onerror=e;K.onabort=e;s&&(K.withCredentials=!0);if(x)try{K.responseType=x}catch(q){if("json"!==x)throw q;}K.send(l)}if(0<r)var I=c(C,r);else r&&z(r.then)&&r.then(C)}}function $e(){var b="{{",a="}}";this.startSymbol=
|
||||
function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(n,b).replace(r,a)}function h(f,h,n,r){function u(a){try{var b=a;a=n?e.getTrusted(n,b):e.valueOf(b);var c;if(r&&!w(a))c=a;else if(null==a)c="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=db(a)}c=a}return c}catch(g){d(Ka.interr(f,g))}}r=!!r;for(var p,m,q=0,I=
|
||||
[],B=[],N=f.length,D=[],t=[];q<N;)if(-1!=(p=f.indexOf(b,q))&&-1!=(m=f.indexOf(a,p+l)))q!==p&&D.push(g(f.substring(q,p))),q=f.substring(p+l,m),I.push(q),B.push(c(q,u)),q=m+k,t.push(D.length),D.push("");else{q!==N&&D.push(g(f.substring(q)));break}n&&1<D.length&&Ka.throwNoconcat(f);if(!h||I.length){var S=function(a){for(var b=0,c=I.length;b<c;b++){if(r&&A(a[b]))return;D[t[b]]=a[b]}return D.join("")};return P(function(a){var b=0,c=I.length,e=Array(c);try{for(;b<c;b++)e[b]=B[b](a);return S(e)}catch(g){d(Ka.interr(f,
|
||||
g))}},{exp:f,expressions:I,$$watchDelegate:function(a,b){var c;return a.$watchGroup(B,function(d,e){var f=S(d);z(b)&&b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=b.length,k=a.length,n=new RegExp(b.replace(/./g,f),"g"),r=new RegExp(a.replace(/./g,f),"g");h.startSymbol=function(){return b};h.endSymbol=function(){return a};return h}]}function af(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,l,k){var n=4<arguments.length,r=n?za.call(arguments,4):[],s=a.setInterval,x=a.clearInterval,
|
||||
C=0,F=w(k)&&!k,u=(F?d:c).defer(),p=u.promise;l=w(l)?l:0;p.then(null,null,n?function(){e.apply(null,r)}:e);p.$$intervalId=s(function(){u.notify(C++);0<l&&C>=l&&(u.resolve(C),x(p.$$intervalId),delete f[p.$$intervalId]);F||b.$apply()},h);f[p.$$intervalId]=u;return p}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function ge(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",
|
||||
GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
|
||||
SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a",ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"]},pluralCat:function(b){return 1===b?"one":"other"}}}}function bc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=ob(b[a]);return b.join("/")}function hd(b,a){var c=Ba(b);a.$$protocol=c.protocol;
|
||||
a.$$host=c.hostname;a.$$port=W(c.port)||Tf[c.protocol]||null}function id(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=zc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ya(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ja(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function Bb(b){return b.replace(/(#.+)|#$/,
|
||||
"$1")}function cc(b){return b.substr(0,Ja(b).lastIndexOf("/")+1)}function dc(b,a){this.$$html5=!0;a=a||"";var c=cc(b);hd(b,this);this.$$parse=function(a){var b=ya(c,a);if(!L(b))throw Cb("ipthprfx",a,c);id(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Qb(this.$$search),b=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),
|
||||
!0;var f,g;(f=ya(b,d))!==t?(g=f,g=(f=ya(a,f))!==t?c+(ya("/",f)||f):b+g):(f=ya(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ec(b,a){var c=cc(b);hd(b,this);this.$$parse=function(d){var e=ya(b,d)||ya(c,d),f;A(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",A(e)&&(b=d,this.replace())):(f=ya(a,e),A(f)&&(f=e));id(f,this);d=this.$$path;var e=b,g=/^\/[A-Z]:(\/.*)/;0===f.indexOf(e)&&(f=f.replace(e,""));g.exec(f)||(d=(f=g.exec(d))?f[1]:d);this.$$path=d;this.$$compose()};this.$$compose=
|
||||
function(){var c=Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ja(b)==Ja(a)?(this.$$parse(a),!0):!1}}function jd(b,a){this.$$html5=!0;ec.apply(this,arguments);var c=cc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ja(d)?f=d:(g=ya(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=
|
||||
Qb(this.$$search),e=this.$$hash?"#"+ob(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Db(b){return function(){return this[b]}}function kd(b,a){return function(c){if(A(c))return this[b];this[b]=a(c);this.$$compose();return this}}function ff(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return w(a)?(b=a,this):b};this.html5Mode=function(b){return ab(b)?(a.enabled=b,this):H(b)?(ab(b.enabled)&&(a.enabled=b.enabled),
|
||||
ab(b.requireBase)&&(a.requireBase=b.requireBase),ab(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var r=d.url(),s;if(a.enabled){if(!n&&a.requireBase)throw Cb("nobase");s=r.substring(0,
|
||||
r.indexOf("/",r.indexOf("//")+2))+(n||"/");n=e.history?dc:jd}else s=Ja(r),n=ec;k=new n(s,"#"+b);k.$$parseLinkUrl(r,r);k.$$state=d.state();var x=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=y(b.target);"a"!==ta(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");H(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Ba(h.animVal).href);x.test(h)||
|
||||
!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});Bb(k.absUrl())!=Bb(r)&&d.url(k.absUrl(),!0);var C=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(C=!1,l(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a=
|
||||
Bb(d.url()),b=Bb(k.absUrl()),f=d.state(),g=k.$$replace,n=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(C||n)C=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(n&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function gf(){var b=!0,a=this;this.debugEnabled=function(a){return w(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&
|
||||
(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||v;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];m(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}
|
||||
function Ca(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw da("isecfld",a);return b}function oa(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b.window===b)throw da("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw da("isecdom",a);if(b===Object)throw da("isecobj",a);}return b}function ld(b,a){if(b){if(b.constructor===b)throw da("isecfn",a);if(b===Uf||b===Vf||b===Wf)throw da("isecff",a);
|
||||
}}function Xf(b,a){return"undefined"!==typeof b?b:a}function md(b,a){return"undefined"===typeof b?a:"undefined"===typeof a?b:b+a}function T(b,a){var c,d;switch(b.type){case q.Program:c=!0;m(b.body,function(b){T(b.expression,a);c=c&&b.expression.constant});b.constant=c;break;case q.Literal:b.constant=!0;b.toWatch=[];break;case q.UnaryExpression:T(b.argument,a);b.constant=b.argument.constant;b.toWatch=b.argument.toWatch;break;case q.BinaryExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&
|
||||
b.right.constant;b.toWatch=b.left.toWatch.concat(b.right.toWatch);break;case q.LogicalExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=b.constant?[]:[b];break;case q.ConditionalExpression:T(b.test,a);T(b.alternate,a);T(b.consequent,a);b.constant=b.test.constant&&b.alternate.constant&&b.consequent.constant;b.toWatch=b.constant?[]:[b];break;case q.Identifier:b.constant=!1;b.toWatch=[b];break;case q.MemberExpression:T(b.object,a);b.computed&&T(b.property,a);
|
||||
b.constant=b.object.constant&&(!b.computed||b.property.constant);b.toWatch=[b];break;case q.CallExpression:c=b.filter?!a(b.callee.name).$stateful:!1;d=[];m(b.arguments,function(b){T(b,a);c=c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=b.filter&&!a(b.callee.name).$stateful?d:[b];break;case q.AssignmentExpression:T(b.left,a);T(b.right,a);b.constant=b.left.constant&&b.right.constant;b.toWatch=[b];break;case q.ArrayExpression:c=!0;d=[];m(b.elements,function(b){T(b,a);c=
|
||||
c&&b.constant;b.constant||d.push.apply(d,b.toWatch)});b.constant=c;b.toWatch=d;break;case q.ObjectExpression:c=!0;d=[];m(b.properties,function(b){T(b.value,a);c=c&&b.value.constant;b.value.constant||d.push.apply(d,b.value.toWatch)});b.constant=c;b.toWatch=d;break;case q.ThisExpression:b.constant=!1,b.toWatch=[]}}function nd(b){if(1==b.length){b=b[0].expression;var a=b.toWatch;return 1!==a.length?a:a[0]!==b?a:t}}function od(b){return b.type===q.Identifier||b.type===q.MemberExpression}function pd(b){if(1===
|
||||
b.body.length&&od(b.body[0].expression))return{type:q.AssignmentExpression,left:b.body[0].expression,right:{type:q.NGValueParameter},operator:"="}}function qd(b){return 0===b.body.length||1===b.body.length&&(b.body[0].expression.type===q.Literal||b.body[0].expression.type===q.ArrayExpression||b.body[0].expression.type===q.ObjectExpression)}function rd(b,a){this.astBuilder=b;this.$filter=a}function sd(b,a){this.astBuilder=b;this.$filter=a}function Eb(b,a,c,d){oa(b,d);a=a.split(".");for(var e,f=0;1<
|
||||
a.length;f++){e=Ca(a.shift(),d);var g=oa(b[e],d);g||(g={},b[e]=g);b=g}e=Ca(a.shift(),d);oa(b[e],d);return b[e]=c}function Fb(b){return"constructor"==b}function fc(b){return z(b.valueOf)?b.valueOf():Yf.call(b)}function hf(){var b=ga(),a=ga();this.$get=["$filter","$sniffer",function(c,d){function e(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function f(a,b,c,d,f){var g=d.inputs,h;if(1===g.length){var k=e,g=g[0];return a.$watch(function(a){var b=
|
||||
g(a);e(b,k)||(h=d(a,t,t,[b]),k=b&&fc(b));return h},b,c,f)}for(var l=[],n=[],r=0,m=g.length;r<m;r++)l[r]=e,n[r]=null;return a.$watch(function(a){for(var b=!1,c=0,f=g.length;c<f;c++){var k=g[c](a);if(b||(b=!e(k,l[c])))n[c]=k,l[c]=k&&fc(k)}b&&(h=d(a,t,t,n));return h},b,c,f)}function g(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;z(b)&&b.apply(this,arguments);w(a)&&d.$$postDigest(function(){w(f)&&e()})},c)}function h(a,b,c,d){function e(a){var b=!0;m(a,function(a){w(a)||
|
||||
(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;z(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function l(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){z(b)&&b.apply(this,arguments);e()},c)}function k(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==h&&c!==g?function(c,d,e,f){e=a(c,d,e,f);return b(e,c,d)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return w(e)?c:e};a.$$watchDelegate&&a.$$watchDelegate!==
|
||||
f?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=f,c.inputs=a.inputs?a.inputs:[a]);return c}var n={csp:d.csp,expensiveChecks:!1},r={csp:d.csp,expensiveChecks:!0};return function(d,e,C){var m,u,p;switch(typeof d){case "string":p=d=d.trim();var q=C?a:b;m=q[p];m||(":"===d.charAt(0)&&":"===d.charAt(1)&&(u=!0,d=d.substring(2)),C=C?r:n,m=new gc(C),m=(new hc(m,c,C)).parse(d),m.constant?m.$$watchDelegate=l:u?m.$$watchDelegate=m.literal?h:g:m.inputs&&(m.$$watchDelegate=f),q[p]=m);return k(m,
|
||||
e);case "function":return k(d,e);default:return v}}}]}function kf(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return td(function(a){b.$evalAsync(a)},a)}]}function lf(){this.$get=["$browser","$exceptionHandler",function(b,a){return td(function(a){b.defer(a)},a)}]}function td(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&
|
||||
c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;c.processScheduled=!1;c.pending=t;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{z(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=J("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||
|
||||
[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}};g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,this.$$reject);try{if(H(b)||z(b))d=b&&b.then;z(d)?(this.promise.$$state.status=
|
||||
-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(z(b)?
|
||||
b(c):c)}catch(h){a(h)}}})}};var l=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{z(c)&&(d=c())}catch(e){return l(e,!1)}return d&&z(d.then)?d.then(function(){return l(a,b)},function(a){return l(a,!1)}):l(a,b)},n=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},r=function x(a){if(!z(a))throw h("norslvr",a);if(!(this instanceof x))return new x(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};
|
||||
r.defer=function(){return new g};r.reject=function(a){var b=new g;b.reject(a);return b.promise};r.when=n;r.resolve=n;r.all=function(a){var b=new g,c=0,d=G(a)?[]:{};m(a,function(a,e){c++;n(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return r}function uf(){this.$get=["$window","$timeout",function(b,a){function c(){for(var a=0;a<n.length;a++){var b=n[a];b&&(n[a]=null,b())}k=n.length=0}function d(a){var b=
|
||||
n.length;k++;n.push(a);0===b&&(l=h(c));return function(){0<=b&&(b=n[b]=null,0===--k&&l&&(l(),l=null,n.length=0))}}var e=b.requestAnimationFrame||b.webkitRequestAnimationFrame,f=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,g=!!e,h=g?function(a){var b=e(a);return function(){f(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};d.supported=g;var l,k=0,n=[];return d}]}function jf(){function b(a){function b(){this.$$watchers=this.$$nextSibling=
|
||||
this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++nb;this.$$ChildScope=null}b.prototype=a;return b}var a=10,c=J("$rootScope"),d=null,e=null;this.digestTtl=function(b){arguments.length&&(a=b);return a};this.$get=["$injector","$exceptionHandler","$parse","$browser",function(f,g,h,l){function k(a){a.currentScope.$$destroyed=!0}function n(){this.$id=++nb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=
|
||||
this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function r(a){if(p.$$phase)throw c("inprog",p.$$phase);p.$$phase=a}function s(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function x(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function q(){}function F(){for(;I.length;)try{I.shift()()}catch(a){g(a)}e=null}function u(){null===e&&(e=
|
||||
l.defer(function(){p.$apply(F)}))}n.prototype={constructor:n,$new:function(a,c){var d;c=c||this;a?(d=new n,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=b(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(a||c!=this)&&d.$on("$destroy",k);return d},$watch:function(a,b,c,e){var f=h(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,c,f,a);var g=this,k=g.$$watchers,l=
|
||||
{fn:b,last:q,get:f,exp:e||a,eq:!!c};d=null;z(b)||(l.fn=v);k||(k=g.$$watchers=[]);k.unshift(l);s(this,1);return function(){0<=bb(k,l)&&s(g,-1);d=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});m(a,function(a,b){var k=g.$watch(a,function(a,
|
||||
f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!A(e)){if(H(e))if(Ea(e))for(f!==r&&(f=r,m=f.length=0,l++),a=e.length,m!==a&&(l++,f.length=m=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==s&&(f=s={},m=0,l++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(m++,f[b]=g,l++));if(m>a)for(b in l++,f)e.hasOwnProperty(b)||
|
||||
(m--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1<b.length,l=0,n=h(a,c),r=[],s={},p=!0,m=0;return this.$watch(n,function(){p?(p=!1,b(e,e,d)):b(e,g,d);if(k)if(H(e))if(Ea(e)){g=Array(e.length);for(var a=0;a<e.length;a++)g[a]=e[a]}else for(a in g={},e)Xa.call(e,a)&&(g[a]=e[a]);else g=e})},$digest:function(){var b,f,h,k,n,s,m=a,x,u=[],E,I;r("$digest");l.$$checkUrlChange();this===p&&null!==e&&(l.defer.cancel(e),F());d=null;do{s=!1;for(x=this;t.length;){try{I=t.shift(),
|
||||
I.scope.$eval(I.expression,I.locals)}catch(v){g(v)}d=null}a:do{if(k=x.$$watchers)for(n=k.length;n--;)try{if(b=k[n])if((f=b.get(x))!==(h=b.last)&&!(b.eq?ka(f,h):"number"===typeof f&&"number"===typeof h&&isNaN(f)&&isNaN(h)))s=!0,d=b,b.last=b.eq?fa(f,null):f,b.fn(f,h===q?f:h,x),5>m&&(E=4-m,u[E]||(u[E]=[]),u[E].push({msg:z(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:h}));else if(b===d){s=!1;break a}}catch(A){g(A)}if(!(k=x.$$watchersCount&&x.$$childHead||x!==this&&x.$$nextSibling))for(;x!==
|
||||
this&&!(k=x.$$nextSibling);)x=x.$parent}while(x=k);if((s||t.length)&&!m--)throw p.$$phase=null,c("infdig",a,u);}while(s||t.length);for(p.$$phase=null;w.length;)try{w.shift()()}catch(y){g(y)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===p&&l.$$applicationDestroyed();s(this,-this.$$watchersCount);for(var b in this.$$listenerCount)x(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail==
|
||||
this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=v;this.$on=this.$watch=this.$watchGroup=function(){return v};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}},$eval:function(a,b){return h(a)(this,b)},
|
||||
$evalAsync:function(a,b){p.$$phase||t.length||l.defer(function(){t.length&&p.$digest()});t.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){w.push(a)},$apply:function(a){try{return r("$apply"),this.$eval(a)}catch(b){g(b)}finally{p.$$phase=null;try{p.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&I.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||
|
||||
(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,x(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=cb([h],arguments,1),l,n;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(n=d.length;l<n;l++)if(d[l])try{d[l].apply(null,k)}catch(r){g(r)}else d.splice(l,1),l--,n--;if(f)return h.currentScope=
|
||||
null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var f=cb([e],arguments,1),h,k;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,f)}catch(l){g(l)}else d.splice(h,1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=
|
||||
c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var p=new n,t=p.$$asyncQueue=[],w=p.$$postDigestQueue=[],I=p.$$applyAsyncQueue=[];return p}]}function he(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(a){return w(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return w(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,f;f=Ba(c).href;return""===f||f.match(e)?c:"unsafe:"+
|
||||
f}}}function Zf(b){if("self"===b)return b;if(L(b)){if(-1<b.indexOf("***"))throw Da("iwcard",b);b=ud(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(Za(b))return new RegExp("^"+b.source+"$");throw Da("imatcher");}function vd(b){var a=[];w(b)&&m(b,function(b){a.push(Zf(b))});return a}function nf(){this.SCE_CONTEXTS=pa;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=vd(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&
|
||||
(a=vd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?gd(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Da("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[pa.HTML]=e(g);h[pa.CSS]=e(g);h[pa.URL]=
|
||||
e(g);h[pa.JS]=e(g);h[pa.RESOURCE_URL]=e(h[pa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Da("icontext",a,b);if(null===b||b===t||""===b)return b;if("string"!==typeof b)throw Da("itype",a);return new c(b)},getTrusted:function(c,e){if(null===e||e===t||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===pa.RESOURCE_URL){var g=Ba(e.toString()),r,s,m=!1;r=0;for(s=b.length;r<s;r++)if(d(b[r],g)){m=!0;break}if(m)for(r=
|
||||
0,s=a.length;r<s;r++)if(d(a[r],g)){m=!1;break}if(m)return e;throw Da("insecurl",e.toString());}if(c===pa.HTML)return f(e);throw Da("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function mf(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Ua)throw Da("iequirks");var d=ia(pa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=
|
||||
d.getTrusted=function(a,b){return b},d.valueOf=Ya);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;m(pa,function(a,b){var c=M(b);d[hb("parse_as_"+c)]=function(b){return e(a,b)};d[hb("get_trusted_"+c)]=function(b){return f(a,b)};d[hb("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function of(){this.$get=["$window","$document",function(b,a){var c={},d=W((/android (\d+)/.exec(M((b.navigator||
|
||||
{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var r in l)if(k=h.exec(r)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);n=!!("animation"in l||g+"Animation"in l);!d||k&&n||(k=L(l.webkitTransition),n=L(l.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===
|
||||
a&&11>=Ua)return!1;if(A(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:fb(),vendorPrefix:g,transitions:k,animations:n,android:d}}]}function qf(){this.$get=["$templateCache","$http","$q","$sce",function(b,a,c,d){function e(f,g){e.totalPendingRequests++;L(f)&&b.get(f)||(f=d.getTrustedResourceUrl(f));var h=a.defaults&&a.defaults.transformResponse;G(h)?h=h.filter(function(a){return a!==$b}):h===$b&&(h=null);return a.get(f,{cache:b,transformResponse:h})["finally"](function(){e.totalPendingRequests--}).then(function(a){b.put(f,
|
||||
a.data);return a.data},function(a){if(!g)throw ea("tpload",f,a.status,a.statusText);return c.reject(a)})}e.totalPendingRequests=0;return e}]}function rf(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];m(a,function(a){var d=ca.element(a).data("$binding");d&&m(d,function(d){c?(new RegExp("(^|\\s)"+ud(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,
|
||||
b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var l=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(l.length)return l}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function sf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,l,k){z(f)||(k=l,l=f,f=v);var n=za.call(arguments,3),r=w(k)&&!k,s=(r?d:c).defer(),
|
||||
m=s.promise,q;q=a.defer(function(){try{s.resolve(f.apply(null,n))}catch(a){s.reject(a),e(a)}finally{delete g[m.$$timeoutId]}r||b.$apply()},l);m.$$timeoutId=q;g[q]=s;return m}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Ba(b){Ua&&(X.setAttribute("href",b),b=X.href);X.setAttribute("href",b);return{href:X.href,protocol:X.protocol?X.protocol.replace(/:$/,""):"",host:X.host,
|
||||
search:X.search?X.search.replace(/^\?/,""):"",hash:X.hash?X.hash.replace(/^#/,""):"",hostname:X.hostname,port:X.port,pathname:"/"===X.pathname.charAt(0)?X.pathname:"/"+X.pathname}}function gd(b){b=L(b)?Ba(b):b;return b.protocol===wd.protocol&&b.host===wd.host}function tf(){this.$get=ra(O)}function xd(b){function a(a){try{return decodeURIComponent(a)}catch(b){return a}}var c=b[0]||{},d={},e="";return function(){var b,g,h,l,k;b=c.cookie||"";if(b!==e)for(e=b,b=e.split("; "),d={},h=0;h<b.length;h++)g=
|
||||
b[h],l=g.indexOf("="),0<l&&(k=a(g.substring(0,l)),d[k]===t&&(d[k]=a(g.substring(l+1))));return d}}function xf(){this.$get=xd}function Lc(b){function a(c,d){if(H(c)){var e={};m(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",yd);a("date",zd);a("filter",$f);a("json",ag);a("limitTo",bg);a("lowercase",cg);a("number",Ad);a("orderBy",Bd);a("uppercase",dg)}function $f(){return function(b,
|
||||
a,c){if(!Ea(b)){if(null==b)return b;throw J("filter")("notarray",b);}var d;switch(ic(a)){case "function":break;case "boolean":case "null":case "number":case "string":d=!0;case "object":a=eg(a,c,d);break;default:return b}return Array.prototype.filter.call(b,a)}}function eg(b,a,c){var d=H(b)&&"$"in b;!0===a?a=ka:z(a)||(a=function(a,b){if(A(a))return!1;if(null===a||null===b)return a===b;if(H(b)||H(a)&&!rc(a))return!1;a=M(""+a);b=M(""+b);return-1!==a.indexOf(b)});return function(e){return d&&!H(e)?La(e,
|
||||
b.$,a,!1):La(e,b,a,c)}}function La(b,a,c,d,e){var f=ic(b),g=ic(a);if("string"===g&&"!"===a.charAt(0))return!La(b,a.substring(1),c,d);if(G(b))return b.some(function(b){return La(b,a,c,d)});switch(f){case "object":var h;if(d){for(h in b)if("$"!==h.charAt(0)&&La(b[h],a,c,!0))return!0;return e?!1:La(b,a,c,!1)}if("object"===g){for(h in a)if(e=a[h],!z(e)&&!A(e)&&(f="$"===h,!La(f?b:b[h],e,c,f,f)))return!1;return!0}return c(b,a);case "function":return!1;default:return c(b,a)}}function ic(b){return null===
|
||||
b?"null":typeof b}function yd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){A(d)&&(d=a.CURRENCY_SYM);A(e)&&(e=a.PATTERNS[1].maxFrac);return null==b?b:Cd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function Ad(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:Cd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function Cd(b,a,c,d,e){if(H(b))return"";var f=0>b;b=Math.abs(b);var g=Infinity===b;if(!g&&!isFinite(b))return"";var h=b+"",l="",k=!1,n=[];g&&(l="\u221e");
|
||||
if(!g&&-1!==h.indexOf("e")){var r=h.match(/([\d\.]+)e(-?)(\d+)/);r&&"-"==r[2]&&r[3]>e+1?b=0:(l=h,k=!0)}if(g||k)0<e&&1>b&&(l=b.toFixed(e),b=parseFloat(l));else{g=(h.split(Dd)[1]||"").length;A(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(Dd),h=g[0],g=g[1]||"",r=0,s=a.lgSize,m=a.gSize;if(h.length>=s+m)for(r=h.length-s,k=0;k<r;k++)0===(r-k)%m&&0!==k&&(l+=c),l+=h.charAt(k);for(k=r;k<h.length;k++)0===(h.length-k)%s&&0!==k&&
|
||||
(l+=c),l+=h.charAt(k);for(;g.length<e;)g+="0";e&&"0"!==e&&(l+=d+g.substr(0,e))}0===b&&(f=!1);n.push(f?a.negPre:a.posPre,l,f?a.negSuf:a.posSuf);return n.join("")}function Gb(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function Y(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Gb(e,a,d)}}function Hb(b,a){return function(c,d){var e=c["get"+b](),f=rb(a?"SHORT"+b:b);return d[f][e]}}function Ed(b){var a=
|
||||
(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function Fd(b){return function(a){var c=Ed(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Gb(a,b)}}function jc(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function zd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=W(b[9]+b[10]),g=W(b[9]+b[11]));h.call(a,W(b[1]),
|
||||
W(b[2])-1,W(b[3]));f=W(b[4]||0)-f;g=W(b[5]||0)-g;h=W(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;L(c)&&(c=fg.test(c)?W(c):a(c));V(c)&&(c=new Date(c));if(!aa(c)||!isFinite(c.getTime()))return c;for(;e;)(k=gg.exec(e))?(h=cb(h,k,1),e=h.pop()):(h.push(e),e=null);var n=c.getTimezoneOffset();
|
||||
f&&(n=xc(f,c.getTimezoneOffset()),c=Pb(c,f,!0));m(h,function(a){l=hg[a];g+=l?l(c,b.DATETIME_FORMATS,n):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function ag(){return function(b,a){A(a)&&(a=2);return db(b,a)}}function bg(){return function(b,a,c){a=Infinity===Math.abs(Number(a))?Number(a):W(a);if(isNaN(a))return b;V(b)&&(b=b.toString());if(!G(b)&&!L(b))return b;c=!c||isNaN(c)?0:W(c);c=0>c&&c>=-b.length?b.length+c:c;return 0<=a?b.slice(c,c+a):0===c?b.slice(a,b.length):b.slice(Math.max(0,
|
||||
c+a),c)}}function Bd(b){function a(a,c){c=c?-1:1;return a.map(function(a){var d=1,h=Ya;if(z(a))h=a;else if(L(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))d="-"==a.charAt(0)?-1:1,a=a.substring(1);if(""!==a&&(h=b(a),h.constant))var l=h(),h=function(a){return a[l]}}return{get:h,descending:d*c}})}function c(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}return function(b,e,f){if(!Ea(b))return b;G(e)||(e=[e]);0===e.length&&(e=["+"]);var g=a(e,f);b=Array.prototype.map.call(b,
|
||||
function(a,b){return{value:a,predicateValues:g.map(function(d){var e=d.get(a);d=typeof e;if(null===e)d="string",e="null";else if("string"===d)e=e.toLowerCase();else if("object"===d)a:{if("function"===typeof e.valueOf&&(e=e.valueOf(),c(e)))break a;if(rc(e)&&(e=e.toString(),c(e)))break a;e=b}return{value:e,type:d}})}});b.sort(function(a,b){for(var c=0,d=0,e=g.length;d<e;++d){var c=a.predicateValues[d],f=b.predicateValues[d],m=0;c.type===f.type?c.value!==f.value&&(m=c.value<f.value?-1:1):m=c.type<f.type?
|
||||
-1:1;if(c=m*g[d].descending)break}return c});return b=b.map(function(a){return a.value})}}function Ma(b){z(b)&&(b={link:b});b.restrict=b.restrict||"AC";return ra(b)}function Gd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||Ib;f.$error={};f.$$success={};f.$pending=t;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){m(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=
|
||||
function(){m(g,function(a){a.$commitViewValue()})};f.$addControl=function(a){Ra(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];m(f.$pending,function(b,c){f.$setValidity(c,null,a)});m(f.$error,function(b,c){f.$setValidity(c,null,a)});m(f.$$success,function(b,c){f.$setValidity(c,null,a)});bb(g,a)};Hd({ctrl:this,$element:b,set:function(a,b,
|
||||
c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(bb(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Va);d.addClass(b,Jb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Va,Jb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;m(g,function(a){a.$setPristine()})};f.$setUntouched=function(){m(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,
|
||||
"ng-submitted");f.$submitted=!0;h.$setSubmitted()}}function kc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function kb(b,a,c,d,e,f){var g=M(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;l()})}var l=function(b){k&&(f.defer.cancel(k),k=null);if(!h){var e=a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=R(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,b)}};
|
||||
if(e.hasEvent("input"))a.on("input",l);else{var k,n=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Kb(b,a){return function(c,d){var e,f;if(aa(c))return c;if(L(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));
|
||||
if(ig.test(c))return new Date(c);b.lastIndex=0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},m(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function lb(b,a,c,d){return function(e,f,g,h,l,k,n){function r(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function s(a){return w(a)?
|
||||
aa(a)?a:c(a):t}Id(e,f,g,h);kb(e,f,g,h,l,k);var m=h&&h.$options&&h.$options.timezone,q;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,q),m&&(b=Pb(b,m)),b):t});h.$formatters.push(function(a){if(a&&!aa(a))throw Lb("datefmt",a);if(r(a))return(q=a)&&m&&(q=Pb(q,m,!0)),n("date")(a,d,m);q=null;return""});if(w(g.min)||g.ngMin){var F;h.$validators.min=function(a){return!r(a)||A(F)||c(a)>=F};g.$observe("min",function(a){F=s(a);h.$validate()})}if(w(g.max)||g.ngMax){var u;
|
||||
h.$validators.max=function(a){return!r(a)||A(u)||c(a)<=u};g.$observe("max",function(a){u=s(a);h.$validate()})}}}function Id(b,a,c,d){(d.$$hasNativeValidators=H(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function Jd(b,a,c,d,e){if(w(d)){b=b(d);if(!b.constant)throw J("ngModel")("constexpr",c,d);return b(a)}return e}function lc(b,a){b="ngClass"+b;return["$animate",function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=
|
||||
a[d],n=0;n<b.length;n++)if(e==b[n])continue a;c.push(e)}return c}function e(a){var b=[];return G(a)?(m(a,function(a){b=b.concat(e(a))}),b):L(a)?a.split(" "):H(a)?(m(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",link:function(f,g,h){function l(a,b){var c=g.data("$classCounts")||ga(),d=[];m(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function k(b){if(!0===a||f.$index%2===a){var k=e(b||[]);if(!n){var m=
|
||||
l(k,1);h.$addClass(m)}else if(!ka(b,n)){var q=e(n),m=d(k,q),k=d(q,k),m=l(m,1),k=l(k,-1);m&&m.length&&c.addClass(g,m);k&&k.length&&c.removeClass(g,k)}}n=ia(b)}var n;f.$watch(h[b],k,!0);h.$observe("class",function(a){k(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var k=e(f.$eval(h[b]));g===a?(g=l(k,1),h.$addClass(g)):(g=l(k,-1),h.$removeClass(g))}})}}}]}function Hd(b){function a(a,b){b&&!f[a]?(k.addClass(e,a),f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}
|
||||
function c(b,c){b=b?"-"+Bc(b,"-"):"";a(mb+b,!0===c);a(Kd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,l=b.parentForm,k=b.$animate;f[Kd]=!(f[mb]=e.hasClass(mb));d.$setValidity=function(b,e,f){e===t?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&h(d.$pending,b,f),Ld(d.$pending)&&(d.$pending=t));ab(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(Md,!0),d.$valid=d.$invalid=t,c("",null)):(a(Md,
|
||||
!1),d.$valid=Ld(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?t:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);l.$setValidity(b,e,d)}}function Ld(b){if(b)for(var a in b)if(b.hasOwnProperty(a))return!1;return!0}var jg=/^\/(.+)\/([a-z]*)$/,M=function(b){return L(b)?b.toLowerCase():b},Xa=Object.prototype.hasOwnProperty,rb=function(b){return L(b)?b.toUpperCase():b},Ua,y,la,za=[].slice,Mf=[].splice,kg=[].push,sa=Object.prototype.toString,sc=Object.getPrototypeOf,Fa=J("ng"),ca=
|
||||
O.angular||(O.angular={}),gb,nb=0;Ua=U.documentMode;v.$inject=[];Ya.$inject=[];var G=Array.isArray,uc=/^\[object (Uint8(Clamped)?)|(Uint16)|(Uint32)|(Int8)|(Int16)|(Int32)|(Float(32)|(64))Array\]$/,R=function(b){return L(b)?b.trim():b},ud=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},fb=function(){if(w(fb.isActive_))return fb.isActive_;var b=!(!U.querySelector("[ng-csp]")&&!U.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return fb.isActive_=
|
||||
b},pb=function(){if(w(pb.name_))return pb.name_;var b,a,c=Oa.length,d,e;for(a=0;a<c;++a)if(d=Oa[a],b=U.querySelector("["+d.replace(":","\\:")+"jq]")){e=b.getAttribute(d+"jq");break}return pb.name_=e},Oa=["ng-","data-ng-","ng:","x-ng-"],be=/[A-Z]/g,Cc=!1,Rb,qa=1,Na=3,fe={full:"1.4.3",major:1,minor:4,dot:3,codeName:"foam-acceleration"};Q.expando="ng339";var ib=Q.cache={},Df=1;Q._data=function(b){return this.cache[b[this.expando]]||{}};var yf=/([\:\-\_]+(.))/g,zf=/^moz([A-Z])/,lg={mouseleave:"mouseout",
|
||||
mouseenter:"mouseover"},Ub=J("jqLite"),Cf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Tb=/<|&#?\w+;/,Af=/<([\w:]+)/,Bf=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,na={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};na.optgroup=na.option;na.tbody=na.tfoot=na.colgroup=na.caption=na.thead;
|
||||
na.th=na.td;var Pa=Q.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===U.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),Q(O).on("load",a))},toString:function(){var b=[];m(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=b?y(this[b]):y(this[this.length+b])},length:0,push:kg,sort:[].sort,splice:[].splice},Ab={};m("multiple selected checked disabled readOnly required open".split(" "),function(b){Ab[M(b)]=b});var Tc={};m("input select option textarea button form details".split(" "),
|
||||
function(b){Tc[b]=!0});var Uc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};m({data:Wb,removeData:ub,hasData:function(b){for(var a in ib[b.ng339])return!0;return!1}},function(b,a){Q[a]=b});m({data:Wb,inheritedData:zb,scope:function(b){return y.data(b,"$scope")||zb(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return y.data(b,"$isolateScope")||y.data(b,"$isolateScopeNoTemplate")},controller:Qc,injector:function(b){return zb(b,
|
||||
"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:wb,css:function(b,a,c){a=hb(a);if(w(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=b.nodeType;if(d!==Na&&2!==d&&8!==d)if(d=M(a),Ab[d])if(w(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||v).specified?d:t;else if(w(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(w(c))b[a]=c;else return b[a]},
|
||||
text:function(){function b(a,b){if(A(b)){var d=a.nodeType;return d===qa||d===Na?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(A(a)){if(b.multiple&&"select"===ta(b)){var c=[];m(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(A(a))return b.innerHTML;tb(b,!0);b.innerHTML=a},empty:Rc},function(b,a){Q.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Rc&&(2==b.length&&b!==wb&&b!==Qc?
|
||||
a:d)===t){if(H(a)){for(e=0;e<g;e++)if(b===Wb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===t?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});m({removeData:ub,on:function a(c,d,e,f){if(w(f))throw Ub("onargs");if(Mc(c)){var g=vb(c,!0);f=g.events;var h=g.handle;h||(h=g.handle=Gf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],l=g.length;l--;){d=g[l];var k=f[d];k||(f[d]=[],"mouseenter"===d||"mouseleave"===
|
||||
d?a(c,lg[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),k=f[d]);k.push(e)}}},off:Pc,one:function(a,c,d){a=y(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;tb(a);m(new Q(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,a);d=c})},children:function(a){var c=[];m(a.childNodes,function(a){a.nodeType===qa&&c.push(a)});return c},contents:function(a){return a.contentDocument||
|
||||
a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===qa||11===d){c=new Q(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===qa){var d=a.firstChild;m(new Q(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=y(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},remove:Xb,detach:function(a){Xb(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new Q(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,
|
||||
d.nextSibling);d=h}},addClass:yb,removeClass:xb,toggleClass:function(a,c,d){c&&m(c.split(" "),function(c){var f=d;A(f)&&(f=!wb(a,c));(f?yb:xb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Vb,triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=vb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===
|
||||
this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:v,type:g,target:a},c.type&&(e=P(e,c)),c=ia(h),f=d?[e].concat(d):[e],m(c,function(c){e.isImmediatePropagationStopped()||c.apply(a,f)})}},function(a,c){Q.prototype[c]=function(c,e,f){for(var g,h=0,l=this.length;h<l;h++)A(g)?(g=a(this[h],c,e,f),w(g)&&(g=y(g))):Oc(g,a(this[h],c,e,f));return w(g)?g:this};Q.prototype.bind=
|
||||
Q.prototype.on;Q.prototype.unbind=Q.prototype.off});Sa.prototype={put:function(a,c){this[Ga(a,this.nextUid)]=c},get:function(a){return this[Ga(a,this.nextUid)]},remove:function(a){var c=this[a=Ga(a,this.nextUid)];delete this[a];return c}};var wf=[function(){this.$get=[function(){return Sa}]}],Wc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,mg=/,/,ng=/^\s*(_?)(\S+?)\1\s*$/,Vc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ha=J("$injector");eb.$$annotate=function(a,c,d){var e;if("function"===typeof a){if(!(e=a.$inject)){e=
|
||||
[];if(a.length){if(c)throw L(d)&&d||(d=a.name||Hf(a)),Ha("strictdi",d);c=a.toString().replace(Vc,"");c=c.match(Wc);m(c[1].split(mg),function(a){a.replace(ng,function(a,c,d){e.push(d)})})}a.$inject=e}}else G(a)?(c=a.length-1,Qa(a[c],"fn"),e=a.slice(0,c)):Qa(a,"fn",!0);return e};var Nd=J("$animate"),Ue=function(){this.$get=["$q","$$rAF",function(a,c){function d(){}d.all=v;d.chain=v;d.prototype={end:v,cancel:v,resume:v,pause:v,complete:v,then:function(d,f){return a(function(a){c(function(){a()})}).then(d,
|
||||
f)}};return d}]},Te=function(){var a=new Sa,c=[];this.$get=["$$AnimateRunner","$rootScope",function(d,e){function f(d,f,l){var k=a.get(d);k||(a.put(d,k={}),c.push(d));f&&m(f.split(" "),function(a){a&&(k[a]=!0)});l&&m(l.split(" "),function(a){a&&(k[a]=!1)});1<c.length||e.$$postDigest(function(){m(c,function(c){var d=a.get(c);if(d){var e=If(c.attr("class")),f="",g="";m(d,function(a,c){a!==!!e[c]&&(a?f+=(f.length?" ":"")+c:g+=(g.length?" ":"")+c)});m(c,function(a){f&&yb(a,f);g&&xb(a,g)});a.remove(c)}});
|
||||
c.length=0})}return{enabled:v,on:v,off:v,pin:v,push:function(a,c,e,k){k&&k();e=e||{};e.from&&a.css(e.from);e.to&&a.css(e.to);(e.addClass||e.removeClass)&&f(a,e.addClass,e.removeClass);return new d}}}]},Se=["$provide",function(a){var c=this;this.$$registeredAnimations=Object.create(null);this.register=function(d,e){if(d&&"."!==d.charAt(0))throw Nd("notcsel",d);var f=d+"-animation";c.$$registeredAnimations[d.substr(1)]=f;a.factory(f,e)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=
|
||||
a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw Nd("nongcls","ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function c(a,d,e){if(e){var l;a:{for(l=0;l<e.length;l++){var k=e[l];if(1===k.nodeType){l=k;break a}}l=void 0}!l||l.parentNode||l.previousElementSibling||(e=null)}e?e.after(a):d.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(f,g,h,l){g=
|
||||
g&&y(g);h=h&&y(h);g=g||h.parent();c(f,g,h);return a.push(f,"enter",Ia(l))},move:function(f,g,h,l){g=g&&y(g);h=h&&y(h);g=g||h.parent();c(f,g,h);return a.push(f,"move",Ia(l))},leave:function(c,e){return a.push(c,"leave",Ia(e),function(){c.remove()})},addClass:function(c,e,h){h=Ia(h);h.addClass=jb(h.addclass,e);return a.push(c,"addClass",h)},removeClass:function(c,e,h){h=Ia(h);h.removeClass=jb(h.removeClass,e);return a.push(c,"removeClass",h)},setClass:function(c,e,h,l){l=Ia(l);l.addClass=jb(l.addClass,
|
||||
e);l.removeClass=jb(l.removeClass,h);return a.push(c,"setClass",l)},animate:function(c,e,h,l,k){k=Ia(k);k.from=k.from?P(k.from,e):e;k.to=k.to?P(k.to,h):h;k.tempClasses=jb(k.tempClasses,l||"ng-inline-animate");return a.push(c,"animate",k)}}}]}],ea=J("$compile");Ec.$inject=["$provide","$$sanitizeUriProvider"];var Zc=/^((?:x|data)[\:\-_])/i,Nf=J("$controller"),Xc=/^(\S+)(\s+as\s+(\w+))?$/,cd="application/json",ac={"Content-Type":cd+";charset=utf-8"},Pf=/^\[|^\{(?!\{)/,Qf={"[":/]$/,"{":/}$/},Of=/^\)\]\}',?\n/,
|
||||
Ka=ca.$interpolateMinErr=J("$interpolate");Ka.throwNoconcat=function(a){throw Ka("noconcat",a);};Ka.interr=function(a,c){return Ka("interr",a,c.toString())};var og=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,Tf={http:80,https:443,ftp:21},Cb=J("$location"),pg={$$html5:!1,$$replace:!1,absUrl:Db("$$absUrl"),url:function(a){if(A(a))return this.$$url;var c=og.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Db("$$protocol"),
|
||||
host:Db("$$host"),port:Db("$$port"),path:kd("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(L(a)||V(a))a=a.toString(),this.$$search=zc(a);else if(H(a))a=fa(a,{}),m(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw Cb("isrcharg");break;default:A(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:kd("$$hash",function(a){return null!==
|
||||
a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};m([jd,ec,dc],function(a){a.prototype=Object.create(pg);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==dc||!this.$$html5)throw Cb("nostate");this.$$state=A(c)?null:c;return this}});var da=J("$parse"),Uf=Function.prototype.call,Vf=Function.prototype.apply,Wf=Function.prototype.bind,Mb=ga();m("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Mb[a]=!0});var qg={n:"\n",f:"\f",r:"\r",
|
||||
t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;
|
||||
else{var c=a+this.peek(),d=c+this.peek(2),e=Mb[c],f=Mb[d];Mb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||
|
||||
"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=w(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw da("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=M(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();
|
||||
if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,
|
||||
text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=qg[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,
|
||||
value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var q=function(a,c){this.lexer=a;this.options=c};q.Program="Program";q.ExpressionStatement="ExpressionStatement";q.AssignmentExpression="AssignmentExpression";q.ConditionalExpression="ConditionalExpression";q.LogicalExpression="LogicalExpression";q.BinaryExpression="BinaryExpression";q.UnaryExpression="UnaryExpression";q.CallExpression="CallExpression";q.MemberExpression="MemberExpression";q.Identifier="Identifier";q.Literal=
|
||||
"Literal";q.ArrayExpression="ArrayExpression";q.Property="Property";q.ObjectExpression="ObjectExpression";q.ThisExpression="ThisExpression";q.NGValueParameter="NGValueParameter";q.prototype={ast:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:q.Program,
|
||||
body:a}},expressionStatement:function(){return{type:q.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();this.expect("=")&&(a={type:q.AssignmentExpression,left:a,right:this.assignment(),operator:"="});return a},ternary:function(){var a=this.logicalOR(),c,d;return this.expect("?")&&(c=this.expression(),this.consume(":"))?
|
||||
(d=this.expression(),{type:q.ConditionalExpression,test:a,alternate:c,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:q.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:q.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=","===","!==");)a={type:q.BinaryExpression,
|
||||
operator:c.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a={type:q.BinaryExpression,operator:c.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a={type:q.BinaryExpression,operator:c.text,
|
||||
left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:q.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=fa(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():
|
||||
this.throwError("not a primary expression",this.peek());for(var c;c=this.expect("(","[",".");)"("===c.text?(a={type:q.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===c.text?(a={type:q.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===c.text?a={type:q.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var c={type:q.CallExpression,callee:this.identifier(),
|
||||
arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.expression());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:q.Identifier,name:a.text}},constant:function(){return{type:q.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;
|
||||
a.push(this.expression())}while(this.expect(","))}this.consume("]");return{type:q.ArrayExpression,elements:a}},object:function(){var a=[],c;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;c={type:q.Property,kind:"init"};this.peek().constant?c.key=this.constant():this.peek().identifier?c.key=this.identifier():this.throwError("invalid key",this.peek());this.consume(":");c.value=this.expression();a.push(c)}while(this.expect(","))}this.consume("}");return{type:q.ObjectExpression,properties:a}},
|
||||
throwError:function(a,c){throw da("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},consume:function(a){if(0===this.tokens.length)throw da("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},peekToken:function(){if(0===this.tokens.length)throw da("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];
|
||||
var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},constants:{"true":{type:q.Literal,value:!0},"false":{type:q.Literal,value:!1},"null":{type:q.Literal,value:null},undefined:{type:q.Literal,value:t},"this":{type:q.ThisExpression}}};rd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:c,fn:{vars:[],body:[],own:{}},assign:{vars:[],
|
||||
body:[],own:{}},inputs:[]};T(e,d.$filter);var f="",g;this.stage="assign";if(g=pd(e))this.state.computing="assign",f=this.nextId(),this.recurse(g,f),f="fn.assign="+this.generateFunction("assign","s,v,l");g=nd(e.body);d.stage="inputs";m(g,function(a,c){var e="fn"+c;d.state[e]={vars:[],body:[],own:{}};d.state.computing=e;var f=d.nextId();d.recurse(a,f);d.return_(f);d.state.inputs.push(e);a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(e);f='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+
|
||||
"var fn="+this.generateFunction("fn","s,l,a,i")+f+this.watchFns()+"return fn;";f=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","ifDefined","plus","text",f))(this.$filter,Ca,oa,ld,Xf,md,a);this.state=this.stage=t;f.literal=qd(e);f.constant=e.constant;return f},USE:"use",STRICT:"strict",watchFns:function(){var a=[],c=this.state.inputs,d=this;m(c,function(c){a.push("var "+c+"="+d.generateFunction(c,"s"))});c.length&&a.push("fn.inputs=["+c.join(",")+"];");return a.join("")},
|
||||
generateFunction:function(a,c){return"function("+c+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],c=this;m(this.state.filters,function(d,e){a.push(d+"=$filter("+c.escape(e)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,c,d,e,f,g){var h,l,k=this,n,r;e=e||v;if(!g&&w(a.watchId))c=c||this.nextId(),this.if_("i",
|
||||
this.lazyAssign(c,this.computedMember("i",a.watchId)),this.lazyRecurse(a,c,d,e,f,!0));else switch(a.type){case q.Program:m(a.body,function(c,d){k.recurse(c.expression,t,t,function(a){l=a});d!==a.body.length-1?k.current().body.push(l,";"):k.return_(l)});break;case q.Literal:r=this.escape(a.value);this.assign(c,r);e(r);break;case q.UnaryExpression:this.recurse(a.argument,t,t,function(a){l=a});r=a.operator+"("+this.ifDefined(l,0)+")";this.assign(c,r);e(r);break;case q.BinaryExpression:this.recurse(a.left,
|
||||
t,t,function(a){h=a});this.recurse(a.right,t,t,function(a){l=a});r="+"===a.operator?this.plus(h,l):"-"===a.operator?this.ifDefined(h,0)+a.operator+this.ifDefined(l,0):"("+h+")"+a.operator+"("+l+")";this.assign(c,r);e(r);break;case q.LogicalExpression:c=c||this.nextId();k.recurse(a.left,c);k.if_("&&"===a.operator?c:k.not(c),k.lazyRecurse(a.right,c));e(c);break;case q.ConditionalExpression:c=c||this.nextId();k.recurse(a.test,c);k.if_(c,k.lazyRecurse(a.alternate,c),k.lazyRecurse(a.consequent,c));e(c);
|
||||
break;case q.Identifier:c=c||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ca(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||"s",function(){f&&1!==f&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(c,k.nonComputedMember("s",a.name))})},c&&k.lazyAssign(c,k.nonComputedMember("l",
|
||||
a.name)));(k.state.expensiveChecks||Fb(a.name))&&k.addEnsureSafeObject(c);e(c);break;case q.MemberExpression:h=d&&(d.context=this.nextId())||this.nextId();c=c||this.nextId();k.recurse(a.object,h,t,function(){k.if_(k.notNull(h),function(){if(a.computed)l=k.nextId(),k.recurse(a.property,l),k.addEnsureSafeMemberName(l),f&&1!==f&&k.if_(k.not(k.computedMember(h,l)),k.lazyAssign(k.computedMember(h,l),"{}")),r=k.ensureSafeObject(k.computedMember(h,l)),k.assign(c,r),d&&(d.computed=!0,d.name=l);else{Ca(a.property.name);
|
||||
f&&1!==f&&k.if_(k.not(k.nonComputedMember(h,a.property.name)),k.lazyAssign(k.nonComputedMember(h,a.property.name),"{}"));r=k.nonComputedMember(h,a.property.name);if(k.state.expensiveChecks||Fb(a.property.name))r=k.ensureSafeObject(r);k.assign(c,r);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(c,"undefined")});e(c)},!!f);break;case q.CallExpression:c=c||this.nextId();a.filter?(l=k.filter(a.callee.name),n=[],m(a.arguments,function(a){var c=k.nextId();k.recurse(a,c);n.push(c)}),r=l+
|
||||
"("+n.join(",")+")",k.assign(c,r),e(c)):(l=k.nextId(),h={},n=[],k.recurse(a.callee,l,h,function(){k.if_(k.notNull(l),function(){k.addEnsureSafeFunction(l);m(a.arguments,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(k.ensureSafeObject(a))})});h.name?(k.state.expensiveChecks||k.addEnsureSafeObject(h.context),r=k.member(h.context,h.name,h.computed)+"("+n.join(",")+")"):r=l+"("+n.join(",")+")";r=k.ensureSafeObject(r);k.assign(c,r)},function(){k.assign(c,"undefined")});e(c)}));break;case q.AssignmentExpression:l=
|
||||
this.nextId();h={};if(!od(a.left))throw da("lval");this.recurse(a.left,t,h,function(){k.if_(k.notNull(h.context),function(){k.recurse(a.right,l);k.addEnsureSafeObject(k.member(h.context,h.name,h.computed));r=k.member(h.context,h.name,h.computed)+a.operator+l;k.assign(c,r);e(c||r)})},1);break;case q.ArrayExpression:n=[];m(a.elements,function(a){k.recurse(a,k.nextId(),t,function(a){n.push(a)})});r="["+n.join(",")+"]";this.assign(c,r);e(r);break;case q.ObjectExpression:n=[];m(a.properties,function(a){k.recurse(a.value,
|
||||
k.nextId(),t,function(c){n.push(k.escape(a.key.type===q.Identifier?a.key.name:""+a.key.value)+":"+c)})});r="{"+n.join(",")+"}";this.assign(c,r);e(r);break;case q.ThisExpression:this.assign(c,"s");e("s");break;case q.NGValueParameter:this.assign(c,"v"),e("v")}},getHasOwnProperty:function(a,c){var d=a+"."+c,e=this.current().own;e.hasOwnProperty(d)||(e[d]=this.nextId(!1,a+"&&("+this.escape(c)+" in "+a+")"));return e[d]},assign:function(a,c){if(a)return this.current().body.push(a,"=",c,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||
|
||||
(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,c){return"ifDefined("+a+","+this.escape(c)+")"},plus:function(a,c){return"plus("+a+","+c+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,c,d){if(!0===a)c();else{var e=this.current().body;e.push("if(",a,"){");c();e.push("}");d&&(e.push("else{"),d(),e.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,c){return a+
|
||||
"."+c},computedMember:function(a,c){return a+"["+c+"]"},member:function(a,c,d){return d?this.computedMember(a,c):this.nonComputedMember(a,c)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+
|
||||
a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},lazyRecurse:function(a,c,d,e,f,g){var h=this;return function(){h.recurse(a,c,d,e,f,g)}},lazyAssign:function(a,c){var d=this;return function(){d.assign(a,c)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(L(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(V(a))return a.toString();if(!0===a)return"true";
|
||||
if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw da("esc");},nextId:function(a,c){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(c?"="+c:""));return d},current:function(){return this.state[this.state.computing]}};sd.prototype={compile:function(a,c){var d=this,e=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=c;T(e,d.$filter);var f,g;if(f=pd(e))g=this.recurse(f);f=nd(e.body);var h;f&&(h=[],m(f,function(a,c){var e=d.recurse(a);
|
||||
a.input=e;h.push(e);a.watchId=c}));var l=[];m(e.body,function(a){l.push(d.recurse(a.expression))});f=0===e.body.length?function(){}:1===e.body.length?l[0]:function(a,c){var d;m(l,function(e){d=e(a,c)});return d};g&&(f.assign=function(a,c,d){return g(a,d,c)});h&&(f.inputs=h);f.literal=qd(e);f.constant=e.constant;return f},recurse:function(a,c,d){var e,f,g=this,h;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case q.Literal:return this.value(a.value,c);case q.UnaryExpression:return f=
|
||||
this.recurse(a.argument),this["unary"+a.operator](f,c);case q.BinaryExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.LogicalExpression:return e=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](e,f,c);case q.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),c);case q.Identifier:return Ca(a.name,g.expression),g.identifier(a.name,g.expensiveChecks||Fb(a.name),
|
||||
c,d,g.expression);case q.MemberExpression:return e=this.recurse(a.object,!1,!!d),a.computed||(Ca(a.property.name,g.expression),f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(e,f,c,d,g.expression):this.nonComputedMember(e,f,g.expensiveChecks,c,d,g.expression);case q.CallExpression:return h=[],m(a.arguments,function(a){h.push(g.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?function(a,d,e,g){for(var m=
|
||||
[],q=0;q<h.length;++q)m.push(h[q](a,d,e,g));a=f.apply(t,m,g);return c?{context:t,name:t,value:a}:a}:function(a,d,e,r){var m=f(a,d,e,r),q;if(null!=m.value){oa(m.context,g.expression);ld(m.value,g.expression);q=[];for(var t=0;t<h.length;++t)q.push(oa(h[t](a,d,e,r),g.expression));q=oa(m.value.apply(m.context,q),g.expression)}return c?{value:q}:q};case q.AssignmentExpression:return e=this.recurse(a.left,!0,1),f=this.recurse(a.right),function(a,d,h,r){var m=e(a,d,h,r);a=f(a,d,h,r);oa(m.value,g.expression);
|
||||
m.context[m.name]=a;return c?{value:a}:a};case q.ArrayExpression:return h=[],m(a.elements,function(a){h.push(g.recurse(a))}),function(a,d,e,f){for(var g=[],m=0;m<h.length;++m)g.push(h[m](a,d,e,f));return c?{value:g}:g};case q.ObjectExpression:return h=[],m(a.properties,function(a){h.push({key:a.key.type===q.Identifier?a.key.name:""+a.key.value,value:g.recurse(a.value)})}),function(a,d,e,f){for(var g={},m=0;m<h.length;++m)g[h[m].key]=h[m].value(a,d,e,f);return c?{value:g}:g};case q.ThisExpression:return function(a){return c?
|
||||
{value:a}:a};case q.NGValueParameter:return function(a,d,e,f){return c?{value:e}:e}}},"unary+":function(a,c){return function(d,e,f,g){d=a(d,e,f,g);d=w(d)?+d:0;return c?{value:d}:d}},"unary-":function(a,c){return function(d,e,f,g){d=a(d,e,f,g);d=w(d)?-d:0;return c?{value:d}:d}},"unary!":function(a,c){return function(d,e,f,g){d=!a(d,e,f,g);return c?{value:d}:d}},"binary+":function(a,c,d){return function(e,f,g,h){var l=a(e,f,g,h);e=c(e,f,g,h);l=md(l,e);return d?{value:l}:l}},"binary-":function(a,c,d){return function(e,
|
||||
f,g,h){var l=a(e,f,g,h);e=c(e,f,g,h);l=(w(l)?l:0)-(w(e)?e:0);return d?{value:l}:l}},"binary*":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)*c(e,f,g,h);return d?{value:e}:e}},"binary/":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)/c(e,f,g,h);return d?{value:e}:e}},"binary%":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)%c(e,f,g,h);return d?{value:e}:e}},"binary===":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)===c(e,f,g,h);return d?{value:e}:e}},"binary!==":function(a,
|
||||
c,d){return function(e,f,g,h){e=a(e,f,g,h)!==c(e,f,g,h);return d?{value:e}:e}},"binary==":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)==c(e,f,g,h);return d?{value:e}:e}},"binary!=":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)!=c(e,f,g,h);return d?{value:e}:e}},"binary<":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)<c(e,f,g,h);return d?{value:e}:e}},"binary>":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>c(e,f,g,h);return d?{value:e}:e}},"binary<=":function(a,c,d){return function(e,
|
||||
f,g,h){e=a(e,f,g,h)<=c(e,f,g,h);return d?{value:e}:e}},"binary>=":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)>=c(e,f,g,h);return d?{value:e}:e}},"binary&&":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)&&c(e,f,g,h);return d?{value:e}:e}},"binary||":function(a,c,d){return function(e,f,g,h){e=a(e,f,g,h)||c(e,f,g,h);return d?{value:e}:e}},"ternary?:":function(a,c,d,e){return function(f,g,h,l){f=a(f,g,h,l)?c(f,g,h,l):d(f,g,h,l);return e?{value:f}:f}},value:function(a,c){return function(){return c?
|
||||
{context:t,name:t,value:a}:a}},identifier:function(a,c,d,e,f){return function(g,h,l,k){g=h&&a in h?h:g;e&&1!==e&&g&&!g[a]&&(g[a]={});h=g?g[a]:t;c&&oa(h,f);return d?{context:g,name:a,value:h}:h}},computedMember:function(a,c,d,e,f){return function(g,h,l,k){var n=a(g,h,l,k),m,s;null!=n&&(m=c(g,h,l,k),Ca(m,f),e&&1!==e&&n&&!n[m]&&(n[m]={}),s=n[m],oa(s,f));return d?{context:n,name:m,value:s}:s}},nonComputedMember:function(a,c,d,e,f,g){return function(h,l,k,n){h=a(h,l,k,n);f&&1!==f&&h&&!h[c]&&(h[c]={});
|
||||
l=null!=h?h[c]:t;(d||Fb(c))&&oa(l,g);return e?{context:h,name:c,value:l}:l}},inputs:function(a,c){return function(d,e,f,g){return g?g[c]:a(d,e,f)}}};var hc=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d;this.ast=new q(this.lexer);this.astCompiler=d.csp?new sd(this.ast,c):new rd(this.ast,c)};hc.prototype={constructor:hc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};ga();ga();var Yf=Object.prototype.valueOf,Da=J("$sce"),pa={HTML:"html",CSS:"css",URL:"url",
|
||||
RESOURCE_URL:"resourceUrl",JS:"js"},ea=J("$compile"),X=U.createElement("a"),wd=Ba(O.location.href);xd.$inject=["$document"];Lc.$inject=["$provide"];yd.$inject=["$locale"];Ad.$inject=["$locale"];var Dd=".",hg={yyyy:Y("FullYear",4),yy:Y("FullYear",2,0,!0),y:Y("FullYear",1),MMMM:Hb("Month"),MMM:Hb("Month",!0),MM:Y("Month",2,1),M:Y("Month",1,1),dd:Y("Date",2),d:Y("Date",1),HH:Y("Hours",2),H:Y("Hours",1),hh:Y("Hours",2,-12),h:Y("Hours",1,-12),mm:Y("Minutes",2),m:Y("Minutes",1),ss:Y("Seconds",2),s:Y("Seconds",
|
||||
1),sss:Y("Milliseconds",3),EEEE:Hb("Day"),EEE:Hb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a,c,d){a=-1*d;return a=(0<=a?"+":"")+(Gb(Math[0<a?"floor":"ceil"](a/60),2)+Gb(Math.abs(a%60),2))},ww:Fd(2),w:Fd(1),G:jc,GG:jc,GGG:jc,GGGG:function(a,c){return 0>=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1]}},gg=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,fg=/^\-?\d+$/;zd.$inject=["$locale"];var cg=ra(M),dg=ra(rb);Bd.$inject=
|
||||
["$parse"];var ie=ra({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===sa.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),sb={};m(Ab,function(a,c){function d(a,d,f){a.$watch(f[e],function(a){f.$set(c,!!a)})}if("multiple"!=a){var e=wa("ng-"+c),f=d;"checked"===a&&(f=function(a,c,f){f.ngModel!==f[e]&&d(a,c,f)});sb[e]=function(){return{restrict:"A",
|
||||
priority:100,link:f}}}});m(Uc,function(a,c){sb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(jg))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});m(["src","srcset","href"],function(a){var c=wa("ng-"+a);sb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===sa.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",
|
||||
g=null);f.$observe(c,function(c){c?(f.$set(h,c),Ua&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Ib={$addControl:v,$$renameControl:function(a,c){a.$name=c},$removeControl:v,$setValidity:v,$setDirty:v,$setPristine:v,$setSubmitted:v};Gd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var Od=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:Gd,compile:function(d,e){d.addClass(Va).addClass(mb);var f=e.name?"name":a&&e.ngForm?"ngForm":
|
||||
!1;return{pre:function(a,d,e,k){if(!("action"in e)){var n=function(c){a.$apply(function(){k.$commitViewValue();k.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",n,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",n,!1)},0,!1)})}var m=k.$$parentForm;f&&(Eb(a,k.$name,k,k.$name),e.$observe(f,function(c){k.$name!==c&&(Eb(a,k.$name,t,k.$name),m.$$renameControl(k,c),Eb(a,k.$name,k,k.$name))}));d.on("$destroy",function(){m.$removeControl(k);f&&Eb(a,e[f],t,
|
||||
k.$name);P(k,Ib)})}}}}}]},je=Od(),we=Od(!0),ig=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,rg=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,sg=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,tg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Pd=/^(\d{4})-(\d{2})-(\d{2})$/,Qd=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,mc=/^(\d{4})-W(\d\d)$/,Rd=/^(\d{4})-(\d\d)$/,
|
||||
Sd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Td={text:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e)},date:lb("date",Pd,Kb(Pd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":lb("datetimelocal",Qd,Kb(Qd,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:lb("time",Sd,Kb(Sd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:lb("week",mc,function(a,c){if(aa(a))return a;if(L(a)){mc.lastIndex=0;var d=mc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=Ed(e),f=7*(f-1);c&&(d=c.getHours(),g=
|
||||
c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:lb("month",Rd,Kb(Rd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){Id(a,c,d,e);kb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:tg.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw Lb("numfmt",a);a=a.toString()}return a});if(w(d.min)||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||
|
||||
A(h)||a>=h};d.$observe("min",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));h=V(a)&&!isNaN(a)?a:t;e.$validate()})}if(w(d.max)||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||A(l)||a<=l};d.$observe("max",function(a){w(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||rg.test(d)}},email:function(a,c,d,e,f,g){kb(a,c,d,e,f,g);kc(e);
|
||||
e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||sg.test(d)}},radio:function(a,c,d,e){A(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=Jd(l,a,"ngTrueValue",d.ngTrueValue,!0),n=Jd(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&
|
||||
a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ka(a,k)});e.$parsers.push(function(a){return a?k:n})},hidden:v,button:v,submit:v,reset:v,file:v},Fc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Td[M(h.type)]||Td.text)(f,g,h,l[0],c,a,d,e)}}}}],ug=/^(true|false|\d+)$/,Oe=function(){return{restrict:"A",priority:100,compile:function(a,
|
||||
c){return ug.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},oe=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],qe=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));
|
||||
c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===t?"":a})}}}}],pe=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],Ne=ra({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),
|
||||
re=lc("",!0),te=lc("Odd",0),se=lc("Even",1),ue=Ma({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),ve=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Kc={},vg={blur:!0,focus:!0};m("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=wa("ng-"+a);Kc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=
|
||||
d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};vg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ye=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=U.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=
|
||||
qb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],ze=["$templateRequest","$anchorScroll","$animate",function(a,c,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(e,f){var g=f.ngInclude||f.src,h=f.onload||"",l=f.autoscroll;return function(e,f,m,s,q){var t=0,F,u,p,v=function(){u&&(u.remove(),u=null);F&&(F.$destroy(),F=null);p&&(d.leave(p).then(function(){u=null}),u=p,p=null)};e.$watch(g,function(g){var m=function(){!w(l)||l&&!e.$eval(l)||
|
||||
c()},r=++t;g?(a(g,!0).then(function(a){if(r===t){var c=e.$new();s.template=a;a=q(c,function(a){v();d.enter(a,null,f).then(m)});F=c;p=a;F.$emit("$includeContentLoaded",g);e.$eval(h)}},function(){r===t&&(v(),e.$emit("$includeContentError",g))}),e.$emit("$includeContentRequested",g)):(v(),s.template=null)})}}}}],Qe=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Nc(f.template,U).childNodes)(c,function(a){d.append(a)},
|
||||
{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],Ae=Ma({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),Me=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?R(f):f;e.$parsers.push(function(a){if(!A(a)){var c=[];a&&m(a.split(h),function(a){a&&c.push(g?R(a):a)});return c}});e.$formatters.push(function(a){return G(a)?a.join(f):t});e.$isEmpty=function(a){return!a||
|
||||
!a.length}}}},mb="ng-valid",Kd="ng-invalid",Va="ng-pristine",Jb="ng-dirty",Md="ng-pending",Lb=new J("ngModel"),wg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=
|
||||
!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=n(d.name||"",!1)(a);var r=f(d.ngModel),s=r.assign,q=r,C=s,F=null,u,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");q=function(a){var d=r(a);z(d)&&(d=c(a));return d};C=function(a,c){z(r(a))?g(a,{$$$p:p.$modelValue}):s(a,p.$modelValue)}}else if(!r.assign)throw Lb("nonassign",d.ngModel,ua(e));};this.$render=v;this.$isEmpty=function(a){return A(a)||
|
||||
""===a||null===a||a!==a};var K=e.inheritedData("$formController")||Ib,y=0;Hd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:K,$animate:g});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;g.removeClass(e,Jb);g.addClass(e,Va)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;g.removeClass(e,Va);g.addClass(e,Jb);K.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;g.setClass(e,"ng-untouched","ng-touched")};this.$setTouched=
|
||||
function(){p.$touched=!0;p.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(F);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!V(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,c=p.$valid,d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(f){e||c===f||(p.$modelValue=f?a:t,p.$modelValue!==d&&p.$$writeModelToScope())})}};this.$$runValidators=
|
||||
function(a,c,d){function e(){var d=!0;m(p.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d?!0:(m(p.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;m(p.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!z(k.then))throw Lb("$asyncValidators",k);g(h,t);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},v):h(!0)}function g(a,c){l===y&&p.$setValidity(a,c)}function h(a){l===y&&d(a)}y++;var l=y;(function(){var a=
|
||||
p.$$parserName||"parse";if(u===t)g(a,null);else return u||(m(p.$validators,function(a,c){g(c,null)}),m(p.$asyncValidators,function(a,c){g(c,null)})),g(a,u),u;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=p.$viewValue;h.cancel(F);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=p.$$lastCommittedViewValue;if(u=A(c)?t:!0)for(var d=
|
||||
0;d<p.$parsers.length;d++)if(c=p.$parsers[d](c),A(c)){u=!1;break}V(p.$modelValue)&&isNaN(p.$modelValue)&&(p.$modelValue=q(a));var e=p.$modelValue,f=p.$options&&p.$options.allowInvalid;p.$$rawModelValue=c;f&&(p.$modelValue=c,p.$modelValue!==e&&p.$$writeModelToScope());p.$$runValidators(c,p.$$lastCommittedViewValue,function(a){f||(p.$modelValue=a?c:t,p.$modelValue!==e&&p.$$writeModelToScope())})};this.$$writeModelToScope=function(){C(a,p.$modelValue);m(p.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};
|
||||
this.$setViewValue=function(a,c){p.$viewValue=a;p.$options&&!p.$options.updateOnDefault||p.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=p.$options;e&&w(e.debounce)&&(e=e.debounce,V(e)?d=e:V(e[c])?d=e[c]:V(e["default"])&&(d=e["default"]));h.cancel(F);d?F=h(function(){p.$commitViewValue()},d):l.$$phase?p.$commitViewValue():a.$apply(function(){p.$commitViewValue()})};a.$watch(function(){var c=q(a);if(c!==p.$modelValue&&(p.$modelValue===p.$modelValue||c===c)){p.$modelValue=
|
||||
p.$$rawModelValue=c;u=t;for(var d=p.$formatters,e=d.length,f=c;e--;)f=d[e](f);p.$viewValue!==f&&(p.$viewValue=p.$$lastCommittedViewValue=f,p.$render(),p.$$runValidators(c,f,v))}return c})}],Le=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:wg,priority:1,compile:function(c){c.addClass(Va).addClass("ng-untouched").addClass(mb);return{pre:function(a,c,f,g){var h=g[0],l=g[1]||Ib;h.$$setOptions(g[2]&&g[2].$options);l.$addControl(h);f.$observe("name",
|
||||
function(a){h.$name!==a&&l.$$renameControl(h,a)});a.$on("$destroy",function(){l.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],xg=/(\s+|^)default(\s+|$)/,Pe=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=fa(a.$eval(c.ngModelOptions));
|
||||
this.$options.updateOn!==t?(this.$options.updateOnDefault=!1,this.$options.updateOn=R(this.$options.updateOn.replace(xg,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},Be=Ma({terminal:!0,priority:1E3}),yg=J("ngOptions"),zg=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
|
||||
Je=["$compile","$parse",function(a,c){function d(a,d,e){function f(a,c,d,e,g){this.selectValue=a;this.viewValue=c;this.label=d;this.group=e;this.disabled=g}function n(a){var c;if(!q&&Ea(a))c=a;else{c=[];for(var d in a)a.hasOwnProperty(d)&&"$"!==d.charAt(0)&&c.push(d)}return c}var m=a.match(zg);if(!m)throw yg("iexp",a,ua(d));var s=m[5]||m[7],q=m[6];a=/ as /.test(m[0])&&m[1];var t=m[9];d=c(m[2]?m[1]:s);var v=a&&c(a)||d,u=t&&c(t),p=t?function(a,c){return u(e,c)}:function(a){return Ga(a)},w=function(a,
|
||||
c){return p(a,z(a,c))},y=c(m[2]||m[1]),A=c(m[3]||""),B=c(m[4]||""),N=c(m[8]),D={},z=q?function(a,c){D[q]=c;D[s]=a;return D}:function(a){D[s]=a;return D};return{trackBy:t,getTrackByValue:w,getWatchables:c(N,function(a){var c=[];a=a||[];for(var d=n(a),f=d.length,g=0;g<f;g++){var h=a===d?g:d[g],k=z(a[h],h),h=p(a[h],k);c.push(h);if(m[2]||m[1])h=y(e,k),c.push(h);m[4]&&(k=B(e,k),c.push(k))}return c}),getOptions:function(){for(var a=[],c={},d=N(e)||[],g=n(d),h=g.length,m=0;m<h;m++){var r=d===g?m:g[m],s=
|
||||
z(d[r],r),q=v(e,s),r=p(q,s),u=y(e,s),x=A(e,s),s=B(e,s),q=new f(r,q,u,x,s);a.push(q);c[r]=q}return{items:a,selectValueMap:c,getOptionFromViewValue:function(a){return c[w(a)]},getViewValueFromOption:function(a){return t?ca.copy(a.viewValue):a.viewValue}}}}}var e=U.createElement("option"),f=U.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","?ngModel"],link:function(c,h,l,k){function n(a,c){a.element=c;c.disabled=a.disabled;a.value!==c.value&&(c.value=a.selectValue);a.label!==
|
||||
c.label&&(c.label=a.label,c.textContent=a.label)}function r(a,c,d,e){c&&M(c.nodeName)===d?d=c:(d=e.cloneNode(!1),c?a.insertBefore(d,c):a.appendChild(d));return d}function s(a){for(var c;a;)c=a.nextSibling,Xb(a),a=c}function q(a){var c=p&&p[0],d=N&&N[0];if(c||d)for(;a&&(a===c||a===d);)a=a.nextSibling;return a}function t(){var a=D&&u.readValue();D=z.getOptions();var c={},d=h[0].firstChild;B&&h.prepend(p);d=q(d);D.items.forEach(function(a){var g,k;a.group?(g=c[a.group],g||(g=r(h[0],d,"optgroup",f),d=
|
||||
g.nextSibling,g.label=a.group,g=c[a.group]={groupElement:g,currentOptionElement:g.firstChild}),k=r(g.groupElement,g.currentOptionElement,"option",e),n(a,k),g.currentOptionElement=k.nextSibling):(k=r(h[0],d,"option",e),n(a,k),d=k.nextSibling)});Object.keys(c).forEach(function(a){s(c[a].currentOptionElement)});s(d);v.$render();if(!v.$isEmpty(a)){var g=u.readValue();(z.trackBy?ka(a,g):a===g)||(v.$setViewValue(g),v.$render())}}var v=k[1];if(v){var u=k[0];k=l.multiple;for(var p,w=0,A=h.children(),I=A.length;w<
|
||||
I;w++)if(""===A[w].value){p=A.eq(w);break}var B=!!p,N=y(e.cloneNode(!1));N.val("?");var D,z=d(l.ngOptions,h,c);k?(v.$isEmpty=function(a){return!a||0===a.length},u.writeValue=function(a){D.items.forEach(function(a){a.element.selected=!1});a&&a.forEach(function(a){(a=D.getOptionFromViewValue(a))&&!a.disabled&&(a.element.selected=!0)})},u.readValue=function(){var a=h.val()||[],c=[];m(a,function(a){a=D.selectValueMap[a];a.disabled||c.push(D.getViewValueFromOption(a))});return c},z.trackBy&&c.$watchCollection(function(){if(G(v.$viewValue))return v.$viewValue.map(function(a){return z.getTrackByValue(a)})},
|
||||
function(){v.$render()})):(u.writeValue=function(a){var c=D.getOptionFromViewValue(a);c&&!c.disabled?h[0].value!==c.selectValue&&(N.remove(),B||p.remove(),h[0].value=c.selectValue,c.element.selected=!0,c.element.setAttribute("selected","selected")):null===a||B?(N.remove(),B||h.prepend(p),h.val(""),p.prop("selected",!0),p.attr("selected",!0)):(B||p.remove(),h.prepend(N),h.val("?"),N.prop("selected",!0),N.attr("selected",!0))},u.readValue=function(){var a=D.selectValueMap[h.val()];return a&&!a.disabled?
|
||||
(B||p.remove(),N.remove(),D.getViewValueFromOption(a)):null},z.trackBy&&c.$watch(function(){return z.getTrackByValue(v.$viewValue)},function(){v.$render()}));B?(p.remove(),a(p)(c),p.removeClass("ng-scope")):p=y(e.cloneNode(!1));t();c.$watchCollection(z.getWatchables,t)}}}}],Ce=["$locale","$interpolate","$log",function(a,c,d){var e=/{}/g,f=/^when(Minus)?(.+)$/;return{link:function(g,h,l){function k(a){h.text(a||"")}var n=l.count,r=l.$attr.when&&h.attr(l.$attr.when),s=l.offset||0,q=g.$eval(r)||{},t=
|
||||
{},w=c.startSymbol(),u=c.endSymbol(),p=w+n+"-"+s+u,y=ca.noop,z;m(l,function(a,c){var d=f.exec(c);d&&(d=(d[1]?"-":"")+M(d[2]),q[d]=h.attr(l.$attr[c]))});m(q,function(a,d){t[d]=c(a.replace(e,p))});g.$watch(n,function(c){var e=parseFloat(c),f=isNaN(e);f||e in q||(e=a.pluralCat(e-s));e===z||f&&V(z)&&isNaN(z)||(y(),f=t[e],A(f)?(null!=c&&d.debug("ngPluralize: no rule defined for '"+e+"' in "+r),y=v,k()):y=g.$watch(f,k),z=e)})}}}],De=["$parse","$animate",function(a,c){var d=J("ngRepeat"),e=function(a,c,
|
||||
d,e,k,m,r){a[d]=e;k&&(a[k]=m);a.$index=c;a.$first=0===c;a.$last=c===r-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,l=U.createComment(" end ngRepeat: "+h+" "),k=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!k)throw d("iexp",h);var n=k[1],r=k[2],s=k[3],q=k[4],k=n.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);
|
||||
if(!k)throw d("iidexp",n);var v=k[3]||k[1],w=k[2];if(s&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(s)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(s)))throw d("badident",s);var u,p,z,A,I={$id:Ga};q?u=a(q):(z=function(a,c){return Ga(c)},A=function(a){return a});return function(a,f,g,k,n){u&&(p=function(c,d,e){w&&(I[w]=c);I[v]=d;I.$index=e;return u(a,I)});var q=ga();a.$watchCollection(r,function(g){var k,r,u=f[0],x,D=ga(),I,H,L,G,M,J,O;s&&(a[s]=g);if(Ea(g))M=
|
||||
g,r=p||z;else for(O in r=p||A,M=[],g)g.hasOwnProperty(O)&&"$"!==O.charAt(0)&&M.push(O);I=M.length;O=Array(I);for(k=0;k<I;k++)if(H=g===M?k:M[k],L=g[H],G=r(H,L,k),q[G])J=q[G],delete q[G],D[G]=J,O[k]=J;else{if(D[G])throw m(O,function(a){a&&a.scope&&(q[a.id]=a)}),d("dupes",h,G,L);O[k]={id:G,scope:t,clone:t};D[G]=!0}for(x in q){J=q[x];G=qb(J.clone);c.leave(G);if(G[0].parentNode)for(k=0,r=G.length;k<r;k++)G[k].$$NG_REMOVED=!0;J.scope.$destroy()}for(k=0;k<I;k++)if(H=g===M?k:M[k],L=g[H],J=O[k],J.scope){x=
|
||||
u;do x=x.nextSibling;while(x&&x.$$NG_REMOVED);J.clone[0]!=x&&c.move(qb(J.clone),null,y(u));u=J.clone[J.clone.length-1];e(J.scope,k,v,L,w,H,I)}else n(function(a,d){J.scope=d;var f=l.cloneNode(!1);a[a.length++]=f;c.enter(a,null,y(u));u=f;J.clone=a;D[J.id]=J;e(J.scope,k,v,L,w,H,I)});q=D})}}}}],Ee=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],xe=["$animate",
|
||||
function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Fe=Ma(function(a,c,d){a.$watch(d.ngStyle,function(a,d){d&&a!==d&&m(d,function(a,d){c.css(d,"")});a&&c.css(a)},!0)}),Ge=["$animate",function(a){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],l=[],k=[],n=function(a,c){return function(){a.splice(c,1)}};c.$watch(e.ngSwitch||
|
||||
e.on,function(c){var d,e;d=0;for(e=l.length;d<e;++d)a.cancel(l[d]);d=l.length=0;for(e=k.length;d<e;++d){var q=qb(h[d].clone);k[d].$destroy();(l[d]=a.leave(q)).then(n(l,d))}h.length=0;k.length=0;(g=f.cases["!"+c]||f.cases["?"])&&m(g,function(c){c.transclude(function(d,e){k.push(e);var f=c.element;d[d.length++]=U.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],He=Ma({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,
|
||||
f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),Ie=Ma({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),Ke=Ma({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw J("ngTransclude")("orphan",ua(c));f(function(a){c.empty();c.append(a)})}}),ke=["$templateCache",function(a){return{restrict:"E",terminal:!0,
|
||||
compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],Ag={$setViewValue:v,$render:v},Bg=["$element","$scope","$attrs",function(a,c,d){var e=this,f=new Sa;e.ngModelCtrl=Ag;e.unknownOption=y(U.createElement("option"));e.renderUnknownOption=function(c){c="? "+Ga(c)+" ?";e.unknownOption.val(c);a.prepend(e.unknownOption);a.val(c)};c.$on("$destroy",function(){e.renderUnknownOption=v});e.removeUnknownOption=function(){e.unknownOption.parent()&&e.unknownOption.remove()};e.readValue=
|
||||
function(){e.removeUnknownOption();return a.val()};e.writeValue=function(c){e.hasOption(c)?(e.removeUnknownOption(),a.val(c),""===c&&e.emptyOption.prop("selected",!0)):null==c&&e.emptyOption?(e.removeUnknownOption(),a.val("")):e.renderUnknownOption(c)};e.addOption=function(a,c){Ra(a,'"option value"');""===a&&(e.emptyOption=c);var d=f.get(a)||0;f.put(a,d+1)};e.removeOption=function(a){var c=f.get(a);c&&(1===c?(f.remove(a),""===a&&(e.emptyOption=t)):f.put(a,c-1))};e.hasOption=function(a){return!!f.get(a)}}],
|
||||
le=function(){return{restrict:"E",require:["select","?ngModel"],controller:Bg,link:function(a,c,d,e){var f=e[1];if(f){var g=e[0];g.ngModelCtrl=f;f.$render=function(){g.writeValue(f.$viewValue)};c.on("change",function(){a.$apply(function(){f.$setViewValue(g.readValue())})});if(d.multiple){g.readValue=function(){var a=[];m(c.find("option"),function(c){c.selected&&a.push(c.value)});return a};g.writeValue=function(a){var d=new Sa(a);m(c.find("option"),function(a){a.selected=w(d.get(a.value))})};var h,
|
||||
l=NaN;a.$watch(function(){l!==f.$viewValue||ka(h,f.$viewValue)||(h=ia(f.$viewValue),f.$render());l=f.$viewValue});f.$isEmpty=function(a){return!a||0===a.length}}}}}},ne=["$interpolate",function(a){function c(a){a[0].hasAttribute("selected")&&(a[0].selected=!0)}return{restrict:"E",priority:100,compile:function(d,e){if(A(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var k=d.parent(),m=k.data("$selectController")||k.parent().data("$selectController");m&&m.ngModelCtrl&&
|
||||
(f?a.$watch(f,function(a,f){e.$set("value",a);f!==a&&m.removeOption(f);m.addOption(a,d);m.ngModelCtrl.$render();c(d)}):(m.addOption(e.value,d),m.ngModelCtrl.$render(),c(d)),d.on("$destroy",function(){m.removeOption(e.value);m.ngModelCtrl.$render()}))}}}}],me=ra({restrict:"E",terminal:!1}),Hc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},
|
||||
Gc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){L(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw J("ngPattern")("noregexp",g,a,ua(c));f=a||t;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||A(f)||f.test(a)}}}}},Jc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=W(a);f=isNaN(a)?-1:a;e.$validate()});
|
||||
e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(c)||c.length<=f}}}}},Ic=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=W(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};O.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(ce(),ee(ca),y(U).ready(function(){Zd(U,Ac)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
|
||||
//# sourceMappingURL=angular.min.js.map
|
||||
18
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/ionic-angular.min.js
vendored
Normal file
445
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/ionic.bundle.min.js
vendored
Normal file
17
platforms/android/build/intermediates/assets/debug/www/lib/ionic/js/ionic.min.js
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
/**
|
||||
* Action Sheets
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.action-sheet-backdrop {
|
||||
@include transition(background-color 150ms ease-in-out);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-action-sheet;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0,0,0,0);
|
||||
|
||||
&.active {
|
||||
background-color: rgba(0,0,0,0.4);
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-wrapper {
|
||||
@include translate3d(0, 100%, 0);
|
||||
@include transition(all cubic-bezier(.36, .66, .04, 1) 500ms);
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
max-width: 500px;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.action-sheet-up {
|
||||
@include translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.action-sheet {
|
||||
margin-left: $sheet-margin;
|
||||
margin-right: $sheet-margin;
|
||||
width: auto;
|
||||
z-index: $z-index-action-sheet;
|
||||
overflow: hidden;
|
||||
|
||||
.button {
|
||||
display: block;
|
||||
padding: 1px;
|
||||
width: 100%;
|
||||
border-radius: 0;
|
||||
border-color: $sheet-options-border-color;
|
||||
background-color: transparent;
|
||||
|
||||
color: $sheet-options-text-color;
|
||||
font-size: 21px;
|
||||
|
||||
&:hover {
|
||||
color: $sheet-options-text-color;
|
||||
}
|
||||
&.destructive {
|
||||
color: #ff3b30;
|
||||
&:hover {
|
||||
color: #ff3b30;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button.active, .button.activated {
|
||||
box-shadow: none;
|
||||
border-color: $sheet-options-border-color;
|
||||
color: $sheet-options-text-color;
|
||||
background: $sheet-options-bg-active-color;
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-has-icons .icon {
|
||||
position: absolute;
|
||||
left: 16px;
|
||||
}
|
||||
|
||||
.action-sheet-title {
|
||||
padding: $sheet-margin * 2;
|
||||
color: #8f8f8f;
|
||||
text-align: center;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.action-sheet-group {
|
||||
margin-bottom: $sheet-margin;
|
||||
border-radius: $sheet-border-radius;
|
||||
background-color: #fff;
|
||||
overflow: hidden;
|
||||
|
||||
.button {
|
||||
border-width: 1px 0px 0px 0px;
|
||||
}
|
||||
.button:first-child:last-child {
|
||||
border-width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-options {
|
||||
background: $sheet-options-bg-color;
|
||||
}
|
||||
|
||||
.action-sheet-cancel {
|
||||
.button {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-open {
|
||||
pointer-events: none;
|
||||
|
||||
&.modal-open .modal {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.action-sheet-backdrop {
|
||||
pointer-events: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.platform-android {
|
||||
|
||||
.action-sheet-backdrop.active {
|
||||
background-color: rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.action-sheet {
|
||||
margin: 0;
|
||||
|
||||
.action-sheet-title,
|
||||
.button {
|
||||
text-align: left;
|
||||
border-color: transparent;
|
||||
font-size: 16px;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.action-sheet-title {
|
||||
font-size: 14px;
|
||||
padding: 16px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.button.active,
|
||||
.button.activated {
|
||||
background: #e8e8e8;
|
||||
}
|
||||
}
|
||||
|
||||
.action-sheet-group {
|
||||
margin: 0;
|
||||
border-radius: 0;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.action-sheet-cancel {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.action-sheet-has-icons {
|
||||
|
||||
.button {
|
||||
padding-left: 56px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
|
||||
// Slide up from the bottom, used for modals
|
||||
// -------------------------------
|
||||
|
||||
.slide-in-up {
|
||||
@include translate3d(0, 100%, 0);
|
||||
}
|
||||
.slide-in-up.ng-enter,
|
||||
.slide-in-up > .ng-enter {
|
||||
@include transition(all cubic-bezier(.1, .7, .1, 1) 400ms);
|
||||
}
|
||||
.slide-in-up.ng-enter-active,
|
||||
.slide-in-up > .ng-enter-active {
|
||||
@include translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.slide-in-up.ng-leave,
|
||||
.slide-in-up > .ng-leave {
|
||||
@include transition(all ease-in-out 250ms);
|
||||
}
|
||||
|
||||
|
||||
// Scale Out
|
||||
// Scale from hero (1 in this case) to zero
|
||||
// -------------------------------
|
||||
|
||||
@-webkit-keyframes scaleOut {
|
||||
from { -webkit-transform: scale(1); opacity: 1; }
|
||||
to { -webkit-transform: scale(0.8); opacity: 0; }
|
||||
}
|
||||
@keyframes scaleOut {
|
||||
from { transform: scale(1); opacity: 1; }
|
||||
to { transform: scale(0.8); opacity: 0; }
|
||||
}
|
||||
|
||||
|
||||
// Super Scale In
|
||||
// Scale from super (1.x) to duper (1 in this case)
|
||||
// -------------------------------
|
||||
|
||||
@-webkit-keyframes superScaleIn {
|
||||
from { -webkit-transform: scale(1.2); opacity: 0; }
|
||||
to { -webkit-transform: scale(1); opacity: 1 }
|
||||
}
|
||||
@keyframes superScaleIn {
|
||||
from { transform: scale(1.2); opacity: 0; }
|
||||
to { transform: scale(1); opacity: 1; }
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
|
||||
.backdrop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-backdrop;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
background-color: $loading-backdrop-bg-color;
|
||||
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
&.visible {
|
||||
visibility: visible;
|
||||
}
|
||||
&.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@include transition($loading-backdrop-fadein-duration opacity linear);
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
|
||||
/**
|
||||
* Badges
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.badge {
|
||||
@include badge-style($badge-default-bg, $badge-default-text);
|
||||
z-index: $z-index-badge;
|
||||
display: inline-block;
|
||||
padding: 3px 8px;
|
||||
min-width: 10px;
|
||||
border-radius: $badge-border-radius;
|
||||
vertical-align: baseline;
|
||||
text-align: center;
|
||||
white-space: nowrap;
|
||||
font-weight: $badge-font-weight;
|
||||
font-size: $badge-font-size;
|
||||
line-height: $badge-line-height;
|
||||
|
||||
&:empty {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
//Be sure to override specificity of rule that 'badge color matches tab color by default'
|
||||
.tabs .tab-item .badge,
|
||||
.badge {
|
||||
&.badge-light {
|
||||
@include badge-style($badge-light-bg, $badge-light-text);
|
||||
}
|
||||
&.badge-stable {
|
||||
@include badge-style($badge-stable-bg, $badge-stable-text);
|
||||
}
|
||||
&.badge-positive {
|
||||
@include badge-style($badge-positive-bg, $badge-positive-text);
|
||||
}
|
||||
&.badge-calm {
|
||||
@include badge-style($badge-calm-bg, $badge-calm-text);
|
||||
}
|
||||
&.badge-assertive {
|
||||
@include badge-style($badge-assertive-bg, $badge-assertive-text);
|
||||
}
|
||||
&.badge-balanced {
|
||||
@include badge-style($badge-balanced-bg, $badge-balanced-text);
|
||||
}
|
||||
&.badge-energized {
|
||||
@include badge-style($badge-energized-bg, $badge-energized-text);
|
||||
}
|
||||
&.badge-royal {
|
||||
@include badge-style($badge-royal-bg, $badge-royal-text);
|
||||
}
|
||||
&.badge-dark {
|
||||
@include badge-style($badge-dark-bg, $badge-dark-text);
|
||||
}
|
||||
}
|
||||
|
||||
// Quick fix for labels/badges in buttons
|
||||
.button .badge {
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
@@ -0,0 +1,404 @@
|
||||
|
||||
/**
|
||||
* Bar (Headers and Footers)
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.bar {
|
||||
@include display-flex();
|
||||
@include translate3d(0,0,0);
|
||||
@include user-select(none);
|
||||
position: absolute;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-bar;
|
||||
|
||||
@include box-sizing(border-box);
|
||||
padding: $bar-padding-portrait;
|
||||
|
||||
width: 100%;
|
||||
height: $bar-height;
|
||||
border-width: 0;
|
||||
border-style: solid;
|
||||
border-top: 1px solid transparent;
|
||||
border-bottom: 1px solid $bar-default-border;
|
||||
|
||||
background-color: $bar-default-bg;
|
||||
|
||||
/* border-width: 1px will actually create 2 device pixels on retina */
|
||||
/* this nifty trick sets an actual 1px border on hi-res displays */
|
||||
background-size: 0;
|
||||
@media (min--moz-device-pixel-ratio: 1.5),
|
||||
(-webkit-min-device-pixel-ratio: 1.5),
|
||||
(min-device-pixel-ratio: 1.5),
|
||||
(min-resolution: 144dpi),
|
||||
(min-resolution: 1.5dppx) {
|
||||
border: none;
|
||||
background-image: linear-gradient(0deg, $bar-default-border, $bar-default-border 50%, transparent 50%);
|
||||
background-position: bottom;
|
||||
background-size: 100% 1px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
&.bar-clear {
|
||||
border: none;
|
||||
background: none;
|
||||
color: #fff;
|
||||
|
||||
.button {
|
||||
color: #fff;
|
||||
}
|
||||
.title {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
&.item-input-inset {
|
||||
.item-input-wrapper {
|
||||
margin-top: -1px;
|
||||
|
||||
input {
|
||||
padding-left: 8px;
|
||||
width: 94%;
|
||||
height: 28px;
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.bar-light {
|
||||
@include bar-style($bar-light-bg, $bar-light-border, $bar-light-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-light-border, $bar-light-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-stable {
|
||||
@include bar-style($bar-stable-bg, $bar-stable-border, $bar-stable-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-stable-border, $bar-stable-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-positive {
|
||||
@include bar-style($bar-positive-bg, $bar-positive-border, $bar-positive-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-positive-border, $bar-positive-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-calm {
|
||||
@include bar-style($bar-calm-bg, $bar-calm-border, $bar-calm-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-calm-border, $bar-calm-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-assertive {
|
||||
@include bar-style($bar-assertive-bg, $bar-assertive-border, $bar-assertive-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-assertive-border, $bar-assertive-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-balanced {
|
||||
@include bar-style($bar-balanced-bg, $bar-balanced-border, $bar-balanced-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-balanced-border, $bar-positive-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-energized {
|
||||
@include bar-style($bar-energized-bg, $bar-energized-border, $bar-energized-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-energized-border, $bar-energized-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-royal {
|
||||
@include bar-style($bar-royal-bg, $bar-royal-border, $bar-royal-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-royal-border, $bar-royal-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
&.bar-dark {
|
||||
@include bar-style($bar-dark-bg, $bar-dark-border, $bar-dark-text);
|
||||
&.bar-footer{
|
||||
background-image: linear-gradient(180deg, $bar-dark-border, $bar-dark-border 50%, transparent 50%);
|
||||
}
|
||||
}
|
||||
|
||||
// Title inside of a bar is centered
|
||||
.title {
|
||||
display: block;
|
||||
position: absolute;
|
||||
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-bar-title;
|
||||
overflow: hidden;
|
||||
|
||||
margin: 0 10px;
|
||||
|
||||
min-width: 30px;
|
||||
height: $bar-height - 1;
|
||||
|
||||
text-align: center;
|
||||
|
||||
// Go into ellipsis if too small
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
font-size: $bar-title-font-size;
|
||||
font-weight: $headings-font-weight;
|
||||
|
||||
line-height: $bar-height;
|
||||
|
||||
&.title-left {
|
||||
text-align: left;
|
||||
}
|
||||
&.title-right {
|
||||
text-align: right;
|
||||
}
|
||||
}
|
||||
|
||||
.title a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.button, button {
|
||||
z-index: $z-index-bar-button;
|
||||
padding: 0 $button-bar-button-padding;
|
||||
min-width: initial;
|
||||
min-height: $button-bar-button-height - 1;
|
||||
font-weight: 400;
|
||||
font-size: $button-bar-button-font-size;
|
||||
line-height: $button-bar-button-height;
|
||||
|
||||
&.button-icon:before,
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
padding-right: 2px;
|
||||
padding-left: 2px;
|
||||
font-size: $button-bar-button-icon-size;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
|
||||
&.button-icon {
|
||||
font-size: $bar-title-font-size;
|
||||
.icon:before,
|
||||
&:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
vertical-align: top;
|
||||
font-size: $button-large-icon-size;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
}
|
||||
&.button-clear {
|
||||
padding-right: 2px;
|
||||
padding-left: 2px;
|
||||
font-weight: 300;
|
||||
font-size: $bar-title-font-size;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
font-size: $button-large-icon-size;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
}
|
||||
|
||||
&.back-button {
|
||||
display: block;
|
||||
margin-right: 5px;
|
||||
padding: 0;
|
||||
white-space: nowrap;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
&.back-button.active,
|
||||
&.back-button.activated {
|
||||
opacity: 0.2;
|
||||
}
|
||||
}
|
||||
|
||||
.button-bar > .button,
|
||||
.buttons > .button {
|
||||
min-height: $button-bar-button-height - 1;
|
||||
line-height: $button-bar-button-height;
|
||||
}
|
||||
|
||||
.button-bar + .button,
|
||||
.button + .button-bar {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
// Android 4.4 messes with the display property
|
||||
.buttons,
|
||||
.buttons.primary-buttons,
|
||||
.buttons.secondary-buttons {
|
||||
display: inherit;
|
||||
}
|
||||
.buttons span {
|
||||
display: inline-block;
|
||||
}
|
||||
.buttons-left span {
|
||||
margin-right: 5px;
|
||||
display: inherit;
|
||||
}
|
||||
.buttons-right span {
|
||||
margin-left: 5px;
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
// Place the last button in a bar on the right of the bar
|
||||
.title + .button:last-child,
|
||||
> .button + .button:last-child,
|
||||
> .button.pull-right,
|
||||
.buttons.pull-right,
|
||||
.title + .buttons {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.platform-android {
|
||||
|
||||
.nav-bar-has-subheader .bar {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
.bar {
|
||||
|
||||
.back-button .icon:before {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 19px;
|
||||
line-height: $bar-height;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Default styles for buttons inside of styled bars
|
||||
.bar-light {
|
||||
.button {
|
||||
@include button-style($bar-light-bg, $bar-light-border, $bar-light-active-bg, $bar-light-active-border, $bar-light-text);
|
||||
@include button-clear($bar-light-text, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-stable {
|
||||
.button {
|
||||
@include button-style($bar-stable-bg, $bar-stable-border, $bar-stable-active-bg, $bar-stable-active-border, $bar-stable-text);
|
||||
@include button-clear($bar-stable-text, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-positive {
|
||||
.button {
|
||||
@include button-style($bar-positive-bg, $bar-positive-border, $bar-positive-active-bg, $bar-positive-active-border, $bar-positive-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-calm {
|
||||
.button {
|
||||
@include button-style($bar-calm-bg, $bar-calm-border, $bar-calm-active-bg, $bar-calm-active-border, $bar-calm-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-assertive {
|
||||
.button {
|
||||
@include button-style($bar-assertive-bg, $bar-assertive-border, $bar-assertive-active-bg, $bar-assertive-active-border, $bar-assertive-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-balanced {
|
||||
.button {
|
||||
@include button-style($bar-balanced-bg, $bar-balanced-border, $bar-balanced-active-bg, $bar-balanced-active-border, $bar-balanced-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-energized {
|
||||
.button {
|
||||
@include button-style($bar-energized-bg, $bar-energized-border, $bar-energized-active-bg, $bar-energized-active-border, $bar-energized-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-royal {
|
||||
.button {
|
||||
@include button-style($bar-royal-bg, $bar-royal-border, $bar-royal-active-bg, $bar-royal-active-border, $bar-royal-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
.bar-dark {
|
||||
.button {
|
||||
@include button-style($bar-dark-bg, $bar-dark-border, $bar-dark-active-bg, $bar-dark-active-border, $bar-dark-text);
|
||||
@include button-clear(#fff, $bar-title-font-size);
|
||||
}
|
||||
}
|
||||
|
||||
// Header at top
|
||||
.bar-header {
|
||||
top: 0;
|
||||
border-top-width: 0;
|
||||
border-bottom-width: 1px;
|
||||
&.has-tabs-top{
|
||||
border-bottom-width: 0px;
|
||||
background-image: none;
|
||||
}
|
||||
}
|
||||
.tabs-top .bar-header{
|
||||
border-bottom-width: 0px;
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
// Footer at bottom
|
||||
.bar-footer {
|
||||
bottom: 0;
|
||||
border-top-width: 1px;
|
||||
border-bottom-width: 0;
|
||||
background-position: top;
|
||||
|
||||
height: $bar-footer-height;
|
||||
|
||||
&.item-input-inset {
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
// Don't render padding if the bar is just for tabs
|
||||
.bar-tabs {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.bar-subheader {
|
||||
top: $bar-height;
|
||||
display: block;
|
||||
|
||||
height: $bar-subheader-height;
|
||||
}
|
||||
.bar-subfooter {
|
||||
bottom: $bar-footer-height;
|
||||
display: block;
|
||||
|
||||
height: $bar-subfooter-height;
|
||||
}
|
||||
|
||||
.nav-bar-block {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-bar;
|
||||
}
|
||||
|
||||
.bar .back-button.hide,
|
||||
.bar .buttons .hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-bar-tabs-top .bar {
|
||||
background-image: none;
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
|
||||
/**
|
||||
* Button Bar
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.button-bar {
|
||||
@include display-flex();
|
||||
@include flex(1);
|
||||
width: 100%;
|
||||
|
||||
&.button-bar-inline {
|
||||
display: block;
|
||||
width: auto;
|
||||
|
||||
@include clearfix();
|
||||
|
||||
> .button {
|
||||
width: auto;
|
||||
display: inline-block;
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button-bar > .button {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
|
||||
overflow: hidden;
|
||||
|
||||
padding: 0 16px;
|
||||
|
||||
width: 0;
|
||||
|
||||
border-width: 1px 0px 1px 1px;
|
||||
border-radius: 0;
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
&:before,
|
||||
.icon:before {
|
||||
line-height: 44px;
|
||||
}
|
||||
|
||||
&:first-child {
|
||||
border-radius: $button-border-radius 0px 0px $button-border-radius;
|
||||
}
|
||||
&:last-child {
|
||||
border-right-width: 1px;
|
||||
border-radius: 0px $button-border-radius $button-border-radius 0px;
|
||||
}
|
||||
&:only-child {
|
||||
border-radius: $button-border-radius;
|
||||
}
|
||||
}
|
||||
|
||||
.button-bar > .button-small {
|
||||
&:before,
|
||||
.icon:before {
|
||||
line-height: 28px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,252 @@
|
||||
|
||||
/**
|
||||
* Buttons
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.button {
|
||||
// set the color defaults
|
||||
@include button-style($button-default-bg, $button-default-border, $button-default-active-bg, $button-default-active-border, $button-default-text);
|
||||
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
padding: 0 $button-padding;
|
||||
|
||||
min-width: ($button-padding * 3) + $button-font-size;
|
||||
min-height: $button-height + 5px;
|
||||
|
||||
border-width: $button-border-width;
|
||||
border-style: solid;
|
||||
border-radius: $button-border-radius;
|
||||
|
||||
vertical-align: top;
|
||||
text-align: center;
|
||||
|
||||
text-overflow: ellipsis;
|
||||
font-size: $button-font-size;
|
||||
line-height: $button-height - $button-border-width + 1px;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
&:after {
|
||||
// used to create a larger button "hit" area
|
||||
position: absolute;
|
||||
top: -6px;
|
||||
right: -6px;
|
||||
bottom: -6px;
|
||||
left: -6px;
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
.icon {
|
||||
vertical-align: top;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
display: inline-block;
|
||||
padding: 0 0 $button-border-width 0;
|
||||
vertical-align: inherit;
|
||||
font-size: $button-icon-size;
|
||||
line-height: $button-height - $button-border-width;
|
||||
pointer-events: none;
|
||||
}
|
||||
&.icon-left:before {
|
||||
float: left;
|
||||
padding-right: .2em;
|
||||
padding-left: 0;
|
||||
}
|
||||
&.icon-right:before {
|
||||
float: right;
|
||||
padding-right: 0;
|
||||
padding-left: .2em;
|
||||
}
|
||||
|
||||
&.button-block, &.button-full {
|
||||
margin-top: $button-block-margin;
|
||||
margin-bottom: $button-block-margin;
|
||||
}
|
||||
|
||||
&.button-light {
|
||||
@include button-style($button-light-bg, $button-light-border, $button-light-active-bg, $button-light-active-border, $button-light-text);
|
||||
@include button-clear($button-light-border);
|
||||
@include button-outline($button-light-border);
|
||||
}
|
||||
|
||||
&.button-stable {
|
||||
@include button-style($button-stable-bg, $button-stable-border, $button-stable-active-bg, $button-stable-active-border, $button-stable-text);
|
||||
@include button-clear($button-stable-border);
|
||||
@include button-outline($button-stable-border);
|
||||
}
|
||||
|
||||
&.button-positive {
|
||||
@include button-style($button-positive-bg, $button-positive-border, $button-positive-active-bg, $button-positive-active-border, $button-positive-text);
|
||||
@include button-clear($button-positive-bg);
|
||||
@include button-outline($button-positive-bg);
|
||||
}
|
||||
|
||||
&.button-calm {
|
||||
@include button-style($button-calm-bg, $button-calm-border, $button-calm-active-bg, $button-calm-active-border, $button-calm-text);
|
||||
@include button-clear($button-calm-bg);
|
||||
@include button-outline($button-calm-bg);
|
||||
}
|
||||
|
||||
&.button-assertive {
|
||||
@include button-style($button-assertive-bg, $button-assertive-border, $button-assertive-active-bg, $button-assertive-active-border, $button-assertive-text);
|
||||
@include button-clear($button-assertive-bg);
|
||||
@include button-outline($button-assertive-bg);
|
||||
}
|
||||
|
||||
&.button-balanced {
|
||||
@include button-style($button-balanced-bg, $button-balanced-border, $button-balanced-active-bg, $button-balanced-active-border, $button-balanced-text);
|
||||
@include button-clear($button-balanced-bg);
|
||||
@include button-outline($button-balanced-bg);
|
||||
}
|
||||
|
||||
&.button-energized {
|
||||
@include button-style($button-energized-bg, $button-energized-border, $button-energized-active-bg, $button-energized-active-border, $button-energized-text);
|
||||
@include button-clear($button-energized-bg);
|
||||
@include button-outline($button-energized-bg);
|
||||
}
|
||||
|
||||
&.button-royal {
|
||||
@include button-style($button-royal-bg, $button-royal-border, $button-royal-active-bg, $button-royal-active-border, $button-royal-text);
|
||||
@include button-clear($button-royal-bg);
|
||||
@include button-outline($button-royal-bg);
|
||||
}
|
||||
|
||||
&.button-dark {
|
||||
@include button-style($button-dark-bg, $button-dark-border, $button-dark-active-bg, $button-dark-active-border, $button-dark-text);
|
||||
@include button-clear($button-dark-bg);
|
||||
@include button-outline($button-dark-bg);
|
||||
}
|
||||
}
|
||||
|
||||
.button-small {
|
||||
padding: 2px $button-small-padding 1px;
|
||||
min-width: $button-small-height;
|
||||
min-height: $button-small-height + 2;
|
||||
font-size: $button-small-font-size;
|
||||
line-height: $button-small-height - $button-border-width - 1;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
font-size: $button-small-icon-size;
|
||||
line-height: $button-small-icon-size + 3;
|
||||
margin-top: 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.button-large {
|
||||
padding: 0 $button-large-padding;
|
||||
min-width: ($button-large-padding * 3) + $button-large-font-size;
|
||||
min-height: $button-large-height + 5;
|
||||
font-size: $button-large-font-size;
|
||||
line-height: $button-large-height - $button-border-width;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
padding-bottom: ($button-border-width * 2);
|
||||
font-size: $button-large-icon-size;
|
||||
line-height: $button-large-height - ($button-border-width * 2) - 1;
|
||||
}
|
||||
}
|
||||
|
||||
.button-icon {
|
||||
@include transition(opacity .1s);
|
||||
padding: 0 6px;
|
||||
min-width: initial;
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
|
||||
&.button.active,
|
||||
&.button.activated {
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
opacity: 0.3;
|
||||
}
|
||||
|
||||
.icon:before,
|
||||
&.icon:before {
|
||||
font-size: $button-large-icon-size;
|
||||
}
|
||||
}
|
||||
|
||||
.button-clear {
|
||||
@include button-clear($button-default-border);
|
||||
@include transition(opacity .1s);
|
||||
padding: 0 $button-clear-padding;
|
||||
max-height: $button-height;
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
|
||||
&.active,
|
||||
&.activated {
|
||||
opacity: 0.3;
|
||||
}
|
||||
}
|
||||
|
||||
.button-outline {
|
||||
@include button-outline($button-default-border);
|
||||
@include transition(opacity .1s);
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.padding > .button.button-block:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.button-block {
|
||||
display: block;
|
||||
clear: both;
|
||||
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
.button-full,
|
||||
.button-full > .button {
|
||||
display: block;
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
border-right-width: 0;
|
||||
border-left-width: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
button.button-block,
|
||||
button.button-full,
|
||||
.button-full > button.button,
|
||||
input.button.button-block {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
a.button {
|
||||
text-decoration: none;
|
||||
|
||||
.icon:before,
|
||||
&.icon:before,
|
||||
&.icon-left:before,
|
||||
&.icon-right:before {
|
||||
margin-top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.button.disabled,
|
||||
.button[disabled] {
|
||||
opacity: .4;
|
||||
cursor: default !important;
|
||||
pointer-events: none;
|
||||
}
|
||||
@@ -0,0 +1,180 @@
|
||||
|
||||
/**
|
||||
* Checkbox
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.checkbox {
|
||||
// set the color defaults
|
||||
@include checkbox-style($checkbox-off-border-default, $checkbox-on-bg-default, $checkbox-on-border-default);
|
||||
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
padding: ($checkbox-height / 4) ($checkbox-width / 4);
|
||||
cursor: pointer;
|
||||
}
|
||||
.checkbox-light {
|
||||
@include checkbox-style($checkbox-off-border-light, $checkbox-on-bg-light, $checkbox-off-border-light);
|
||||
}
|
||||
.checkbox-stable {
|
||||
@include checkbox-style($checkbox-off-border-stable, $checkbox-on-bg-stable, $checkbox-off-border-stable);
|
||||
}
|
||||
.checkbox-positive {
|
||||
@include checkbox-style($checkbox-off-border-positive, $checkbox-on-bg-positive, $checkbox-off-border-positive);
|
||||
}
|
||||
.checkbox-calm {
|
||||
@include checkbox-style($checkbox-off-border-calm, $checkbox-on-bg-calm, $checkbox-off-border-calm);
|
||||
}
|
||||
.checkbox-assertive {
|
||||
@include checkbox-style($checkbox-off-border-assertive, $checkbox-on-bg-assertive, $checkbox-off-border-assertive);
|
||||
}
|
||||
.checkbox-balanced {
|
||||
@include checkbox-style($checkbox-off-border-balanced, $checkbox-on-bg-balanced, $checkbox-off-border-balanced);
|
||||
}
|
||||
.checkbox-energized{
|
||||
@include checkbox-style($checkbox-off-border-energized, $checkbox-on-bg-energized, $checkbox-off-border-energized);
|
||||
}
|
||||
.checkbox-royal {
|
||||
@include checkbox-style($checkbox-off-border-royal, $checkbox-on-bg-royal, $checkbox-off-border-royal);
|
||||
}
|
||||
.checkbox-dark {
|
||||
@include checkbox-style($checkbox-off-border-dark, $checkbox-on-bg-dark, $checkbox-off-border-dark);
|
||||
}
|
||||
|
||||
.checkbox input:disabled:before,
|
||||
.checkbox input:disabled + .checkbox-icon:before {
|
||||
border-color: $checkbox-off-border-light;
|
||||
}
|
||||
|
||||
.checkbox input:disabled:checked:before,
|
||||
.checkbox input:disabled:checked + .checkbox-icon:before {
|
||||
background: $checkbox-on-bg-light;
|
||||
}
|
||||
|
||||
|
||||
.checkbox.checkbox-input-hidden input {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.checkbox input,
|
||||
.checkbox-icon {
|
||||
position: relative;
|
||||
width: $checkbox-width;
|
||||
height: $checkbox-height;
|
||||
display: block;
|
||||
border: 0;
|
||||
background: transparent;
|
||||
cursor: pointer;
|
||||
-webkit-appearance: none;
|
||||
|
||||
&:before {
|
||||
// what the checkbox looks like when its not checked
|
||||
display: table;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-width: $checkbox-border-width;
|
||||
border-style: solid;
|
||||
border-radius: $checkbox-border-radius;
|
||||
background: $checkbox-off-bg-color;
|
||||
content: ' ';
|
||||
@include transition(background-color 20ms ease-in-out);
|
||||
}
|
||||
}
|
||||
|
||||
.checkbox input:checked:before,
|
||||
input:checked + .checkbox-icon:before {
|
||||
border-width: $checkbox-border-width + 1;
|
||||
}
|
||||
|
||||
// the checkmark within the box
|
||||
.checkbox input:after,
|
||||
.checkbox-icon:after {
|
||||
@include transition(opacity .05s ease-in-out);
|
||||
@include rotate(-45deg);
|
||||
position: absolute;
|
||||
top: 33%;
|
||||
left: 25%;
|
||||
display: table;
|
||||
width: ($checkbox-width / 2);
|
||||
height: ($checkbox-width / 4) - 1;
|
||||
border: $checkbox-check-width solid $checkbox-check-color;
|
||||
border-top: 0;
|
||||
border-right: 0;
|
||||
content: ' ';
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.platform-android .checkbox-platform input:before,
|
||||
.platform-android .checkbox-platform .checkbox-icon:before,
|
||||
.checkbox-square input:before,
|
||||
.checkbox-square .checkbox-icon:before {
|
||||
border-radius: 2px;
|
||||
width: 72%;
|
||||
height: 72%;
|
||||
margin-top: 14%;
|
||||
margin-left: 14%;
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
.platform-android .checkbox-platform input:after,
|
||||
.platform-android .checkbox-platform .checkbox-icon:after,
|
||||
.checkbox-square input:after,
|
||||
.checkbox-square .checkbox-icon:after {
|
||||
border-width: 2px;
|
||||
top: 19%;
|
||||
left: 25%;
|
||||
width: ($checkbox-width / 2) - 1;
|
||||
height: 7px;
|
||||
}
|
||||
|
||||
.platform-android .item-checkbox-right .checkbox-square .checkbox-icon::after {
|
||||
top: 31%;
|
||||
}
|
||||
|
||||
.grade-c .checkbox input:after,
|
||||
.grade-c .checkbox-icon:after {
|
||||
@include rotate(0);
|
||||
top: 3px;
|
||||
left: 4px;
|
||||
border: none;
|
||||
color: $checkbox-check-color;
|
||||
content: '\2713';
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
// what the checkmark looks like when its checked
|
||||
.checkbox input:checked:after,
|
||||
input:checked + .checkbox-icon:after {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
// make sure item content have enough padding on left to fit the checkbox
|
||||
.item-checkbox {
|
||||
padding-left: ($item-padding * 2) + $checkbox-width;
|
||||
|
||||
&.active {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
// position the checkbox to the left within an item
|
||||
.item-checkbox .checkbox {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: $item-padding / 2;
|
||||
left: $item-padding / 2;
|
||||
z-index: $z-index-item-checkbox;
|
||||
margin-top: (($checkbox-height + ($checkbox-height / 2)) / 2) * -1;
|
||||
}
|
||||
|
||||
|
||||
.item-checkbox.item-checkbox-right {
|
||||
padding-right: ($item-padding * 2) + $checkbox-width;
|
||||
padding-left: $item-padding;
|
||||
}
|
||||
|
||||
.item-checkbox-right .checkbox input,
|
||||
.item-checkbox-right .checkbox-icon {
|
||||
float: right;
|
||||
}
|
||||
@@ -0,0 +1,330 @@
|
||||
/**
|
||||
* Forms
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
// Make all forms have space below them
|
||||
form {
|
||||
margin: 0 0 $line-height-base;
|
||||
}
|
||||
|
||||
// Groups of fields with labels on top (legends)
|
||||
legend {
|
||||
display: block;
|
||||
margin-bottom: $line-height-base;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
border: $input-border-width solid $input-border;
|
||||
color: $dark;
|
||||
font-size: $font-size-base * 1.5;
|
||||
line-height: $line-height-base * 2;
|
||||
|
||||
small {
|
||||
color: $stable;
|
||||
font-size: $line-height-base * .75;
|
||||
}
|
||||
}
|
||||
|
||||
// Set font for forms
|
||||
label,
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea {
|
||||
@include font-shorthand($font-size-base, normal, $line-height-base); // Set size, weight, line-height here
|
||||
}
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea {
|
||||
font-family: $font-family-base; // And only set font-family here for those that need it (note the missing label element)
|
||||
}
|
||||
|
||||
|
||||
// Input List
|
||||
// -------------------------------
|
||||
|
||||
.item-input {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding: 6px 0 5px 16px;
|
||||
|
||||
input {
|
||||
@include border-radius(0);
|
||||
@include flex(1, 220px);
|
||||
@include appearance(none);
|
||||
margin: 0;
|
||||
padding-right: 24px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.button .icon {
|
||||
@include flex(0, 0, 24px);
|
||||
position: static;
|
||||
display: inline-block;
|
||||
height: auto;
|
||||
text-align: center;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.button-bar {
|
||||
@include border-radius(0);
|
||||
@include flex(1, 0, 220px);
|
||||
@include appearance(none);
|
||||
}
|
||||
|
||||
.icon {
|
||||
min-width: 14px;
|
||||
}
|
||||
}
|
||||
// prevent flex-shrink on WP
|
||||
.platform-windowsphone .item-input input{
|
||||
flex-shrink: 1;
|
||||
}
|
||||
|
||||
.item-input-inset {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
padding: ($item-padding / 3) * 2;
|
||||
}
|
||||
|
||||
.item-input-wrapper {
|
||||
@include display-flex();
|
||||
@include flex(1, 0);
|
||||
@include align-items(center);
|
||||
@include border-radius(4px);
|
||||
padding-right: 8px;
|
||||
padding-left: 8px;
|
||||
background: #eee;
|
||||
}
|
||||
|
||||
.item-input-inset .item-input-wrapper input {
|
||||
padding-left: 4px;
|
||||
height: 29px;
|
||||
background: transparent;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.item-input-wrapper ~ .button {
|
||||
margin-left: ($item-padding / 3) * 2;
|
||||
}
|
||||
|
||||
.input-label {
|
||||
display: table;
|
||||
padding: 7px 10px 7px 0px;
|
||||
max-width: 200px;
|
||||
width: 35%;
|
||||
color: $input-label-color;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.placeholder-icon {
|
||||
color: #aaa;
|
||||
&:first-child {
|
||||
padding-right: 6px;
|
||||
}
|
||||
&:last-child {
|
||||
padding-left: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
.item-stacked-label {
|
||||
display: block;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
|
||||
.input-label, .icon {
|
||||
display: inline-block;
|
||||
padding: 4px 0 0 0px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.item-stacked-label input,
|
||||
.item-stacked-label textarea {
|
||||
@include border-radius(2px);
|
||||
padding: 4px 8px 3px 0;
|
||||
border: none;
|
||||
background-color: $input-bg;
|
||||
}
|
||||
.item-stacked-label input {
|
||||
overflow: hidden;
|
||||
height: $line-height-computed + $font-size-base + 12px;
|
||||
}
|
||||
|
||||
.item-select.item-stacked-label select {
|
||||
position: relative;
|
||||
padding: 0px;
|
||||
max-width: 90%;
|
||||
direction:ltr;
|
||||
white-space: pre-wrap;
|
||||
margin: -3px;
|
||||
}
|
||||
|
||||
.item-floating-label {
|
||||
display: block;
|
||||
background-color: transparent;
|
||||
box-shadow: none;
|
||||
|
||||
.input-label {
|
||||
position: relative;
|
||||
padding: 5px 0 0 0;
|
||||
opacity: 0;
|
||||
top: 10px;
|
||||
@include transition(opacity .15s ease-in, top .2s linear);
|
||||
|
||||
&.has-input {
|
||||
opacity: 1;
|
||||
top: 0;
|
||||
@include transition(opacity .15s ease-in, top .2s linear);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Form Controls
|
||||
// -------------------------------
|
||||
|
||||
// Shared size and type resets
|
||||
textarea,
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="color"] {
|
||||
display: block;
|
||||
padding-top: 2px;
|
||||
padding-left: 0;
|
||||
height: $line-height-computed + $font-size-base;
|
||||
color: $input-color;
|
||||
vertical-align: middle;
|
||||
font-size: $font-size-base;
|
||||
line-height: $font-size-base + 2;
|
||||
}
|
||||
|
||||
.platform-ios,
|
||||
.platform-android {
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"] {
|
||||
padding-top: 8px;
|
||||
}
|
||||
textarea {
|
||||
text-indent: -3px;
|
||||
}
|
||||
}
|
||||
|
||||
.item-input {
|
||||
input,
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
textarea {
|
||||
padding-left: 0;
|
||||
@include placeholder($input-color-placeholder, -3px);
|
||||
}
|
||||
|
||||
// Reset height since textareas have rows
|
||||
textarea {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
// Everything else
|
||||
textarea,
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="color"] {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
// Position radios and checkboxes better
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
margin: 0;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
// Reset width of input images, buttons, radios, checkboxes
|
||||
.item-input {
|
||||
input[type="file"],
|
||||
input[type="image"],
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"],
|
||||
input[type="radio"],
|
||||
input[type="checkbox"] {
|
||||
width: auto; // Override of generic input selector
|
||||
}
|
||||
}
|
||||
|
||||
// Set the height of file to match text inputs
|
||||
input[type="file"] {
|
||||
line-height: $input-height-base;
|
||||
}
|
||||
|
||||
// Text input classes to hide text caret during scroll
|
||||
.previous-input-focus,
|
||||
.cloned-text-input + input,
|
||||
.cloned-text-input + textarea {
|
||||
position: absolute !important;
|
||||
left: -9999px;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
|
||||
// Placeholder
|
||||
// -------------------------------
|
||||
input,
|
||||
textarea {
|
||||
@include placeholder();
|
||||
}
|
||||
|
||||
|
||||
// DISABLED STATE
|
||||
// -------------------------------
|
||||
|
||||
// Disabled and read-only inputs
|
||||
input[disabled],
|
||||
select[disabled],
|
||||
textarea[disabled],
|
||||
input[readonly]:not(.cloned-text-input),
|
||||
textarea[readonly]:not(.cloned-text-input),
|
||||
select[readonly] {
|
||||
background-color: $input-bg-disabled;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
// Explicitly reset the colors here
|
||||
input[type="radio"][disabled],
|
||||
input[type="checkbox"][disabled],
|
||||
input[type="radio"][readonly],
|
||||
input[type="checkbox"][readonly] {
|
||||
background-color: transparent;
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
/**
|
||||
* Grid
|
||||
* --------------------------------------------------
|
||||
* Using flexbox for the grid, inspired by Philip Walton:
|
||||
* http://philipwalton.github.io/solved-by-flexbox/demos/grids/
|
||||
* By default each .col within a .row will evenly take up
|
||||
* available width, and the height of each .col with take
|
||||
* up the height of the tallest .col in the same .row.
|
||||
*/
|
||||
|
||||
.row {
|
||||
@include display-flex();
|
||||
padding: ($grid-padding-width / 2);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.row-wrap {
|
||||
@include flex-wrap(wrap);
|
||||
}
|
||||
|
||||
.row-no-padding {
|
||||
padding: 0;
|
||||
|
||||
> .col {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.row + .row {
|
||||
margin-top: ($grid-padding-width / 2) * -1;
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
.col {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
padding: ($grid-padding-width / 2);
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
/* Vertically Align Columns */
|
||||
/* .row-* vertically aligns every .col in the .row */
|
||||
.row-top {
|
||||
@include align-items(flex-start);
|
||||
}
|
||||
.row-bottom {
|
||||
@include align-items(flex-end);
|
||||
}
|
||||
.row-center {
|
||||
@include align-items(center);
|
||||
}
|
||||
.row-stretch {
|
||||
@include align-items(stretch);
|
||||
}
|
||||
.row-baseline {
|
||||
@include align-items(baseline);
|
||||
}
|
||||
|
||||
/* .col-* vertically aligns an individual .col */
|
||||
.col-top {
|
||||
@include align-self(flex-start);
|
||||
}
|
||||
.col-bottom {
|
||||
@include align-self(flex-end);
|
||||
}
|
||||
.col-center {
|
||||
@include align-self(center);
|
||||
}
|
||||
|
||||
/* Column Offsets */
|
||||
.col-offset-10 {
|
||||
margin-left: 10%;
|
||||
}
|
||||
.col-offset-20 {
|
||||
margin-left: 20%;
|
||||
}
|
||||
.col-offset-25 {
|
||||
margin-left: 25%;
|
||||
}
|
||||
.col-offset-33, .col-offset-34 {
|
||||
margin-left: 33.3333%;
|
||||
}
|
||||
.col-offset-50 {
|
||||
margin-left: 50%;
|
||||
}
|
||||
.col-offset-66, .col-offset-67 {
|
||||
margin-left: 66.6666%;
|
||||
}
|
||||
.col-offset-75 {
|
||||
margin-left: 75%;
|
||||
}
|
||||
.col-offset-80 {
|
||||
margin-left: 80%;
|
||||
}
|
||||
.col-offset-90 {
|
||||
margin-left: 90%;
|
||||
}
|
||||
|
||||
|
||||
/* Explicit Column Percent Sizes */
|
||||
/* By default each grid column will evenly distribute */
|
||||
/* across the grid. However, you can specify individual */
|
||||
/* columns to take up a certain size of the available area */
|
||||
.col-10 {
|
||||
@include flex(0, 0, 10%);
|
||||
max-width: 10%;
|
||||
}
|
||||
.col-20 {
|
||||
@include flex(0, 0, 20%);
|
||||
max-width: 20%;
|
||||
}
|
||||
.col-25 {
|
||||
@include flex(0, 0, 25%);
|
||||
max-width: 25%;
|
||||
}
|
||||
.col-33, .col-34 {
|
||||
@include flex(0, 0, 33.3333%);
|
||||
max-width: 33.3333%;
|
||||
}
|
||||
.col-40 {
|
||||
@include flex(0, 0, 40%);
|
||||
max-width: 40%;
|
||||
}
|
||||
.col-50 {
|
||||
@include flex(0, 0, 50%);
|
||||
max-width: 50%;
|
||||
}
|
||||
.col-60 {
|
||||
@include flex(0, 0, 60%);
|
||||
max-width: 60%;
|
||||
}
|
||||
.col-66, .col-67 {
|
||||
@include flex(0, 0, 66.6666%);
|
||||
max-width: 66.6666%;
|
||||
}
|
||||
.col-75 {
|
||||
@include flex(0, 0, 75%);
|
||||
max-width: 75%;
|
||||
}
|
||||
.col-80 {
|
||||
@include flex(0, 0, 80%);
|
||||
max-width: 80%;
|
||||
}
|
||||
.col-90 {
|
||||
@include flex(0, 0, 90%);
|
||||
max-width: 90%;
|
||||
}
|
||||
|
||||
|
||||
/* Responsive Grid Classes */
|
||||
/* Adding a class of responsive-X to a row */
|
||||
/* will trigger the flex-direction to */
|
||||
/* change to column and add some margin */
|
||||
/* to any columns in the row for clearity */
|
||||
|
||||
@include responsive-grid-break('.responsive-sm', $grid-responsive-sm-break);
|
||||
@include responsive-grid-break('.responsive-md', $grid-responsive-md-break);
|
||||
@include responsive-grid-break('.responsive-lg', $grid-responsive-lg-break);
|
||||
@@ -0,0 +1,815 @@
|
||||
/**
|
||||
* Items
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item {
|
||||
@include item-style($item-default-bg, $item-default-border, $item-default-text);
|
||||
|
||||
position: relative;
|
||||
z-index: $z-index-item; // Make sure the borders and stuff don't get hidden by children
|
||||
display: block;
|
||||
|
||||
margin: $item-border-width * -1;
|
||||
padding: $item-padding;
|
||||
|
||||
border-width: $item-border-width;
|
||||
border-style: solid;
|
||||
font-size: $item-font-size;
|
||||
|
||||
h2 {
|
||||
margin: 0 0 2px 0;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
h3 {
|
||||
margin: 0 0 4px 0;
|
||||
font-size: 14px;
|
||||
}
|
||||
h4 {
|
||||
margin: 0 0 4px 0;
|
||||
font-size: 12px;
|
||||
}
|
||||
h5, h6 {
|
||||
margin: 0 0 3px 0;
|
||||
font-size: 10px;
|
||||
}
|
||||
p {
|
||||
color: #666;
|
||||
font-size: 14px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
h1:last-child,
|
||||
h2:last-child,
|
||||
h3:last-child,
|
||||
h4:last-child,
|
||||
h5:last-child,
|
||||
h6:last-child,
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
// Align badges within items
|
||||
.badge {
|
||||
@include display-flex();
|
||||
position: absolute;
|
||||
top: $item-padding;
|
||||
right: ($item-padding * 2);
|
||||
}
|
||||
&.item-button-right .badge {
|
||||
right: ($item-padding * 2) + 35;
|
||||
}
|
||||
&.item-divider .badge {
|
||||
top: ceil($item-padding / 2);
|
||||
}
|
||||
.badge + .badge {
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
// Different themes for items
|
||||
&.item-light {
|
||||
@include item-style($item-light-bg, $item-light-border, $item-light-text);
|
||||
}
|
||||
&.item-stable {
|
||||
@include item-style($item-stable-bg, $item-stable-border, $item-stable-text);
|
||||
}
|
||||
&.item-positive {
|
||||
@include item-style($item-positive-bg, $item-positive-border, $item-positive-text);
|
||||
}
|
||||
&.item-calm {
|
||||
@include item-style($item-calm-bg, $item-calm-border, $item-calm-text);
|
||||
}
|
||||
&.item-assertive {
|
||||
@include item-style($item-assertive-bg, $item-assertive-border, $item-assertive-text);
|
||||
}
|
||||
&.item-balanced {
|
||||
@include item-style($item-balanced-bg, $item-balanced-border, $item-balanced-text);
|
||||
}
|
||||
&.item-energized {
|
||||
@include item-style($item-energized-bg, $item-energized-border, $item-energized-text);
|
||||
}
|
||||
&.item-royal {
|
||||
@include item-style($item-royal-bg, $item-royal-border, $item-royal-text);
|
||||
}
|
||||
&.item-dark {
|
||||
@include item-style($item-dark-bg, $item-dark-border, $item-dark-text);
|
||||
}
|
||||
|
||||
&[ng-click]:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.list-borderless .item,
|
||||
.item-borderless {
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
// Link and Button Active States
|
||||
.item.active,
|
||||
.item.activated,
|
||||
.item-complex.active .item-content,
|
||||
.item-complex.activated .item-content,
|
||||
.item .item-content.active,
|
||||
.item .item-content.activated {
|
||||
@include item-active-style($item-default-active-bg, $item-default-active-border);
|
||||
|
||||
// Different active themes for <a> and <button> items
|
||||
&.item-light {
|
||||
@include item-active-style($item-light-active-bg, $item-light-active-border);
|
||||
}
|
||||
&.item-stable {
|
||||
@include item-active-style($item-stable-active-bg, $item-stable-active-border);
|
||||
}
|
||||
&.item-positive {
|
||||
@include item-active-style($item-positive-active-bg, $item-positive-active-border);
|
||||
}
|
||||
&.item-calm {
|
||||
@include item-active-style($item-calm-active-bg, $item-calm-active-border);
|
||||
}
|
||||
&.item-assertive {
|
||||
@include item-active-style($item-assertive-active-bg, $item-assertive-active-border);
|
||||
}
|
||||
&.item-balanced {
|
||||
@include item-active-style($item-balanced-active-bg, $item-balanced-active-border);
|
||||
}
|
||||
&.item-energized {
|
||||
@include item-active-style($item-energized-active-bg, $item-energized-active-border);
|
||||
}
|
||||
&.item-royal {
|
||||
@include item-active-style($item-royal-active-bg, $item-royal-active-border);
|
||||
}
|
||||
&.item-dark {
|
||||
@include item-active-style($item-dark-active-bg, $item-dark-active-border);
|
||||
}
|
||||
}
|
||||
|
||||
// Handle text overflow
|
||||
.item,
|
||||
.item h1,
|
||||
.item h2,
|
||||
.item h3,
|
||||
.item h4,
|
||||
.item h5,
|
||||
.item h6,
|
||||
.item p,
|
||||
.item-content,
|
||||
.item-content h1,
|
||||
.item-content h2,
|
||||
.item-content h3,
|
||||
.item-content h4,
|
||||
.item-content h5,
|
||||
.item-content h6,
|
||||
.item-content p {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
// Linked list items
|
||||
a.item {
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Complex Items
|
||||
* --------------------------------------------------
|
||||
* Adding .item-complex allows the .item to be slidable and
|
||||
* have options underneath the button, but also requires an
|
||||
* additional .item-content element inside .item.
|
||||
* Basically .item-complex removes any default settings which
|
||||
* .item added, so that .item-content looks them as just .item.
|
||||
*/
|
||||
|
||||
.item-complex,
|
||||
a.item.item-complex,
|
||||
button.item.item-complex {
|
||||
padding: 0;
|
||||
}
|
||||
.item-complex .item-content,
|
||||
.item-radio .item-content {
|
||||
position: relative;
|
||||
z-index: $z-index-item;
|
||||
padding: $item-padding (ceil( ($item-padding * 3) + ($item-padding / 3) ) - 5) $item-padding $item-padding;
|
||||
border: none;
|
||||
background-color: $item-default-bg;
|
||||
}
|
||||
|
||||
a.item-content {
|
||||
display: block;
|
||||
color: inherit;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.item-text-wrap .item,
|
||||
.item-text-wrap .item-content,
|
||||
.item-text-wrap,
|
||||
.item-text-wrap h1,
|
||||
.item-text-wrap h2,
|
||||
.item-text-wrap h3,
|
||||
.item-text-wrap h4,
|
||||
.item-text-wrap h5,
|
||||
.item-text-wrap h6,
|
||||
.item-text-wrap p,
|
||||
.item-complex.item-text-wrap .item-content,
|
||||
.item-body h1,
|
||||
.item-body h2,
|
||||
.item-body h3,
|
||||
.item-body h4,
|
||||
.item-body h5,
|
||||
.item-body h6,
|
||||
.item-body p {
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
}
|
||||
.item-complex.item-text-wrap,
|
||||
.item-complex.item-text-wrap h1,
|
||||
.item-complex.item-text-wrap h2,
|
||||
.item-complex.item-text-wrap h3,
|
||||
.item-complex.item-text-wrap h4,
|
||||
.item-complex.item-text-wrap h5,
|
||||
.item-complex.item-text-wrap h6,
|
||||
.item-complex.item-text-wrap p {
|
||||
overflow: visible;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
// Link and Button Active States
|
||||
|
||||
.item-complex{
|
||||
// Stylized items
|
||||
&.item-light > .item-content{
|
||||
@include item-style($item-light-bg, $item-light-border, $item-light-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-light-active-bg, $item-light-active-border);
|
||||
}
|
||||
}
|
||||
&.item-stable > .item-content{
|
||||
@include item-style($item-stable-bg, $item-stable-border, $item-stable-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-stable-active-bg, $item-stable-active-border);
|
||||
}
|
||||
}
|
||||
&.item-positive > .item-content{
|
||||
@include item-style($item-positive-bg, $item-positive-border, $item-positive-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-positive-active-bg, $item-positive-active-border);
|
||||
}
|
||||
}
|
||||
&.item-calm > .item-content{
|
||||
@include item-style($item-calm-bg, $item-calm-border, $item-calm-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-calm-active-bg, $item-calm-active-border);
|
||||
}
|
||||
}
|
||||
&.item-assertive > .item-content{
|
||||
@include item-style($item-assertive-bg, $item-assertive-border, $item-assertive-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-assertive-active-bg, $item-assertive-active-border);
|
||||
}
|
||||
}
|
||||
&.item-balanced > .item-content{
|
||||
@include item-style($item-balanced-bg, $item-balanced-border, $item-balanced-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-balanced-active-bg, $item-balanced-active-border);
|
||||
}
|
||||
}
|
||||
&.item-energized > .item-content{
|
||||
@include item-style($item-energized-bg, $item-energized-border, $item-energized-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-energized-active-bg, $item-energized-active-border);
|
||||
}
|
||||
}
|
||||
&.item-royal > .item-content{
|
||||
@include item-style($item-royal-bg, $item-royal-border, $item-royal-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-royal-active-bg, $item-royal-active-border);
|
||||
}
|
||||
}
|
||||
&.item-dark > .item-content{
|
||||
@include item-style($item-dark-bg, $item-dark-border, $item-dark-text);
|
||||
&.active, &:active {
|
||||
@include item-active-style($item-dark-active-bg, $item-dark-active-border);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Item Icons
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-icon-left .icon,
|
||||
.item-icon-right .icon {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
font-size: $item-icon-font-size;
|
||||
|
||||
&:before {
|
||||
display: block;
|
||||
width: $item-icon-font-size;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.item .fill-icon {
|
||||
min-width: $item-icon-fill-font-size + 2;
|
||||
min-height: $item-icon-fill-font-size + 2;
|
||||
font-size: $item-icon-fill-font-size;
|
||||
}
|
||||
|
||||
.item-icon-left {
|
||||
padding-left: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
|
||||
.icon {
|
||||
left: ceil( ($item-padding / 3) * 2);
|
||||
}
|
||||
}
|
||||
.item-complex.item-icon-left {
|
||||
padding-left: 0;
|
||||
|
||||
.item-content {
|
||||
padding-left: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
}
|
||||
}
|
||||
|
||||
.item-icon-right {
|
||||
padding-right: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
|
||||
.icon {
|
||||
right: ceil( ($item-padding / 3) * 2);
|
||||
}
|
||||
}
|
||||
.item-complex.item-icon-right {
|
||||
padding-right: 0;
|
||||
|
||||
.item-content {
|
||||
padding-right: ceil( ($item-padding * 3) + ($item-padding / 3) );
|
||||
}
|
||||
}
|
||||
|
||||
.item-icon-left.item-icon-right .icon:first-child {
|
||||
right: auto;
|
||||
}
|
||||
.item-icon-left.item-icon-right .icon:last-child,
|
||||
.item-icon-left .item-delete .icon {
|
||||
left: auto;
|
||||
}
|
||||
|
||||
.item-icon-left .icon-accessory,
|
||||
.item-icon-right .icon-accessory {
|
||||
color: $item-icon-accessory-color;
|
||||
font-size: $item-icon-accessory-font-size;
|
||||
}
|
||||
.item-icon-left .icon-accessory {
|
||||
left: floor($item-padding / 5);
|
||||
}
|
||||
.item-icon-right .icon-accessory {
|
||||
right: floor($item-padding / 5);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Item Button
|
||||
* --------------------------------------------------
|
||||
* An item button is a child button inside an .item (not the entire .item)
|
||||
*/
|
||||
|
||||
.item-button-left {
|
||||
padding-left: ceil($item-padding * 4.5);
|
||||
}
|
||||
|
||||
.item-button-left > .button,
|
||||
.item-button-left .item-content > .button {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: ceil($item-padding / 2);
|
||||
left: ceil( ($item-padding / 3) * 2);
|
||||
min-width: $item-icon-font-size + ($button-border-width * 2);
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
|
||||
.icon:before {
|
||||
position: relative;
|
||||
left: auto;
|
||||
width: auto;
|
||||
line-height: $item-icon-font-size - 1;
|
||||
}
|
||||
|
||||
> .button {
|
||||
margin: 0px 2px;
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
}
|
||||
}
|
||||
|
||||
.item-button-right,
|
||||
a.item.item-button-right,
|
||||
button.item.item-button-right {
|
||||
padding-right: $item-padding * 5;
|
||||
}
|
||||
|
||||
.item-button-right > .button,
|
||||
.item-button-right .item-content > .button,
|
||||
.item-button-right > .buttons,
|
||||
.item-button-right .item-content > .buttons {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: ceil($item-padding / 2);
|
||||
right: $item-padding;
|
||||
min-width: $item-icon-font-size + ($button-border-width * 2);
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
|
||||
.icon:before {
|
||||
position: relative;
|
||||
left: auto;
|
||||
width: auto;
|
||||
line-height: $item-icon-font-size - 1;
|
||||
}
|
||||
|
||||
> .button {
|
||||
margin: 0px 2px;
|
||||
min-width: $item-icon-font-size + ($button-border-width * 2);
|
||||
min-height: $item-icon-font-size + ($button-border-width * 2);
|
||||
font-size: $item-button-font-size;
|
||||
line-height: $item-button-line-height;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Avatar
|
||||
// -------------------------------
|
||||
|
||||
.item-avatar,
|
||||
.item-avatar .item-content,
|
||||
.item-avatar-left,
|
||||
.item-avatar-left .item-content {
|
||||
padding-left: $item-avatar-width + ($item-padding * 2);
|
||||
min-height: $item-avatar-width + ($item-padding * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-padding;
|
||||
left: $item-padding;
|
||||
max-width: $item-avatar-width;
|
||||
max-height: $item-avatar-height;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: $item-avatar-border-radius;
|
||||
}
|
||||
}
|
||||
|
||||
.item-avatar-right,
|
||||
.item-avatar-right .item-content {
|
||||
padding-right: $item-avatar-width + ($item-padding * 2);
|
||||
min-height: $item-avatar-width + ($item-padding * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-padding;
|
||||
right: $item-padding;
|
||||
max-width: $item-avatar-width;
|
||||
max-height: $item-avatar-height;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: $item-avatar-border-radius;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Thumbnails
|
||||
// -------------------------------
|
||||
|
||||
.item-thumbnail-left,
|
||||
.item-thumbnail-left .item-content {
|
||||
padding-top: $item-padding / 2;
|
||||
padding-left: $item-thumbnail-width + $item-thumbnail-margin + $item-padding;
|
||||
min-height: $item-thumbnail-height + ($item-thumbnail-margin * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-thumbnail-margin;
|
||||
left: $item-thumbnail-margin;
|
||||
max-width: $item-thumbnail-width;
|
||||
max-height: $item-thumbnail-height;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.item-avatar.item-complex,
|
||||
.item-avatar-left.item-complex,
|
||||
.item-thumbnail-left.item-complex {
|
||||
padding-top: 0;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.item-thumbnail-right,
|
||||
.item-thumbnail-right .item-content {
|
||||
padding-top: $item-padding / 2;
|
||||
padding-right: $item-thumbnail-width + $item-thumbnail-margin + $item-padding;
|
||||
min-height: $item-thumbnail-height + ($item-thumbnail-margin * 2);
|
||||
|
||||
> img:first-child,
|
||||
.item-image {
|
||||
position: absolute;
|
||||
top: $item-thumbnail-margin;
|
||||
right: $item-thumbnail-margin;
|
||||
max-width: $item-thumbnail-width;
|
||||
max-height: $item-thumbnail-height;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.item-avatar-right.item-complex,
|
||||
.item-thumbnail-right.item-complex {
|
||||
padding-top: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
|
||||
// Item Image
|
||||
// -------------------------------
|
||||
|
||||
.item-image {
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
|
||||
img:first-child, .list-img {
|
||||
width: 100%;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Body
|
||||
// -------------------------------
|
||||
|
||||
.item-body {
|
||||
overflow: auto;
|
||||
padding: $item-padding;
|
||||
text-overflow: inherit;
|
||||
white-space: normal;
|
||||
|
||||
h1, h2, h3, h4, h5, h6, p {
|
||||
margin-top: $item-padding;
|
||||
margin-bottom: $item-padding;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Divider
|
||||
// -------------------------------
|
||||
|
||||
.item-divider {
|
||||
padding-top: ceil($item-padding / 2);
|
||||
padding-bottom: ceil($item-padding / 2);
|
||||
min-height: 30px;
|
||||
background-color: $item-divider-bg;
|
||||
color: $item-divider-color;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.platform-ios .item-divider-platform,
|
||||
.item-divider-ios {
|
||||
padding-top: 26px;
|
||||
text-transform: uppercase;
|
||||
font-weight: 300;
|
||||
font-size: 13px;
|
||||
background-color: #efeff4;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.platform-android .item-divider-platform,
|
||||
.item-divider-android {
|
||||
font-weight: 300;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
|
||||
// Item Note
|
||||
// -------------------------------
|
||||
|
||||
.item-note {
|
||||
float: right;
|
||||
color: #aaa;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
|
||||
// Item Editing
|
||||
// -------------------------------
|
||||
|
||||
.item-left-editable .item-content,
|
||||
.item-right-editable .item-content {
|
||||
// setup standard transition settings
|
||||
@include transition-duration( $item-edit-transition-duration );
|
||||
@include transition-timing-function( $item-edit-transition-function );
|
||||
-webkit-transition-property: -webkit-transform;
|
||||
-moz-transition-property: -moz-transform;
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
.list-left-editing .item-left-editable .item-content,
|
||||
.item-left-editing.item-left-editable .item-content {
|
||||
// actively editing the left side of the item
|
||||
@include translate3d($item-left-edit-open-width, 0, 0);
|
||||
}
|
||||
|
||||
.item-remove-animate {
|
||||
&.ng-leave {
|
||||
@include transition-duration( $item-remove-transition-duration );
|
||||
}
|
||||
&.ng-leave .item-content,
|
||||
&.ng-leave:last-of-type {
|
||||
@include transition-duration( $item-remove-transition-duration );
|
||||
@include transition-timing-function( $item-remove-transition-function );
|
||||
@include transition-property( all );
|
||||
}
|
||||
|
||||
&.ng-leave.ng-leave-active .item-content {
|
||||
opacity:0;
|
||||
-webkit-transform: translate3d(-100%, 0, 0) !important;
|
||||
transform: translate3d(-100%, 0, 0) !important;
|
||||
}
|
||||
&.ng-leave.ng-leave-active:last-of-type {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
&.ng-leave.ng-leave-active ~ ion-item:not(.ng-leave) {
|
||||
-webkit-transform: translate3d(0, unquote('-webkit-calc(-100% + 1px)'), 0);
|
||||
transform: translate3d(0, calc(-100% + 1px), 0);
|
||||
@include transition-duration( $item-remove-transition-duration );
|
||||
@include transition-timing-function( $item-remove-descendents-transition-function );
|
||||
@include transition-property( all );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Item Left Edit Button
|
||||
// -------------------------------
|
||||
|
||||
.item-left-edit {
|
||||
@include transition(all $item-edit-transition-function $item-edit-transition-duration / 2);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-item-edit;
|
||||
width: $item-left-edit-open-width;
|
||||
height: 100%;
|
||||
line-height: 100%;
|
||||
|
||||
.button {
|
||||
height: 100%;
|
||||
|
||||
&.icon {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
display: none;
|
||||
opacity: 0;
|
||||
@include translate3d( ($item-left-edit-left - $item-left-edit-open-width) / 2, 0, 0);
|
||||
&.visible {
|
||||
display: block;
|
||||
&.active {
|
||||
opacity: 1;
|
||||
@include translate3d($item-left-edit-left, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-left-editing .item-left-edit {
|
||||
@include transition-delay($item-edit-transition-duration / 2);
|
||||
}
|
||||
|
||||
// Item Delete (Left side edit button)
|
||||
// -------------------------------
|
||||
|
||||
.item-delete .button.icon {
|
||||
color: $item-delete-icon-color;
|
||||
font-size: $item-delete-icon-size;
|
||||
|
||||
&:hover {
|
||||
opacity: .7;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Right Edit Button
|
||||
// -------------------------------
|
||||
|
||||
.item-right-edit {
|
||||
@include transition(all $item-edit-transition-function $item-edit-transition-duration);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: $z-index-item-reorder;
|
||||
width: $item-right-edit-open-width * 1.5;
|
||||
height: 100%;
|
||||
background: inherit;
|
||||
padding-left: 20px;
|
||||
|
||||
.button {
|
||||
min-width: $item-right-edit-open-width;
|
||||
height: 100%;
|
||||
|
||||
&.icon {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
font-size: $item-reorder-icon-size;
|
||||
}
|
||||
}
|
||||
|
||||
display: block;
|
||||
opacity: 0;
|
||||
@include translate3d($item-right-edit-open-width * 1.5, 0, 0);
|
||||
&.visible {
|
||||
display: block;
|
||||
&.active {
|
||||
opacity: 1;
|
||||
@include translate3d(0, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Reordering (Right side edit button)
|
||||
// -------------------------------
|
||||
|
||||
.item-reorder .button.icon {
|
||||
color: $item-reorder-icon-color;
|
||||
font-size: $item-reorder-icon-size;
|
||||
}
|
||||
|
||||
.item-reordering {
|
||||
// item is actively being reordered
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: $z-index-item-reordering;
|
||||
width: 100%;
|
||||
box-shadow: 0px 0px 10px 0px #aaa;
|
||||
|
||||
.item-reorder {
|
||||
z-index: $z-index-item-reordering;
|
||||
}
|
||||
}
|
||||
|
||||
.item-placeholder {
|
||||
// placeholder for the item that's being reordered
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The hidden right-side buttons that can be exposed under a list item
|
||||
* with dragging.
|
||||
*/
|
||||
.item-options {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: $z-index-item-options;
|
||||
height: 100%;
|
||||
|
||||
.button {
|
||||
height: 100%;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
@include display-inline-flex();
|
||||
@include align-items(center);
|
||||
|
||||
&:before{
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
|
||||
/**
|
||||
* Lists
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.list {
|
||||
position: relative;
|
||||
padding-top: $item-border-width;
|
||||
padding-bottom: $item-border-width;
|
||||
padding-left: 0; // reset padding because ul and ol
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.list:last-child {
|
||||
margin-bottom: 0px;
|
||||
&.card{
|
||||
margin-bottom:40px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* List Header
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.list-header {
|
||||
margin-top: $list-header-margin-top;
|
||||
padding: $list-header-padding;
|
||||
background-color: $list-header-bg;
|
||||
color: $list-header-color;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
// when its a card make sure it doesn't duplicate top and bottom borders
|
||||
.card.list .list-item {
|
||||
padding-right: 1px;
|
||||
padding-left: 1px;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Cards and Inset Lists
|
||||
* --------------------------------------------------
|
||||
* A card and list-inset are close to the same thing, except a card as a box shadow.
|
||||
*/
|
||||
|
||||
.card,
|
||||
.list-inset {
|
||||
overflow: hidden;
|
||||
margin: ($content-padding * 2) $content-padding;
|
||||
border-radius: $card-border-radius;
|
||||
background-color: $card-body-bg;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding-top: $item-border-width;
|
||||
padding-bottom: $item-border-width;
|
||||
box-shadow: $card-box-shadow;
|
||||
|
||||
.item {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
.item:first-child {
|
||||
border-top: 0;
|
||||
}
|
||||
.item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.padding {
|
||||
.card, .list-inset {
|
||||
margin-left: 0;
|
||||
margin-right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.card .item,
|
||||
.list-inset .item,
|
||||
.padding > .list .item
|
||||
{
|
||||
&:first-child {
|
||||
border-top-left-radius: $card-border-radius;
|
||||
border-top-right-radius: $card-border-radius;
|
||||
|
||||
.item-content {
|
||||
border-top-left-radius: $card-border-radius;
|
||||
border-top-right-radius: $card-border-radius;
|
||||
}
|
||||
}
|
||||
&:last-child {
|
||||
border-bottom-right-radius: $card-border-radius;
|
||||
border-bottom-left-radius: $card-border-radius;
|
||||
|
||||
.item-content {
|
||||
border-bottom-right-radius: $card-border-radius;
|
||||
border-bottom-left-radius: $card-border-radius;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card .item:last-child,
|
||||
.list-inset .item:last-child {
|
||||
margin-bottom: $item-border-width * -1;
|
||||
}
|
||||
|
||||
.card .item,
|
||||
.list-inset .item,
|
||||
.padding > .list .item,
|
||||
.padding-horizontal > .list .item {
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
|
||||
&.item-input input {
|
||||
padding-right: 44px;
|
||||
}
|
||||
}
|
||||
.padding-left > .list .item {
|
||||
margin-left: 0;
|
||||
}
|
||||
.padding-right > .list .item {
|
||||
margin-right: 0;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
|
||||
/**
|
||||
* Loading
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.loading-container {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
|
||||
z-index: $z-index-loading;
|
||||
|
||||
@include display-flex();
|
||||
@include justify-content(center);
|
||||
@include align-items(center);
|
||||
|
||||
@include transition(0.2s opacity linear);
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
|
||||
&:not(.visible) .icon,
|
||||
&:not(.visible) .spinner{
|
||||
display: none;
|
||||
}
|
||||
&.visible {
|
||||
visibility: visible;
|
||||
}
|
||||
&.active {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.loading {
|
||||
padding: $loading-padding;
|
||||
|
||||
border-radius: $loading-border-radius;
|
||||
background-color: $loading-bg-color;
|
||||
|
||||
color: $loading-text-color;
|
||||
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
font-size: $loading-font-size;
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: $loading-text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
|
||||
/**
|
||||
* Menus
|
||||
* --------------------------------------------------
|
||||
* Side panel structure
|
||||
*/
|
||||
|
||||
.menu {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
z-index: $z-index-menu;
|
||||
overflow: hidden;
|
||||
|
||||
min-height: 100%;
|
||||
max-height: 100%;
|
||||
width: $menu-width;
|
||||
|
||||
background-color: $menu-bg;
|
||||
|
||||
.scroll-content {
|
||||
z-index: $z-index-menu-scroll-content;
|
||||
}
|
||||
|
||||
.bar-header {
|
||||
z-index: $z-index-menu-bar-header;
|
||||
}
|
||||
}
|
||||
|
||||
.menu-content {
|
||||
@include transform(none);
|
||||
box-shadow: $menu-side-shadow;
|
||||
}
|
||||
|
||||
.menu-open .menu-content .pane,
|
||||
.menu-open .menu-content .scroll-content {
|
||||
pointer-events: none;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.grade-b .menu-content,
|
||||
.grade-c .menu-content {
|
||||
@include box-sizing(content-box);
|
||||
right: -1px;
|
||||
left: -1px;
|
||||
border-right: 1px solid #ccc;
|
||||
border-left: 1px solid #ccc;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.menu-left {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.menu-right {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.aside-open.aside-resizing .menu-right {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.menu-animated {
|
||||
@include transition-transform($menu-animation-speed ease);
|
||||
}
|
||||
@@ -0,0 +1,640 @@
|
||||
|
||||
// Button Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin button-style($bg-color, $border-color, $active-bg-color, $active-border-color, $color) {
|
||||
border-color: transparent;//$border-color;
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
|
||||
// Give desktop users something to play with
|
||||
&:hover {
|
||||
color: $color;
|
||||
text-decoration: none;
|
||||
}
|
||||
&.active,
|
||||
&.activated {
|
||||
//border-color: transparent;//$active-border-color;
|
||||
background-color: $active-bg-color;
|
||||
//box-shadow: inset 0 1px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button-clear($color, $font-size:"") {
|
||||
&.button-clear {
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
color: $color;
|
||||
|
||||
@if $font-size != "" {
|
||||
font-size: $font-size;
|
||||
}
|
||||
}
|
||||
&.button-icon {
|
||||
border-color: transparent;
|
||||
background: none;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin button-outline($color, $text-color:"") {
|
||||
&.button-outline {
|
||||
border-color: $color;
|
||||
background: transparent;
|
||||
@if $text-color == "" {
|
||||
$text-color: $color;
|
||||
}
|
||||
color: $text-color;
|
||||
&.active,
|
||||
&.activated {
|
||||
background-color: $color;
|
||||
box-shadow: none;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Bar Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin bar-style($bg-color, $border-color, $color) {
|
||||
border-color: $border-color;
|
||||
background-color: $bg-color;
|
||||
background-image: linear-gradient(0deg, $border-color, $border-color 50%, transparent 50%);
|
||||
color: $color;
|
||||
|
||||
.title {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Tab Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin tab-style($bg-color, $border-color, $color) {
|
||||
border-color: $border-color;
|
||||
background-color: $bg-color;
|
||||
background-image: linear-gradient(0deg, $border-color, $border-color 50%, transparent 50%);
|
||||
color: $color;
|
||||
}
|
||||
|
||||
@mixin tab-badge-style($bg-color, $color) {
|
||||
.tab-item .badge {
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Item Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin item-style($bg-color, $border-color, $color) {
|
||||
border-color: $border-color;
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
}
|
||||
|
||||
@mixin item-active-style($active-bg-color, $active-border-color) {
|
||||
border-color: $active-border-color;
|
||||
background-color: $active-bg-color;
|
||||
&.item-complex > .item-content {
|
||||
border-color: $active-border-color;
|
||||
background-color: $active-bg-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Badge Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin badge-style($bg-color, $color) {
|
||||
background-color: $bg-color;
|
||||
color: $color;
|
||||
}
|
||||
|
||||
|
||||
// Range Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin range-style($track-bg-color) {
|
||||
&::-webkit-slider-thumb:before {
|
||||
background: $track-bg-color;
|
||||
}
|
||||
&::-ms-fill-lower{
|
||||
background: $track-bg-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Checkbox Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin checkbox-style($off-border-color, $on-bg-color, $on-border-color) {
|
||||
& input:before,
|
||||
& .checkbox-icon:before {
|
||||
border-color: $off-border-color;
|
||||
}
|
||||
|
||||
// what the background looks like when its checked
|
||||
& input:checked:before,
|
||||
& input:checked + .checkbox-icon:before {
|
||||
background: $on-bg-color;
|
||||
border-color: $on-border-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Toggle Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin toggle-style($on-border-color, $on-bg-color) {
|
||||
// the track when the toggle is "on"
|
||||
& input:checked + .track {
|
||||
border-color: $on-border-color;
|
||||
background-color: $on-bg-color;
|
||||
}
|
||||
}
|
||||
@mixin toggle-small-style($on-bg-color) {
|
||||
// the track when the toggle is "on"
|
||||
& input:checked + .track {
|
||||
background-color: rgba($on-bg-color, .5);
|
||||
}
|
||||
& input:checked + .track .handle {
|
||||
background-color: $on-bg-color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Clearfix
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin clearfix {
|
||||
*zoom: 1;
|
||||
&:before,
|
||||
&:after {
|
||||
display: table;
|
||||
content: "";
|
||||
line-height: 0;
|
||||
}
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Placeholder text
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin placeholder($color: $input-color-placeholder, $text-indent: 0) {
|
||||
&::-moz-placeholder { // Firefox 19+
|
||||
color: $color;
|
||||
}
|
||||
&:-ms-input-placeholder {
|
||||
color: $color;
|
||||
}
|
||||
&::-webkit-input-placeholder {
|
||||
color: $color;
|
||||
// Safari placeholder margin issue
|
||||
text-indent: $text-indent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Text Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin text-size-adjust($value: none) {
|
||||
-webkit-text-size-adjust: $value;
|
||||
-moz-text-size-adjust: $value;
|
||||
text-size-adjust: $value;
|
||||
}
|
||||
@mixin tap-highlight-transparent() {
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
-webkit-tap-highlight-color: transparent; // For some Androids
|
||||
}
|
||||
@mixin touch-callout($value: none) {
|
||||
-webkit-touch-callout: $value;
|
||||
}
|
||||
|
||||
|
||||
// Font Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin font-family-serif() {
|
||||
font-family: $serif-font-family;
|
||||
}
|
||||
@mixin font-family-sans-serif() {
|
||||
font-family: $sans-font-family;
|
||||
}
|
||||
@mixin font-family-monospace() {
|
||||
font-family: $mono-font-family;
|
||||
}
|
||||
@mixin font-shorthand($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
font-weight: $weight;
|
||||
font-size: $size;
|
||||
line-height: $line-height;
|
||||
}
|
||||
@mixin font-serif($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
@include font-family-serif();
|
||||
@include font-shorthand($size, $weight, $line-height);
|
||||
}
|
||||
@mixin font-sans-serif($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
@include font-family-sans-serif();
|
||||
@include font-shorthand($size, $weight, $line-height);
|
||||
}
|
||||
@mixin font-monospace($size: $base-font-size, $weight: normal, $line-height: $base-line-height) {
|
||||
@include font-family-monospace();
|
||||
@include font-shorthand($size, $weight, $line-height);
|
||||
}
|
||||
@mixin font-smoothing($font-smoothing) {
|
||||
-webkit-font-smoothing: $font-smoothing;
|
||||
font-smoothing: $font-smoothing;
|
||||
}
|
||||
|
||||
|
||||
// Appearance
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin appearance($val) {
|
||||
-webkit-appearance: $val;
|
||||
-moz-appearance: $val;
|
||||
appearance: $val;
|
||||
}
|
||||
|
||||
|
||||
// Border Radius Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin border-radius($radius) {
|
||||
-webkit-border-radius: $radius;
|
||||
border-radius: $radius;
|
||||
}
|
||||
|
||||
// Single Corner Border Radius
|
||||
@mixin border-top-left-radius($radius) {
|
||||
-webkit-border-top-left-radius: $radius;
|
||||
border-top-left-radius: $radius;
|
||||
}
|
||||
@mixin border-top-right-radius($radius) {
|
||||
-webkit-border-top-right-radius: $radius;
|
||||
border-top-right-radius: $radius;
|
||||
}
|
||||
@mixin border-bottom-right-radius($radius) {
|
||||
-webkit-border-bottom-right-radius: $radius;
|
||||
border-bottom-right-radius: $radius;
|
||||
}
|
||||
@mixin border-bottom-left-radius($radius) {
|
||||
-webkit-border-bottom-left-radius: $radius;
|
||||
border-bottom-left-radius: $radius;
|
||||
}
|
||||
|
||||
// Single Side Border Radius
|
||||
@mixin border-top-radius($radius) {
|
||||
@include border-top-right-radius($radius);
|
||||
@include border-top-left-radius($radius);
|
||||
}
|
||||
@mixin border-right-radius($radius) {
|
||||
@include border-top-right-radius($radius);
|
||||
@include border-bottom-right-radius($radius);
|
||||
}
|
||||
@mixin border-bottom-radius($radius) {
|
||||
@include border-bottom-right-radius($radius);
|
||||
@include border-bottom-left-radius($radius);
|
||||
}
|
||||
@mixin border-left-radius($radius) {
|
||||
@include border-top-left-radius($radius);
|
||||
@include border-bottom-left-radius($radius);
|
||||
}
|
||||
|
||||
|
||||
// Box shadows
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin box-shadow($shadow...) {
|
||||
-webkit-box-shadow: $shadow;
|
||||
box-shadow: $shadow;
|
||||
}
|
||||
|
||||
|
||||
// Transition Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin transition($transition...) {
|
||||
-webkit-transition: $transition;
|
||||
transition: $transition;
|
||||
}
|
||||
@mixin transition-delay($transition-delay) {
|
||||
-webkit-transition-delay: $transition-delay;
|
||||
transition-delay: $transition-delay;
|
||||
}
|
||||
@mixin transition-duration($transition-duration) {
|
||||
-webkit-transition-duration: $transition-duration;
|
||||
transition-duration: $transition-duration;
|
||||
}
|
||||
@mixin transition-timing-function($transition-timing) {
|
||||
-webkit-transition-timing-function: $transition-timing;
|
||||
transition-timing-function: $transition-timing;
|
||||
}
|
||||
@mixin transition-property($property) {
|
||||
-webkit-transition-property: $property;
|
||||
transition-property: $property;
|
||||
}
|
||||
@mixin transition-transform($properties...) {
|
||||
// special case cuz of transform vendor prefixes
|
||||
-webkit-transition: -webkit-transform $properties;
|
||||
transition: transform $properties;
|
||||
}
|
||||
|
||||
|
||||
// Animation Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin animation($animation) {
|
||||
-webkit-animation: $animation;
|
||||
animation: $animation;
|
||||
}
|
||||
@mixin animation-duration($duration) {
|
||||
-webkit-animation-duration: $duration;
|
||||
animation-duration: $duration;
|
||||
}
|
||||
@mixin animation-direction($direction) {
|
||||
-webkit-animation-direction: $direction;
|
||||
animation-direction: $direction;
|
||||
}
|
||||
@mixin animation-timing-function($animation-timing) {
|
||||
-webkit-animation-timing-function: $animation-timing;
|
||||
animation-timing-function: $animation-timing;
|
||||
}
|
||||
@mixin animation-fill-mode($fill-mode) {
|
||||
-webkit-animation-fill-mode: $fill-mode;
|
||||
animation-fill-mode: $fill-mode;
|
||||
}
|
||||
@mixin animation-name($name...) {
|
||||
-webkit-animation-name: $name;
|
||||
animation-name: $name;
|
||||
}
|
||||
@mixin animation-iteration-count($count) {
|
||||
-webkit-animation-iteration-count: $count;
|
||||
animation-iteration-count: $count;
|
||||
}
|
||||
|
||||
|
||||
// Transformation Mixins
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin rotate($degrees) {
|
||||
@include transform( rotate($degrees) );
|
||||
}
|
||||
@mixin scale($ratio) {
|
||||
@include transform( scale($ratio) );
|
||||
}
|
||||
@mixin translate($x, $y) {
|
||||
@include transform( translate($x, $y) );
|
||||
}
|
||||
@mixin skew($x, $y) {
|
||||
@include transform( skew($x, $y) );
|
||||
-webkit-backface-visibility: hidden;
|
||||
}
|
||||
@mixin translate3d($x, $y, $z) {
|
||||
@include transform( translate3d($x, $y, $z) );
|
||||
}
|
||||
@mixin translateZ($z) {
|
||||
@include transform( translateZ($z) );
|
||||
}
|
||||
@mixin transform($val) {
|
||||
-webkit-transform: $val;
|
||||
transform: $val;
|
||||
}
|
||||
|
||||
@mixin transform-origin($left, $top) {
|
||||
-webkit-transform-origin: $left $top;
|
||||
transform-origin: $left $top;
|
||||
}
|
||||
|
||||
|
||||
// Backface visibility
|
||||
// --------------------------------------------------
|
||||
// Prevent browsers from flickering when using CSS 3D transforms.
|
||||
// Default value is `visible`, but can be changed to `hidden
|
||||
|
||||
@mixin backface-visibility($visibility){
|
||||
-webkit-backface-visibility: $visibility;
|
||||
backface-visibility: $visibility;
|
||||
}
|
||||
|
||||
|
||||
// Background clipping
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin background-clip($clip) {
|
||||
-webkit-background-clip: $clip;
|
||||
background-clip: $clip;
|
||||
}
|
||||
|
||||
|
||||
// Background sizing
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin background-size($size) {
|
||||
-webkit-background-size: $size;
|
||||
background-size: $size;
|
||||
}
|
||||
|
||||
|
||||
// Box sizing
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin box-sizing($boxmodel) {
|
||||
-webkit-box-sizing: $boxmodel;
|
||||
-moz-box-sizing: $boxmodel;
|
||||
box-sizing: $boxmodel;
|
||||
}
|
||||
|
||||
|
||||
// User select
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin user-select($select) {
|
||||
-webkit-user-select: $select;
|
||||
-moz-user-select: $select;
|
||||
-ms-user-select: $select;
|
||||
user-select: $select;
|
||||
}
|
||||
|
||||
|
||||
// Content Columns
|
||||
// --------------------------------------------------
|
||||
|
||||
@mixin content-columns($columnCount, $columnGap: $grid-gutter-width) {
|
||||
-webkit-column-count: $columnCount;
|
||||
-moz-column-count: $columnCount;
|
||||
column-count: $columnCount;
|
||||
-webkit-column-gap: $columnGap;
|
||||
-moz-column-gap: $columnGap;
|
||||
column-gap: $columnGap;
|
||||
}
|
||||
|
||||
|
||||
// Flexbox Mixins
|
||||
// --------------------------------------------------
|
||||
// http://philipwalton.github.io/solved-by-flexbox/
|
||||
// https://github.com/philipwalton/solved-by-flexbox
|
||||
|
||||
@mixin display-flex {
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -moz-box;
|
||||
display: -moz-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
@mixin display-inline-flex {
|
||||
display: -webkit-inline-box;
|
||||
display: -webkit-inline-flex;
|
||||
display: -moz-inline-flex;
|
||||
display: -ms-inline-flexbox;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
@mixin flex-direction($value: row) {
|
||||
@if $value == row-reverse {
|
||||
-webkit-box-direction: reverse;
|
||||
-webkit-box-orient: horizontal;
|
||||
} @else if $value == column {
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: vertical;
|
||||
} @else if $value == column-reverse {
|
||||
-webkit-box-direction: reverse;
|
||||
-webkit-box-orient: vertical;
|
||||
} @else {
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: horizontal;
|
||||
}
|
||||
-webkit-flex-direction: $value;
|
||||
-moz-flex-direction: $value;
|
||||
-ms-flex-direction: $value;
|
||||
flex-direction: $value;
|
||||
}
|
||||
|
||||
@mixin flex-wrap($value: nowrap) {
|
||||
// No Webkit Box fallback.
|
||||
-webkit-flex-wrap: $value;
|
||||
-moz-flex-wrap: $value;
|
||||
@if $value == nowrap {
|
||||
-ms-flex-wrap: none;
|
||||
} @else {
|
||||
-ms-flex-wrap: $value;
|
||||
}
|
||||
flex-wrap: $value;
|
||||
}
|
||||
|
||||
@mixin flex($fg: 1, $fs: null, $fb: null) {
|
||||
-webkit-box-flex: $fg;
|
||||
-webkit-flex: $fg $fs $fb;
|
||||
-moz-box-flex: $fg;
|
||||
-moz-flex: $fg $fs $fb;
|
||||
-ms-flex: $fg $fs $fb;
|
||||
flex: $fg $fs $fb;
|
||||
}
|
||||
|
||||
@mixin flex-flow($values: (row nowrap)) {
|
||||
// No Webkit Box fallback.
|
||||
-webkit-flex-flow: $values;
|
||||
-moz-flex-flow: $values;
|
||||
-ms-flex-flow: $values;
|
||||
flex-flow: $values;
|
||||
}
|
||||
|
||||
@mixin align-items($value: stretch) {
|
||||
@if $value == flex-start {
|
||||
-webkit-box-align: start;
|
||||
-ms-flex-align: start;
|
||||
} @else if $value == flex-end {
|
||||
-webkit-box-align: end;
|
||||
-ms-flex-align: end;
|
||||
} @else {
|
||||
-webkit-box-align: $value;
|
||||
-ms-flex-align: $value;
|
||||
}
|
||||
-webkit-align-items: $value;
|
||||
-moz-align-items: $value;
|
||||
align-items: $value;
|
||||
}
|
||||
|
||||
@mixin align-self($value: auto) {
|
||||
-webkit-align-self: $value;
|
||||
-moz-align-self: $value;
|
||||
@if $value == flex-start {
|
||||
-ms-flex-item-align: start;
|
||||
} @else if $value == flex-end {
|
||||
-ms-flex-item-align: end;
|
||||
} @else {
|
||||
-ms-flex-item-align: $value;
|
||||
}
|
||||
align-self: $value;
|
||||
}
|
||||
|
||||
@mixin align-content($value: stretch) {
|
||||
-webkit-align-content: $value;
|
||||
-moz-align-content: $value;
|
||||
@if $value == flex-start {
|
||||
-ms-flex-line-pack: start;
|
||||
} @else if $value == flex-end {
|
||||
-ms-flex-line-pack: end;
|
||||
} @else {
|
||||
-ms-flex-line-pack: $value;
|
||||
}
|
||||
align-content: $value;
|
||||
}
|
||||
|
||||
@mixin justify-content($value: stretch) {
|
||||
@if $value == flex-start {
|
||||
-webkit-box-pack: start;
|
||||
-ms-flex-pack: start;
|
||||
} @else if $value == flex-end {
|
||||
-webkit-box-pack: end;
|
||||
-ms-flex-pack: end;
|
||||
} @else if $value == space-between {
|
||||
-webkit-box-pack: justify;
|
||||
-ms-flex-pack: justify;
|
||||
} @else {
|
||||
-webkit-box-pack: $value;
|
||||
-ms-flex-pack: $value;
|
||||
}
|
||||
-webkit-justify-content: $value;
|
||||
-moz-justify-content: $value;
|
||||
justify-content: $value;
|
||||
}
|
||||
|
||||
@mixin flex-order($n) {
|
||||
-webkit-order: $n;
|
||||
-ms-flex-order: $n;
|
||||
order: $n;
|
||||
-webkit-box-ordinal-group: $n;
|
||||
}
|
||||
|
||||
@mixin responsive-grid-break($selector, $max-width) {
|
||||
@media (max-width: $max-width) {
|
||||
#{$selector} {
|
||||
-webkit-box-direction: normal;
|
||||
-moz-box-direction: normal;
|
||||
-webkit-box-orient: vertical;
|
||||
-moz-box-orient: vertical;
|
||||
-webkit-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
|
||||
.col, .col-10, .col-20, .col-25, .col-33, .col-34, .col-50, .col-66, .col-67, .col-75, .col-80, .col-90 {
|
||||
@include flex(1);
|
||||
margin-bottom: ($grid-padding-width * 3) / 2;
|
||||
margin-left: 0;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
|
||||
/**
|
||||
* Modals
|
||||
* --------------------------------------------------
|
||||
* Modals are independent windows that slide in from off-screen.
|
||||
*/
|
||||
|
||||
.modal-backdrop,
|
||||
.modal-backdrop-bg {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-modal;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.modal-backdrop-bg {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.modal {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
z-index: $z-index-modal;
|
||||
overflow: hidden;
|
||||
min-height: 100%;
|
||||
width: 100%;
|
||||
background-color: $modal-bg-color;
|
||||
}
|
||||
|
||||
@media (min-width: $modal-inset-mode-break-point) {
|
||||
// inset mode is when the modal doesn't fill the entire
|
||||
// display but instead is centered within a large display
|
||||
.modal {
|
||||
top: $modal-inset-mode-top;
|
||||
right: $modal-inset-mode-right;
|
||||
bottom: $modal-inset-mode-bottom;
|
||||
left: $modal-inset-mode-left;
|
||||
min-height: $modal-inset-mode-min-height;
|
||||
width: (100% - $modal-inset-mode-left - $modal-inset-mode-right);
|
||||
}
|
||||
|
||||
.modal.ng-leave-active {
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
// remove ios header padding from inset header
|
||||
.platform-ios.platform-cordova .modal-wrapper .modal {
|
||||
.bar-header:not(.bar-subheader) {
|
||||
height: $bar-height;
|
||||
> * {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
.tabs-top > .tabs,
|
||||
.tabs.tabs-top {
|
||||
top: $bar-height;
|
||||
}
|
||||
.has-header,
|
||||
.bar-subheader {
|
||||
top: $bar-height;
|
||||
}
|
||||
.has-subheader {
|
||||
top: $bar-height + $bar-subheader-height;
|
||||
}
|
||||
.has-header.has-tabs-top {
|
||||
top: $bar-height + $tabs-height;
|
||||
}
|
||||
.has-header.has-subheader.has-tabs-top {
|
||||
top: $bar-height + $bar-subheader-height + $tabs-height;
|
||||
}
|
||||
}
|
||||
|
||||
.modal-backdrop-bg {
|
||||
@include transition(opacity 300ms ease-in-out);
|
||||
background-color: $modal-backdrop-bg-active;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.active .modal-backdrop-bg {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
// disable clicks on all but the modal
|
||||
.modal-open {
|
||||
pointer-events: none;
|
||||
|
||||
.modal,
|
||||
.modal-backdrop {
|
||||
pointer-events: auto;
|
||||
}
|
||||
// prevent clicks on modal when loading overlay is active though
|
||||
&.loading-active {
|
||||
.modal,
|
||||
.modal-backdrop {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
|
||||
/**
|
||||
* Platform
|
||||
* --------------------------------------------------
|
||||
* Platform specific tweaks
|
||||
*/
|
||||
|
||||
.platform-ios.platform-cordova {
|
||||
// iOS has a status bar which sits on top of the header.
|
||||
// Bump down everything to make room for it. However, if
|
||||
// if its in Cordova, and set to fullscreen, then disregard the bump.
|
||||
&:not(.fullscreen) {
|
||||
.bar-header:not(.bar-subheader) {
|
||||
height: $bar-height + $ios-statusbar-height;
|
||||
|
||||
&.item-input-inset .item-input-wrapper {
|
||||
margin-top: 19px !important;
|
||||
}
|
||||
|
||||
> * {
|
||||
margin-top: $ios-statusbar-height;
|
||||
}
|
||||
}
|
||||
.tabs-top > .tabs,
|
||||
.tabs.tabs-top {
|
||||
top: $bar-height + $ios-statusbar-height;
|
||||
}
|
||||
|
||||
.has-header,
|
||||
.bar-subheader {
|
||||
top: $bar-height + $ios-statusbar-height;
|
||||
}
|
||||
.has-subheader {
|
||||
top: $bar-height + $bar-subheader-height + $ios-statusbar-height;
|
||||
}
|
||||
.has-header.has-tabs-top {
|
||||
top: $bar-height + $tabs-height + $ios-statusbar-height;
|
||||
}
|
||||
.has-header.has-subheader.has-tabs-top {
|
||||
top: $bar-height + $bar-subheader-height + $tabs-height + $ios-statusbar-height;
|
||||
}
|
||||
}
|
||||
.popover{
|
||||
.bar-header:not(.bar-subheader) {
|
||||
height: $bar-height;
|
||||
&.item-input-inset .item-input-wrapper {
|
||||
margin-top: -1px;
|
||||
}
|
||||
> * {
|
||||
margin-top: 0;
|
||||
}
|
||||
}
|
||||
.has-header,
|
||||
.bar-subheader {
|
||||
top: $bar-height;
|
||||
}
|
||||
.has-subheader {
|
||||
top: $bar-height + $bar-subheader-height;
|
||||
}
|
||||
}
|
||||
&.status-bar-hide {
|
||||
// Cordova doesn't adjust the body height correctly, this makes up for it
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (orientation:landscape) {
|
||||
.platform-ios.platform-browser.platform-ipad {
|
||||
position: fixed; // required for iPad 7 Safari
|
||||
}
|
||||
}
|
||||
|
||||
.platform-c:not(.enable-transitions) * {
|
||||
// disable transitions on grade-c devices (Android 2)
|
||||
-webkit-transition: none !important;
|
||||
transition: none !important;
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
|
||||
/**
|
||||
* Popovers
|
||||
* --------------------------------------------------
|
||||
* Popovers are independent views which float over content
|
||||
*/
|
||||
|
||||
.popover-backdrop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: $z-index-popover;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: $popover-backdrop-bg-inactive;
|
||||
|
||||
&.active {
|
||||
background-color: $popover-backdrop-bg-active;
|
||||
}
|
||||
}
|
||||
|
||||
.popover {
|
||||
position: absolute;
|
||||
top: 25%;
|
||||
left: 50%;
|
||||
z-index: $z-index-popover;
|
||||
display: block;
|
||||
margin-top: 12px;
|
||||
margin-left: -$popover-width / 2;
|
||||
height: $popover-height;
|
||||
width: $popover-width;
|
||||
background-color: $popover-bg-color;
|
||||
box-shadow: $popover-box-shadow;
|
||||
opacity: 0;
|
||||
|
||||
.item:first-child {
|
||||
border-top: 0;
|
||||
}
|
||||
|
||||
.item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
&.popover-bottom {
|
||||
margin-top: -12px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Set popover border-radius
|
||||
.popover,
|
||||
.popover .bar-header {
|
||||
border-radius: $popover-border-radius;
|
||||
}
|
||||
.popover .scroll-content {
|
||||
z-index: 1;
|
||||
margin: 2px 0;
|
||||
}
|
||||
.popover .bar-header {
|
||||
border-bottom-right-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
.popover .has-header {
|
||||
border-top-right-radius: 0;
|
||||
border-top-left-radius: 0;
|
||||
}
|
||||
.popover-arrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
// iOS Popover
|
||||
.platform-ios {
|
||||
|
||||
.popover {
|
||||
box-shadow: $popover-box-shadow-ios;
|
||||
border-radius: $popover-border-radius-ios;
|
||||
}
|
||||
.popover .bar-header {
|
||||
@include border-top-radius($popover-border-radius-ios);
|
||||
}
|
||||
.popover .scroll-content {
|
||||
margin: 8px 0;
|
||||
border-radius: $popover-border-radius-ios;
|
||||
}
|
||||
.popover .scroll-content.has-header {
|
||||
margin-top: 0;
|
||||
}
|
||||
.popover-arrow {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: -17px;
|
||||
width: 30px;
|
||||
height: 19px;
|
||||
overflow: hidden;
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
top: 12px;
|
||||
left: 5px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
background-color: $popover-bg-color;
|
||||
border-radius: 3px;
|
||||
content: '';
|
||||
@include rotate(-45deg);
|
||||
}
|
||||
}
|
||||
.popover-bottom .popover-arrow {
|
||||
top: auto;
|
||||
bottom: -10px;
|
||||
&:after {
|
||||
top: -6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Android Popover
|
||||
.platform-android {
|
||||
|
||||
.popover {
|
||||
margin-top: -32px;
|
||||
background-color: $popover-bg-color-android;
|
||||
box-shadow: $popover-box-shadow-android;
|
||||
|
||||
.item {
|
||||
border-color: $popover-bg-color-android;
|
||||
background-color: $popover-bg-color-android;
|
||||
color: #4d4d4d;
|
||||
}
|
||||
&.popover-bottom {
|
||||
margin-top: 32px;
|
||||
}
|
||||
}
|
||||
|
||||
.popover-backdrop,
|
||||
.popover-backdrop.active {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// disable clicks on all but the popover
|
||||
.popover-open {
|
||||
pointer-events: none;
|
||||
|
||||
.popover,
|
||||
.popover-backdrop {
|
||||
pointer-events: auto;
|
||||
}
|
||||
// prevent clicks on popover when loading overlay is active though
|
||||
&.loading-active {
|
||||
.popover,
|
||||
.popover-backdrop {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// wider popover on larger viewports
|
||||
@media (min-width: $popover-large-break-point) {
|
||||
.popover {
|
||||
width: $popover-large-width;
|
||||
margin-left: -$popover-large-width / 2;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
|
||||
/**
|
||||
* Popups
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.popup-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
background: rgba(0,0,0,0);
|
||||
|
||||
@include display-flex();
|
||||
@include justify-content(center);
|
||||
@include align-items(center);
|
||||
|
||||
z-index: $z-index-popup;
|
||||
|
||||
// Start hidden
|
||||
visibility: hidden;
|
||||
&.popup-showing {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
&.popup-hidden .popup {
|
||||
@include animation-name(scaleOut);
|
||||
@include animation-duration($popup-leave-animation-duration);
|
||||
@include animation-timing-function(ease-in-out);
|
||||
@include animation-fill-mode(both);
|
||||
}
|
||||
|
||||
&.active .popup {
|
||||
@include animation-name(superScaleIn);
|
||||
@include animation-duration($popup-enter-animation-duration);
|
||||
@include animation-timing-function(ease-in-out);
|
||||
@include animation-fill-mode(both);
|
||||
}
|
||||
|
||||
.popup {
|
||||
width: $popup-width;
|
||||
max-width: 100%;
|
||||
max-height: 90%;
|
||||
|
||||
border-radius: $popup-border-radius;
|
||||
background-color: $popup-background-color;
|
||||
|
||||
@include display-flex();
|
||||
@include flex-direction(column);
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.popup-head {
|
||||
padding: 15px 10px;
|
||||
border-bottom: 1px solid #eee;
|
||||
text-align: center;
|
||||
}
|
||||
.popup-title {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 15px;
|
||||
}
|
||||
.popup-sub-title {
|
||||
margin: 5px 0 0 0;
|
||||
padding: 0;
|
||||
font-weight: normal;
|
||||
font-size: 11px;
|
||||
}
|
||||
.popup-body {
|
||||
padding: 10px;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.popup-buttons {
|
||||
@include display-flex();
|
||||
@include flex-direction(row);
|
||||
padding: 10px;
|
||||
min-height: $popup-button-min-height + 20;
|
||||
|
||||
.button {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
min-height: $popup-button-min-height;
|
||||
border-radius: $popup-button-border-radius;
|
||||
line-height: $popup-button-line-height;
|
||||
|
||||
margin-right: 5px;
|
||||
&:last-child {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.popup-open {
|
||||
pointer-events: none;
|
||||
|
||||
&.modal-open .modal {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.popup-backdrop, .popup {
|
||||
pointer-events: auto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
|
||||
/**
|
||||
* Progress
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
progress {
|
||||
display: block;
|
||||
margin: $progress-margin;
|
||||
width: $progress-width;
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
/**
|
||||
* Radio Button Inputs
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-radio {
|
||||
padding: 0;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.item-radio .item-content {
|
||||
/* give some room to the right for the checkmark icon */
|
||||
padding-right: $item-padding * 4;
|
||||
}
|
||||
|
||||
.item-radio .radio-icon {
|
||||
/* checkmark icon will be hidden by default */
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: $z-index-item-radio;
|
||||
visibility: hidden;
|
||||
padding: $item-padding - 2;
|
||||
height: 100%;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.item-radio input {
|
||||
/* hide any radio button inputs elements (the ugly circles) */
|
||||
position: absolute;
|
||||
left: -9999px;
|
||||
|
||||
&:checked + .radio-content .item-content {
|
||||
/* style the item content when its checked */
|
||||
background: #f7f7f7;
|
||||
}
|
||||
|
||||
&:checked + .radio-content .radio-icon {
|
||||
/* show the checkmark icon when its checked */
|
||||
visibility: visible;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
|
||||
/**
|
||||
* Range
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.range input{
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
padding-right: 2px;
|
||||
padding-left: 1px;
|
||||
width: auto;
|
||||
height: $range-slider-height + 15;
|
||||
outline: none;
|
||||
background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, $range-default-track-bg), color-stop(100%, $range-default-track-bg));
|
||||
background: linear-gradient(to right, $range-default-track-bg 0%, $range-default-track-bg 100%);
|
||||
background-position: center;
|
||||
background-size: 99% $range-track-height;
|
||||
background-repeat: no-repeat;
|
||||
-webkit-appearance: none;
|
||||
|
||||
&::-moz-focus-outer {
|
||||
/* hide the focus outline in Firefox */
|
||||
border: 0;
|
||||
}
|
||||
|
||||
&::-webkit-slider-thumb {
|
||||
position: relative;
|
||||
width: $range-slider-width;
|
||||
height: $range-slider-height;
|
||||
border-radius: $range-slider-border-radius;
|
||||
background-color: $toggle-handle-off-bg-color;
|
||||
box-shadow: $range-slider-box-shadow;
|
||||
cursor: pointer;
|
||||
-webkit-appearance: none;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
&::-webkit-slider-thumb:before{
|
||||
/* what creates the colorful line on the left side of the slider */
|
||||
position: absolute;
|
||||
top: ($range-slider-height / 2) - ($range-track-height / 2);
|
||||
left: -2001px;
|
||||
width: 2000px;
|
||||
height: $range-track-height;
|
||||
background: $dark;
|
||||
content: ' ';
|
||||
}
|
||||
|
||||
&::-webkit-slider-thumb:after {
|
||||
/* create a larger (but hidden) hit area */
|
||||
position: absolute;
|
||||
top: -15px;
|
||||
left: -15px;
|
||||
padding: 30px;
|
||||
content: ' ';
|
||||
//background: red;
|
||||
//opacity: .5;
|
||||
}
|
||||
&::-ms-fill-lower{
|
||||
height: $range-track-height;
|
||||
background:$dark;
|
||||
}
|
||||
/*
|
||||
&::-ms-track{
|
||||
background: transparent;
|
||||
border-color: transparent;
|
||||
border-width: 11px 0 16px;
|
||||
color:transparent;
|
||||
margin-top:20px;
|
||||
}
|
||||
&::-ms-thumb {
|
||||
width: $range-slider-width;
|
||||
height: $range-slider-height;
|
||||
border-radius: $range-slider-border-radius;
|
||||
background-color: $toggle-handle-off-bg-color;
|
||||
border-color:$toggle-handle-off-bg-color;
|
||||
box-shadow: $range-slider-box-shadow;
|
||||
margin-left:1px;
|
||||
margin-right:1px;
|
||||
outline:none;
|
||||
}
|
||||
&::-ms-fill-upper {
|
||||
height: $range-track-height;
|
||||
background:$range-default-track-bg;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
.range {
|
||||
@include display-flex();
|
||||
@include align-items(center);
|
||||
padding: 2px 11px;
|
||||
|
||||
&.range-light {
|
||||
input { @include range-style($range-light-track-bg); }
|
||||
}
|
||||
&.range-stable {
|
||||
input { @include range-style($range-stable-track-bg); }
|
||||
}
|
||||
&.range-positive {
|
||||
input { @include range-style($range-positive-track-bg); }
|
||||
}
|
||||
&.range-calm {
|
||||
input { @include range-style($range-calm-track-bg); }
|
||||
}
|
||||
&.range-balanced {
|
||||
input { @include range-style($range-balanced-track-bg); }
|
||||
}
|
||||
&.range-assertive {
|
||||
input { @include range-style($range-assertive-track-bg); }
|
||||
}
|
||||
&.range-energized {
|
||||
input { @include range-style($range-energized-track-bg); }
|
||||
}
|
||||
&.range-royal {
|
||||
input { @include range-style($range-royal-track-bg); }
|
||||
}
|
||||
&.range-dark {
|
||||
input { @include range-style($range-dark-track-bg); }
|
||||
}
|
||||
}
|
||||
|
||||
.range .icon {
|
||||
@include flex(0);
|
||||
display: block;
|
||||
min-width: $range-icon-size;
|
||||
text-align: center;
|
||||
font-size: $range-icon-size;
|
||||
}
|
||||
|
||||
.range input {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
margin-right: 10px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
.range-label {
|
||||
@include flex(0, 0, auto);
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.range-label:first-child {
|
||||
padding-left: 5px;
|
||||
}
|
||||
.range input + .range-label {
|
||||
padding-right: 5px;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
// WP range height must be auto
|
||||
.platform-windowsphone{
|
||||
.range input{
|
||||
height:auto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
|
||||
// Scroll refresher (for pull to refresh)
|
||||
.scroll-refresher {
|
||||
position: absolute;
|
||||
top: -60px;
|
||||
right: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
margin: auto;
|
||||
height: 60px;
|
||||
.ionic-refresher-content {
|
||||
position: absolute;
|
||||
bottom: 15px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
color: $scroll-refresh-icon-color;
|
||||
text-align: center;
|
||||
|
||||
font-size: 30px;
|
||||
|
||||
.text-refreshing,
|
||||
.text-pulling {
|
||||
font-size: 16px;
|
||||
line-height: 16px;
|
||||
}
|
||||
&.ionic-refresher-with-text {
|
||||
bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.icon-refreshing,
|
||||
.icon-pulling {
|
||||
width: 100%;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
-webkit-transform-style: preserve-3d;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.icon-pulling {
|
||||
@include animation-name(refresh-spin-back);
|
||||
@include animation-duration(200ms);
|
||||
@include animation-timing-function(linear);
|
||||
@include animation-fill-mode(none);
|
||||
-webkit-transform: translate3d(0,0,0) rotate(0deg);
|
||||
transform: translate3d(0,0,0) rotate(0deg);
|
||||
}
|
||||
.icon-refreshing,
|
||||
.text-refreshing {
|
||||
display: none;
|
||||
}
|
||||
.icon-refreshing {
|
||||
@include animation-duration(1.5s);
|
||||
}
|
||||
|
||||
&.active {
|
||||
.icon-pulling:not(.pulling-rotation-disabled) {
|
||||
@include animation-name(refresh-spin);
|
||||
-webkit-transform: translate3d(0,0,0) rotate(-180deg);
|
||||
transform: translate3d(0,0,0) rotate(-180deg);
|
||||
}
|
||||
&.refreshing {
|
||||
@include transition(-webkit-transform .2s);
|
||||
@include transition(transform .2s);
|
||||
-webkit-transform: scale(1,1);
|
||||
transform: scale(1,1);
|
||||
|
||||
.icon-pulling,
|
||||
.text-pulling {
|
||||
display: none;
|
||||
}
|
||||
.icon-refreshing,
|
||||
.text-refreshing {
|
||||
display: block;
|
||||
}
|
||||
&.refreshing-tail {
|
||||
-webkit-transform: scale(0,0);
|
||||
transform: scale(0,0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.overflow-scroll > .scroll{
|
||||
&.overscroll{
|
||||
position:fixed;
|
||||
right: 0;
|
||||
left: 0;
|
||||
}
|
||||
-webkit-overflow-scrolling:touch;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
.overflow-scroll.padding > .scroll.overscroll{
|
||||
padding: 10px;
|
||||
}
|
||||
@-webkit-keyframes refresh-spin {
|
||||
0% { -webkit-transform: translate3d(0,0,0) rotate(0); }
|
||||
100% { -webkit-transform: translate3d(0,0,0) rotate(180deg); }
|
||||
}
|
||||
|
||||
@keyframes refresh-spin {
|
||||
0% { transform: translate3d(0,0,0) rotate(0); }
|
||||
100% { transform: translate3d(0,0,0) rotate(180deg); }
|
||||
}
|
||||
|
||||
@-webkit-keyframes refresh-spin-back {
|
||||
0% { -webkit-transform: translate3d(0,0,0) rotate(180deg); }
|
||||
100% { -webkit-transform: translate3d(0,0,0) rotate(0); }
|
||||
}
|
||||
|
||||
@keyframes refresh-spin-back {
|
||||
0% { transform: translate3d(0,0,0) rotate(180deg); }
|
||||
100% { transform: translate3d(0,0,0) rotate(0); }
|
||||
}
|
||||
@@ -0,0 +1,365 @@
|
||||
|
||||
/**
|
||||
* Resets
|
||||
* --------------------------------------------------
|
||||
* Adapted from normalize.css and some reset.css. We don't care even one
|
||||
* bit about old IE, so we don't need any hacks for that in here.
|
||||
*
|
||||
* There are probably other things we could remove here, as well.
|
||||
*
|
||||
* normalize.css v2.1.2 | MIT License | git.io/normalize
|
||||
|
||||
* Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)
|
||||
* http://cssreset.com
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, i, u, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed, fieldset,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
vertical-align: baseline;
|
||||
font: inherit;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the `template` element in IE, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
script {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Base
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
@include user-select(none);
|
||||
font-family: sans-serif; /* 1 */
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove default outlines.
|
||||
*/
|
||||
a,
|
||||
button,
|
||||
:focus,
|
||||
a:focus,
|
||||
button:focus,
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* *
|
||||
* Remove tap highlight color
|
||||
*/
|
||||
|
||||
a {
|
||||
-webkit-user-drag: none;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
|
||||
&[href]:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Typography
|
||||
========================================================================== */
|
||||
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Correct font family set oddly in Safari 5 and Chrome.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-size: 1em;
|
||||
font-family: monospace, serif;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of pre-formatted text in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set consistent quote types.
|
||||
*/
|
||||
|
||||
q {
|
||||
quotes: "\201C" "\201D" "\2018" "\2019";
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
border: 1px solid #c0c0c0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
padding: 0; /* 2 */
|
||||
border: 0; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct font family not being inherited in all browsers.
|
||||
* 2. Correct font size not being inherited in all browsers.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome.
|
||||
* 4. Remove any default :focus styles
|
||||
* 5. Make sure webkit font smoothing is being inherited
|
||||
* 6. Remove default gradient in Android Firefox / FirefoxOS
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
select,
|
||||
textarea {
|
||||
margin: 0; /* 3 */
|
||||
font-size: 100%; /* 2 */
|
||||
font-family: inherit; /* 1 */
|
||||
outline-offset: 0; /* 4 */
|
||||
outline-style: none; /* 4 */
|
||||
outline-width: 0; /* 4 */
|
||||
-webkit-font-smoothing: inherit; /* 5 */
|
||||
background-image: none; /* 6 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `importnt` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
button,
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+.
|
||||
* Correct `select` style inheritance in Firefox 4+ and Opera.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
cursor: pointer; /* 3 */
|
||||
-webkit-appearance: button; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari 5 and Chrome
|
||||
* on OS X.
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove default vertical scrollbar in IE 8/9.
|
||||
* 2. Improve readability and alignment in all browsers.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto; /* 1 */
|
||||
vertical-align: top; /* 2 */
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
-webkit-user-drag: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-spacing: 0;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
@@ -0,0 +1,285 @@
|
||||
|
||||
/**
|
||||
* Scaffolding
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
*,
|
||||
*:before,
|
||||
*:after {
|
||||
@include box-sizing(border-box);
|
||||
}
|
||||
|
||||
html {
|
||||
overflow: hidden;
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
}
|
||||
|
||||
body,
|
||||
.ionic-body {
|
||||
@include touch-callout(none);
|
||||
@include font-smoothing(antialiased);
|
||||
@include text-size-adjust(none);
|
||||
@include tap-highlight-transparent();
|
||||
@include user-select(none);
|
||||
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
|
||||
color: $base-color;
|
||||
word-wrap: break-word;
|
||||
font-size: $font-size-base;
|
||||
font-family: $font-family-base;
|
||||
line-height: $line-height-computed;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-webkit-user-drag: none;
|
||||
-ms-content-zooming: none;
|
||||
}
|
||||
|
||||
body.grade-b,
|
||||
body.grade-c {
|
||||
// disable optimizeLegibility for low end devices
|
||||
text-rendering: auto;
|
||||
}
|
||||
|
||||
.content {
|
||||
// used for content areas not using the content directive
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.scroll-content {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: hidden;
|
||||
|
||||
// Hide the top border if any
|
||||
margin-top: -1px;
|
||||
|
||||
// Prevents any distortion of lines
|
||||
padding-top: 1px;
|
||||
margin-bottom: -1px;
|
||||
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.menu .scroll-content.scroll-content-false{
|
||||
z-index: $z-index-scroll-content-false;
|
||||
}
|
||||
|
||||
.scroll-view {
|
||||
position: relative;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
&.overflow-scroll {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
&.scroll-x { overflow-x: scroll; overflow-y: hidden; }
|
||||
&.scroll-y { overflow-x: hidden; overflow-y: scroll; }
|
||||
&.scroll-xy { overflow-x: scroll; overflow-y: scroll; }
|
||||
|
||||
// Hide the top border if any
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scroll is the scroll view component available for complex and custom
|
||||
* scroll view functionality.
|
||||
*/
|
||||
.scroll {
|
||||
@include user-select(none);
|
||||
@include touch-callout(none);
|
||||
@include text-size-adjust(none);
|
||||
@include transform-origin(left, top);
|
||||
}
|
||||
/**
|
||||
* Set ms-viewport to prevent MS "page squish" and allow fluid scrolling
|
||||
* https://msdn.microsoft.com/en-us/library/ie/hh869615(v=vs.85).aspx
|
||||
*/
|
||||
@-ms-viewport { width: device-width; }
|
||||
|
||||
// Scroll bar styles
|
||||
.scroll-bar {
|
||||
position: absolute;
|
||||
z-index: $z-index-scroll-bar;
|
||||
}
|
||||
// hide the scroll-bar during animations
|
||||
.ng-animate .scroll-bar {
|
||||
visibility: hidden;
|
||||
}
|
||||
.scroll-bar-h {
|
||||
right: 2px;
|
||||
bottom: 3px;
|
||||
left: 2px;
|
||||
height: 3px;
|
||||
|
||||
.scroll-bar-indicator {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.scroll-bar-v {
|
||||
top: 2px;
|
||||
right: 3px;
|
||||
bottom: 2px;
|
||||
width: 3px;
|
||||
|
||||
.scroll-bar-indicator {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.scroll-bar-indicator {
|
||||
position: absolute;
|
||||
border-radius: 4px;
|
||||
background: rgba(0,0,0,0.3);
|
||||
opacity: 1;
|
||||
@include transition(opacity .3s linear);
|
||||
|
||||
&.scroll-bar-fade-out {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
.platform-android .scroll-bar-indicator {
|
||||
// android doesn't have rounded ends on scrollbar
|
||||
border-radius: 0;
|
||||
}
|
||||
.grade-b .scroll-bar-indicator,
|
||||
.grade-c .scroll-bar-indicator {
|
||||
// disable rgba background and border radius for low end devices
|
||||
background: #aaa;
|
||||
|
||||
&.scroll-bar-fade-out {
|
||||
@include transition(none);
|
||||
}
|
||||
}
|
||||
|
||||
ion-infinite-scroll {
|
||||
height: 60px;
|
||||
width: 100%;
|
||||
display: block;
|
||||
|
||||
@include display-flex();
|
||||
@include flex-direction(row);
|
||||
@include justify-content(center);
|
||||
@include align-items(center);
|
||||
|
||||
.icon {
|
||||
color: #666666;
|
||||
font-size: 30px;
|
||||
color: $scroll-refresh-icon-color;
|
||||
}
|
||||
&:not(.active){
|
||||
.spinner,
|
||||
.icon:before{
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.overflow-scroll {
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
|
||||
// Make sure the scrollbar doesn't take up layout space on edge
|
||||
-ms-overflow-style: -ms-autohiding-scrollbar;
|
||||
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
|
||||
.scroll {
|
||||
position: static;
|
||||
height: 100%;
|
||||
-webkit-transform: translate3d(0, 0, 0); // fix iOS bug where relative children of scroller disapear while scrolling. see: http://stackoverflow.com/questions/9807620/ipad-safari-scrolling-causes-html-elements-to-disappear-and-reappear-with-a-dela
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Pad top/bottom of content so it doesn't hide behind .bar-title and .bar-tab.
|
||||
// Note: For these to work, content must come after both bars in the markup
|
||||
/* If you change these, change platform.scss as well */
|
||||
.has-header {
|
||||
top: $bar-height;
|
||||
}
|
||||
// Force no header
|
||||
.no-header {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.has-subheader {
|
||||
top: $bar-height + $bar-subheader-height;
|
||||
}
|
||||
.has-tabs-top {
|
||||
top: $bar-height + $tabs-height;
|
||||
}
|
||||
.has-header.has-subheader.has-tabs-top {
|
||||
top: $bar-height + $bar-subheader-height + $tabs-height;
|
||||
}
|
||||
|
||||
.has-footer {
|
||||
bottom: $bar-footer-height;
|
||||
}
|
||||
.has-subfooter {
|
||||
bottom: $bar-footer-height + $bar-subfooter-height;
|
||||
}
|
||||
|
||||
.has-tabs,
|
||||
.bar-footer.has-tabs {
|
||||
bottom: $tabs-height;
|
||||
&.pane{
|
||||
bottom: $tabs-height;
|
||||
height:auto;
|
||||
}
|
||||
}
|
||||
|
||||
.bar-subfooter.has-tabs {
|
||||
bottom: $tabs-height + $bar-footer-height;
|
||||
}
|
||||
|
||||
.has-footer.has-tabs {
|
||||
bottom: $tabs-height + $bar-footer-height;
|
||||
}
|
||||
|
||||
// A full screen section with a solid background
|
||||
.pane {
|
||||
@include translate3d(0,0,0);
|
||||
@include transition-duration(0);
|
||||
z-index: $z-index-pane;
|
||||
}
|
||||
.view {
|
||||
z-index: $z-index-view;
|
||||
}
|
||||
.pane,
|
||||
.view {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: $base-background-color;
|
||||
overflow: hidden;
|
||||
}
|
||||
.view-container {
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
|
||||
/**
|
||||
* Select
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-select {
|
||||
position: relative;
|
||||
|
||||
select {
|
||||
@include appearance(none);
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
padding: 0 ($item-padding * 3) 0 $item-padding;
|
||||
max-width: 65%;
|
||||
|
||||
border: none;
|
||||
background: $item-default-bg;
|
||||
color: #333;
|
||||
|
||||
// hack to hide default dropdown arrow in FF
|
||||
text-indent: .01px;
|
||||
text-overflow: '';
|
||||
|
||||
white-space: nowrap;
|
||||
font-size: $font-size-base;
|
||||
|
||||
cursor: pointer;
|
||||
direction: rtl; // right align the select text
|
||||
}
|
||||
|
||||
select::-ms-expand {
|
||||
// hide default dropdown arrow in IE
|
||||
display: none;
|
||||
}
|
||||
|
||||
option {
|
||||
direction: ltr;
|
||||
}
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
right: $item-padding;
|
||||
margin-top: -3px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-top: 5px solid;
|
||||
border-right: 5px solid rgba(0, 0, 0, 0);
|
||||
border-left: 5px solid rgba(0, 0, 0, 0);
|
||||
color: #999;
|
||||
content: "";
|
||||
pointer-events: none;
|
||||
}
|
||||
&.item-light {
|
||||
select{
|
||||
background:$item-light-bg;
|
||||
color:$item-light-text;
|
||||
}
|
||||
}
|
||||
&.item-stable {
|
||||
select{
|
||||
background:$item-stable-bg;
|
||||
color:$item-stable-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:darken($item-stable-border,30%);
|
||||
}
|
||||
}
|
||||
&.item-positive {
|
||||
select{
|
||||
background:$item-positive-bg;
|
||||
color:$item-positive-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-positive-text;
|
||||
}
|
||||
}
|
||||
&.item-calm {
|
||||
select{
|
||||
background:$item-calm-bg;
|
||||
color:$item-calm-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-calm-text;
|
||||
}
|
||||
}
|
||||
&.item-assertive {
|
||||
select{
|
||||
background:$item-assertive-bg;
|
||||
color:$item-assertive-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-assertive-text;
|
||||
}
|
||||
}
|
||||
&.item-balanced {
|
||||
select{
|
||||
background:$item-balanced-bg;
|
||||
color:$item-balanced-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-balanced-text;
|
||||
}
|
||||
}
|
||||
&.item-energized {
|
||||
select{
|
||||
background:$item-energized-bg;
|
||||
color:$item-energized-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-energized-text;
|
||||
}
|
||||
}
|
||||
&.item-royal {
|
||||
select{
|
||||
background:$item-royal-bg;
|
||||
color:$item-royal-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-royal-text;
|
||||
}
|
||||
}
|
||||
&.item-dark {
|
||||
select{
|
||||
background:$item-dark-bg;
|
||||
color:$item-dark-text;
|
||||
}
|
||||
&:after, .input-label{
|
||||
color:$item-dark-text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
&[multiple],
|
||||
&[size] {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
|
||||
/**
|
||||
* Slide Box
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.slider {
|
||||
position: relative;
|
||||
visibility: hidden;
|
||||
// Make sure items don't scroll over ever
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.slider-slides {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.slider-slide {
|
||||
position: relative;
|
||||
display: block;
|
||||
float: left;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.slider-slide-image {
|
||||
> img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.slider-pager {
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
z-index: $z-index-slider-pager;
|
||||
width: 100%;
|
||||
height: 15px;
|
||||
text-align: center;
|
||||
|
||||
.slider-pager-page {
|
||||
display: inline-block;
|
||||
margin: 0px 3px;
|
||||
width: 15px;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
|
||||
opacity: 0.3;
|
||||
|
||||
&.active {
|
||||
@include transition(opacity 0.4s ease-in);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Disable animate service animations
|
||||
.slider-slide,
|
||||
.slider-pager-page {
|
||||
&.ng-enter,
|
||||
&.ng-leave,
|
||||
&.ng-animate {
|
||||
-webkit-transition: none !important;
|
||||
transition: none !important;
|
||||
}
|
||||
&.ng-animate {
|
||||
-webkit-animation: none 0s;
|
||||
animation: none 0s;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,529 @@
|
||||
/**
|
||||
* Swiper 3.2.7
|
||||
* Most modern mobile touch slider and framework with hardware accelerated transitions
|
||||
*
|
||||
* http://www.idangero.us/swiper/
|
||||
*
|
||||
* Copyright 2015, Vladimir Kharlampidi
|
||||
* The iDangero.us
|
||||
* http://www.idangero.us/
|
||||
*
|
||||
* Licensed under MIT
|
||||
*
|
||||
* Released on: December 7, 2015
|
||||
*/
|
||||
.swiper-container {
|
||||
margin: 0 auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
/* Fix of Webkit flickering */
|
||||
z-index: 1;
|
||||
}
|
||||
.swiper-container-no-flexbox .swiper-slide {
|
||||
float: left;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-wrapper {
|
||||
-webkit-box-orient: vertical;
|
||||
-moz-box-orient: vertical;
|
||||
-ms-flex-direction: column;
|
||||
-webkit-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
.swiper-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-transition-property: -webkit-transform;
|
||||
-moz-transition-property: -moz-transform;
|
||||
-o-transition-property: -o-transform;
|
||||
-ms-transition-property: -ms-transform;
|
||||
transition-property: transform;
|
||||
-webkit-box-sizing: content-box;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.swiper-container-android .swiper-slide,
|
||||
.swiper-wrapper {
|
||||
-webkit-transform: translate3d(0px, 0, 0);
|
||||
-moz-transform: translate3d(0px, 0, 0);
|
||||
-o-transform: translate(0px, 0px);
|
||||
-ms-transform: translate3d(0px, 0, 0);
|
||||
transform: translate3d(0px, 0, 0);
|
||||
}
|
||||
.swiper-container-multirow > .swiper-wrapper {
|
||||
-webkit-box-lines: multiple;
|
||||
-moz-box-lines: multiple;
|
||||
-ms-flex-wrap: wrap;
|
||||
-webkit-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.swiper-container-free-mode > .swiper-wrapper {
|
||||
-webkit-transition-timing-function: ease-out;
|
||||
-moz-transition-timing-function: ease-out;
|
||||
-ms-transition-timing-function: ease-out;
|
||||
-o-transition-timing-function: ease-out;
|
||||
transition-timing-function: ease-out;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.swiper-slide {
|
||||
display: block;
|
||||
-webkit-flex-shrink: 0;
|
||||
-ms-flex: 0 0 auto;
|
||||
flex-shrink: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
/* Auto Height */
|
||||
.swiper-container-autoheight,
|
||||
.swiper-container-autoheight .swiper-slide {
|
||||
height: auto;
|
||||
}
|
||||
.swiper-container-autoheight .swiper-wrapper {
|
||||
-webkit-box-align: start;
|
||||
-ms-flex-align: start;
|
||||
-webkit-align-items: flex-start;
|
||||
align-items: flex-start;
|
||||
-webkit-transition-property: -webkit-transform, height;
|
||||
-moz-transition-property: -moz-transform;
|
||||
-o-transition-property: -o-transform;
|
||||
-ms-transition-property: -ms-transform;
|
||||
transition-property: transform, height;
|
||||
}
|
||||
/* a11y */
|
||||
.swiper-container .swiper-notification {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
z-index: -1000;
|
||||
}
|
||||
/* IE10 Windows Phone 8 Fixes */
|
||||
.swiper-wp8-horizontal {
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
}
|
||||
.swiper-wp8-vertical {
|
||||
-ms-touch-action: pan-x;
|
||||
touch-action: pan-x;
|
||||
}
|
||||
/* Arrows */
|
||||
.swiper-button-prev,
|
||||
.swiper-button-next {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
width: 27px;
|
||||
height: 44px;
|
||||
margin-top: -22px;
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
-moz-background-size: 27px 44px;
|
||||
-webkit-background-size: 27px 44px;
|
||||
background-size: 27px 44px;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.swiper-button-prev.swiper-button-disabled,
|
||||
.swiper-button-next.swiper-button-disabled {
|
||||
opacity: 0.35;
|
||||
cursor: auto;
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-button-prev,
|
||||
.swiper-container-rtl .swiper-button-next {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
|
||||
left: 10px;
|
||||
right: auto;
|
||||
}
|
||||
.swiper-button-prev.swiper-button-black,
|
||||
.swiper-container-rtl .swiper-button-next.swiper-button-black {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
.swiper-button-prev.swiper-button-white,
|
||||
.swiper-container-rtl .swiper-button-next.swiper-button-white {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
.swiper-button-next,
|
||||
.swiper-container-rtl .swiper-button-prev {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
|
||||
right: 10px;
|
||||
left: auto;
|
||||
}
|
||||
.swiper-button-next.swiper-button-black,
|
||||
.swiper-container-rtl .swiper-button-prev.swiper-button-black {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
.swiper-button-next.swiper-button-white,
|
||||
.swiper-container-rtl .swiper-button-prev.swiper-button-white {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
/* Pagination Styles */
|
||||
.swiper-pagination {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
-webkit-transition: 300ms;
|
||||
-moz-transition: 300ms;
|
||||
-o-transition: 300ms;
|
||||
transition: 300ms;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
-o-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
z-index: 10;
|
||||
}
|
||||
.swiper-pagination.swiper-pagination-hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
.swiper-pagination-bullet {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
display: inline-block;
|
||||
border-radius: 100%;
|
||||
background: #000;
|
||||
opacity: 0.2;
|
||||
}
|
||||
button.swiper-pagination-bullet {
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-shadow: none;
|
||||
-moz-appearance: none;
|
||||
-ms-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
.swiper-pagination-clickable .swiper-pagination-bullet {
|
||||
cursor: pointer;
|
||||
}
|
||||
.swiper-pagination-white .swiper-pagination-bullet {
|
||||
background: #fff;
|
||||
}
|
||||
.swiper-pagination-bullet-active {
|
||||
opacity: 1;
|
||||
}
|
||||
.swiper-pagination-white .swiper-pagination-bullet-active {
|
||||
background: #fff;
|
||||
}
|
||||
.swiper-pagination-black .swiper-pagination-bullet-active {
|
||||
background: #000;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-pagination {
|
||||
right: 10px;
|
||||
top: 50%;
|
||||
-webkit-transform: translate3d(0px, -50%, 0);
|
||||
-moz-transform: translate3d(0px, -50%, 0);
|
||||
-o-transform: translate(0px, -50%);
|
||||
-ms-transform: translate3d(0px, -50%, 0);
|
||||
transform: translate3d(0px, -50%, 0);
|
||||
}
|
||||
.swiper-container-vertical > .swiper-pagination .swiper-pagination-bullet {
|
||||
margin: 5px 0;
|
||||
display: block;
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-pagination {
|
||||
bottom: 10px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-pagination .swiper-pagination-bullet {
|
||||
margin: 0 5px;
|
||||
}
|
||||
/* 3D Container */
|
||||
.swiper-container-3d {
|
||||
-webkit-perspective: 1200px;
|
||||
-moz-perspective: 1200px;
|
||||
-o-perspective: 1200px;
|
||||
perspective: 1200px;
|
||||
}
|
||||
.swiper-container-3d .swiper-wrapper,
|
||||
.swiper-container-3d .swiper-slide,
|
||||
.swiper-container-3d .swiper-slide-shadow-left,
|
||||
.swiper-container-3d .swiper-slide-shadow-right,
|
||||
.swiper-container-3d .swiper-slide-shadow-top,
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom,
|
||||
.swiper-container-3d .swiper-cube-shadow {
|
||||
-webkit-transform-style: preserve-3d;
|
||||
-moz-transform-style: preserve-3d;
|
||||
-ms-transform-style: preserve-3d;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-left,
|
||||
.swiper-container-3d .swiper-slide-shadow-right,
|
||||
.swiper-container-3d .swiper-slide-shadow-top,
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
z-index: 10;
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-left {
|
||||
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-right {
|
||||
background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-top {
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom {
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
/* Coverflow */
|
||||
.swiper-container-coverflow .swiper-wrapper {
|
||||
/* Windows 8 IE 10 fix */
|
||||
-ms-perspective: 1200px;
|
||||
}
|
||||
/* Fade */
|
||||
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
|
||||
-webkit-transition-timing-function: ease-out;
|
||||
-moz-transition-timing-function: ease-out;
|
||||
-ms-transition-timing-function: ease-out;
|
||||
-o-transition-timing-function: ease-out;
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide-active,
|
||||
.swiper-container-fade .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
/* Cube */
|
||||
.swiper-container-cube {
|
||||
overflow: visible;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide {
|
||||
pointer-events: none;
|
||||
visibility: hidden;
|
||||
-webkit-transform-origin: 0 0;
|
||||
-moz-transform-origin: 0 0;
|
||||
-ms-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
.swiper-container-cube.swiper-container-rtl .swiper-slide {
|
||||
-webkit-transform-origin: 100% 0;
|
||||
-moz-transform-origin: 100% 0;
|
||||
-ms-transform-origin: 100% 0;
|
||||
transform-origin: 100% 0;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-active,
|
||||
.swiper-container-cube .swiper-slide-next,
|
||||
.swiper-container-cube .swiper-slide-prev,
|
||||
.swiper-container-cube .swiper-slide-next + .swiper-slide {
|
||||
pointer-events: auto;
|
||||
visibility: visible;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-shadow-top,
|
||||
.swiper-container-cube .swiper-slide-shadow-bottom,
|
||||
.swiper-container-cube .swiper-slide-shadow-left,
|
||||
.swiper-container-cube .swiper-slide-shadow-right {
|
||||
z-index: 0;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
.swiper-container-cube .swiper-cube-shadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
opacity: 0.6;
|
||||
-webkit-filter: blur(50px);
|
||||
filter: blur(50px);
|
||||
z-index: 0;
|
||||
}
|
||||
/* Scrollbar */
|
||||
.swiper-scrollbar {
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
-ms-touch-action: none;
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
left: 1%;
|
||||
bottom: 3px;
|
||||
z-index: 50;
|
||||
height: 5px;
|
||||
width: 98%;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 1%;
|
||||
z-index: 50;
|
||||
width: 5px;
|
||||
height: 98%;
|
||||
}
|
||||
.swiper-scrollbar-drag {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
border-radius: 10px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.swiper-scrollbar-cursor-drag {
|
||||
cursor: move;
|
||||
}
|
||||
/* Preloader */
|
||||
.swiper-lazy-preloader {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin-left: -21px;
|
||||
margin-top: -21px;
|
||||
z-index: 10;
|
||||
-webkit-transform-origin: 50%;
|
||||
-moz-transform-origin: 50%;
|
||||
transform-origin: 50%;
|
||||
-webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
|
||||
-moz-animation: swiper-preloader-spin 1s steps(12, end) infinite;
|
||||
animation: swiper-preloader-spin 1s steps(12, end) infinite;
|
||||
}
|
||||
.swiper-lazy-preloader:after {
|
||||
display: block;
|
||||
content: "";
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||
background-position: 50%;
|
||||
-webkit-background-size: 100%;
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.swiper-lazy-preloader-white:after {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
@-webkit-keyframes swiper-preloader-spin {
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes swiper-preloader-spin {
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ion-slides {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: block;
|
||||
}
|
||||
.slide-zoom {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.swiper-container {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
//display: flex;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.swiper-wrapper {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
//display: flex;
|
||||
}
|
||||
|
||||
.swiper-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.swiper-slide {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
box-sizing: border-box;
|
||||
|
||||
//text-align: center;
|
||||
//font-size: 18px;
|
||||
//background: #fff;
|
||||
/* Center slide text vertically */
|
||||
//display: flex;
|
||||
//justify-content: center;
|
||||
//align-items: center;
|
||||
|
||||
img {
|
||||
width: auto;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* Spinners
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.spinner {
|
||||
svg {
|
||||
width: $spinner-width;
|
||||
height: $spinner-height;
|
||||
}
|
||||
|
||||
stroke: $spinner-default-stroke;
|
||||
fill: $spinner-default-fill;
|
||||
|
||||
&.spinner-light {
|
||||
stroke: $spinner-light-stroke;
|
||||
fill: $spinner-light-fill;
|
||||
}
|
||||
&.spinner-stable {
|
||||
stroke: $spinner-stable-stroke;
|
||||
fill: $spinner-stable-fill;
|
||||
}
|
||||
&.spinner-positive {
|
||||
stroke: $spinner-positive-stroke;
|
||||
fill: $spinner-positive-fill;
|
||||
}
|
||||
&.spinner-calm {
|
||||
stroke: $spinner-calm-stroke;
|
||||
fill: $spinner-calm-fill;
|
||||
}
|
||||
&.spinner-balanced {
|
||||
stroke: $spinner-balanced-stroke;
|
||||
fill: $spinner-balanced-fill;
|
||||
}
|
||||
&.spinner-assertive {
|
||||
stroke: $spinner-assertive-stroke;
|
||||
fill: $spinner-assertive-fill;
|
||||
}
|
||||
&.spinner-energized {
|
||||
stroke: $spinner-energized-stroke;
|
||||
fill: $spinner-energized-fill;
|
||||
}
|
||||
&.spinner-royal {
|
||||
stroke: $spinner-royal-stroke;
|
||||
fill: $spinner-royal-fill;
|
||||
}
|
||||
&.spinner-dark {
|
||||
stroke: $spinner-dark-stroke;
|
||||
fill: $spinner-dark-fill;
|
||||
}
|
||||
}
|
||||
|
||||
.spinner-android {
|
||||
stroke: #4b8bf4;
|
||||
}
|
||||
|
||||
.spinner-ios,
|
||||
.spinner-ios-small {
|
||||
stroke: #69717d;
|
||||
}
|
||||
|
||||
.spinner-spiral {
|
||||
.stop1 {
|
||||
stop-color: $spinner-light-fill;
|
||||
stop-opacity: 0;
|
||||
}
|
||||
|
||||
&.spinner-light {
|
||||
.stop1 {
|
||||
stop-color: $spinner-default-fill;
|
||||
}
|
||||
.stop2 {
|
||||
stop-color: $spinner-light-fill;
|
||||
}
|
||||
}
|
||||
&.spinner-stable .stop2 {
|
||||
stop-color: $spinner-stable-fill;
|
||||
}
|
||||
&.spinner-positive .stop2 {
|
||||
stop-color: $spinner-positive-fill;
|
||||
}
|
||||
&.spinner-calm .stop2 {
|
||||
stop-color: $spinner-calm-fill;
|
||||
}
|
||||
&.spinner-balanced .stop2 {
|
||||
stop-color: $spinner-balanced-fill;
|
||||
}
|
||||
&.spinner-assertive .stop2 {
|
||||
stop-color: $spinner-assertive-fill;
|
||||
}
|
||||
&.spinner-energized .stop2 {
|
||||
stop-color: $spinner-energized-fill;
|
||||
}
|
||||
&.spinner-royal .stop2 {
|
||||
stop-color: $spinner-royal-fill;
|
||||
}
|
||||
&.spinner-dark .stop2 {
|
||||
stop-color: $spinner-dark-fill;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,528 @@
|
||||
/**
|
||||
* Tabs
|
||||
* --------------------------------------------------
|
||||
* A navigation bar with any number of tab items supported.
|
||||
*/
|
||||
|
||||
.tabs {
|
||||
@include display-flex();
|
||||
@include flex-direction(horizontal);
|
||||
@include justify-content(center);
|
||||
@include translate3d(0,0,0);
|
||||
|
||||
@include tab-style($tabs-default-bg, $tabs-default-border, $tabs-default-text);
|
||||
@include tab-badge-style($tabs-default-text, $tabs-default-bg);
|
||||
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
|
||||
z-index: $z-index-tabs;
|
||||
|
||||
width: 100%;
|
||||
height: $tabs-height;
|
||||
|
||||
border-style: solid;
|
||||
border-top-width: 1px;
|
||||
|
||||
background-size: 0;
|
||||
line-height: $tabs-height;
|
||||
|
||||
@media (min--moz-device-pixel-ratio: 1.5),
|
||||
(-webkit-min-device-pixel-ratio: 1.5),
|
||||
(min-device-pixel-ratio: 1.5),
|
||||
(min-resolution: 144dpi),
|
||||
(min-resolution: 1.5dppx) {
|
||||
padding-top: 2px;
|
||||
border-top: none !important;
|
||||
border-bottom: none;
|
||||
background-position: top;
|
||||
background-size: 100% 1px;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
}
|
||||
/* Allow parent element of tabs to define color, or just the tab itself */
|
||||
.tabs-light > .tabs,
|
||||
.tabs.tabs-light {
|
||||
@include tab-style($tabs-light-bg, $tabs-light-border, $tabs-light-text);
|
||||
@include tab-badge-style($tabs-light-text, $tabs-light-bg);
|
||||
}
|
||||
.tabs-stable > .tabs,
|
||||
.tabs.tabs-stable {
|
||||
@include tab-style($tabs-stable-bg, $tabs-stable-border, $tabs-stable-text);
|
||||
@include tab-badge-style($tabs-stable-text, $tabs-stable-bg);
|
||||
}
|
||||
.tabs-positive > .tabs,
|
||||
.tabs.tabs-positive {
|
||||
@include tab-style($tabs-positive-bg, $tabs-positive-border, $tabs-positive-text);
|
||||
@include tab-badge-style($tabs-positive-text, $tabs-positive-bg);
|
||||
}
|
||||
.tabs-calm > .tabs,
|
||||
.tabs.tabs-calm {
|
||||
@include tab-style($tabs-calm-bg, $tabs-calm-border, $tabs-calm-text);
|
||||
@include tab-badge-style($tabs-calm-text, $tabs-calm-bg);
|
||||
}
|
||||
.tabs-assertive > .tabs,
|
||||
.tabs.tabs-assertive {
|
||||
@include tab-style($tabs-assertive-bg, $tabs-assertive-border, $tabs-assertive-text);
|
||||
@include tab-badge-style($tabs-assertive-text, $tabs-assertive-bg);
|
||||
}
|
||||
.tabs-balanced > .tabs,
|
||||
.tabs.tabs-balanced {
|
||||
@include tab-style($tabs-balanced-bg, $tabs-balanced-border, $tabs-balanced-text);
|
||||
@include tab-badge-style($tabs-balanced-text, $tabs-balanced-bg);
|
||||
}
|
||||
.tabs-energized > .tabs,
|
||||
.tabs.tabs-energized {
|
||||
@include tab-style($tabs-energized-bg, $tabs-energized-border, $tabs-energized-text);
|
||||
@include tab-badge-style($tabs-energized-text, $tabs-energized-bg);
|
||||
}
|
||||
.tabs-royal > .tabs,
|
||||
.tabs.tabs-royal {
|
||||
@include tab-style($tabs-royal-bg, $tabs-royal-border, $tabs-royal-text);
|
||||
@include tab-badge-style($tabs-royal-text, $tabs-royal-bg);
|
||||
}
|
||||
.tabs-dark > .tabs,
|
||||
.tabs.tabs-dark {
|
||||
@include tab-style($tabs-dark-bg, $tabs-dark-border, $tabs-dark-text);
|
||||
@include tab-badge-style($tabs-dark-text, $tabs-dark-bg);
|
||||
}
|
||||
|
||||
@mixin tabs-striped($style, $color, $background) {
|
||||
&.#{$style} {
|
||||
.tabs{
|
||||
background-color: $background;
|
||||
}
|
||||
.tab-item {
|
||||
color: rgba($color, $tabs-striped-off-opacity);
|
||||
opacity: 1;
|
||||
.badge{
|
||||
opacity:$tabs-striped-off-opacity;
|
||||
}
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: -$tabs-striped-border-width;
|
||||
color: $color;
|
||||
border-style: solid;
|
||||
border-width: $tabs-striped-border-width 0 0 0;
|
||||
border-color: $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.tabs-top{
|
||||
.tab-item {
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
.badge {
|
||||
top: 4%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-background($style, $color, $border-color) {
|
||||
.#{$style} {
|
||||
.tabs,
|
||||
&> .tabs{
|
||||
background-color: $color;
|
||||
background-image: linear-gradient(0deg, $border-color, $border-color 50%, transparent 50%);
|
||||
border-color: $border-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-striped-background($style, $color) {
|
||||
&.#{$style} {
|
||||
.tabs {
|
||||
background-color: $color;
|
||||
background-image:none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-color($style, $color) {
|
||||
.#{$style} {
|
||||
.tab-item {
|
||||
color: rgba($color, $tabs-off-opacity);
|
||||
opacity: 1;
|
||||
.badge{
|
||||
opacity:$tabs-off-opacity;
|
||||
}
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
color: $color;
|
||||
border: 0 solid $color;
|
||||
.badge{
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin tabs-striped-color($style, $color) {
|
||||
&.#{$style} {
|
||||
.tab-item {
|
||||
color: rgba($color, $tabs-striped-off-opacity);
|
||||
opacity: 1;
|
||||
.badge{
|
||||
opacity:$tabs-striped-off-opacity;
|
||||
}
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: -$tabs-striped-border-width;
|
||||
color: $color;
|
||||
border: 0 solid $color;
|
||||
border-top-width: $tabs-striped-border-width;
|
||||
.badge{
|
||||
top:$tabs-striped-border-width;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-striped {
|
||||
.tabs {
|
||||
background-color: white;
|
||||
background-image: none;
|
||||
border: none;
|
||||
border-bottom: 1px solid #ddd;
|
||||
padding-top: $tabs-striped-border-width;
|
||||
}
|
||||
.tab-item {
|
||||
// default android tab style
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: -$tabs-striped-border-width;
|
||||
border-style: solid;
|
||||
border-width: $tabs-striped-border-width 0 0 0;
|
||||
border-color: $dark;
|
||||
.badge{
|
||||
top:$tabs-striped-border-width;
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@include tabs-striped('tabs-light', $dark, $light);
|
||||
@include tabs-striped('tabs-stable', $dark, $stable);
|
||||
@include tabs-striped('tabs-positive', $light, $positive);
|
||||
@include tabs-striped('tabs-calm', $light, $calm);
|
||||
@include tabs-striped('tabs-assertive', $light, $assertive);
|
||||
@include tabs-striped('tabs-balanced', $light, $balanced);
|
||||
@include tabs-striped('tabs-energized', $light, $energized);
|
||||
@include tabs-striped('tabs-royal', $light, $royal);
|
||||
@include tabs-striped('tabs-dark', $light, $dark);
|
||||
|
||||
// doing this twice so striped tabs styles don't override specific bg and color vals
|
||||
@include tabs-striped-background('tabs-background-light', $light);
|
||||
@include tabs-striped-background('tabs-background-stable', $stable);
|
||||
@include tabs-striped-background('tabs-background-positive', $positive);
|
||||
@include tabs-striped-background('tabs-background-calm', $calm);
|
||||
@include tabs-striped-background('tabs-background-assertive', $assertive);
|
||||
@include tabs-striped-background('tabs-background-balanced', $balanced);
|
||||
@include tabs-striped-background('tabs-background-energized',$energized);
|
||||
@include tabs-striped-background('tabs-background-royal', $royal);
|
||||
@include tabs-striped-background('tabs-background-dark', $dark);
|
||||
|
||||
@include tabs-striped-color('tabs-color-light', $light);
|
||||
@include tabs-striped-color('tabs-color-stable', $stable);
|
||||
@include tabs-striped-color('tabs-color-positive', $positive);
|
||||
@include tabs-striped-color('tabs-color-calm', $calm);
|
||||
@include tabs-striped-color('tabs-color-assertive', $assertive);
|
||||
@include tabs-striped-color('tabs-color-balanced', $balanced);
|
||||
@include tabs-striped-color('tabs-color-energized',$energized);
|
||||
@include tabs-striped-color('tabs-color-royal', $royal);
|
||||
@include tabs-striped-color('tabs-color-dark', $dark);
|
||||
|
||||
}
|
||||
|
||||
@include tabs-background('tabs-background-light', $light, $bar-light-border);
|
||||
@include tabs-background('tabs-background-stable', $stable, $bar-stable-border);
|
||||
@include tabs-background('tabs-background-positive', $positive, $bar-positive-border);
|
||||
@include tabs-background('tabs-background-calm', $calm, $bar-calm-border);
|
||||
@include tabs-background('tabs-background-assertive', $assertive, $bar-assertive-border);
|
||||
@include tabs-background('tabs-background-balanced', $balanced, $bar-balanced-border);
|
||||
@include tabs-background('tabs-background-energized',$energized, $bar-energized-border);
|
||||
@include tabs-background('tabs-background-royal', $royal, $bar-royal-border);
|
||||
@include tabs-background('tabs-background-dark', $dark, $bar-dark-border);
|
||||
|
||||
@include tabs-color('tabs-color-light', $light);
|
||||
@include tabs-color('tabs-color-stable', $stable);
|
||||
@include tabs-color('tabs-color-positive', $positive);
|
||||
@include tabs-color('tabs-color-calm', $calm);
|
||||
@include tabs-color('tabs-color-assertive', $assertive);
|
||||
@include tabs-color('tabs-color-balanced', $balanced);
|
||||
@include tabs-color('tabs-color-energized',$energized);
|
||||
@include tabs-color('tabs-color-royal', $royal);
|
||||
@include tabs-color('tabs-color-dark', $dark);
|
||||
|
||||
@mixin tabs-standard-color($style, $color, $off-color:$dark) {
|
||||
&.#{$style} {
|
||||
.tab-item {
|
||||
color: $off-color;
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
color: $color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ion-tabs {
|
||||
@include tabs-standard-color('tabs-color-active-light', $light, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-stable', $stable, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-positive', $positive, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-calm', $calm, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-assertive', $assertive, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-balanced', $balanced, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-energized',$energized, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-royal', $royal, $dark);
|
||||
@include tabs-standard-color('tabs-color-active-dark', $dark, $light);
|
||||
}
|
||||
|
||||
.tabs-top {
|
||||
&.tabs-striped {
|
||||
padding-bottom:0;
|
||||
.tab-item{
|
||||
background: transparent;
|
||||
// animate the top bar, leave bottom for platform consistency
|
||||
-webkit-transition: color .1s ease;
|
||||
-moz-transition: color .1s ease;
|
||||
-ms-transition: color .1s ease;
|
||||
-o-transition: color .1s ease;
|
||||
transition: color .1s ease;
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
margin-top: $tabs-striped-border-width - 1px;
|
||||
border-width: 0px 0px $tabs-striped-border-width 0px !important;
|
||||
border-style: solid;
|
||||
> .badge, > i{
|
||||
margin-top: -$tabs-striped-border-width + 1px;
|
||||
}
|
||||
}
|
||||
.badge{
|
||||
-webkit-transition: color .2s ease;
|
||||
-moz-transition: color .2s ease;
|
||||
-ms-transition: color .2s ease;
|
||||
-o-transition: color .2s ease;
|
||||
transition: color .2s ease;
|
||||
}
|
||||
}
|
||||
&:not(.tabs-icon-left):not(.tabs-icon-top){
|
||||
.tab-item{
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
.tab-title, i{
|
||||
display:block;
|
||||
margin-top: -$tabs-striped-border-width + 1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&.tabs-icon-left{
|
||||
.tab-item{
|
||||
margin-top: 1px;
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
.tab-title, i {
|
||||
margin-top: -0.1em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Allow parent element to have tabs-top */
|
||||
/* If you change this, change platform.scss as well */
|
||||
.tabs-top > .tabs,
|
||||
.tabs.tabs-top {
|
||||
top: $bar-height;
|
||||
padding-top: 0;
|
||||
background-position: bottom;
|
||||
border-top-width: 0;
|
||||
border-bottom-width: 1px;
|
||||
.tab-item {
|
||||
&.tab-item-active,
|
||||
&.active,
|
||||
&.activated {
|
||||
.badge {
|
||||
top: 4%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.tabs-top ~ .bar-header {
|
||||
border-bottom-width: 0;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
@include flex(1);
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
|
||||
max-width: $tab-item-max-width;
|
||||
height: 100%;
|
||||
|
||||
color: inherit;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
font-weight: 400;
|
||||
font-size: $tabs-text-font-size;
|
||||
font-family: $font-family-sans-serif;
|
||||
|
||||
opacity: 0.7;
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
&.tab-hidden{
|
||||
display:none;
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-item-hide > .tabs,
|
||||
.tabs.tabs-item-hide {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tabs-icon-top > .tabs .tab-item,
|
||||
.tabs-icon-top.tabs .tab-item,
|
||||
.tabs-icon-bottom > .tabs .tab-item,
|
||||
.tabs-icon-bottom.tabs .tab-item {
|
||||
font-size: $tabs-text-font-size-side-icon;
|
||||
line-height: $tabs-text-font-size;
|
||||
}
|
||||
|
||||
.tab-item .icon {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
height: $tabs-icon-size;
|
||||
font-size: $tabs-icon-size;
|
||||
}
|
||||
|
||||
.tabs-icon-left.tabs .tab-item,
|
||||
.tabs-icon-left > .tabs .tab-item,
|
||||
.tabs-icon-right.tabs .tab-item,
|
||||
.tabs-icon-right > .tabs .tab-item {
|
||||
font-size: $tabs-text-font-size-side-icon;
|
||||
|
||||
.icon, .tab-title {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
margin-top: -.1em;
|
||||
|
||||
&:before {
|
||||
font-size: $tabs-icon-size - 8;
|
||||
line-height: $tabs-height;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tabs-icon-left > .tabs .tab-item .icon,
|
||||
.tabs-icon-left.tabs .tab-item .icon {
|
||||
padding-right: 3px;
|
||||
}
|
||||
|
||||
.tabs-icon-right > .tabs .tab-item .icon,
|
||||
.tabs-icon-right.tabs .tab-item .icon {
|
||||
padding-left: 3px;
|
||||
}
|
||||
|
||||
.tabs-icon-only > .tabs .icon,
|
||||
.tabs-icon-only.tabs .icon {
|
||||
line-height: inherit;
|
||||
}
|
||||
|
||||
|
||||
.tab-item.has-badge {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tab-item .badge {
|
||||
position: absolute;
|
||||
top: 4%;
|
||||
right: 33%; // fallback
|
||||
right: calc(50% - 26px);
|
||||
padding: $tabs-badge-padding;
|
||||
height: auto;
|
||||
font-size: $tabs-badge-font-size;
|
||||
line-height: $tabs-badge-font-size + 4;
|
||||
}
|
||||
|
||||
|
||||
/* Navigational tab */
|
||||
|
||||
/* Active state for tab */
|
||||
.tab-item.tab-item-active,
|
||||
.tab-item.active,
|
||||
.tab-item.activated {
|
||||
opacity: 1;
|
||||
|
||||
&.tab-item-light {
|
||||
color: $light;
|
||||
}
|
||||
&.tab-item-stable {
|
||||
color: $stable;
|
||||
}
|
||||
&.tab-item-positive {
|
||||
color: $positive;
|
||||
}
|
||||
&.tab-item-calm {
|
||||
color: $calm;
|
||||
}
|
||||
&.tab-item-assertive {
|
||||
color: $assertive;
|
||||
}
|
||||
&.tab-item-balanced {
|
||||
color: $balanced;
|
||||
}
|
||||
&.tab-item-energized {
|
||||
color: $energized;
|
||||
}
|
||||
&.tab-item-royal {
|
||||
color: $royal;
|
||||
}
|
||||
&.tab-item-dark {
|
||||
color: $dark;
|
||||
}
|
||||
}
|
||||
|
||||
.item.tabs {
|
||||
@include display-flex();
|
||||
padding: 0;
|
||||
|
||||
.icon:before {
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
.tab-item.disabled,
|
||||
.tab-item[disabled] {
|
||||
opacity: .4;
|
||||
cursor: default;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.nav-bar-tabs-top.hide ~ .view-container .tabs-top .tabs{
|
||||
top: 0
|
||||
}
|
||||
.pane[hide-nav-bar="true"] .has-tabs-top{
|
||||
top:$tabs-height
|
||||
}
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
|
||||
/**
|
||||
* Toggle
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.item-toggle {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.toggle {
|
||||
// set the color defaults
|
||||
@include toggle-style($toggle-on-default-border, $toggle-on-default-bg);
|
||||
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
pointer-events: auto;
|
||||
margin: -$toggle-hit-area-expansion;
|
||||
padding: $toggle-hit-area-expansion;
|
||||
|
||||
&.dragging {
|
||||
.handle {
|
||||
background-color: $toggle-handle-dragging-bg-color !important;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.toggle {
|
||||
&.toggle-light {
|
||||
@include toggle-style($toggle-on-light-border, $toggle-on-light-bg);
|
||||
}
|
||||
&.toggle-stable {
|
||||
@include toggle-style($toggle-on-stable-border, $toggle-on-stable-bg);
|
||||
}
|
||||
&.toggle-positive {
|
||||
@include toggle-style($toggle-on-positive-border, $toggle-on-positive-bg);
|
||||
}
|
||||
&.toggle-calm {
|
||||
@include toggle-style($toggle-on-calm-border, $toggle-on-calm-bg);
|
||||
}
|
||||
&.toggle-assertive {
|
||||
@include toggle-style($toggle-on-assertive-border, $toggle-on-assertive-bg);
|
||||
}
|
||||
&.toggle-balanced {
|
||||
@include toggle-style($toggle-on-balanced-border, $toggle-on-balanced-bg);
|
||||
}
|
||||
&.toggle-energized {
|
||||
@include toggle-style($toggle-on-energized-border, $toggle-on-energized-bg);
|
||||
}
|
||||
&.toggle-royal {
|
||||
@include toggle-style($toggle-on-royal-border, $toggle-on-royal-bg);
|
||||
}
|
||||
&.toggle-dark {
|
||||
@include toggle-style($toggle-on-dark-border, $toggle-on-dark-bg);
|
||||
}
|
||||
}
|
||||
|
||||
.toggle input {
|
||||
// hide the actual input checkbox
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* the track appearance when the toggle is "off" */
|
||||
.toggle .track {
|
||||
@include transition-timing-function(ease-in-out);
|
||||
@include transition-duration($toggle-transition-duration);
|
||||
@include transition-property((background-color, border));
|
||||
|
||||
display: inline-block;
|
||||
box-sizing: border-box;
|
||||
width: $toggle-width;
|
||||
height: $toggle-height;
|
||||
border: solid $toggle-border-width $toggle-off-border-color;
|
||||
border-radius: $toggle-border-radius;
|
||||
background-color: $toggle-off-bg-color;
|
||||
content: ' ';
|
||||
cursor: pointer;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Fix to avoid background color bleeding */
|
||||
/* (occured on (at least) Android 4.2, Asus MeMO Pad HD7 ME173X) */
|
||||
.platform-android4_2 .toggle .track {
|
||||
-webkit-background-clip: padding-box;
|
||||
}
|
||||
|
||||
/* the handle (circle) thats inside the toggle's track area */
|
||||
/* also the handle's appearance when it is "off" */
|
||||
.toggle .handle {
|
||||
@include transition($toggle-transition-duration cubic-bezier(0, 1.1, 1, 1.1));
|
||||
@include transition-property((background-color, transform));
|
||||
position: absolute;
|
||||
display: block;
|
||||
width: $toggle-handle-width;
|
||||
height: $toggle-handle-height;
|
||||
border-radius: $toggle-handle-radius;
|
||||
background-color: $toggle-handle-off-bg-color;
|
||||
top: $toggle-border-width + $toggle-hit-area-expansion;
|
||||
left: $toggle-border-width + $toggle-hit-area-expansion;
|
||||
box-shadow: 0 2px 7px rgba(0,0,0,.35), 0 1px 1px rgba(0,0,0,.15);
|
||||
|
||||
&:before {
|
||||
// used to create a larger (but hidden) hit area to slide the handle
|
||||
position: absolute;
|
||||
top: -4px;
|
||||
left: ( ($toggle-handle-width / 2) * -1) - 8;
|
||||
padding: ($toggle-handle-height / 2) + 5 ($toggle-handle-width + 7);
|
||||
content: " ";
|
||||
}
|
||||
}
|
||||
|
||||
.toggle input:checked + .track .handle {
|
||||
// the handle when the toggle is "on"
|
||||
@include translate3d($toggle-width - $toggle-handle-width - ($toggle-border-width * 2), 0, 0);
|
||||
background-color: $toggle-handle-on-bg-color;
|
||||
}
|
||||
|
||||
.item-toggle.active {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.item-toggle,
|
||||
.item-toggle.item-complex .item-content {
|
||||
// make sure list item content have enough padding on right to fit the toggle
|
||||
padding-right: ($item-padding * 3) + $toggle-width;
|
||||
}
|
||||
|
||||
.item-toggle.item-complex {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.item-toggle .toggle {
|
||||
// position the toggle to the right within a list item
|
||||
position: absolute;
|
||||
top: ($item-padding / 2) + 2;
|
||||
right: $item-padding;
|
||||
z-index: $z-index-item-toggle;
|
||||
}
|
||||
|
||||
.toggle input:disabled + .track {
|
||||
opacity: .6;
|
||||
}
|
||||
|
||||
.toggle-small {
|
||||
|
||||
.track {
|
||||
border: 0;
|
||||
width: 34px;
|
||||
height: 15px;
|
||||
background: #9e9e9e;
|
||||
}
|
||||
input:checked + .track {
|
||||
background: rgba(0,150,137,.5);
|
||||
}
|
||||
.handle {
|
||||
top: 2px;
|
||||
left: 4px;
|
||||
width: 21px;
|
||||
height: 21px;
|
||||
box-shadow: 0 2px 5px rgba(0,0,0,.25);
|
||||
}
|
||||
input:checked + .track .handle {
|
||||
@include translate3d(16px, 0, 0);
|
||||
background: rgb(0,150,137);
|
||||
}
|
||||
&.item-toggle .toggle {
|
||||
top: 19px;
|
||||
}
|
||||
|
||||
.toggle-light {
|
||||
@include toggle-small-style($toggle-on-light-bg);
|
||||
}
|
||||
.toggle-stable {
|
||||
@include toggle-small-style($toggle-on-stable-bg);
|
||||
}
|
||||
.toggle-positive {
|
||||
@include toggle-small-style($toggle-on-positive-bg);
|
||||
}
|
||||
.toggle-calm {
|
||||
@include toggle-small-style($toggle-on-calm-bg);
|
||||
}
|
||||
.toggle-assertive {
|
||||
@include toggle-small-style($toggle-on-assertive-bg);
|
||||
}
|
||||
.toggle-balanced {
|
||||
@include toggle-small-style($toggle-on-balanced-bg);
|
||||
}
|
||||
.toggle-energized {
|
||||
@include toggle-small-style($toggle-on-energized-bg);
|
||||
}
|
||||
.toggle-royal {
|
||||
@include toggle-small-style($toggle-on-royal-bg);
|
||||
}
|
||||
.toggle-dark {
|
||||
@include toggle-small-style($toggle-on-dark-bg);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
|
||||
// iOS View Transitions
|
||||
// -------------------------------
|
||||
|
||||
$ios-transition-duration: 500ms !default;
|
||||
$ios-transition-timing-function: cubic-bezier(.36, .66, .04, 1) !default;
|
||||
$ios-transition-container-bg-color: #000 !default;
|
||||
|
||||
|
||||
[nav-view-transition="ios"] {
|
||||
|
||||
[nav-view="entering"],
|
||||
[nav-view="leaving"] {
|
||||
@include transition-duration( $ios-transition-duration );
|
||||
@include transition-timing-function( $ios-transition-timing-function );
|
||||
-webkit-transition-property: opacity, -webkit-transform, box-shadow;
|
||||
transition-property: opacity, transform, box-shadow;
|
||||
}
|
||||
|
||||
&[nav-view-direction="forward"],
|
||||
&[nav-view-direction="back"] {
|
||||
background-color: $ios-transition-container-bg-color;
|
||||
}
|
||||
|
||||
[nav-view="active"],
|
||||
&[nav-view-direction="forward"] [nav-view="entering"],
|
||||
&[nav-view-direction="back"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-above;
|
||||
}
|
||||
|
||||
&[nav-view-direction="back"] [nav-view="entering"],
|
||||
&[nav-view-direction="forward"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-below;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// iOS Nav Bar Transitions
|
||||
// -------------------------------
|
||||
|
||||
[nav-bar-transition="ios"] {
|
||||
|
||||
.title,
|
||||
.buttons,
|
||||
.back-text {
|
||||
@include transition-duration( $ios-transition-duration );
|
||||
@include transition-timing-function( $ios-transition-timing-function );
|
||||
-webkit-transition-property: opacity, -webkit-transform;
|
||||
transition-property: opacity, transform;
|
||||
}
|
||||
|
||||
[nav-bar="active"],
|
||||
[nav-bar="entering"] {
|
||||
z-index: $z-index-bar-above;
|
||||
|
||||
.bar {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
[nav-bar="cached"] {
|
||||
display: block;
|
||||
|
||||
.header-item {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Android View Transitions
|
||||
// -------------------------------
|
||||
|
||||
$android-transition-duration: 200ms !default;
|
||||
$android-transition-timing-function: cubic-bezier(0.4, 0.6, 0.2, 1) !default;
|
||||
|
||||
|
||||
[nav-view-transition="android"] {
|
||||
|
||||
[nav-view="entering"],
|
||||
[nav-view="leaving"] {
|
||||
@include transition-duration( $android-transition-duration );
|
||||
@include transition-timing-function( $android-transition-timing-function );
|
||||
-webkit-transition-property: -webkit-transform;
|
||||
transition-property: transform;
|
||||
}
|
||||
|
||||
[nav-view="active"],
|
||||
&[nav-view-direction="forward"] [nav-view="entering"],
|
||||
&[nav-view-direction="back"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-above;
|
||||
}
|
||||
|
||||
&[nav-view-direction="back"] [nav-view="entering"],
|
||||
&[nav-view-direction="forward"] [nav-view="leaving"] {
|
||||
z-index: $z-index-view-below;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Android Nav Bar Transitions
|
||||
// -------------------------------
|
||||
|
||||
[nav-bar-transition="android"] {
|
||||
|
||||
.title,
|
||||
.buttons {
|
||||
@include transition-duration( $android-transition-duration );
|
||||
@include transition-timing-function( $android-transition-timing-function );
|
||||
-webkit-transition-property: opacity;
|
||||
transition-property: opacity;
|
||||
}
|
||||
|
||||
[nav-bar="active"],
|
||||
[nav-bar="entering"] {
|
||||
z-index: $z-index-bar-above;
|
||||
|
||||
.bar {
|
||||
background: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
[nav-bar="cached"] {
|
||||
display: block;
|
||||
|
||||
.header-item {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Nav Swipe
|
||||
// -------------------------------
|
||||
|
||||
[nav-swipe="fast"] {
|
||||
[nav-view],
|
||||
.title,
|
||||
.buttons,
|
||||
.back-text {
|
||||
@include transition-duration(50ms);
|
||||
@include transition-timing-function(linear);
|
||||
}
|
||||
}
|
||||
|
||||
[nav-swipe="slow"] {
|
||||
[nav-view],
|
||||
.title,
|
||||
.buttons,
|
||||
.back-text {
|
||||
@include transition-duration(160ms);
|
||||
@include transition-timing-function(linear);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Transition Settings
|
||||
// -------------------------------
|
||||
|
||||
[nav-view="cached"],
|
||||
[nav-bar="cached"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
[nav-view="stage"] {
|
||||
opacity: 0;
|
||||
@include transition-duration( 0 );
|
||||
}
|
||||
|
||||
[nav-bar="stage"] {
|
||||
.title,
|
||||
.buttons,
|
||||
.back-text {
|
||||
position: absolute;
|
||||
opacity: 0;
|
||||
@include transition-duration(0s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,166 @@
|
||||
|
||||
/**
|
||||
* Typography
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
// Body text
|
||||
// -------------------------
|
||||
|
||||
p {
|
||||
margin: 0 0 ($line-height-computed / 2);
|
||||
}
|
||||
|
||||
|
||||
// Emphasis & misc
|
||||
// -------------------------
|
||||
|
||||
small { font-size: 85%; }
|
||||
cite { font-style: normal; }
|
||||
|
||||
|
||||
// Alignment
|
||||
// -------------------------
|
||||
|
||||
.text-left { text-align: left; }
|
||||
.text-right { text-align: right; }
|
||||
.text-center { text-align: center; }
|
||||
|
||||
|
||||
// Headings
|
||||
// -------------------------
|
||||
|
||||
h1, h2, h3, h4, h5, h6,
|
||||
.h1, .h2, .h3, .h4, .h5, .h6 {
|
||||
color: $base-color;
|
||||
font-weight: $headings-font-weight;
|
||||
font-family: $headings-font-family;
|
||||
line-height: $headings-line-height;
|
||||
|
||||
small {
|
||||
font-weight: normal;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
h1, .h1,
|
||||
h2, .h2,
|
||||
h3, .h3 {
|
||||
margin-top: $line-height-computed;
|
||||
margin-bottom: ($line-height-computed / 2);
|
||||
|
||||
&:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
+ h1, + .h1,
|
||||
+ h2, + .h2,
|
||||
+ h3, + .h3 {
|
||||
margin-top: ($line-height-computed / 2);
|
||||
}
|
||||
}
|
||||
|
||||
h4, .h4,
|
||||
h5, .h5,
|
||||
h6, .h6 {
|
||||
margin-top: ($line-height-computed / 2);
|
||||
margin-bottom: ($line-height-computed / 2);
|
||||
}
|
||||
|
||||
h1, .h1 { font-size: floor($font-size-base * 2.60); } // ~36px
|
||||
h2, .h2 { font-size: floor($font-size-base * 2.15); } // ~30px
|
||||
h3, .h3 { font-size: ceil($font-size-base * 1.70); } // ~24px
|
||||
h4, .h4 { font-size: ceil($font-size-base * 1.25); } // ~18px
|
||||
h5, .h5 { font-size: $font-size-base; }
|
||||
h6, .h6 { font-size: ceil($font-size-base * 0.85); } // ~12px
|
||||
|
||||
h1 small, .h1 small { font-size: ceil($font-size-base * 1.70); } // ~24px
|
||||
h2 small, .h2 small { font-size: ceil($font-size-base * 1.25); } // ~18px
|
||||
h3 small, .h3 small,
|
||||
h4 small, .h4 small { font-size: $font-size-base; }
|
||||
|
||||
|
||||
// Description Lists
|
||||
// -------------------------
|
||||
|
||||
dl {
|
||||
margin-bottom: $line-height-computed;
|
||||
}
|
||||
dt,
|
||||
dd {
|
||||
line-height: $line-height-base;
|
||||
}
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
// Blockquotes
|
||||
// -------------------------
|
||||
|
||||
blockquote {
|
||||
margin: 0 0 $line-height-computed;
|
||||
padding: ($line-height-computed / 2) $line-height-computed;
|
||||
border-left: 5px solid gray;
|
||||
|
||||
p {
|
||||
font-weight: 300;
|
||||
font-size: ($font-size-base * 1.25);
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
p:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
small {
|
||||
display: block;
|
||||
line-height: $line-height-base;
|
||||
&:before {
|
||||
content: '\2014 \00A0';// EM DASH, NBSP;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Quotes
|
||||
// -------------------------
|
||||
|
||||
q:before,
|
||||
q:after,
|
||||
blockquote:before,
|
||||
blockquote:after {
|
||||
content: "";
|
||||
}
|
||||
|
||||
|
||||
// Addresses
|
||||
// -------------------------
|
||||
|
||||
address {
|
||||
display: block;
|
||||
margin-bottom: $line-height-computed;
|
||||
font-style: normal;
|
||||
line-height: $line-height-base;
|
||||
}
|
||||
|
||||
|
||||
// Links
|
||||
// -------------------------
|
||||
a {
|
||||
color: $link-color;
|
||||
}
|
||||
|
||||
a.subdued {
|
||||
padding-right: 10px;
|
||||
color: #888;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
&:last-child {
|
||||
padding-right: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
|
||||
/**
|
||||
* Utility Classes
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
.opacity-hide {
|
||||
opacity: 0;
|
||||
}
|
||||
.grade-b .opacity-hide,
|
||||
.grade-c .opacity-hide {
|
||||
opacity: 1;
|
||||
display: none;
|
||||
}
|
||||
.show {
|
||||
display: block;
|
||||
}
|
||||
.opacity-show {
|
||||
opacity: 1;
|
||||
}
|
||||
.invisible {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
.keyboard-open .hide-on-keyboard-open {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.keyboard-open .tabs.hide-on-keyboard-open + .pane .has-tabs,
|
||||
.keyboard-open .bar-footer.hide-on-keyboard-open + .pane .has-footer {
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.inline {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.disable-pointer-events {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.enable-pointer-events {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.disable-user-behavior {
|
||||
// used to prevent the browser from doing its native behavior. this doesnt
|
||||
// prevent the scrolling, but cancels the contextmenu, tap highlighting, etc
|
||||
|
||||
@include user-select(none);
|
||||
@include touch-callout(none);
|
||||
@include tap-highlight-transparent();
|
||||
|
||||
-webkit-user-drag: none;
|
||||
|
||||
-ms-touch-action: none;
|
||||
-ms-content-zooming: none;
|
||||
}
|
||||
|
||||
// Fill the screen to block clicks (a better pointer-events: none) for the body
|
||||
// to avoid full-page reflows and paints which can cause flickers
|
||||
.click-block {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
z-index: $z-index-click-block;
|
||||
@include translate3d(0, 0, 0);
|
||||
overflow: hidden;
|
||||
}
|
||||
.click-block-hide {
|
||||
@include translate3d(-9999px, 0, 0);
|
||||
}
|
||||
|
||||
.no-resize {
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
clear: both;
|
||||
&:after {
|
||||
display: block;
|
||||
visibility: hidden;
|
||||
clear: both;
|
||||
height: 0;
|
||||
content: ".";
|
||||
}
|
||||
}
|
||||
|
||||
.full-image {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
&:before,
|
||||
&:after {
|
||||
display: table;
|
||||
content: "";
|
||||
// Fixes Opera/contenteditable bug:
|
||||
// http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952
|
||||
line-height: 0;
|
||||
}
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Content Padding
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.padding {
|
||||
padding: $content-padding;
|
||||
}
|
||||
|
||||
.padding-top,
|
||||
.padding-vertical {
|
||||
padding-top: $content-padding;
|
||||
}
|
||||
|
||||
.padding-right,
|
||||
.padding-horizontal {
|
||||
padding-right: $content-padding;
|
||||
}
|
||||
|
||||
.padding-bottom,
|
||||
.padding-vertical {
|
||||
padding-bottom: $content-padding;
|
||||
}
|
||||
|
||||
.padding-left,
|
||||
.padding-horizontal {
|
||||
padding-left: $content-padding;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Scrollable iFrames
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.iframe-wrapper {
|
||||
position: fixed;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
overflow: scroll;
|
||||
|
||||
iframe {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Rounded
|
||||
* --------------------------------------------------
|
||||
*/
|
||||
|
||||
.rounded {
|
||||
border-radius: $border-radius-base;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Utility Colors
|
||||
* --------------------------------------------------
|
||||
* Utility colors are added to help set a naming convention. You'll
|
||||
* notice we purposely do not use words like "red" or "blue", but
|
||||
* instead have colors which represent an emotion or generic theme.
|
||||
*/
|
||||
|
||||
.light, a.light {
|
||||
color: $light;
|
||||
}
|
||||
.light-bg {
|
||||
background-color: $light;
|
||||
}
|
||||
.light-border {
|
||||
border-color: $button-light-border;
|
||||
}
|
||||
|
||||
.stable, a.stable {
|
||||
color: $stable;
|
||||
}
|
||||
.stable-bg {
|
||||
background-color: $stable;
|
||||
}
|
||||
.stable-border {
|
||||
border-color: $button-stable-border;
|
||||
}
|
||||
|
||||
.positive, a.positive {
|
||||
color: $positive;
|
||||
}
|
||||
.positive-bg {
|
||||
background-color: $positive;
|
||||
}
|
||||
.positive-border {
|
||||
border-color: $button-positive-border;
|
||||
}
|
||||
|
||||
.calm, a.calm {
|
||||
color: $calm;
|
||||
}
|
||||
.calm-bg {
|
||||
background-color: $calm;
|
||||
}
|
||||
.calm-border {
|
||||
border-color: $button-calm-border;
|
||||
}
|
||||
|
||||
.assertive, a.assertive {
|
||||
color: $assertive;
|
||||
}
|
||||
.assertive-bg {
|
||||
background-color: $assertive;
|
||||
}
|
||||
.assertive-border {
|
||||
border-color: $button-assertive-border;
|
||||
}
|
||||
|
||||
.balanced, a.balanced {
|
||||
color: $balanced;
|
||||
}
|
||||
.balanced-bg {
|
||||
background-color: $balanced;
|
||||
}
|
||||
.balanced-border {
|
||||
border-color: $button-balanced-border;
|
||||
}
|
||||
|
||||
.energized, a.energized {
|
||||
color: $energized;
|
||||
}
|
||||
.energized-bg {
|
||||
background-color: $energized;
|
||||
}
|
||||
.energized-border {
|
||||
border-color: $button-energized-border;
|
||||
}
|
||||
|
||||
.royal, a.royal {
|
||||
color: $royal;
|
||||
}
|
||||
.royal-bg {
|
||||
background-color: $royal;
|
||||
}
|
||||
.royal-border {
|
||||
border-color: $button-royal-border;
|
||||
}
|
||||
|
||||
.dark, a.dark {
|
||||
color: $dark;
|
||||
}
|
||||
.dark-bg {
|
||||
background-color: $dark;
|
||||
}
|
||||
.dark-border {
|
||||
border-color: $button-dark-border;
|
||||
}
|
||||
|
||||
[collection-repeat] {
|
||||
/* Position is set by transforms */
|
||||
left: 0 !important;
|
||||
top: 0 !important;
|
||||
position: absolute !important;
|
||||
z-index: 1;
|
||||
}
|
||||
.collection-repeat-container {
|
||||
position: relative;
|
||||
z-index: 1; //make sure it's above the after-container
|
||||
}
|
||||
.collection-repeat-after-container {
|
||||
z-index: 0;
|
||||
display: block;
|
||||
|
||||
/* when scrolling horizontally, make sure the after container doesn't take up 100% width */
|
||||
&.horizontal {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
// ng-show fix for windows phone
|
||||
// https://www.hoessl.eu/2014/12/on-using-the-ionic-framework-for-windows-phone-8-1-apps/
|
||||
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak,
|
||||
.x-ng-cloak, .ng-hide:not(.ng-hide-animate) {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -0,0 +1,760 @@
|
||||
|
||||
// Colors
|
||||
// -------------------------------
|
||||
|
||||
$light: #fff !default;
|
||||
$stable: #f8f8f8 !default;
|
||||
$positive: #387ef5 !default;
|
||||
$calm: #11c1f3 !default;
|
||||
$balanced: #33cd5f !default;
|
||||
$energized: #ffc900 !default;
|
||||
$assertive: #ef473a !default;
|
||||
$royal: #886aea !default;
|
||||
$dark: #444 !default;
|
||||
|
||||
|
||||
// Base
|
||||
// -------------------------------
|
||||
|
||||
$font-family-sans-serif: "Helvetica Neue", "Roboto", "Segoe UI", sans-serif !default;
|
||||
$font-family-light-sans-serif: "HelveticaNeue-Light", "Roboto-Light", "Segoe UI-Light", sans-serif-light !default;
|
||||
$font-family-serif: serif !default;
|
||||
$font-family-monospace: monospace !default;
|
||||
|
||||
$font-family-base: $font-family-sans-serif !default;
|
||||
$font-size-base: 14px !default;
|
||||
$font-size-large: 18px !default;
|
||||
$font-size-small: 11px !default;
|
||||
|
||||
$line-height-base: 1.428571429 !default; // 20/14
|
||||
$line-height-computed: floor($font-size-base * $line-height-base) !default; // ~20px
|
||||
$line-height-large: 1.33 !default;
|
||||
$line-height-small: 1.5 !default;
|
||||
|
||||
$headings-font-family: $font-family-base !default;
|
||||
$headings-font-weight: 500 !default;
|
||||
$headings-line-height: 1.2 !default;
|
||||
|
||||
$base-background-color: #fff !default;
|
||||
$base-color: #000 !default;
|
||||
|
||||
$link-color: $positive !default;
|
||||
$link-hover-color: darken($link-color, 15%) !default;
|
||||
|
||||
$content-padding: 10px !default;
|
||||
|
||||
$padding-base-vertical: 6px !default;
|
||||
$padding-base-horizontal: 12px !default;
|
||||
|
||||
$padding-large-vertical: 10px !default;
|
||||
$padding-large-horizontal: 16px !default;
|
||||
|
||||
$padding-small-vertical: 5px !default;
|
||||
$padding-small-horizontal: 10px !default;
|
||||
|
||||
$border-radius-base: 4px !default;
|
||||
$border-radius-large: 6px !default;
|
||||
$border-radius-small: 3px !default;
|
||||
|
||||
|
||||
// Content
|
||||
// -------------------------------
|
||||
|
||||
$scroll-refresh-icon-color: #666666 !default;
|
||||
|
||||
|
||||
// Buttons
|
||||
// -------------------------------
|
||||
|
||||
$button-color: #222 !default;
|
||||
$button-block-margin: 10px !default;
|
||||
$button-clear-padding: 6px !default;
|
||||
$button-border-radius: 4px !default;
|
||||
$button-border-width: 1px !default;
|
||||
|
||||
$button-font-size: 16px !default;
|
||||
$button-height: 42px !default;
|
||||
$button-padding: 12px !default;
|
||||
$button-icon-size: 24px !default;
|
||||
|
||||
$button-large-font-size: 20px !default;
|
||||
$button-large-height: 54px !default;
|
||||
$button-large-padding: 16px !default;
|
||||
$button-large-icon-size: 32px !default;
|
||||
|
||||
$button-small-font-size: 12px !default;
|
||||
$button-small-height: 28px !default;
|
||||
$button-small-padding: 4px !default;
|
||||
$button-small-icon-size: 16px !default;
|
||||
|
||||
$button-bar-button-font-size: 13px !default;
|
||||
$button-bar-button-height: 32px !default;
|
||||
$button-bar-button-padding: 8px !default;
|
||||
$button-bar-button-icon-size: 20px !default;
|
||||
|
||||
$button-light-bg: $light !default;
|
||||
$button-light-text: #444 !default;
|
||||
$button-light-border: #ddd !default;
|
||||
$button-light-active-bg: #fafafa !default;
|
||||
$button-light-active-border: #ccc !default;
|
||||
|
||||
$button-stable-bg: $stable !default;
|
||||
$button-stable-text: #444 !default;
|
||||
$button-stable-border: #b2b2b2 !default;
|
||||
$button-stable-active-bg: #e5e5e5 !default;
|
||||
$button-stable-active-border: #a2a2a2 !default;
|
||||
|
||||
$button-positive-bg: $positive !default;
|
||||
$button-positive-text: #fff !default;
|
||||
$button-positive-border: darken($positive, 10%) !default;
|
||||
$button-positive-active-bg: darken($positive, 10%) !default;
|
||||
$button-positive-active-border: darken($positive, 10%) !default;
|
||||
|
||||
$button-calm-bg: $calm !default;
|
||||
$button-calm-text: #fff !default;
|
||||
$button-calm-border: darken($calm, 10%) !default;
|
||||
$button-calm-active-bg: darken($calm, 10%) !default;
|
||||
$button-calm-active-border: darken($calm, 10%) !default;
|
||||
|
||||
$button-assertive-bg: $assertive !default;
|
||||
$button-assertive-text: #fff !default;
|
||||
$button-assertive-border: darken($assertive, 10%) !default;
|
||||
$button-assertive-active-bg: darken($assertive, 10%) !default;
|
||||
$button-assertive-active-border: darken($assertive, 10%) !default;
|
||||
|
||||
$button-balanced-bg: $balanced !default;
|
||||
$button-balanced-text: #fff !default;
|
||||
$button-balanced-border: darken($balanced, 10%) !default;
|
||||
$button-balanced-active-bg: darken($balanced, 10%) !default;
|
||||
$button-balanced-active-border: darken($balanced, 10%) !default;
|
||||
|
||||
$button-energized-bg: $energized !default;
|
||||
$button-energized-text: #fff !default;
|
||||
$button-energized-border: darken($energized, 5%) !default;
|
||||
$button-energized-active-bg: darken($energized, 5%) !default;
|
||||
$button-energized-active-border: darken($energized, 5%) !default;
|
||||
|
||||
$button-royal-bg: $royal !default;
|
||||
$button-royal-text: #fff !default;
|
||||
$button-royal-border: darken($royal, 8%) !default;
|
||||
$button-royal-active-bg: darken($royal, 8%) !default;
|
||||
$button-royal-active-border: darken($royal, 8%) !default;
|
||||
|
||||
$button-dark-bg: $dark !default;
|
||||
$button-dark-text: #fff !default;
|
||||
$button-dark-border: #111 !default;
|
||||
$button-dark-active-bg: #262626 !default;
|
||||
$button-dark-active-border: #000 !default;
|
||||
|
||||
$button-default-bg: $button-stable-bg !default;
|
||||
$button-default-text: $button-stable-text !default;
|
||||
$button-default-border: $button-stable-border !default;
|
||||
$button-default-active-bg: $button-stable-active-bg !default;
|
||||
$button-default-active-border: $button-stable-active-border !default;
|
||||
|
||||
|
||||
// Bars
|
||||
// -------------------------------
|
||||
|
||||
$bar-height: 44px !default;
|
||||
$bar-title-font-size: 17px !default;
|
||||
$bar-padding-portrait: 5px !default;
|
||||
$bar-padding-landscape: 5px !default;
|
||||
$bar-transparency: 1 !default;
|
||||
|
||||
$bar-footer-height: $bar-height !default;
|
||||
$bar-subheader-height: $bar-height !default;
|
||||
$bar-subfooter-height: $bar-height !default;
|
||||
|
||||
$bar-light-bg: rgba($button-light-bg, $bar-transparency) !default;
|
||||
$bar-light-text: $button-light-text !default;
|
||||
$bar-light-border: $button-light-border !default;
|
||||
$bar-light-active-bg: $button-light-active-bg !default;
|
||||
$bar-light-active-border: $button-light-active-border !default;
|
||||
|
||||
$bar-stable-bg: rgba($button-stable-bg, $bar-transparency) !default;
|
||||
$bar-stable-text: $button-stable-text !default;
|
||||
$bar-stable-border: $button-stable-border !default;
|
||||
$bar-stable-active-bg: $button-stable-active-bg !default;
|
||||
$bar-stable-active-border: $button-stable-active-border !default;
|
||||
|
||||
$bar-positive-bg: rgba($button-positive-bg, $bar-transparency) !default;
|
||||
$bar-positive-text: $button-positive-text !default;
|
||||
$bar-positive-border: $button-positive-border !default;
|
||||
$bar-positive-active-bg: $button-positive-active-bg !default;
|
||||
$bar-positive-active-border: $button-positive-active-border !default;
|
||||
|
||||
$bar-calm-bg: rgba($button-calm-bg, $bar-transparency) !default;
|
||||
$bar-calm-text: $button-calm-text !default;
|
||||
$bar-calm-border: $button-calm-border !default;
|
||||
$bar-calm-active-bg: $button-calm-active-bg !default;
|
||||
$bar-calm-active-border: $button-calm-active-border !default;
|
||||
|
||||
$bar-assertive-bg: rgba($button-assertive-bg, $bar-transparency) !default;
|
||||
$bar-assertive-text: $button-assertive-text !default;
|
||||
$bar-assertive-border: $button-assertive-border !default;
|
||||
$bar-assertive-active-bg: $button-assertive-active-bg !default;
|
||||
$bar-assertive-active-border: $button-assertive-active-border !default;
|
||||
|
||||
$bar-balanced-bg: rgba($button-balanced-bg, $bar-transparency) !default;
|
||||
$bar-balanced-text: $button-balanced-text !default;
|
||||
$bar-balanced-border: $button-balanced-border !default;
|
||||
$bar-balanced-active-bg: $button-balanced-active-bg !default;
|
||||
$bar-balanced-active-border: $button-balanced-active-border !default;
|
||||
|
||||
$bar-energized-bg: rgba($button-energized-bg, $bar-transparency) !default;
|
||||
$bar-energized-text: $button-energized-text !default;
|
||||
$bar-energized-border: $button-energized-border !default;
|
||||
$bar-energized-active-bg: $button-energized-active-bg !default;
|
||||
$bar-energized-active-border: $button-energized-active-border !default;
|
||||
|
||||
$bar-royal-bg: rgba($button-royal-bg, $bar-transparency) !default;
|
||||
$bar-royal-text: $button-royal-text !default;
|
||||
$bar-royal-border: $button-royal-border !default;
|
||||
$bar-royal-active-bg: $button-royal-active-bg !default;
|
||||
$bar-royal-active-border: $button-royal-active-border !default;
|
||||
|
||||
$bar-dark-bg: rgba($button-dark-bg, $bar-transparency) !default;
|
||||
$bar-dark-text: $button-dark-text !default;
|
||||
$bar-dark-border: $button-dark-border !default;
|
||||
$bar-dark-active-bg: $button-dark-active-bg !default;
|
||||
$bar-dark-active-border: $button-dark-active-border !default;
|
||||
|
||||
$bar-default-bg: $bar-light-bg !default;
|
||||
$bar-default-text: $bar-light-text !default;
|
||||
$bar-default-border: $bar-light-border !default;
|
||||
$bar-default-active-bg: $bar-light-active-bg !default;
|
||||
$bar-default-active-border: $bar-light-active-border !default;
|
||||
|
||||
|
||||
// Tabs
|
||||
// -------------------------------
|
||||
|
||||
$tabs-height: 49px !default;
|
||||
$tabs-text-font-size: 14px !default;
|
||||
$tabs-text-font-size-side-icon: 10px !default;
|
||||
$tabs-icon-size: 32px !default;
|
||||
$tabs-badge-padding: 1px 6px !default;
|
||||
$tabs-badge-font-size: 12px !default;
|
||||
|
||||
$tabs-light-bg: $button-light-bg !default;
|
||||
$tabs-light-border: $button-light-border !default;
|
||||
$tabs-light-text: $button-light-text !default;
|
||||
|
||||
$tabs-stable-bg: $button-stable-bg !default;
|
||||
$tabs-stable-border: $button-stable-border !default;
|
||||
$tabs-stable-text: $button-stable-text !default;
|
||||
|
||||
$tabs-positive-bg: $button-positive-bg !default;
|
||||
$tabs-positive-border: $button-positive-border !default;
|
||||
$tabs-positive-text: $button-positive-text !default;
|
||||
|
||||
$tabs-calm-bg: $button-calm-bg !default;
|
||||
$tabs-calm-border: $button-calm-border !default;
|
||||
$tabs-calm-text: $button-calm-text !default;
|
||||
|
||||
$tabs-assertive-bg: $button-assertive-bg !default;
|
||||
$tabs-assertive-border: $button-assertive-border !default;
|
||||
$tabs-assertive-text: $button-assertive-text !default;
|
||||
|
||||
$tabs-balanced-bg: $button-balanced-bg !default;
|
||||
$tabs-balanced-border: $button-balanced-border !default;
|
||||
$tabs-balanced-text: $button-balanced-text !default;
|
||||
|
||||
$tabs-energized-bg: $button-energized-bg !default;
|
||||
$tabs-energized-border: $button-energized-border !default;
|
||||
$tabs-energized-text: $button-energized-text !default;
|
||||
|
||||
$tabs-royal-bg: $button-royal-bg !default;
|
||||
$tabs-royal-border: $button-royal-border !default;
|
||||
$tabs-royal-text: $button-royal-text !default;
|
||||
|
||||
$tabs-dark-bg: $button-dark-bg !default;
|
||||
$tabs-dark-border: $button-dark-border !default;
|
||||
$tabs-dark-text: $button-dark-text !default;
|
||||
|
||||
$tabs-default-bg: $tabs-stable-bg !default;
|
||||
$tabs-default-border: $tabs-stable-border !default;
|
||||
$tabs-default-text: $tabs-stable-text !default;
|
||||
|
||||
$tab-item-max-width: 150px !default;
|
||||
|
||||
$tabs-off-opacity: 0.4 !default;
|
||||
$tabs-striped-off-opacity: $tabs-off-opacity !default;
|
||||
$tabs-striped-off-color: #000 !default;
|
||||
$tabs-striped-border-width: 2px !default;
|
||||
|
||||
|
||||
// Items
|
||||
// -------------------------------
|
||||
|
||||
$item-font-size: 16px !default;
|
||||
$item-border-width: 1px !default;
|
||||
$item-padding: 16px !default;
|
||||
|
||||
$item-button-font-size: 18px !default;
|
||||
$item-button-line-height: 32px !default;
|
||||
$item-icon-font-size: 32px !default;
|
||||
$item-icon-fill-font-size: 28px !default;
|
||||
|
||||
$item-icon-accessory-color: #ccc !default;
|
||||
$item-icon-accessory-font-size: 16px !default;
|
||||
|
||||
$item-avatar-width: 40px !default;
|
||||
$item-avatar-height: 40px !default;
|
||||
$item-avatar-border-radius: 50% !default;
|
||||
|
||||
$item-thumbnail-width: 80px !default;
|
||||
$item-thumbnail-height: 80px !default;
|
||||
$item-thumbnail-margin: 10px !default;
|
||||
|
||||
$item-divider-bg: #f5f5f5 !default;
|
||||
$item-divider-color: #222 !default;
|
||||
$item-divider-padding: 5px 15px !default;
|
||||
|
||||
$item-light-bg: $button-light-bg !default;
|
||||
$item-light-border: $button-light-border !default;
|
||||
$item-light-text: $button-light-text !default;
|
||||
$item-light-active-bg: $button-light-active-bg !default;
|
||||
$item-light-active-border: $button-light-active-border !default;
|
||||
|
||||
$item-stable-bg: $button-stable-bg !default;
|
||||
$item-stable-border: $button-stable-border !default;
|
||||
$item-stable-text: $button-stable-text !default;
|
||||
$item-stable-active-bg: $button-stable-active-bg !default;
|
||||
$item-stable-active-border: $button-stable-active-border !default;
|
||||
|
||||
$item-positive-bg: $button-positive-bg !default;
|
||||
$item-positive-border: $button-positive-border !default;
|
||||
$item-positive-text: $button-positive-text !default;
|
||||
$item-positive-active-bg: $button-positive-active-bg !default;
|
||||
$item-positive-active-border: $button-positive-active-border !default;
|
||||
|
||||
$item-calm-bg: $button-calm-bg !default;
|
||||
$item-calm-border: $button-calm-border !default;
|
||||
$item-calm-text: $button-calm-text !default;
|
||||
$item-calm-active-bg: $button-calm-active-bg !default;
|
||||
$item-calm-active-border: $button-calm-active-border !default;
|
||||
|
||||
$item-assertive-bg: $button-assertive-bg !default;
|
||||
$item-assertive-border: $button-assertive-border !default;
|
||||
$item-assertive-text: $button-assertive-text !default;
|
||||
$item-assertive-active-bg: $button-assertive-active-bg !default;
|
||||
$item-assertive-active-border: $button-assertive-active-border !default;
|
||||
|
||||
$item-balanced-bg: $button-balanced-bg !default;
|
||||
$item-balanced-border: $button-balanced-border !default;
|
||||
$item-balanced-text: $button-balanced-text !default;
|
||||
$item-balanced-active-bg: $button-balanced-active-bg !default;
|
||||
$item-balanced-active-border: $button-balanced-active-border !default;
|
||||
|
||||
$item-energized-bg: $button-energized-bg !default;
|
||||
$item-energized-border: $button-energized-border !default;
|
||||
$item-energized-text: $button-energized-text !default;
|
||||
$item-energized-active-bg: $button-energized-active-bg !default;
|
||||
$item-energized-active-border: $button-energized-active-border !default;
|
||||
|
||||
$item-royal-bg: $button-royal-bg !default;
|
||||
$item-royal-border: $button-royal-border !default;
|
||||
$item-royal-text: $button-royal-text !default;
|
||||
$item-royal-active-bg: $button-royal-active-bg !default;
|
||||
$item-royal-active-border: $button-royal-active-border !default;
|
||||
|
||||
$item-dark-bg: $button-dark-bg !default;
|
||||
$item-dark-border: $button-dark-border !default;
|
||||
$item-dark-text: $button-dark-text !default;
|
||||
$item-dark-active-bg: $button-dark-active-bg !default;
|
||||
$item-dark-active-border: $button-dark-active-border !default;
|
||||
|
||||
$item-default-bg: $item-light-bg !default;
|
||||
$item-default-border: $item-light-border !default;
|
||||
$item-default-text: $item-light-text !default;
|
||||
$item-default-active-bg: #D9D9D9 !default;
|
||||
$item-default-active-border: $item-light-active-border !default;
|
||||
|
||||
|
||||
// Item Editing
|
||||
// -------------------------------
|
||||
|
||||
$item-edit-transition-duration: 250ms !default;
|
||||
$item-edit-transition-function: ease-in-out !default;
|
||||
|
||||
$item-remove-transition-duration: 300ms !default;
|
||||
$item-remove-transition-function: ease-in !default;
|
||||
$item-remove-descendents-transition-function: cubic-bezier(.25,.81,.24,1) !default;
|
||||
|
||||
$item-left-edit-left: 8px !default; // item's left side edit's "left" property
|
||||
|
||||
$item-right-edit-open-width: 50px !default;
|
||||
$item-left-edit-open-width: 50px !default;
|
||||
|
||||
$item-delete-icon-size: 24px !default;
|
||||
$item-delete-icon-color: $assertive !default;
|
||||
|
||||
$item-reorder-icon-size: 32px !default;
|
||||
$item-reorder-icon-color: $dark !default;
|
||||
|
||||
|
||||
// Lists
|
||||
// -------------------------------
|
||||
|
||||
$list-header-bg: transparent !default;
|
||||
$list-header-color: #222 !default;
|
||||
$list-header-padding: 5px 15px !default;
|
||||
$list-header-margin-top: 20px !default;
|
||||
|
||||
|
||||
// Cards
|
||||
// -------------------------------
|
||||
|
||||
$card-header-bg: #F5F5F5 !default;
|
||||
$card-body-bg: #fff !default;
|
||||
$card-footer-bg: #F5F5F5 !default;
|
||||
|
||||
$card-padding: 10px !default;
|
||||
$card-border-width: 1px !default;
|
||||
|
||||
$card-border-color: #ccc !default;
|
||||
$card-border-radius: 2px !default;
|
||||
$card-box-shadow: 0 1px 3px rgba(0, 0, 0, .3) !default;
|
||||
|
||||
|
||||
// Forms
|
||||
// -------------------------------
|
||||
|
||||
$input-height-base: ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
|
||||
$input-height-large: (floor($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
|
||||
$input-height-small: (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
|
||||
|
||||
$input-bg: $light !default;
|
||||
$input-bg-disabled: $stable !default;
|
||||
|
||||
$input-color: #111 !default;
|
||||
$input-border: $item-default-border !default;
|
||||
$input-border-width: $item-border-width !default;
|
||||
$input-label-color: $dark !default;
|
||||
$input-color-placeholder: lighten($dark, 40%) !default;
|
||||
|
||||
|
||||
// Progress
|
||||
// -------------------------------
|
||||
|
||||
$progress-width: 100% !default;
|
||||
$progress-margin: 15px auto !default;
|
||||
|
||||
|
||||
// Toggle
|
||||
// -------------------------------
|
||||
|
||||
$toggle-width: 51px !default;
|
||||
$toggle-height: 31px !default;
|
||||
$toggle-border-width: 2px !default;
|
||||
$toggle-border-radius: 20px !default;
|
||||
|
||||
$toggle-handle-width: $toggle-height - ($toggle-border-width * 2) !default;
|
||||
$toggle-handle-height: $toggle-handle-width !default;
|
||||
$toggle-handle-radius: $toggle-handle-width !default;
|
||||
$toggle-handle-dragging-bg-color: darken(#fff, 5%) !default;
|
||||
|
||||
$toggle-off-bg-color: #fff !default;
|
||||
$toggle-off-border-color: #e6e6e6 !default;
|
||||
|
||||
$toggle-on-light-bg: $button-light-border !default;
|
||||
$toggle-on-light-border: $toggle-on-light-bg !default;
|
||||
$toggle-on-stable-bg: $button-stable-border !default;
|
||||
$toggle-on-stable-border: $toggle-on-stable-bg !default;
|
||||
$toggle-on-positive-bg: $positive !default;
|
||||
$toggle-on-positive-border: $toggle-on-positive-bg !default;
|
||||
$toggle-on-calm-bg: $calm !default;
|
||||
$toggle-on-calm-border: $toggle-on-calm-bg !default;
|
||||
$toggle-on-assertive-bg: $assertive !default;
|
||||
$toggle-on-assertive-border: $toggle-on-assertive-bg !default;
|
||||
$toggle-on-balanced-bg: $balanced !default;
|
||||
$toggle-on-balanced-border: $toggle-on-balanced-bg !default;
|
||||
$toggle-on-energized-bg: $energized !default;
|
||||
$toggle-on-energized-border: $toggle-on-energized-bg !default;
|
||||
$toggle-on-royal-bg: $royal !default;
|
||||
$toggle-on-royal-border: $toggle-on-royal-bg !default;
|
||||
$toggle-on-dark-bg: $dark !default;
|
||||
$toggle-on-dark-border: $toggle-on-dark-bg !default;
|
||||
$toggle-on-default-bg: #4cd964 !default;
|
||||
$toggle-on-default-border: $toggle-on-default-bg !default;
|
||||
|
||||
$toggle-handle-off-bg-color: $light !default;
|
||||
$toggle-handle-on-bg-color: $toggle-handle-off-bg-color !default;
|
||||
|
||||
$toggle-transition-duration: .3s !default;
|
||||
|
||||
$toggle-hit-area-expansion: 5px;
|
||||
|
||||
|
||||
// Checkbox
|
||||
// -------------------------------
|
||||
|
||||
$checkbox-width: 28px !default;
|
||||
$checkbox-height: 28px !default;
|
||||
$checkbox-border-radius: $checkbox-width !default;
|
||||
$checkbox-border-width: 1px !default;
|
||||
|
||||
$checkbox-off-bg-color: #fff !default;
|
||||
$checkbox-off-border-light: $button-light-border !default;
|
||||
$checkbox-on-bg-light: $button-light-border !default;
|
||||
$checkbox-off-border-stable: $button-stable-border !default;
|
||||
$checkbox-on-bg-stable: $button-stable-border !default;
|
||||
$checkbox-off-border-positive: $positive !default;
|
||||
$checkbox-on-bg-positive: $positive !default;
|
||||
$checkbox-off-border-calm: $calm !default;
|
||||
$checkbox-on-bg-calm: $calm !default;
|
||||
$checkbox-off-border-assertive: $assertive !default;
|
||||
$checkbox-on-bg-assertive: $assertive !default;
|
||||
$checkbox-off-border-balanced: $balanced !default;
|
||||
$checkbox-on-bg-balanced: $balanced !default;
|
||||
$checkbox-off-border-energized: $energized !default;
|
||||
$checkbox-on-bg-energized: $energized !default;
|
||||
$checkbox-off-border-royal: $royal !default;
|
||||
$checkbox-on-bg-royal: $royal !default;
|
||||
$checkbox-off-border-dark: $dark !default;
|
||||
$checkbox-on-bg-dark: $dark !default;
|
||||
$checkbox-off-border-default: $button-light-border !default;
|
||||
$checkbox-on-bg-default: $positive !default;
|
||||
$checkbox-on-border-default: $positive !default;
|
||||
|
||||
$checkbox-check-width: 1px !default;
|
||||
$checkbox-check-color: #fff !default;
|
||||
|
||||
|
||||
// Range
|
||||
// -------------------------------
|
||||
|
||||
$range-track-height: 2px !default;
|
||||
$range-slider-width: 28px !default;
|
||||
$range-slider-height: 28px !default;
|
||||
$range-slider-border-radius: 50% !default;
|
||||
$range-icon-size: 24px !default;
|
||||
$range-slider-box-shadow: 0 0 2px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,0.2) !default;
|
||||
|
||||
$range-light-track-bg: $button-light-border !default;
|
||||
$range-stable-track-bg: $button-stable-border !default;
|
||||
$range-positive-track-bg: $button-positive-bg !default;
|
||||
$range-calm-track-bg: $button-calm-bg !default;
|
||||
$range-balanced-track-bg: $button-balanced-bg !default;
|
||||
$range-assertive-track-bg: $button-assertive-bg !default;
|
||||
$range-energized-track-bg: $button-energized-bg !default;
|
||||
$range-royal-track-bg: $button-royal-bg !default;
|
||||
$range-dark-track-bg: $button-dark-bg !default;
|
||||
$range-default-track-bg: #ccc !default;
|
||||
|
||||
|
||||
// Menus
|
||||
// -------------------------------
|
||||
|
||||
$menu-bg: #fff !default;
|
||||
$menu-width: 275px !default;
|
||||
$menu-animation-speed: 200ms !default;
|
||||
|
||||
$menu-side-shadow: -1px 0px 2px rgba(0, 0, 0, 0.2), 1px 0px 2px rgba(0,0,0,0.2) !default;
|
||||
|
||||
|
||||
// Modals
|
||||
// -------------------------------
|
||||
|
||||
$modal-bg-color: #fff !default;
|
||||
$modal-backdrop-bg-active: #000 !default;
|
||||
$modal-backdrop-bg-inactive: rgba(0,0,0,0) !default;
|
||||
|
||||
$modal-inset-mode-break-point: 680px !default; // @media min-width
|
||||
$modal-inset-mode-top: 20% !default;
|
||||
$modal-inset-mode-right: 20% !default;
|
||||
$modal-inset-mode-bottom: 20% !default;
|
||||
$modal-inset-mode-left: 20% !default;
|
||||
$modal-inset-mode-min-height: 240px !default;
|
||||
|
||||
|
||||
// Popovers
|
||||
// -------------------------------
|
||||
|
||||
$popover-bg-color: $light !default;
|
||||
$popover-backdrop-bg-active: rgba(0,0,0,0.1) !default;
|
||||
$popover-backdrop-bg-inactive: rgba(0,0,0,0) !default;
|
||||
$popover-width: 220px !default;
|
||||
$popover-height: 280px !default;
|
||||
$popover-large-break-point: 680px !default;
|
||||
$popover-large-width: 360px !default;
|
||||
|
||||
$popover-box-shadow: 0 1px 3px rgba(0,0,0,0.4) !default;
|
||||
$popover-border-radius: 2px !default;
|
||||
|
||||
$popover-box-shadow-ios: 0 0 40px rgba(0,0,0,0.08) !default;
|
||||
$popover-border-radius-ios: 10px !default;
|
||||
|
||||
$popover-bg-color-android: #fafafa !default;
|
||||
$popover-box-shadow-android: 0 2px 6px rgba(0,0,0,0.35) !default;
|
||||
|
||||
|
||||
// Grids
|
||||
// -------------------------------
|
||||
|
||||
$grid-padding-width: 10px !default;
|
||||
$grid-responsive-sm-break: 567px !default; // smaller than landscape phone
|
||||
$grid-responsive-md-break: 767px !default; // smaller than portrait tablet
|
||||
$grid-responsive-lg-break: 1023px !default; // smaller than landscape tablet
|
||||
|
||||
|
||||
// Action Sheets
|
||||
// -------------------------------
|
||||
|
||||
$sheet-margin: 8px !default;
|
||||
$sheet-border-radius: 4px !default;
|
||||
|
||||
$sheet-options-bg-color: #f1f2f3 !default;
|
||||
$sheet-options-bg-active-color: #e4e5e7 !default;
|
||||
$sheet-options-text-color: #007aff !default;
|
||||
$sheet-options-border-color: #d1d3d6 !default;
|
||||
|
||||
|
||||
// Popups
|
||||
// -------------------------------
|
||||
|
||||
$popup-width: 250px !default;
|
||||
$popup-enter-animation: superScaleIn !default;
|
||||
$popup-enter-animation-duration: 0.2s !default;
|
||||
$popup-leave-animation-duration: 0.1s !default;
|
||||
|
||||
$popup-border-radius: 0px !default;
|
||||
$popup-background-color: rgba(255,255,255,0.9) !default;
|
||||
|
||||
$popup-button-border-radius: 2px !default;
|
||||
$popup-button-line-height: 20px !default;
|
||||
$popup-button-min-height: 45px !default;
|
||||
|
||||
|
||||
// Loading
|
||||
// -------------------------------
|
||||
|
||||
$loading-text-color: #fff !default;
|
||||
$loading-bg-color: rgba(0,0,0,0.7) !default;
|
||||
$loading-padding: 20px !default;
|
||||
$loading-border-radius: 5px !default;
|
||||
$loading-font-size: 15px !default;
|
||||
|
||||
$loading-backdrop-fadein-duration:0.1s !default;
|
||||
$loading-backdrop-bg-color: rgba(0,0,0,0.4) !default;
|
||||
|
||||
|
||||
// Badges
|
||||
// -------------------------------
|
||||
|
||||
$badge-font-size: 14px !default;
|
||||
$badge-line-height: 16px !default;
|
||||
$badge-font-weight: bold !default;
|
||||
$badge-border-radius: 10px !default;
|
||||
|
||||
$badge-light-bg: $button-light-bg !default;
|
||||
$badge-light-text: $button-light-text !default;
|
||||
|
||||
$badge-stable-bg: $button-stable-bg !default;
|
||||
$badge-stable-text: $button-stable-text !default;
|
||||
|
||||
$badge-positive-bg: $button-positive-bg !default;
|
||||
$badge-positive-text: $button-positive-text !default;
|
||||
|
||||
$badge-calm-bg: $button-calm-bg !default;
|
||||
$badge-calm-text: $button-calm-text !default;
|
||||
|
||||
$badge-balanced-bg: $button-balanced-bg !default;
|
||||
$badge-balanced-text: $button-balanced-text !default;
|
||||
|
||||
$badge-assertive-bg: $button-assertive-bg !default;
|
||||
$badge-assertive-text: $button-assertive-text !default;
|
||||
|
||||
$badge-energized-bg: $button-energized-bg !default;
|
||||
$badge-energized-text: $button-energized-text !default;
|
||||
|
||||
$badge-royal-bg: $button-royal-bg !default;
|
||||
$badge-royal-text: $button-royal-text !default;
|
||||
|
||||
$badge-dark-bg: $button-dark-bg !default;
|
||||
$badge-dark-text: $button-dark-text !default;
|
||||
|
||||
$badge-default-bg: transparent !default;
|
||||
$badge-default-text: #AAAAAA !default;
|
||||
|
||||
|
||||
// Spinners
|
||||
// -------------------------------
|
||||
|
||||
$spinner-width: 28px !default;
|
||||
$spinner-height: 28px !default;
|
||||
|
||||
$spinner-light-stroke: $light !default;
|
||||
$spinner-light-fill: $light !default;
|
||||
|
||||
$spinner-stable-stroke: $stable !default;
|
||||
$spinner-stable-fill: $stable !default;
|
||||
|
||||
$spinner-positive-stroke: $positive !default;
|
||||
$spinner-positive-fill: $positive !default;
|
||||
|
||||
$spinner-calm-stroke: $calm !default;
|
||||
$spinner-calm-fill: $calm !default;
|
||||
|
||||
$spinner-balanced-stroke: $balanced !default;
|
||||
$spinner-balanced-fill: $balanced !default;
|
||||
|
||||
$spinner-assertive-stroke: $assertive !default;
|
||||
$spinner-assertive-fill: $assertive !default;
|
||||
|
||||
$spinner-energized-stroke: $energized !default;
|
||||
$spinner-energized-fill: $energized !default;
|
||||
|
||||
$spinner-royal-stroke: $royal !default;
|
||||
$spinner-royal-fill: $royal !default;
|
||||
|
||||
$spinner-dark-stroke: $dark !default;
|
||||
$spinner-dark-fill: $dark !default;
|
||||
|
||||
$spinner-default-stroke: $dark !default;
|
||||
$spinner-default-fill: $dark !default;
|
||||
|
||||
|
||||
// Z-Indexes
|
||||
// -------------------------------
|
||||
|
||||
$z-index-bar-title: 0 !default;
|
||||
$z-index-item-drag: 0 !default;
|
||||
$z-index-item-edit: 0 !default;
|
||||
$z-index-menu: 0 !default;
|
||||
$z-index-badge: 1 !default;
|
||||
$z-index-bar-button: 1 !default;
|
||||
$z-index-item-options: 1 !default;
|
||||
$z-index-pane: 1 !default;
|
||||
$z-index-slider-pager: 1 !default;
|
||||
$z-index-view: 1 !default;
|
||||
$z-index-view-below: 2 !default;
|
||||
$z-index-item: 2 !default;
|
||||
$z-index-item-checkbox: 3 !default;
|
||||
$z-index-item-radio: 3 !default;
|
||||
$z-index-item-reorder: 3 !default;
|
||||
$z-index-item-toggle: 3 !default;
|
||||
$z-index-view-above: 3 !default;
|
||||
$z-index-tabs: 5 !default;
|
||||
$z-index-item-reordering: 9 !default;
|
||||
$z-index-bar: 9 !default;
|
||||
$z-index-bar-above: 10 !default;
|
||||
$z-index-menu-scroll-content: 10 !default;
|
||||
$z-index-modal: 10 !default;
|
||||
$z-index-popover: 10 !default;
|
||||
$z-index-action-sheet: 11 !default;
|
||||
$z-index-backdrop: 11 !default;
|
||||
$z-index-menu-bar-header: 11 !default;
|
||||
$z-index-scroll-content-false: 11 !default;
|
||||
$z-index-popup: 12 !default;
|
||||
$z-index-loading: 13 !default;
|
||||
$z-index-scroll-bar: 9999 !default;
|
||||
$z-index-click-block: 99999 !default;
|
||||
|
||||
|
||||
// Platform
|
||||
// -------------------------------
|
||||
|
||||
$ios-statusbar-height: 20px !default;
|
||||
@@ -0,0 +1,54 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
@import
|
||||
// Ionicons
|
||||
"ionicons/ionicons.scss",
|
||||
|
||||
// Variables
|
||||
"mixins",
|
||||
"variables",
|
||||
|
||||
// Base
|
||||
"reset",
|
||||
"scaffolding",
|
||||
"type",
|
||||
|
||||
// Components
|
||||
"action-sheet",
|
||||
"backdrop",
|
||||
"bar",
|
||||
"tabs",
|
||||
"menu",
|
||||
"modal",
|
||||
"popover",
|
||||
"popup",
|
||||
"loading",
|
||||
"items",
|
||||
"list",
|
||||
"badge",
|
||||
"slide-box",
|
||||
"slides",
|
||||
"refresher",
|
||||
"spinner",
|
||||
|
||||
// Forms
|
||||
"form",
|
||||
"checkbox",
|
||||
"toggle",
|
||||
"radio",
|
||||
"range",
|
||||
"select",
|
||||
"progress",
|
||||
|
||||
// Buttons
|
||||
"button",
|
||||
"button-bar",
|
||||
|
||||
// Util
|
||||
"grid",
|
||||
"util",
|
||||
"platform",
|
||||
|
||||
// Animations
|
||||
"animations",
|
||||
"transitions";
|
||||
@@ -0,0 +1,28 @@
|
||||
// Ionicons Font Path
|
||||
// --------------------------
|
||||
|
||||
@font-face {
|
||||
font-family: $ionicons-font-family;
|
||||
src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}");
|
||||
src:url("#{$ionicons-font-path}/ionicons.eot?v=#{$ionicons-version}#iefix") format("embedded-opentype"),
|
||||
url("#{$ionicons-font-path}/ionicons.ttf?v=#{$ionicons-version}") format("truetype"),
|
||||
url("#{$ionicons-font-path}/ionicons.woff?v=#{$ionicons-version}") format("woff"),
|
||||
url("#{$ionicons-font-path}/ionicons.woff") format("woff"), /* for WP8 */
|
||||
url("#{$ionicons-font-path}/ionicons.svg?v=#{$ionicons-version}#Ionicons") format("svg");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
.ion {
|
||||
display: inline-block;
|
||||
font-family: $ionicons-font-family;
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
text-rendering: auto;
|
||||
line-height: 1;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
@@ -0,0 +1,741 @@
|
||||
// Ionicons Variables
|
||||
// --------------------------
|
||||
|
||||
$ionicons-font-path: "../fonts" !default;
|
||||
$ionicons-font-family: "Ionicons" !default;
|
||||
$ionicons-version: "2.0.1" !default;
|
||||
$ionicons-prefix: ion- !default;
|
||||
|
||||
$ionicon-var-alert: "\f101";
|
||||
$ionicon-var-alert-circled: "\f100";
|
||||
$ionicon-var-android-add: "\f2c7";
|
||||
$ionicon-var-android-add-circle: "\f359";
|
||||
$ionicon-var-android-alarm-clock: "\f35a";
|
||||
$ionicon-var-android-alert: "\f35b";
|
||||
$ionicon-var-android-apps: "\f35c";
|
||||
$ionicon-var-android-archive: "\f2c9";
|
||||
$ionicon-var-android-arrow-back: "\f2ca";
|
||||
$ionicon-var-android-arrow-down: "\f35d";
|
||||
$ionicon-var-android-arrow-dropdown: "\f35f";
|
||||
$ionicon-var-android-arrow-dropdown-circle: "\f35e";
|
||||
$ionicon-var-android-arrow-dropleft: "\f361";
|
||||
$ionicon-var-android-arrow-dropleft-circle: "\f360";
|
||||
$ionicon-var-android-arrow-dropright: "\f363";
|
||||
$ionicon-var-android-arrow-dropright-circle: "\f362";
|
||||
$ionicon-var-android-arrow-dropup: "\f365";
|
||||
$ionicon-var-android-arrow-dropup-circle: "\f364";
|
||||
$ionicon-var-android-arrow-forward: "\f30f";
|
||||
$ionicon-var-android-arrow-up: "\f366";
|
||||
$ionicon-var-android-attach: "\f367";
|
||||
$ionicon-var-android-bar: "\f368";
|
||||
$ionicon-var-android-bicycle: "\f369";
|
||||
$ionicon-var-android-boat: "\f36a";
|
||||
$ionicon-var-android-bookmark: "\f36b";
|
||||
$ionicon-var-android-bulb: "\f36c";
|
||||
$ionicon-var-android-bus: "\f36d";
|
||||
$ionicon-var-android-calendar: "\f2d1";
|
||||
$ionicon-var-android-call: "\f2d2";
|
||||
$ionicon-var-android-camera: "\f2d3";
|
||||
$ionicon-var-android-cancel: "\f36e";
|
||||
$ionicon-var-android-car: "\f36f";
|
||||
$ionicon-var-android-cart: "\f370";
|
||||
$ionicon-var-android-chat: "\f2d4";
|
||||
$ionicon-var-android-checkbox: "\f374";
|
||||
$ionicon-var-android-checkbox-blank: "\f371";
|
||||
$ionicon-var-android-checkbox-outline: "\f373";
|
||||
$ionicon-var-android-checkbox-outline-blank: "\f372";
|
||||
$ionicon-var-android-checkmark-circle: "\f375";
|
||||
$ionicon-var-android-clipboard: "\f376";
|
||||
$ionicon-var-android-close: "\f2d7";
|
||||
$ionicon-var-android-cloud: "\f37a";
|
||||
$ionicon-var-android-cloud-circle: "\f377";
|
||||
$ionicon-var-android-cloud-done: "\f378";
|
||||
$ionicon-var-android-cloud-outline: "\f379";
|
||||
$ionicon-var-android-color-palette: "\f37b";
|
||||
$ionicon-var-android-compass: "\f37c";
|
||||
$ionicon-var-android-contact: "\f2d8";
|
||||
$ionicon-var-android-contacts: "\f2d9";
|
||||
$ionicon-var-android-contract: "\f37d";
|
||||
$ionicon-var-android-create: "\f37e";
|
||||
$ionicon-var-android-delete: "\f37f";
|
||||
$ionicon-var-android-desktop: "\f380";
|
||||
$ionicon-var-android-document: "\f381";
|
||||
$ionicon-var-android-done: "\f383";
|
||||
$ionicon-var-android-done-all: "\f382";
|
||||
$ionicon-var-android-download: "\f2dd";
|
||||
$ionicon-var-android-drafts: "\f384";
|
||||
$ionicon-var-android-exit: "\f385";
|
||||
$ionicon-var-android-expand: "\f386";
|
||||
$ionicon-var-android-favorite: "\f388";
|
||||
$ionicon-var-android-favorite-outline: "\f387";
|
||||
$ionicon-var-android-film: "\f389";
|
||||
$ionicon-var-android-folder: "\f2e0";
|
||||
$ionicon-var-android-folder-open: "\f38a";
|
||||
$ionicon-var-android-funnel: "\f38b";
|
||||
$ionicon-var-android-globe: "\f38c";
|
||||
$ionicon-var-android-hand: "\f2e3";
|
||||
$ionicon-var-android-hangout: "\f38d";
|
||||
$ionicon-var-android-happy: "\f38e";
|
||||
$ionicon-var-android-home: "\f38f";
|
||||
$ionicon-var-android-image: "\f2e4";
|
||||
$ionicon-var-android-laptop: "\f390";
|
||||
$ionicon-var-android-list: "\f391";
|
||||
$ionicon-var-android-locate: "\f2e9";
|
||||
$ionicon-var-android-lock: "\f392";
|
||||
$ionicon-var-android-mail: "\f2eb";
|
||||
$ionicon-var-android-map: "\f393";
|
||||
$ionicon-var-android-menu: "\f394";
|
||||
$ionicon-var-android-microphone: "\f2ec";
|
||||
$ionicon-var-android-microphone-off: "\f395";
|
||||
$ionicon-var-android-more-horizontal: "\f396";
|
||||
$ionicon-var-android-more-vertical: "\f397";
|
||||
$ionicon-var-android-navigate: "\f398";
|
||||
$ionicon-var-android-notifications: "\f39b";
|
||||
$ionicon-var-android-notifications-none: "\f399";
|
||||
$ionicon-var-android-notifications-off: "\f39a";
|
||||
$ionicon-var-android-open: "\f39c";
|
||||
$ionicon-var-android-options: "\f39d";
|
||||
$ionicon-var-android-people: "\f39e";
|
||||
$ionicon-var-android-person: "\f3a0";
|
||||
$ionicon-var-android-person-add: "\f39f";
|
||||
$ionicon-var-android-phone-landscape: "\f3a1";
|
||||
$ionicon-var-android-phone-portrait: "\f3a2";
|
||||
$ionicon-var-android-pin: "\f3a3";
|
||||
$ionicon-var-android-plane: "\f3a4";
|
||||
$ionicon-var-android-playstore: "\f2f0";
|
||||
$ionicon-var-android-print: "\f3a5";
|
||||
$ionicon-var-android-radio-button-off: "\f3a6";
|
||||
$ionicon-var-android-radio-button-on: "\f3a7";
|
||||
$ionicon-var-android-refresh: "\f3a8";
|
||||
$ionicon-var-android-remove: "\f2f4";
|
||||
$ionicon-var-android-remove-circle: "\f3a9";
|
||||
$ionicon-var-android-restaurant: "\f3aa";
|
||||
$ionicon-var-android-sad: "\f3ab";
|
||||
$ionicon-var-android-search: "\f2f5";
|
||||
$ionicon-var-android-send: "\f2f6";
|
||||
$ionicon-var-android-settings: "\f2f7";
|
||||
$ionicon-var-android-share: "\f2f8";
|
||||
$ionicon-var-android-share-alt: "\f3ac";
|
||||
$ionicon-var-android-star: "\f2fc";
|
||||
$ionicon-var-android-star-half: "\f3ad";
|
||||
$ionicon-var-android-star-outline: "\f3ae";
|
||||
$ionicon-var-android-stopwatch: "\f2fd";
|
||||
$ionicon-var-android-subway: "\f3af";
|
||||
$ionicon-var-android-sunny: "\f3b0";
|
||||
$ionicon-var-android-sync: "\f3b1";
|
||||
$ionicon-var-android-textsms: "\f3b2";
|
||||
$ionicon-var-android-time: "\f3b3";
|
||||
$ionicon-var-android-train: "\f3b4";
|
||||
$ionicon-var-android-unlock: "\f3b5";
|
||||
$ionicon-var-android-upload: "\f3b6";
|
||||
$ionicon-var-android-volume-down: "\f3b7";
|
||||
$ionicon-var-android-volume-mute: "\f3b8";
|
||||
$ionicon-var-android-volume-off: "\f3b9";
|
||||
$ionicon-var-android-volume-up: "\f3ba";
|
||||
$ionicon-var-android-walk: "\f3bb";
|
||||
$ionicon-var-android-warning: "\f3bc";
|
||||
$ionicon-var-android-watch: "\f3bd";
|
||||
$ionicon-var-android-wifi: "\f305";
|
||||
$ionicon-var-aperture: "\f313";
|
||||
$ionicon-var-archive: "\f102";
|
||||
$ionicon-var-arrow-down-a: "\f103";
|
||||
$ionicon-var-arrow-down-b: "\f104";
|
||||
$ionicon-var-arrow-down-c: "\f105";
|
||||
$ionicon-var-arrow-expand: "\f25e";
|
||||
$ionicon-var-arrow-graph-down-left: "\f25f";
|
||||
$ionicon-var-arrow-graph-down-right: "\f260";
|
||||
$ionicon-var-arrow-graph-up-left: "\f261";
|
||||
$ionicon-var-arrow-graph-up-right: "\f262";
|
||||
$ionicon-var-arrow-left-a: "\f106";
|
||||
$ionicon-var-arrow-left-b: "\f107";
|
||||
$ionicon-var-arrow-left-c: "\f108";
|
||||
$ionicon-var-arrow-move: "\f263";
|
||||
$ionicon-var-arrow-resize: "\f264";
|
||||
$ionicon-var-arrow-return-left: "\f265";
|
||||
$ionicon-var-arrow-return-right: "\f266";
|
||||
$ionicon-var-arrow-right-a: "\f109";
|
||||
$ionicon-var-arrow-right-b: "\f10a";
|
||||
$ionicon-var-arrow-right-c: "\f10b";
|
||||
$ionicon-var-arrow-shrink: "\f267";
|
||||
$ionicon-var-arrow-swap: "\f268";
|
||||
$ionicon-var-arrow-up-a: "\f10c";
|
||||
$ionicon-var-arrow-up-b: "\f10d";
|
||||
$ionicon-var-arrow-up-c: "\f10e";
|
||||
$ionicon-var-asterisk: "\f314";
|
||||
$ionicon-var-at: "\f10f";
|
||||
$ionicon-var-backspace: "\f3bf";
|
||||
$ionicon-var-backspace-outline: "\f3be";
|
||||
$ionicon-var-bag: "\f110";
|
||||
$ionicon-var-battery-charging: "\f111";
|
||||
$ionicon-var-battery-empty: "\f112";
|
||||
$ionicon-var-battery-full: "\f113";
|
||||
$ionicon-var-battery-half: "\f114";
|
||||
$ionicon-var-battery-low: "\f115";
|
||||
$ionicon-var-beaker: "\f269";
|
||||
$ionicon-var-beer: "\f26a";
|
||||
$ionicon-var-bluetooth: "\f116";
|
||||
$ionicon-var-bonfire: "\f315";
|
||||
$ionicon-var-bookmark: "\f26b";
|
||||
$ionicon-var-bowtie: "\f3c0";
|
||||
$ionicon-var-briefcase: "\f26c";
|
||||
$ionicon-var-bug: "\f2be";
|
||||
$ionicon-var-calculator: "\f26d";
|
||||
$ionicon-var-calendar: "\f117";
|
||||
$ionicon-var-camera: "\f118";
|
||||
$ionicon-var-card: "\f119";
|
||||
$ionicon-var-cash: "\f316";
|
||||
$ionicon-var-chatbox: "\f11b";
|
||||
$ionicon-var-chatbox-working: "\f11a";
|
||||
$ionicon-var-chatboxes: "\f11c";
|
||||
$ionicon-var-chatbubble: "\f11e";
|
||||
$ionicon-var-chatbubble-working: "\f11d";
|
||||
$ionicon-var-chatbubbles: "\f11f";
|
||||
$ionicon-var-checkmark: "\f122";
|
||||
$ionicon-var-checkmark-circled: "\f120";
|
||||
$ionicon-var-checkmark-round: "\f121";
|
||||
$ionicon-var-chevron-down: "\f123";
|
||||
$ionicon-var-chevron-left: "\f124";
|
||||
$ionicon-var-chevron-right: "\f125";
|
||||
$ionicon-var-chevron-up: "\f126";
|
||||
$ionicon-var-clipboard: "\f127";
|
||||
$ionicon-var-clock: "\f26e";
|
||||
$ionicon-var-close: "\f12a";
|
||||
$ionicon-var-close-circled: "\f128";
|
||||
$ionicon-var-close-round: "\f129";
|
||||
$ionicon-var-closed-captioning: "\f317";
|
||||
$ionicon-var-cloud: "\f12b";
|
||||
$ionicon-var-code: "\f271";
|
||||
$ionicon-var-code-download: "\f26f";
|
||||
$ionicon-var-code-working: "\f270";
|
||||
$ionicon-var-coffee: "\f272";
|
||||
$ionicon-var-compass: "\f273";
|
||||
$ionicon-var-compose: "\f12c";
|
||||
$ionicon-var-connection-bars: "\f274";
|
||||
$ionicon-var-contrast: "\f275";
|
||||
$ionicon-var-crop: "\f3c1";
|
||||
$ionicon-var-cube: "\f318";
|
||||
$ionicon-var-disc: "\f12d";
|
||||
$ionicon-var-document: "\f12f";
|
||||
$ionicon-var-document-text: "\f12e";
|
||||
$ionicon-var-drag: "\f130";
|
||||
$ionicon-var-earth: "\f276";
|
||||
$ionicon-var-easel: "\f3c2";
|
||||
$ionicon-var-edit: "\f2bf";
|
||||
$ionicon-var-egg: "\f277";
|
||||
$ionicon-var-eject: "\f131";
|
||||
$ionicon-var-email: "\f132";
|
||||
$ionicon-var-email-unread: "\f3c3";
|
||||
$ionicon-var-erlenmeyer-flask: "\f3c5";
|
||||
$ionicon-var-erlenmeyer-flask-bubbles: "\f3c4";
|
||||
$ionicon-var-eye: "\f133";
|
||||
$ionicon-var-eye-disabled: "\f306";
|
||||
$ionicon-var-female: "\f278";
|
||||
$ionicon-var-filing: "\f134";
|
||||
$ionicon-var-film-marker: "\f135";
|
||||
$ionicon-var-fireball: "\f319";
|
||||
$ionicon-var-flag: "\f279";
|
||||
$ionicon-var-flame: "\f31a";
|
||||
$ionicon-var-flash: "\f137";
|
||||
$ionicon-var-flash-off: "\f136";
|
||||
$ionicon-var-folder: "\f139";
|
||||
$ionicon-var-fork: "\f27a";
|
||||
$ionicon-var-fork-repo: "\f2c0";
|
||||
$ionicon-var-forward: "\f13a";
|
||||
$ionicon-var-funnel: "\f31b";
|
||||
$ionicon-var-gear-a: "\f13d";
|
||||
$ionicon-var-gear-b: "\f13e";
|
||||
$ionicon-var-grid: "\f13f";
|
||||
$ionicon-var-hammer: "\f27b";
|
||||
$ionicon-var-happy: "\f31c";
|
||||
$ionicon-var-happy-outline: "\f3c6";
|
||||
$ionicon-var-headphone: "\f140";
|
||||
$ionicon-var-heart: "\f141";
|
||||
$ionicon-var-heart-broken: "\f31d";
|
||||
$ionicon-var-help: "\f143";
|
||||
$ionicon-var-help-buoy: "\f27c";
|
||||
$ionicon-var-help-circled: "\f142";
|
||||
$ionicon-var-home: "\f144";
|
||||
$ionicon-var-icecream: "\f27d";
|
||||
$ionicon-var-image: "\f147";
|
||||
$ionicon-var-images: "\f148";
|
||||
$ionicon-var-information: "\f14a";
|
||||
$ionicon-var-information-circled: "\f149";
|
||||
$ionicon-var-ionic: "\f14b";
|
||||
$ionicon-var-ios-alarm: "\f3c8";
|
||||
$ionicon-var-ios-alarm-outline: "\f3c7";
|
||||
$ionicon-var-ios-albums: "\f3ca";
|
||||
$ionicon-var-ios-albums-outline: "\f3c9";
|
||||
$ionicon-var-ios-americanfootball: "\f3cc";
|
||||
$ionicon-var-ios-americanfootball-outline: "\f3cb";
|
||||
$ionicon-var-ios-analytics: "\f3ce";
|
||||
$ionicon-var-ios-analytics-outline: "\f3cd";
|
||||
$ionicon-var-ios-arrow-back: "\f3cf";
|
||||
$ionicon-var-ios-arrow-down: "\f3d0";
|
||||
$ionicon-var-ios-arrow-forward: "\f3d1";
|
||||
$ionicon-var-ios-arrow-left: "\f3d2";
|
||||
$ionicon-var-ios-arrow-right: "\f3d3";
|
||||
$ionicon-var-ios-arrow-thin-down: "\f3d4";
|
||||
$ionicon-var-ios-arrow-thin-left: "\f3d5";
|
||||
$ionicon-var-ios-arrow-thin-right: "\f3d6";
|
||||
$ionicon-var-ios-arrow-thin-up: "\f3d7";
|
||||
$ionicon-var-ios-arrow-up: "\f3d8";
|
||||
$ionicon-var-ios-at: "\f3da";
|
||||
$ionicon-var-ios-at-outline: "\f3d9";
|
||||
$ionicon-var-ios-barcode: "\f3dc";
|
||||
$ionicon-var-ios-barcode-outline: "\f3db";
|
||||
$ionicon-var-ios-baseball: "\f3de";
|
||||
$ionicon-var-ios-baseball-outline: "\f3dd";
|
||||
$ionicon-var-ios-basketball: "\f3e0";
|
||||
$ionicon-var-ios-basketball-outline: "\f3df";
|
||||
$ionicon-var-ios-bell: "\f3e2";
|
||||
$ionicon-var-ios-bell-outline: "\f3e1";
|
||||
$ionicon-var-ios-body: "\f3e4";
|
||||
$ionicon-var-ios-body-outline: "\f3e3";
|
||||
$ionicon-var-ios-bolt: "\f3e6";
|
||||
$ionicon-var-ios-bolt-outline: "\f3e5";
|
||||
$ionicon-var-ios-book: "\f3e8";
|
||||
$ionicon-var-ios-book-outline: "\f3e7";
|
||||
$ionicon-var-ios-bookmarks: "\f3ea";
|
||||
$ionicon-var-ios-bookmarks-outline: "\f3e9";
|
||||
$ionicon-var-ios-box: "\f3ec";
|
||||
$ionicon-var-ios-box-outline: "\f3eb";
|
||||
$ionicon-var-ios-briefcase: "\f3ee";
|
||||
$ionicon-var-ios-briefcase-outline: "\f3ed";
|
||||
$ionicon-var-ios-browsers: "\f3f0";
|
||||
$ionicon-var-ios-browsers-outline: "\f3ef";
|
||||
$ionicon-var-ios-calculator: "\f3f2";
|
||||
$ionicon-var-ios-calculator-outline: "\f3f1";
|
||||
$ionicon-var-ios-calendar: "\f3f4";
|
||||
$ionicon-var-ios-calendar-outline: "\f3f3";
|
||||
$ionicon-var-ios-camera: "\f3f6";
|
||||
$ionicon-var-ios-camera-outline: "\f3f5";
|
||||
$ionicon-var-ios-cart: "\f3f8";
|
||||
$ionicon-var-ios-cart-outline: "\f3f7";
|
||||
$ionicon-var-ios-chatboxes: "\f3fa";
|
||||
$ionicon-var-ios-chatboxes-outline: "\f3f9";
|
||||
$ionicon-var-ios-chatbubble: "\f3fc";
|
||||
$ionicon-var-ios-chatbubble-outline: "\f3fb";
|
||||
$ionicon-var-ios-checkmark: "\f3ff";
|
||||
$ionicon-var-ios-checkmark-empty: "\f3fd";
|
||||
$ionicon-var-ios-checkmark-outline: "\f3fe";
|
||||
$ionicon-var-ios-circle-filled: "\f400";
|
||||
$ionicon-var-ios-circle-outline: "\f401";
|
||||
$ionicon-var-ios-clock: "\f403";
|
||||
$ionicon-var-ios-clock-outline: "\f402";
|
||||
$ionicon-var-ios-close: "\f406";
|
||||
$ionicon-var-ios-close-empty: "\f404";
|
||||
$ionicon-var-ios-close-outline: "\f405";
|
||||
$ionicon-var-ios-cloud: "\f40c";
|
||||
$ionicon-var-ios-cloud-download: "\f408";
|
||||
$ionicon-var-ios-cloud-download-outline: "\f407";
|
||||
$ionicon-var-ios-cloud-outline: "\f409";
|
||||
$ionicon-var-ios-cloud-upload: "\f40b";
|
||||
$ionicon-var-ios-cloud-upload-outline: "\f40a";
|
||||
$ionicon-var-ios-cloudy: "\f410";
|
||||
$ionicon-var-ios-cloudy-night: "\f40e";
|
||||
$ionicon-var-ios-cloudy-night-outline: "\f40d";
|
||||
$ionicon-var-ios-cloudy-outline: "\f40f";
|
||||
$ionicon-var-ios-cog: "\f412";
|
||||
$ionicon-var-ios-cog-outline: "\f411";
|
||||
$ionicon-var-ios-color-filter: "\f414";
|
||||
$ionicon-var-ios-color-filter-outline: "\f413";
|
||||
$ionicon-var-ios-color-wand: "\f416";
|
||||
$ionicon-var-ios-color-wand-outline: "\f415";
|
||||
$ionicon-var-ios-compose: "\f418";
|
||||
$ionicon-var-ios-compose-outline: "\f417";
|
||||
$ionicon-var-ios-contact: "\f41a";
|
||||
$ionicon-var-ios-contact-outline: "\f419";
|
||||
$ionicon-var-ios-copy: "\f41c";
|
||||
$ionicon-var-ios-copy-outline: "\f41b";
|
||||
$ionicon-var-ios-crop: "\f41e";
|
||||
$ionicon-var-ios-crop-strong: "\f41d";
|
||||
$ionicon-var-ios-download: "\f420";
|
||||
$ionicon-var-ios-download-outline: "\f41f";
|
||||
$ionicon-var-ios-drag: "\f421";
|
||||
$ionicon-var-ios-email: "\f423";
|
||||
$ionicon-var-ios-email-outline: "\f422";
|
||||
$ionicon-var-ios-eye: "\f425";
|
||||
$ionicon-var-ios-eye-outline: "\f424";
|
||||
$ionicon-var-ios-fastforward: "\f427";
|
||||
$ionicon-var-ios-fastforward-outline: "\f426";
|
||||
$ionicon-var-ios-filing: "\f429";
|
||||
$ionicon-var-ios-filing-outline: "\f428";
|
||||
$ionicon-var-ios-film: "\f42b";
|
||||
$ionicon-var-ios-film-outline: "\f42a";
|
||||
$ionicon-var-ios-flag: "\f42d";
|
||||
$ionicon-var-ios-flag-outline: "\f42c";
|
||||
$ionicon-var-ios-flame: "\f42f";
|
||||
$ionicon-var-ios-flame-outline: "\f42e";
|
||||
$ionicon-var-ios-flask: "\f431";
|
||||
$ionicon-var-ios-flask-outline: "\f430";
|
||||
$ionicon-var-ios-flower: "\f433";
|
||||
$ionicon-var-ios-flower-outline: "\f432";
|
||||
$ionicon-var-ios-folder: "\f435";
|
||||
$ionicon-var-ios-folder-outline: "\f434";
|
||||
$ionicon-var-ios-football: "\f437";
|
||||
$ionicon-var-ios-football-outline: "\f436";
|
||||
$ionicon-var-ios-game-controller-a: "\f439";
|
||||
$ionicon-var-ios-game-controller-a-outline: "\f438";
|
||||
$ionicon-var-ios-game-controller-b: "\f43b";
|
||||
$ionicon-var-ios-game-controller-b-outline: "\f43a";
|
||||
$ionicon-var-ios-gear: "\f43d";
|
||||
$ionicon-var-ios-gear-outline: "\f43c";
|
||||
$ionicon-var-ios-glasses: "\f43f";
|
||||
$ionicon-var-ios-glasses-outline: "\f43e";
|
||||
$ionicon-var-ios-grid-view: "\f441";
|
||||
$ionicon-var-ios-grid-view-outline: "\f440";
|
||||
$ionicon-var-ios-heart: "\f443";
|
||||
$ionicon-var-ios-heart-outline: "\f442";
|
||||
$ionicon-var-ios-help: "\f446";
|
||||
$ionicon-var-ios-help-empty: "\f444";
|
||||
$ionicon-var-ios-help-outline: "\f445";
|
||||
$ionicon-var-ios-home: "\f448";
|
||||
$ionicon-var-ios-home-outline: "\f447";
|
||||
$ionicon-var-ios-infinite: "\f44a";
|
||||
$ionicon-var-ios-infinite-outline: "\f449";
|
||||
$ionicon-var-ios-information: "\f44d";
|
||||
$ionicon-var-ios-information-empty: "\f44b";
|
||||
$ionicon-var-ios-information-outline: "\f44c";
|
||||
$ionicon-var-ios-ionic-outline: "\f44e";
|
||||
$ionicon-var-ios-keypad: "\f450";
|
||||
$ionicon-var-ios-keypad-outline: "\f44f";
|
||||
$ionicon-var-ios-lightbulb: "\f452";
|
||||
$ionicon-var-ios-lightbulb-outline: "\f451";
|
||||
$ionicon-var-ios-list: "\f454";
|
||||
$ionicon-var-ios-list-outline: "\f453";
|
||||
$ionicon-var-ios-location: "\f456";
|
||||
$ionicon-var-ios-location-outline: "\f455";
|
||||
$ionicon-var-ios-locked: "\f458";
|
||||
$ionicon-var-ios-locked-outline: "\f457";
|
||||
$ionicon-var-ios-loop: "\f45a";
|
||||
$ionicon-var-ios-loop-strong: "\f459";
|
||||
$ionicon-var-ios-medical: "\f45c";
|
||||
$ionicon-var-ios-medical-outline: "\f45b";
|
||||
$ionicon-var-ios-medkit: "\f45e";
|
||||
$ionicon-var-ios-medkit-outline: "\f45d";
|
||||
$ionicon-var-ios-mic: "\f461";
|
||||
$ionicon-var-ios-mic-off: "\f45f";
|
||||
$ionicon-var-ios-mic-outline: "\f460";
|
||||
$ionicon-var-ios-minus: "\f464";
|
||||
$ionicon-var-ios-minus-empty: "\f462";
|
||||
$ionicon-var-ios-minus-outline: "\f463";
|
||||
$ionicon-var-ios-monitor: "\f466";
|
||||
$ionicon-var-ios-monitor-outline: "\f465";
|
||||
$ionicon-var-ios-moon: "\f468";
|
||||
$ionicon-var-ios-moon-outline: "\f467";
|
||||
$ionicon-var-ios-more: "\f46a";
|
||||
$ionicon-var-ios-more-outline: "\f469";
|
||||
$ionicon-var-ios-musical-note: "\f46b";
|
||||
$ionicon-var-ios-musical-notes: "\f46c";
|
||||
$ionicon-var-ios-navigate: "\f46e";
|
||||
$ionicon-var-ios-navigate-outline: "\f46d";
|
||||
$ionicon-var-ios-nutrition: "\f470";
|
||||
$ionicon-var-ios-nutrition-outline: "\f46f";
|
||||
$ionicon-var-ios-paper: "\f472";
|
||||
$ionicon-var-ios-paper-outline: "\f471";
|
||||
$ionicon-var-ios-paperplane: "\f474";
|
||||
$ionicon-var-ios-paperplane-outline: "\f473";
|
||||
$ionicon-var-ios-partlysunny: "\f476";
|
||||
$ionicon-var-ios-partlysunny-outline: "\f475";
|
||||
$ionicon-var-ios-pause: "\f478";
|
||||
$ionicon-var-ios-pause-outline: "\f477";
|
||||
$ionicon-var-ios-paw: "\f47a";
|
||||
$ionicon-var-ios-paw-outline: "\f479";
|
||||
$ionicon-var-ios-people: "\f47c";
|
||||
$ionicon-var-ios-people-outline: "\f47b";
|
||||
$ionicon-var-ios-person: "\f47e";
|
||||
$ionicon-var-ios-person-outline: "\f47d";
|
||||
$ionicon-var-ios-personadd: "\f480";
|
||||
$ionicon-var-ios-personadd-outline: "\f47f";
|
||||
$ionicon-var-ios-photos: "\f482";
|
||||
$ionicon-var-ios-photos-outline: "\f481";
|
||||
$ionicon-var-ios-pie: "\f484";
|
||||
$ionicon-var-ios-pie-outline: "\f483";
|
||||
$ionicon-var-ios-pint: "\f486";
|
||||
$ionicon-var-ios-pint-outline: "\f485";
|
||||
$ionicon-var-ios-play: "\f488";
|
||||
$ionicon-var-ios-play-outline: "\f487";
|
||||
$ionicon-var-ios-plus: "\f48b";
|
||||
$ionicon-var-ios-plus-empty: "\f489";
|
||||
$ionicon-var-ios-plus-outline: "\f48a";
|
||||
$ionicon-var-ios-pricetag: "\f48d";
|
||||
$ionicon-var-ios-pricetag-outline: "\f48c";
|
||||
$ionicon-var-ios-pricetags: "\f48f";
|
||||
$ionicon-var-ios-pricetags-outline: "\f48e";
|
||||
$ionicon-var-ios-printer: "\f491";
|
||||
$ionicon-var-ios-printer-outline: "\f490";
|
||||
$ionicon-var-ios-pulse: "\f493";
|
||||
$ionicon-var-ios-pulse-strong: "\f492";
|
||||
$ionicon-var-ios-rainy: "\f495";
|
||||
$ionicon-var-ios-rainy-outline: "\f494";
|
||||
$ionicon-var-ios-recording: "\f497";
|
||||
$ionicon-var-ios-recording-outline: "\f496";
|
||||
$ionicon-var-ios-redo: "\f499";
|
||||
$ionicon-var-ios-redo-outline: "\f498";
|
||||
$ionicon-var-ios-refresh: "\f49c";
|
||||
$ionicon-var-ios-refresh-empty: "\f49a";
|
||||
$ionicon-var-ios-refresh-outline: "\f49b";
|
||||
$ionicon-var-ios-reload: "\f49d";
|
||||
$ionicon-var-ios-reverse-camera: "\f49f";
|
||||
$ionicon-var-ios-reverse-camera-outline: "\f49e";
|
||||
$ionicon-var-ios-rewind: "\f4a1";
|
||||
$ionicon-var-ios-rewind-outline: "\f4a0";
|
||||
$ionicon-var-ios-rose: "\f4a3";
|
||||
$ionicon-var-ios-rose-outline: "\f4a2";
|
||||
$ionicon-var-ios-search: "\f4a5";
|
||||
$ionicon-var-ios-search-strong: "\f4a4";
|
||||
$ionicon-var-ios-settings: "\f4a7";
|
||||
$ionicon-var-ios-settings-strong: "\f4a6";
|
||||
$ionicon-var-ios-shuffle: "\f4a9";
|
||||
$ionicon-var-ios-shuffle-strong: "\f4a8";
|
||||
$ionicon-var-ios-skipbackward: "\f4ab";
|
||||
$ionicon-var-ios-skipbackward-outline: "\f4aa";
|
||||
$ionicon-var-ios-skipforward: "\f4ad";
|
||||
$ionicon-var-ios-skipforward-outline: "\f4ac";
|
||||
$ionicon-var-ios-snowy: "\f4ae";
|
||||
$ionicon-var-ios-speedometer: "\f4b0";
|
||||
$ionicon-var-ios-speedometer-outline: "\f4af";
|
||||
$ionicon-var-ios-star: "\f4b3";
|
||||
$ionicon-var-ios-star-half: "\f4b1";
|
||||
$ionicon-var-ios-star-outline: "\f4b2";
|
||||
$ionicon-var-ios-stopwatch: "\f4b5";
|
||||
$ionicon-var-ios-stopwatch-outline: "\f4b4";
|
||||
$ionicon-var-ios-sunny: "\f4b7";
|
||||
$ionicon-var-ios-sunny-outline: "\f4b6";
|
||||
$ionicon-var-ios-telephone: "\f4b9";
|
||||
$ionicon-var-ios-telephone-outline: "\f4b8";
|
||||
$ionicon-var-ios-tennisball: "\f4bb";
|
||||
$ionicon-var-ios-tennisball-outline: "\f4ba";
|
||||
$ionicon-var-ios-thunderstorm: "\f4bd";
|
||||
$ionicon-var-ios-thunderstorm-outline: "\f4bc";
|
||||
$ionicon-var-ios-time: "\f4bf";
|
||||
$ionicon-var-ios-time-outline: "\f4be";
|
||||
$ionicon-var-ios-timer: "\f4c1";
|
||||
$ionicon-var-ios-timer-outline: "\f4c0";
|
||||
$ionicon-var-ios-toggle: "\f4c3";
|
||||
$ionicon-var-ios-toggle-outline: "\f4c2";
|
||||
$ionicon-var-ios-trash: "\f4c5";
|
||||
$ionicon-var-ios-trash-outline: "\f4c4";
|
||||
$ionicon-var-ios-undo: "\f4c7";
|
||||
$ionicon-var-ios-undo-outline: "\f4c6";
|
||||
$ionicon-var-ios-unlocked: "\f4c9";
|
||||
$ionicon-var-ios-unlocked-outline: "\f4c8";
|
||||
$ionicon-var-ios-upload: "\f4cb";
|
||||
$ionicon-var-ios-upload-outline: "\f4ca";
|
||||
$ionicon-var-ios-videocam: "\f4cd";
|
||||
$ionicon-var-ios-videocam-outline: "\f4cc";
|
||||
$ionicon-var-ios-volume-high: "\f4ce";
|
||||
$ionicon-var-ios-volume-low: "\f4cf";
|
||||
$ionicon-var-ios-wineglass: "\f4d1";
|
||||
$ionicon-var-ios-wineglass-outline: "\f4d0";
|
||||
$ionicon-var-ios-world: "\f4d3";
|
||||
$ionicon-var-ios-world-outline: "\f4d2";
|
||||
$ionicon-var-ipad: "\f1f9";
|
||||
$ionicon-var-iphone: "\f1fa";
|
||||
$ionicon-var-ipod: "\f1fb";
|
||||
$ionicon-var-jet: "\f295";
|
||||
$ionicon-var-key: "\f296";
|
||||
$ionicon-var-knife: "\f297";
|
||||
$ionicon-var-laptop: "\f1fc";
|
||||
$ionicon-var-leaf: "\f1fd";
|
||||
$ionicon-var-levels: "\f298";
|
||||
$ionicon-var-lightbulb: "\f299";
|
||||
$ionicon-var-link: "\f1fe";
|
||||
$ionicon-var-load-a: "\f29a";
|
||||
$ionicon-var-load-b: "\f29b";
|
||||
$ionicon-var-load-c: "\f29c";
|
||||
$ionicon-var-load-d: "\f29d";
|
||||
$ionicon-var-location: "\f1ff";
|
||||
$ionicon-var-lock-combination: "\f4d4";
|
||||
$ionicon-var-locked: "\f200";
|
||||
$ionicon-var-log-in: "\f29e";
|
||||
$ionicon-var-log-out: "\f29f";
|
||||
$ionicon-var-loop: "\f201";
|
||||
$ionicon-var-magnet: "\f2a0";
|
||||
$ionicon-var-male: "\f2a1";
|
||||
$ionicon-var-man: "\f202";
|
||||
$ionicon-var-map: "\f203";
|
||||
$ionicon-var-medkit: "\f2a2";
|
||||
$ionicon-var-merge: "\f33f";
|
||||
$ionicon-var-mic-a: "\f204";
|
||||
$ionicon-var-mic-b: "\f205";
|
||||
$ionicon-var-mic-c: "\f206";
|
||||
$ionicon-var-minus: "\f209";
|
||||
$ionicon-var-minus-circled: "\f207";
|
||||
$ionicon-var-minus-round: "\f208";
|
||||
$ionicon-var-model-s: "\f2c1";
|
||||
$ionicon-var-monitor: "\f20a";
|
||||
$ionicon-var-more: "\f20b";
|
||||
$ionicon-var-mouse: "\f340";
|
||||
$ionicon-var-music-note: "\f20c";
|
||||
$ionicon-var-navicon: "\f20e";
|
||||
$ionicon-var-navicon-round: "\f20d";
|
||||
$ionicon-var-navigate: "\f2a3";
|
||||
$ionicon-var-network: "\f341";
|
||||
$ionicon-var-no-smoking: "\f2c2";
|
||||
$ionicon-var-nuclear: "\f2a4";
|
||||
$ionicon-var-outlet: "\f342";
|
||||
$ionicon-var-paintbrush: "\f4d5";
|
||||
$ionicon-var-paintbucket: "\f4d6";
|
||||
$ionicon-var-paper-airplane: "\f2c3";
|
||||
$ionicon-var-paperclip: "\f20f";
|
||||
$ionicon-var-pause: "\f210";
|
||||
$ionicon-var-person: "\f213";
|
||||
$ionicon-var-person-add: "\f211";
|
||||
$ionicon-var-person-stalker: "\f212";
|
||||
$ionicon-var-pie-graph: "\f2a5";
|
||||
$ionicon-var-pin: "\f2a6";
|
||||
$ionicon-var-pinpoint: "\f2a7";
|
||||
$ionicon-var-pizza: "\f2a8";
|
||||
$ionicon-var-plane: "\f214";
|
||||
$ionicon-var-planet: "\f343";
|
||||
$ionicon-var-play: "\f215";
|
||||
$ionicon-var-playstation: "\f30a";
|
||||
$ionicon-var-plus: "\f218";
|
||||
$ionicon-var-plus-circled: "\f216";
|
||||
$ionicon-var-plus-round: "\f217";
|
||||
$ionicon-var-podium: "\f344";
|
||||
$ionicon-var-pound: "\f219";
|
||||
$ionicon-var-power: "\f2a9";
|
||||
$ionicon-var-pricetag: "\f2aa";
|
||||
$ionicon-var-pricetags: "\f2ab";
|
||||
$ionicon-var-printer: "\f21a";
|
||||
$ionicon-var-pull-request: "\f345";
|
||||
$ionicon-var-qr-scanner: "\f346";
|
||||
$ionicon-var-quote: "\f347";
|
||||
$ionicon-var-radio-waves: "\f2ac";
|
||||
$ionicon-var-record: "\f21b";
|
||||
$ionicon-var-refresh: "\f21c";
|
||||
$ionicon-var-reply: "\f21e";
|
||||
$ionicon-var-reply-all: "\f21d";
|
||||
$ionicon-var-ribbon-a: "\f348";
|
||||
$ionicon-var-ribbon-b: "\f349";
|
||||
$ionicon-var-sad: "\f34a";
|
||||
$ionicon-var-sad-outline: "\f4d7";
|
||||
$ionicon-var-scissors: "\f34b";
|
||||
$ionicon-var-search: "\f21f";
|
||||
$ionicon-var-settings: "\f2ad";
|
||||
$ionicon-var-share: "\f220";
|
||||
$ionicon-var-shuffle: "\f221";
|
||||
$ionicon-var-skip-backward: "\f222";
|
||||
$ionicon-var-skip-forward: "\f223";
|
||||
$ionicon-var-social-android: "\f225";
|
||||
$ionicon-var-social-android-outline: "\f224";
|
||||
$ionicon-var-social-angular: "\f4d9";
|
||||
$ionicon-var-social-angular-outline: "\f4d8";
|
||||
$ionicon-var-social-apple: "\f227";
|
||||
$ionicon-var-social-apple-outline: "\f226";
|
||||
$ionicon-var-social-bitcoin: "\f2af";
|
||||
$ionicon-var-social-bitcoin-outline: "\f2ae";
|
||||
$ionicon-var-social-buffer: "\f229";
|
||||
$ionicon-var-social-buffer-outline: "\f228";
|
||||
$ionicon-var-social-chrome: "\f4db";
|
||||
$ionicon-var-social-chrome-outline: "\f4da";
|
||||
$ionicon-var-social-codepen: "\f4dd";
|
||||
$ionicon-var-social-codepen-outline: "\f4dc";
|
||||
$ionicon-var-social-css3: "\f4df";
|
||||
$ionicon-var-social-css3-outline: "\f4de";
|
||||
$ionicon-var-social-designernews: "\f22b";
|
||||
$ionicon-var-social-designernews-outline: "\f22a";
|
||||
$ionicon-var-social-dribbble: "\f22d";
|
||||
$ionicon-var-social-dribbble-outline: "\f22c";
|
||||
$ionicon-var-social-dropbox: "\f22f";
|
||||
$ionicon-var-social-dropbox-outline: "\f22e";
|
||||
$ionicon-var-social-euro: "\f4e1";
|
||||
$ionicon-var-social-euro-outline: "\f4e0";
|
||||
$ionicon-var-social-facebook: "\f231";
|
||||
$ionicon-var-social-facebook-outline: "\f230";
|
||||
$ionicon-var-social-foursquare: "\f34d";
|
||||
$ionicon-var-social-foursquare-outline: "\f34c";
|
||||
$ionicon-var-social-freebsd-devil: "\f2c4";
|
||||
$ionicon-var-social-github: "\f233";
|
||||
$ionicon-var-social-github-outline: "\f232";
|
||||
$ionicon-var-social-google: "\f34f";
|
||||
$ionicon-var-social-google-outline: "\f34e";
|
||||
$ionicon-var-social-googleplus: "\f235";
|
||||
$ionicon-var-social-googleplus-outline: "\f234";
|
||||
$ionicon-var-social-hackernews: "\f237";
|
||||
$ionicon-var-social-hackernews-outline: "\f236";
|
||||
$ionicon-var-social-html5: "\f4e3";
|
||||
$ionicon-var-social-html5-outline: "\f4e2";
|
||||
$ionicon-var-social-instagram: "\f351";
|
||||
$ionicon-var-social-instagram-outline: "\f350";
|
||||
$ionicon-var-social-javascript: "\f4e5";
|
||||
$ionicon-var-social-javascript-outline: "\f4e4";
|
||||
$ionicon-var-social-linkedin: "\f239";
|
||||
$ionicon-var-social-linkedin-outline: "\f238";
|
||||
$ionicon-var-social-markdown: "\f4e6";
|
||||
$ionicon-var-social-nodejs: "\f4e7";
|
||||
$ionicon-var-social-octocat: "\f4e8";
|
||||
$ionicon-var-social-pinterest: "\f2b1";
|
||||
$ionicon-var-social-pinterest-outline: "\f2b0";
|
||||
$ionicon-var-social-python: "\f4e9";
|
||||
$ionicon-var-social-reddit: "\f23b";
|
||||
$ionicon-var-social-reddit-outline: "\f23a";
|
||||
$ionicon-var-social-rss: "\f23d";
|
||||
$ionicon-var-social-rss-outline: "\f23c";
|
||||
$ionicon-var-social-sass: "\f4ea";
|
||||
$ionicon-var-social-skype: "\f23f";
|
||||
$ionicon-var-social-skype-outline: "\f23e";
|
||||
$ionicon-var-social-snapchat: "\f4ec";
|
||||
$ionicon-var-social-snapchat-outline: "\f4eb";
|
||||
$ionicon-var-social-tumblr: "\f241";
|
||||
$ionicon-var-social-tumblr-outline: "\f240";
|
||||
$ionicon-var-social-tux: "\f2c5";
|
||||
$ionicon-var-social-twitch: "\f4ee";
|
||||
$ionicon-var-social-twitch-outline: "\f4ed";
|
||||
$ionicon-var-social-twitter: "\f243";
|
||||
$ionicon-var-social-twitter-outline: "\f242";
|
||||
$ionicon-var-social-usd: "\f353";
|
||||
$ionicon-var-social-usd-outline: "\f352";
|
||||
$ionicon-var-social-vimeo: "\f245";
|
||||
$ionicon-var-social-vimeo-outline: "\f244";
|
||||
$ionicon-var-social-whatsapp: "\f4f0";
|
||||
$ionicon-var-social-whatsapp-outline: "\f4ef";
|
||||
$ionicon-var-social-windows: "\f247";
|
||||
$ionicon-var-social-windows-outline: "\f246";
|
||||
$ionicon-var-social-wordpress: "\f249";
|
||||
$ionicon-var-social-wordpress-outline: "\f248";
|
||||
$ionicon-var-social-yahoo: "\f24b";
|
||||
$ionicon-var-social-yahoo-outline: "\f24a";
|
||||
$ionicon-var-social-yen: "\f4f2";
|
||||
$ionicon-var-social-yen-outline: "\f4f1";
|
||||
$ionicon-var-social-youtube: "\f24d";
|
||||
$ionicon-var-social-youtube-outline: "\f24c";
|
||||
$ionicon-var-soup-can: "\f4f4";
|
||||
$ionicon-var-soup-can-outline: "\f4f3";
|
||||
$ionicon-var-speakerphone: "\f2b2";
|
||||
$ionicon-var-speedometer: "\f2b3";
|
||||
$ionicon-var-spoon: "\f2b4";
|
||||
$ionicon-var-star: "\f24e";
|
||||
$ionicon-var-stats-bars: "\f2b5";
|
||||
$ionicon-var-steam: "\f30b";
|
||||
$ionicon-var-stop: "\f24f";
|
||||
$ionicon-var-thermometer: "\f2b6";
|
||||
$ionicon-var-thumbsdown: "\f250";
|
||||
$ionicon-var-thumbsup: "\f251";
|
||||
$ionicon-var-toggle: "\f355";
|
||||
$ionicon-var-toggle-filled: "\f354";
|
||||
$ionicon-var-transgender: "\f4f5";
|
||||
$ionicon-var-trash-a: "\f252";
|
||||
$ionicon-var-trash-b: "\f253";
|
||||
$ionicon-var-trophy: "\f356";
|
||||
$ionicon-var-tshirt: "\f4f7";
|
||||
$ionicon-var-tshirt-outline: "\f4f6";
|
||||
$ionicon-var-umbrella: "\f2b7";
|
||||
$ionicon-var-university: "\f357";
|
||||
$ionicon-var-unlocked: "\f254";
|
||||
$ionicon-var-upload: "\f255";
|
||||
$ionicon-var-usb: "\f2b8";
|
||||
$ionicon-var-videocamera: "\f256";
|
||||
$ionicon-var-volume-high: "\f257";
|
||||
$ionicon-var-volume-low: "\f258";
|
||||
$ionicon-var-volume-medium: "\f259";
|
||||
$ionicon-var-volume-mute: "\f25a";
|
||||
$ionicon-var-wand: "\f358";
|
||||
$ionicon-var-waterdrop: "\f25b";
|
||||
$ionicon-var-wifi: "\f25c";
|
||||
$ionicon-var-wineglass: "\f2b9";
|
||||
$ionicon-var-woman: "\f25d";
|
||||
$ionicon-var-wrench: "\f2ba";
|
||||
$ionicon-var-xbox: "\f30c";
|
||||
@@ -0,0 +1,16 @@
|
||||
@charset "UTF-8";
|
||||
@import "ionicons-variables";
|
||||
/*!
|
||||
Ionicons, v2.0.1
|
||||
Created by Ben Sperry for the Ionic Framework, http://ionicons.com/
|
||||
https://twitter.com/benjsperry https://twitter.com/ionicframework
|
||||
MIT License: https://github.com/driftyco/ionicons
|
||||
|
||||
Android-style icons originally built by Google’s
|
||||
Material Design Icons: https://github.com/google/material-design-icons
|
||||
used under CC BY http://creativecommons.org/licenses/by/4.0/
|
||||
Modified icons to fit ionicon’s grid from original.
|
||||
*/
|
||||
|
||||
@import "ionicons-font";
|
||||
@import "ionicons-icons";
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": "1.1.1",
|
||||
"codename": "yttrium-yeti",
|
||||
"date": "2015-11-05",
|
||||
"time": "21:31:24"
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
cordova.define("com.smartmobilesoftware.androidinappbilling.InAppBillingPlugin", function(require, exports, module) { /*
|
||||
* Copyright (C) 2012-2013 by Guillaume Charhon
|
||||
* Modifications 10/16/2013 by Brian Thurlow
|
||||
*/
|
||||
var log = function (msg) {
|
||||
console.log("InAppBilling[js]: " + msg);
|
||||
};
|
||||
|
||||
var InAppBilling = function () {
|
||||
this.options = {};
|
||||
};
|
||||
|
||||
InAppBilling.prototype.init = function (success, fail, options, skus) {
|
||||
options || (options = {});
|
||||
|
||||
this.options = {
|
||||
showLog: options.showLog !== false
|
||||
};
|
||||
|
||||
if (this.options.showLog) {
|
||||
log('setup ok');
|
||||
}
|
||||
|
||||
var hasSKUs = false;
|
||||
//Optional Load SKUs to Inventory.
|
||||
if(typeof skus !== "undefined"){
|
||||
if (typeof skus === "string") {
|
||||
skus = [skus];
|
||||
}
|
||||
if (skus.length > 0) {
|
||||
if (typeof skus[0] !== 'string') {
|
||||
var msg = 'invalid productIds: ' + JSON.stringify(skus);
|
||||
if (this.options.showLog) {
|
||||
log(msg);
|
||||
}
|
||||
fail(msg);
|
||||
return;
|
||||
}
|
||||
if (this.options.showLog) {
|
||||
log('load ' + JSON.stringify(skus));
|
||||
}
|
||||
hasSKUs = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(hasSKUs){
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "init", [skus]);
|
||||
}else {
|
||||
//No SKUs
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "init", []);
|
||||
}
|
||||
};
|
||||
InAppBilling.prototype.getPurchases = function (success, fail) {
|
||||
if (this.options.showLog) {
|
||||
log('getPurchases called!');
|
||||
}
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "getPurchases", ["null"]);
|
||||
};
|
||||
InAppBilling.prototype.refreshPurchases = function (success, fail) {
|
||||
if (this.options.showLog) {
|
||||
log('refreshPurchases called!');
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var onSuccess = function() {
|
||||
self.getPurchases(function(purchases) {
|
||||
success(purchases);
|
||||
}, fail);
|
||||
};
|
||||
|
||||
return cordova.exec(onSuccess, fail, "InAppBillingPlugin", "refreshPurchases", ["null"]);
|
||||
};
|
||||
InAppBilling.prototype.buy = function (success, fail, productId) {
|
||||
if (this.options.showLog) {
|
||||
log('buy called!');
|
||||
}
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "buy", [productId]);
|
||||
};
|
||||
InAppBilling.prototype.subscribe = function (success, fail, productId) {
|
||||
if (this.options.showLog) {
|
||||
log('subscribe called!');
|
||||
}
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "subscribe", [productId]);
|
||||
};
|
||||
InAppBilling.prototype.consumePurchase = function (success, fail, productId) {
|
||||
if (this.options.showLog) {
|
||||
log('consumePurchase called!');
|
||||
}
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "consumePurchase", [productId]);
|
||||
};
|
||||
InAppBilling.prototype.getAvailableProducts = function (success, fail) {
|
||||
if (this.options.showLog) {
|
||||
log('getAvailableProducts called!');
|
||||
}
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "getAvailableProducts", ["null"]);
|
||||
};
|
||||
InAppBilling.prototype.getProductDetails = function (success, fail, skus) {
|
||||
if (this.options.showLog) {
|
||||
log('getProductDetails called!');
|
||||
}
|
||||
|
||||
if (typeof skus === "string") {
|
||||
skus = [skus];
|
||||
}
|
||||
if (!skus.length) {
|
||||
// Empty array, nothing to do.
|
||||
return;
|
||||
}else {
|
||||
if (typeof skus[0] !== 'string') {
|
||||
var msg = 'invalid productIds: ' + JSON.stringify(skus);
|
||||
log(msg);
|
||||
fail(msg);
|
||||
return;
|
||||
}
|
||||
if (this.options.showLog) {
|
||||
log('load ' + JSON.stringify(skus));
|
||||
}
|
||||
return cordova.exec(success, fail, "InAppBillingPlugin", "getProductDetails", [skus]);
|
||||
}
|
||||
};
|
||||
InAppBilling.prototype.isPurchaseOpen = function (success, fail) {
|
||||
|
||||
var onSuccess = function(state) {
|
||||
var bool = (state == "true") ? true : false;
|
||||
success(bool);
|
||||
};
|
||||
|
||||
return cordova.exec(onSuccess, fail, "InAppBillingPlugin", "isPurchaseOpen", []);
|
||||
}
|
||||
|
||||
module.exports = new InAppBilling();
|
||||
|
||||
});
|
||||
@@ -0,0 +1,85 @@
|
||||
cordova.define("cordova-plugin-device.device", function(require, exports, module) { /*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
var argscheck = require('cordova/argscheck'),
|
||||
channel = require('cordova/channel'),
|
||||
utils = require('cordova/utils'),
|
||||
exec = require('cordova/exec'),
|
||||
cordova = require('cordova');
|
||||
|
||||
channel.createSticky('onCordovaInfoReady');
|
||||
// Tell cordova channel to wait on the CordovaInfoReady event
|
||||
channel.waitForInitialization('onCordovaInfoReady');
|
||||
|
||||
/**
|
||||
* This represents the mobile device, and provides properties for inspecting the model, version, UUID of the
|
||||
* phone, etc.
|
||||
* @constructor
|
||||
*/
|
||||
function Device() {
|
||||
this.available = false;
|
||||
this.platform = null;
|
||||
this.version = null;
|
||||
this.uuid = null;
|
||||
this.cordova = null;
|
||||
this.model = null;
|
||||
this.manufacturer = null;
|
||||
this.isVirtual = null;
|
||||
this.serial = null;
|
||||
|
||||
var me = this;
|
||||
|
||||
channel.onCordovaReady.subscribe(function() {
|
||||
me.getInfo(function(info) {
|
||||
//ignoring info.cordova returning from native, we should use value from cordova.version defined in cordova.js
|
||||
//TODO: CB-5105 native implementations should not return info.cordova
|
||||
var buildLabel = cordova.version;
|
||||
me.available = true;
|
||||
me.platform = info.platform;
|
||||
me.version = info.version;
|
||||
me.uuid = info.uuid;
|
||||
me.cordova = buildLabel;
|
||||
me.model = info.model;
|
||||
me.isVirtual = info.isVirtual;
|
||||
me.manufacturer = info.manufacturer || 'unknown';
|
||||
me.serial = info.serial || 'unknown';
|
||||
channel.onCordovaInfoReady.fire();
|
||||
},function(e) {
|
||||
me.available = false;
|
||||
utils.alert("[ERROR] Error initializing Cordova: " + e);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get device info
|
||||
*
|
||||
* @param {Function} successCallback The function to call when the heading data is available
|
||||
* @param {Function} errorCallback The function to call when there is an error getting the heading data. (OPTIONAL)
|
||||
*/
|
||||
Device.prototype.getInfo = function(successCallback, errorCallback) {
|
||||
argscheck.checkArgs('fF', 'Device.getInfo', arguments);
|
||||
exec(successCallback, errorCallback, "Device", "getDeviceInfo", []);
|
||||
};
|
||||
|
||||
module.exports = new Device();
|
||||
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
cordova.define("cordova-plugin-splashscreen.SplashScreen", function(require, exports, module) { /*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
var exec = require('cordova/exec');
|
||||
|
||||
var splashscreen = {
|
||||
show:function() {
|
||||
exec(null, null, "SplashScreen", "show", []);
|
||||
},
|
||||
hide:function() {
|
||||
exec(null, null, "SplashScreen", "hide", []);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = splashscreen;
|
||||
|
||||
});
|
||||
@@ -0,0 +1,111 @@
|
||||
cordova.define("cordova-plugin-statusbar.statusbar", function(require, exports, module) { /*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
var exec = require('cordova/exec');
|
||||
|
||||
var namedColors = {
|
||||
"black": "#000000",
|
||||
"darkGray": "#A9A9A9",
|
||||
"lightGray": "#D3D3D3",
|
||||
"white": "#FFFFFF",
|
||||
"gray": "#808080",
|
||||
"red": "#FF0000",
|
||||
"green": "#00FF00",
|
||||
"blue": "#0000FF",
|
||||
"cyan": "#00FFFF",
|
||||
"yellow": "#FFFF00",
|
||||
"magenta": "#FF00FF",
|
||||
"orange": "#FFA500",
|
||||
"purple": "#800080",
|
||||
"brown": "#A52A2A"
|
||||
};
|
||||
|
||||
var StatusBar = {
|
||||
|
||||
isVisible: true,
|
||||
|
||||
overlaysWebView: function (doOverlay) {
|
||||
exec(null, null, "StatusBar", "overlaysWebView", [doOverlay]);
|
||||
},
|
||||
|
||||
styleDefault: function () {
|
||||
// dark text ( to be used on a light background )
|
||||
exec(null, null, "StatusBar", "styleDefault", []);
|
||||
},
|
||||
|
||||
styleLightContent: function () {
|
||||
// light text ( to be used on a dark background )
|
||||
exec(null, null, "StatusBar", "styleLightContent", []);
|
||||
},
|
||||
|
||||
styleBlackTranslucent: function () {
|
||||
// #88000000 ? Apple says to use lightContent instead
|
||||
exec(null, null, "StatusBar", "styleBlackTranslucent", []);
|
||||
},
|
||||
|
||||
styleBlackOpaque: function () {
|
||||
// #FF000000 ? Apple says to use lightContent instead
|
||||
exec(null, null, "StatusBar", "styleBlackOpaque", []);
|
||||
},
|
||||
|
||||
backgroundColorByName: function (colorname) {
|
||||
return StatusBar.backgroundColorByHexString(namedColors[colorname]);
|
||||
},
|
||||
|
||||
backgroundColorByHexString: function (hexString) {
|
||||
if (hexString.charAt(0) !== "#") {
|
||||
hexString = "#" + hexString;
|
||||
}
|
||||
|
||||
if (hexString.length === 4) {
|
||||
var split = hexString.split("");
|
||||
hexString = "#" + split[1] + split[1] + split[2] + split[2] + split[3] + split[3];
|
||||
}
|
||||
|
||||
exec(null, null, "StatusBar", "backgroundColorByHexString", [hexString]);
|
||||
},
|
||||
|
||||
hide: function () {
|
||||
exec(null, null, "StatusBar", "hide", []);
|
||||
StatusBar.isVisible = false;
|
||||
},
|
||||
|
||||
show: function () {
|
||||
exec(null, null, "StatusBar", "show", []);
|
||||
StatusBar.isVisible = true;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// prime it
|
||||
exec(function (res) {
|
||||
if (typeof res == 'object') {
|
||||
if (res.type == 'tap') {
|
||||
cordova.fireWindowEvent('statusTap');
|
||||
}
|
||||
} else {
|
||||
StatusBar.isVisible = res;
|
||||
}
|
||||
}, null, "StatusBar", "_ready", []);
|
||||
|
||||
module.exports = StatusBar;
|
||||
|
||||
});
|
||||
@@ -0,0 +1,29 @@
|
||||
cordova.define("cordova-plugin-whitelist.whitelist", function(require, exports, module) { /*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
if (!document.querySelector('meta[http-equiv=Content-Security-Policy]')) {
|
||||
var msg = 'No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.';
|
||||
console.error(msg);
|
||||
setInterval(function() {
|
||||
console.warn(msg);
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
});
|
||||
@@ -0,0 +1,62 @@
|
||||
cordova.define("ionic-plugin-keyboard.keyboard", function(require, exports, module) {
|
||||
var argscheck = require('cordova/argscheck'),
|
||||
utils = require('cordova/utils'),
|
||||
exec = require('cordova/exec'),
|
||||
channel = require('cordova/channel');
|
||||
|
||||
|
||||
var Keyboard = function() {
|
||||
};
|
||||
|
||||
Keyboard.hideKeyboardAccessoryBar = function(hide) {
|
||||
exec(null, null, "Keyboard", "hideKeyboardAccessoryBar", [hide]);
|
||||
};
|
||||
|
||||
Keyboard.close = function() {
|
||||
exec(null, null, "Keyboard", "close", []);
|
||||
};
|
||||
|
||||
Keyboard.show = function() {
|
||||
exec(null, null, "Keyboard", "show", []);
|
||||
};
|
||||
|
||||
Keyboard.disableScroll = function(disable) {
|
||||
exec(null, null, "Keyboard", "disableScroll", [disable]);
|
||||
};
|
||||
|
||||
/*
|
||||
Keyboard.styleDark = function(dark) {
|
||||
exec(null, null, "Keyboard", "styleDark", [dark]);
|
||||
};
|
||||
*/
|
||||
|
||||
Keyboard.isVisible = false;
|
||||
|
||||
channel.onCordovaReady.subscribe(function() {
|
||||
exec(success, null, 'Keyboard', 'init', []);
|
||||
|
||||
function success(msg) {
|
||||
var action = msg.charAt(0);
|
||||
if ( action === 'S' ) {
|
||||
var keyboardHeight = msg.substr(1);
|
||||
cordova.plugins.Keyboard.isVisible = true;
|
||||
cordova.fireWindowEvent('native.keyboardshow', { 'keyboardHeight': + keyboardHeight });
|
||||
|
||||
//deprecated
|
||||
cordova.fireWindowEvent('native.showkeyboard', { 'keyboardHeight': + keyboardHeight });
|
||||
} else if ( action === 'H' ) {
|
||||
cordova.plugins.Keyboard.isVisible = false;
|
||||
cordova.fireWindowEvent('native.keyboardhide');
|
||||
|
||||
//deprecated
|
||||
cordova.fireWindowEvent('native.hidekeyboard');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Keyboard;
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
@@ -0,0 +1,16 @@
|
||||
<ion-view view-title="Gekaufte Rosen">
|
||||
<ion-content>
|
||||
<ion-list>
|
||||
<ion-item class="item-remove-animate item-avatar item-icon-right" ng-repeat="chat in chats" type="item-text-wrap" href="#/tab/chats/{{chat.id}}">
|
||||
<img ng-src="{{chat.face}}">
|
||||
<h2>{{chat.name}}</h2>
|
||||
<p>{{chat.lastText}}</p>
|
||||
<i class="icon ion-chevron-right icon-accessory"></i>
|
||||
|
||||
<ion-option-button class="button-assertive" ng-click="remove(chat)">
|
||||
Delete
|
||||
</ion-option-button>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
@@ -0,0 +1,51 @@
|
||||
<ion-view view-title='Rosen kaufen'>
|
||||
<ion-content class="padding">
|
||||
<div class="list card">
|
||||
<div class="item item-divider oswald">Wolle Rose kaufen?</div>
|
||||
<div class="item item-body lobster">
|
||||
<div style="padding-bottom:25px;">
|
||||
Schenken Sie einem besonderen Menschen eine aussergewöhnliche Aufmerksamkeit.
|
||||
</div>
|
||||
<div class="item item-divider oswald">An wen wollen Sie die Rose verschenken</div>
|
||||
<div class="list list-inset" style="padding-bottom:15px;">
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Name Ihres Liebsten:</span>
|
||||
<input type="text" placeholder="" class="lobster" ng-model="$parent.name">
|
||||
</label>
|
||||
<label class="item item-input item-stacked-label">
|
||||
<span class="input-label">Ihre persönliche Nachricht:</span>
|
||||
<textarea placeholder="" rows="4" cols="10" class="lobster" ng-model="$parent.freitext"></textarea>
|
||||
</label>
|
||||
</div>
|
||||
<div style="padding-bottom:15px;">
|
||||
<div class="item item-divider oswald">Wählen Sie Ihre Rosen aus</div>
|
||||
<ion-list>
|
||||
<ion-radio ng-model="preis" ng-value="'1xrose'" class="item item-thumbnail-left item-text-wrap"><img src="img/rose1.png"><h2 class="lobster">1 Rose </h2><p>Preis: 0,50 €</p></ion-radio>
|
||||
<ion-radio ng-model="preis" ng-value="'3xrose'" class="item item-thumbnail-left item-text-wrap"><img src="img/rose3.png"><h2 class="lobster">3 Rosen</h2><p>Preis: 1,00 €</p></ion-radio>
|
||||
<ion-radio ng-model="preis" ng-value="'9xrose'" class="item item-thumbnail-left item-text-wrap"><img src="img/rose10.png"><h2 class="lobster">9 Rosen</h2><p>Preis: 2,00 €</p></ion-radio>
|
||||
</ion-list>
|
||||
<label class="item item-input item-select">
|
||||
<div class="input-label">
|
||||
Farbe
|
||||
</div>
|
||||
<select>
|
||||
<option selected>Rot</option>
|
||||
<option>Gelb</option>
|
||||
<option>Weiß</option>
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
<div class="item item-divider oswald">Rosen kaufen?</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col"><h1 class="lobster">Preis: <span>{{preis}} €</span></h1></div>
|
||||
<div class="col"><br>
|
||||
<button class="button button-small icon-left ion-image button-custom" ng-click="validate()">Vorschau</button>
|
||||
<button class="button button-small icon-left ion-social-euro button-custom" ng-click="buyAdFree()">Jetzt Kaufen</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</ion-content>
|
||||
</ion-view>
|
||||
@@ -0,0 +1,18 @@
|
||||
<!--
|
||||
Create tabs with an icon and label, using the tabs-positive style.
|
||||
Each tab's child <ion-nav-view> directive will have its own
|
||||
navigation history that also transitions its views in and out.
|
||||
-->
|
||||
|
||||
<ion-tabs class="tabs-icon-top tabs-color-active-light tabs-assertive">
|
||||
|
||||
<!-- Dashboard Tab -->
|
||||
<ion-tab title="Rosen kaufen" icon-off="ion-ios-cart" icon-on="ion-ios-cart" href="#/tab/dash">
|
||||
<ion-nav-view name="tab-dash"></ion-nav-view>
|
||||
</ion-tab>
|
||||
|
||||
<!-- Meine Einkaufe -->
|
||||
<ion-tab title="Gekaufte Rosen" icon-off="ion-cash" icon-on="ion-cash" href="#/tab/buys">
|
||||
<ion-nav-view name="tab-buys"></ion-nav-view>
|
||||
</ion-tab>
|
||||
</ion-tabs>
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi.
|
||||
*/
|
||||
|
||||
var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi');
|
||||
var currentApi = nativeApi;
|
||||
|
||||
module.exports = {
|
||||
get: function() { return currentApi; },
|
||||
setPreferPrompt: function(value) {
|
||||
currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi;
|
||||
},
|
||||
// Used only by tests.
|
||||
set: function(value) {
|
||||
currentApi = value;
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
|
||||
* This is used pre-JellyBean, where addJavascriptInterface() is disabled.
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
exec: function(bridgeSecret, service, action, callbackId, argsJson) {
|
||||
return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
|
||||
},
|
||||
setNativeToJsBridgeMode: function(bridgeSecret, value) {
|
||||
prompt(value, 'gap_bridge_mode:' + bridgeSecret);
|
||||
},
|
||||
retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
|
||||
return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
|
||||
}
|
||||
};
|
||||
283
platforms/android/build/intermediates/assets/release/www/cordova-js-src/exec.js
vendored
Normal file
@@ -0,0 +1,283 @@
|
||||
/*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Execute a cordova command. It is up to the native side whether this action
|
||||
* is synchronous or asynchronous. The native side can return:
|
||||
* Synchronous: PluginResult object as a JSON string
|
||||
* Asynchronous: Empty string ""
|
||||
* If async, the native side will cordova.callbackSuccess or cordova.callbackError,
|
||||
* depending upon the result of the action.
|
||||
*
|
||||
* @param {Function} success The success callback
|
||||
* @param {Function} fail The fail callback
|
||||
* @param {String} service The name of the service to use
|
||||
* @param {String} action Action to be run in cordova
|
||||
* @param {String[]} [args] Zero or more arguments to pass to the method
|
||||
*/
|
||||
var cordova = require('cordova'),
|
||||
nativeApiProvider = require('cordova/android/nativeapiprovider'),
|
||||
utils = require('cordova/utils'),
|
||||
base64 = require('cordova/base64'),
|
||||
channel = require('cordova/channel'),
|
||||
jsToNativeModes = {
|
||||
PROMPT: 0,
|
||||
JS_OBJECT: 1
|
||||
},
|
||||
nativeToJsModes = {
|
||||
// Polls for messages using the JS->Native bridge.
|
||||
POLLING: 0,
|
||||
// For LOAD_URL to be viable, it would need to have a work-around for
|
||||
// the bug where the soft-keyboard gets dismissed when a message is sent.
|
||||
LOAD_URL: 1,
|
||||
// For the ONLINE_EVENT to be viable, it would need to intercept all event
|
||||
// listeners (both through addEventListener and window.ononline) as well
|
||||
// as set the navigator property itself.
|
||||
ONLINE_EVENT: 2
|
||||
},
|
||||
jsToNativeBridgeMode, // Set lazily.
|
||||
nativeToJsBridgeMode = nativeToJsModes.ONLINE_EVENT,
|
||||
pollEnabled = false,
|
||||
bridgeSecret = -1;
|
||||
|
||||
var messagesFromNative = [];
|
||||
var isProcessing = false;
|
||||
var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve();
|
||||
var nextTick = resolvedPromise ? function(fn) { resolvedPromise.then(fn); } : function(fn) { setTimeout(fn); };
|
||||
|
||||
function androidExec(success, fail, service, action, args) {
|
||||
if (bridgeSecret < 0) {
|
||||
// If we ever catch this firing, we'll need to queue up exec()s
|
||||
// and fire them once we get a secret. For now, I don't think
|
||||
// it's possible for exec() to be called since plugins are parsed but
|
||||
// not run until until after onNativeReady.
|
||||
throw new Error('exec() called without bridgeSecret');
|
||||
}
|
||||
// Set default bridge modes if they have not already been set.
|
||||
// By default, we use the failsafe, since addJavascriptInterface breaks too often
|
||||
if (jsToNativeBridgeMode === undefined) {
|
||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
|
||||
}
|
||||
|
||||
// Process any ArrayBuffers in the args into a string.
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
if (utils.typeName(args[i]) == 'ArrayBuffer') {
|
||||
args[i] = base64.fromArrayBuffer(args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
var callbackId = service + cordova.callbackId++,
|
||||
argsJson = JSON.stringify(args);
|
||||
|
||||
if (success || fail) {
|
||||
cordova.callbacks[callbackId] = {success:success, fail:fail};
|
||||
}
|
||||
|
||||
var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson);
|
||||
// If argsJson was received by Java as null, try again with the PROMPT bridge mode.
|
||||
// This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666.
|
||||
if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && msgs === "@Null arguments.") {
|
||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT);
|
||||
androidExec(success, fail, service, action, args);
|
||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
|
||||
} else if (msgs) {
|
||||
messagesFromNative.push(msgs);
|
||||
// Always process async to avoid exceptions messing up stack.
|
||||
nextTick(processMessages);
|
||||
}
|
||||
}
|
||||
|
||||
androidExec.init = function() {
|
||||
bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode);
|
||||
channel.onNativeReady.fire();
|
||||
};
|
||||
|
||||
function pollOnceFromOnlineEvent() {
|
||||
pollOnce(true);
|
||||
}
|
||||
|
||||
function pollOnce(opt_fromOnlineEvent) {
|
||||
if (bridgeSecret < 0) {
|
||||
// This can happen when the NativeToJsMessageQueue resets the online state on page transitions.
|
||||
// We know there's nothing to retrieve, so no need to poll.
|
||||
return;
|
||||
}
|
||||
var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent);
|
||||
if (msgs) {
|
||||
messagesFromNative.push(msgs);
|
||||
// Process sync since we know we're already top-of-stack.
|
||||
processMessages();
|
||||
}
|
||||
}
|
||||
|
||||
function pollingTimerFunc() {
|
||||
if (pollEnabled) {
|
||||
pollOnce();
|
||||
setTimeout(pollingTimerFunc, 50);
|
||||
}
|
||||
}
|
||||
|
||||
function hookOnlineApis() {
|
||||
function proxyEvent(e) {
|
||||
cordova.fireWindowEvent(e.type);
|
||||
}
|
||||
// The network module takes care of firing online and offline events.
|
||||
// It currently fires them only on document though, so we bridge them
|
||||
// to window here (while first listening for exec()-releated online/offline
|
||||
// events).
|
||||
window.addEventListener('online', pollOnceFromOnlineEvent, false);
|
||||
window.addEventListener('offline', pollOnceFromOnlineEvent, false);
|
||||
cordova.addWindowEventHandler('online');
|
||||
cordova.addWindowEventHandler('offline');
|
||||
document.addEventListener('online', proxyEvent, false);
|
||||
document.addEventListener('offline', proxyEvent, false);
|
||||
}
|
||||
|
||||
hookOnlineApis();
|
||||
|
||||
androidExec.jsToNativeModes = jsToNativeModes;
|
||||
androidExec.nativeToJsModes = nativeToJsModes;
|
||||
|
||||
androidExec.setJsToNativeBridgeMode = function(mode) {
|
||||
if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) {
|
||||
mode = jsToNativeModes.PROMPT;
|
||||
}
|
||||
nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT);
|
||||
jsToNativeBridgeMode = mode;
|
||||
};
|
||||
|
||||
androidExec.setNativeToJsBridgeMode = function(mode) {
|
||||
if (mode == nativeToJsBridgeMode) {
|
||||
return;
|
||||
}
|
||||
if (nativeToJsBridgeMode == nativeToJsModes.POLLING) {
|
||||
pollEnabled = false;
|
||||
}
|
||||
|
||||
nativeToJsBridgeMode = mode;
|
||||
// Tell the native side to switch modes.
|
||||
// Otherwise, it will be set by androidExec.init()
|
||||
if (bridgeSecret >= 0) {
|
||||
nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode);
|
||||
}
|
||||
|
||||
if (mode == nativeToJsModes.POLLING) {
|
||||
pollEnabled = true;
|
||||
setTimeout(pollingTimerFunc, 1);
|
||||
}
|
||||
};
|
||||
|
||||
function buildPayload(payload, message) {
|
||||
var payloadKind = message.charAt(0);
|
||||
if (payloadKind == 's') {
|
||||
payload.push(message.slice(1));
|
||||
} else if (payloadKind == 't') {
|
||||
payload.push(true);
|
||||
} else if (payloadKind == 'f') {
|
||||
payload.push(false);
|
||||
} else if (payloadKind == 'N') {
|
||||
payload.push(null);
|
||||
} else if (payloadKind == 'n') {
|
||||
payload.push(+message.slice(1));
|
||||
} else if (payloadKind == 'A') {
|
||||
var data = message.slice(1);
|
||||
payload.push(base64.toArrayBuffer(data));
|
||||
} else if (payloadKind == 'S') {
|
||||
payload.push(window.atob(message.slice(1)));
|
||||
} else if (payloadKind == 'M') {
|
||||
var multipartMessages = message.slice(1);
|
||||
while (multipartMessages !== "") {
|
||||
var spaceIdx = multipartMessages.indexOf(' ');
|
||||
var msgLen = +multipartMessages.slice(0, spaceIdx);
|
||||
var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen);
|
||||
multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1);
|
||||
buildPayload(payload, multipartMessage);
|
||||
}
|
||||
} else {
|
||||
payload.push(JSON.parse(message));
|
||||
}
|
||||
}
|
||||
|
||||
// Processes a single message, as encoded by NativeToJsMessageQueue.java.
|
||||
function processMessage(message) {
|
||||
var firstChar = message.charAt(0);
|
||||
if (firstChar == 'J') {
|
||||
// This is deprecated on the .java side. It doesn't work with CSP enabled.
|
||||
eval(message.slice(1));
|
||||
} else if (firstChar == 'S' || firstChar == 'F') {
|
||||
var success = firstChar == 'S';
|
||||
var keepCallback = message.charAt(1) == '1';
|
||||
var spaceIdx = message.indexOf(' ', 2);
|
||||
var status = +message.slice(2, spaceIdx);
|
||||
var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1);
|
||||
var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx);
|
||||
var payloadMessage = message.slice(nextSpaceIdx + 1);
|
||||
var payload = [];
|
||||
buildPayload(payload, payloadMessage);
|
||||
cordova.callbackFromNative(callbackId, success, status, payload, keepCallback);
|
||||
} else {
|
||||
console.log("processMessage failed: invalid message: " + JSON.stringify(message));
|
||||
}
|
||||
}
|
||||
|
||||
function processMessages() {
|
||||
// Check for the reentrant case.
|
||||
if (isProcessing) {
|
||||
return;
|
||||
}
|
||||
if (messagesFromNative.length === 0) {
|
||||
return;
|
||||
}
|
||||
isProcessing = true;
|
||||
try {
|
||||
var msg = popMessageFromQueue();
|
||||
// The Java side can send a * message to indicate that it
|
||||
// still has messages waiting to be retrieved.
|
||||
if (msg == '*' && messagesFromNative.length === 0) {
|
||||
nextTick(pollOnce);
|
||||
return;
|
||||
}
|
||||
processMessage(msg);
|
||||
} finally {
|
||||
isProcessing = false;
|
||||
if (messagesFromNative.length > 0) {
|
||||
nextTick(processMessages);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function popMessageFromQueue() {
|
||||
var messageBatch = messagesFromNative.shift();
|
||||
if (messageBatch == '*') {
|
||||
return '*';
|
||||
}
|
||||
|
||||
var spaceIdx = messageBatch.indexOf(' ');
|
||||
var msgLen = +messageBatch.slice(0, spaceIdx);
|
||||
var message = messageBatch.substr(spaceIdx + 1, msgLen);
|
||||
messageBatch = messageBatch.slice(spaceIdx + msgLen + 1);
|
||||
if (messageBatch) {
|
||||
messagesFromNative.unshift(messageBatch);
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
module.exports = androidExec;
|
||||
91
platforms/android/build/intermediates/assets/release/www/cordova-js-src/platform.js
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
id: 'android',
|
||||
bootstrap: function() {
|
||||
var channel = require('cordova/channel'),
|
||||
cordova = require('cordova'),
|
||||
exec = require('cordova/exec'),
|
||||
modulemapper = require('cordova/modulemapper');
|
||||
|
||||
// Get the shared secret needed to use the bridge.
|
||||
exec.init();
|
||||
|
||||
// TODO: Extract this as a proper plugin.
|
||||
modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app');
|
||||
|
||||
var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
|
||||
|
||||
// Inject a listener for the backbutton on the document.
|
||||
var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
|
||||
backButtonChannel.onHasSubscribersChange = function() {
|
||||
// If we just attached the first handler or detached the last handler,
|
||||
// let native know we need to override the back button.
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [this.numHandlers == 1]);
|
||||
};
|
||||
|
||||
// Add hardware MENU and SEARCH button handlers
|
||||
cordova.addDocumentEventHandler('menubutton');
|
||||
cordova.addDocumentEventHandler('searchbutton');
|
||||
|
||||
function bindButtonChannel(buttonName) {
|
||||
// generic button bind used for volumeup/volumedown buttons
|
||||
var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
|
||||
volumeButtonChannel.onHasSubscribersChange = function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]);
|
||||
};
|
||||
}
|
||||
// Inject a listener for the volume buttons on the document.
|
||||
bindButtonChannel('volumeup');
|
||||
bindButtonChannel('volumedown');
|
||||
|
||||
// Let native code know we are all done on the JS side.
|
||||
// Native code will then un-hide the WebView.
|
||||
channel.onCordovaReady.subscribe(function() {
|
||||
exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []);
|
||||
exec(null, null, APP_PLUGIN_NAME, "show", []);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function onMessageFromNative(msg) {
|
||||
var cordova = require('cordova');
|
||||
var action = msg.action;
|
||||
|
||||
switch (action)
|
||||
{
|
||||
// Button events
|
||||
case 'backbutton':
|
||||
case 'menubutton':
|
||||
case 'searchbutton':
|
||||
// App life cycle events
|
||||
case 'pause':
|
||||
case 'resume':
|
||||
// Volume events
|
||||
case 'volumedownbutton':
|
||||
case 'volumeupbutton':
|
||||
cordova.fireDocumentEvent(action);
|
||||
break;
|
||||
default:
|
||||
throw new Error('Unknown event action ' + action);
|
||||
}
|
||||
}
|
||||
108
platforms/android/build/intermediates/assets/release/www/cordova-js-src/plugin/android/app.js
vendored
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you 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.
|
||||
*
|
||||
*/
|
||||
|
||||
var exec = require('cordova/exec');
|
||||
var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
|
||||
|
||||
module.exports = {
|
||||
/**
|
||||
* Clear the resource cache.
|
||||
*/
|
||||
clearCache:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "clearCache", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Load the url into the webview or into new browser instance.
|
||||
*
|
||||
* @param url The URL to load
|
||||
* @param props Properties that can be passed in to the activity:
|
||||
* wait: int => wait msec before loading URL
|
||||
* loadingDialog: "Title,Message" => display a native loading dialog
|
||||
* loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error
|
||||
* clearHistory: boolean => clear webview history (default=false)
|
||||
* openExternal: boolean => open in a new browser (default=false)
|
||||
*
|
||||
* Example:
|
||||
* navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000});
|
||||
*/
|
||||
loadUrl:function(url, props) {
|
||||
exec(null, null, APP_PLUGIN_NAME, "loadUrl", [url, props]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Cancel loadUrl that is waiting to be loaded.
|
||||
*/
|
||||
cancelLoadUrl:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "cancelLoadUrl", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Clear web history in this web view.
|
||||
* Instead of BACK button loading the previous web page, it will exit the app.
|
||||
*/
|
||||
clearHistory:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "clearHistory", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Go to previous page displayed.
|
||||
* This is the same as pressing the backbutton on Android device.
|
||||
*/
|
||||
backHistory:function() {
|
||||
exec(null, null, APP_PLUGIN_NAME, "backHistory", []);
|
||||
},
|
||||
|
||||
/**
|
||||
* Override the default behavior of the Android back button.
|
||||
* If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired.
|
||||
*
|
||||
* Note: The user should not have to call this method. Instead, when the user
|
||||
* registers for the "backbutton" event, this is automatically done.
|
||||
*
|
||||
* @param override T=override, F=cancel override
|
||||
*/
|
||||
overrideBackbutton:function(override) {
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [override]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Override the default behavior of the Android volume button.
|
||||
* If overridden, when the volume button is pressed, the "volume[up|down]button"
|
||||
* JavaScript event will be fired.
|
||||
*
|
||||
* Note: The user should not have to call this method. Instead, when the user
|
||||
* registers for the "volume[up|down]button" event, this is automatically done.
|
||||
*
|
||||
* @param button volumeup, volumedown
|
||||
* @param override T=override, F=cancel override
|
||||
*/
|
||||
overrideButton:function(button, override) {
|
||||
exec(null, null, APP_PLUGIN_NAME, "overrideButton", [button, override]);
|
||||
},
|
||||
|
||||
/**
|
||||
* Exit and terminate the application.
|
||||
*/
|
||||
exitApp:function() {
|
||||
return exec(null, null, APP_PLUGIN_NAME, "exitApp", []);
|
||||
}
|
||||
};
|
||||
1979
platforms/android/build/intermediates/assets/release/www/cordova.js
vendored
Normal file
63
platforms/android/build/intermediates/assets/release/www/cordova_plugins.js
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
cordova.define('cordova/plugin_list', function(require, exports, module) {
|
||||
module.exports = [
|
||||
{
|
||||
"file": "plugins/com.smartmobilesoftware.androidinappbilling/www/inappbilling.js",
|
||||
"id": "com.smartmobilesoftware.androidinappbilling.InAppBillingPlugin",
|
||||
"pluginId": "com.smartmobilesoftware.androidinappbilling",
|
||||
"clobbers": [
|
||||
"inappbilling"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-device/www/device.js",
|
||||
"id": "cordova-plugin-device.device",
|
||||
"pluginId": "cordova-plugin-device",
|
||||
"clobbers": [
|
||||
"device"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-splashscreen/www/splashscreen.js",
|
||||
"id": "cordova-plugin-splashscreen.SplashScreen",
|
||||
"pluginId": "cordova-plugin-splashscreen",
|
||||
"clobbers": [
|
||||
"navigator.splashscreen"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-statusbar/www/statusbar.js",
|
||||
"id": "cordova-plugin-statusbar.statusbar",
|
||||
"pluginId": "cordova-plugin-statusbar",
|
||||
"clobbers": [
|
||||
"window.StatusBar"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "plugins/cordova-plugin-whitelist/whitelist.js",
|
||||
"id": "cordova-plugin-whitelist.whitelist",
|
||||
"pluginId": "cordova-plugin-whitelist",
|
||||
"runs": true
|
||||
},
|
||||
{
|
||||
"file": "plugins/ionic-plugin-keyboard/www/android/keyboard.js",
|
||||
"id": "ionic-plugin-keyboard.keyboard",
|
||||
"pluginId": "ionic-plugin-keyboard",
|
||||
"clobbers": [
|
||||
"cordova.plugins.Keyboard"
|
||||
],
|
||||
"runs": true
|
||||
}
|
||||
];
|
||||
module.exports.metadata =
|
||||
// TOP OF METADATA
|
||||
{
|
||||
"com.smartmobilesoftware.androidinappbilling": "3.0.2",
|
||||
"cordova-plugin-console": "1.0.2",
|
||||
"cordova-plugin-device": "1.1.0",
|
||||
"cordova-plugin-splashscreen": "3.0.0",
|
||||
"cordova-plugin-statusbar": "2.0.0",
|
||||
"cordova-plugin-whitelist": "1.2.0",
|
||||
"ionic-plugin-keyboard": "1.0.8"
|
||||
}
|
||||
// BOTTOM OF METADATA
|
||||
});
|
||||