add files to master
							
								
								
									
										10
									
								
								.directory
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,10 @@ | ||||
| [Dolphin] | ||||
| HeaderColumnWidths=546,72,94,222 | ||||
| PreviewsShown=true | ||||
| Timestamp=2018,10,22,11,49,21 | ||||
| Version=4 | ||||
| ViewMode=1 | ||||
| VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_type,CustomizedDetails | ||||
| 
 | ||||
| [Settings] | ||||
| HiddenFilesShown=true | ||||
							
								
								
									
										187
									
								
								BackendProvider/WemosStripUDPServer.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,187 @@ | ||||
| import threading | ||||
| import socketserver | ||||
| import socket | ||||
| import traceback | ||||
| from time import sleep, time | ||||
| import json | ||||
| import struct | ||||
| 
 | ||||
| from rgbUtils import effectControllerJsonHandler | ||||
| from rgbUtils import rgbStripControllerJsonHandler | ||||
| 
 | ||||
| class ThreadedUDPServer(threading.Thread): | ||||
|     def __init__(self,effectController,rgbStripController): | ||||
|         threading.Thread.__init__(self) | ||||
|         self.effectController = effectController | ||||
|         self.rgbStripController = rgbStripController | ||||
|         self.daemon = True | ||||
|         self.stopped = False | ||||
|         self.start() | ||||
|         self.udpClientGuardian = self.UDPClientGuardian() | ||||
|         self.udpClientGuardian.start() | ||||
|         UDPClients | ||||
|      | ||||
|     def run(self): | ||||
|         self.server = socketserver.UDPServer(('', 8002), UDPStripHandler) | ||||
|         self.server.effectController = self.effectController | ||||
|         self.server.rgbStripController = self.rgbStripController | ||||
|         self.server.serve_forever() | ||||
|         print("ThreadedUDPServer stopped") | ||||
| 
 | ||||
|     def stop(self): | ||||
|         self.udpClientGuardian.stop() | ||||
|         self.server.shutdown() | ||||
|      | ||||
|     # check last pings from clients, responds with pong and remove clients  | ||||
|     # when there is no answer after 2 seconds | ||||
|     class UDPClientGuardian(threading.Thread): | ||||
|         def __init__(self): | ||||
|             threading.Thread.__init__(self) | ||||
|             self.stopped = False | ||||
| 
 | ||||
|         def run(self): | ||||
|             while not self.stopped: | ||||
|                 for key in list(UDPClients.keys()): | ||||
|                     if UDPClients[key].lastping + 2 < time(): | ||||
|                         UDPClients[key].handleClose() | ||||
|                         del UDPClients[key] | ||||
|                 sleep(0.5) | ||||
| 
 | ||||
|         def stop(self): | ||||
|             self.stopped = True | ||||
| 
 | ||||
| 
 | ||||
| CLIENT_TYPE_CONTROLLER = 0 | ||||
| CLIENT_TYPE_STRIPE = 1 | ||||
| CLIENT_TYPE_RECORDER = 2 | ||||
| 
 | ||||
| UDPClients = {} | ||||
| 
 | ||||
| class UDPStripHandler(socketserver.BaseRequestHandler): | ||||
| 
 | ||||
|     def handle(self): | ||||
|         #print(self.client_address) | ||||
|         if self.client_address not in UDPClients: | ||||
|             UDPClients[self.client_address] = UDPClient(self.client_address,self.server.effectController,self.server.rgbStripController) | ||||
|         UDPClients[self.client_address].handle(self.request) | ||||
|                  | ||||
| class UDPClient(): | ||||
|     def __init__(self,client_address,effectController,rgbStripController): | ||||
|         self.client_type = None | ||||
|         self.rgbStrip = None | ||||
|         self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) | ||||
|         self.client_address = client_address | ||||
|         self.effectController = effectController | ||||
|         self.rgbStripController = rgbStripController | ||||
|         self.sendToClientLock = False | ||||
|         self.lastping = time() | ||||
| 
 | ||||
|     def handle(self,request): | ||||
| 
 | ||||
|         clientdata = request[0].decode() | ||||
|         self.socket = request[1] | ||||
|         #print(time(),"{} wrote:".format(self.client_address)) | ||||
|         #print(time(),"clientdata -> ", clientdata) | ||||
|         # socket.sendto(bytes("pong","utf-8"),self.client_address) | ||||
| 
 | ||||
|         try: | ||||
|             data = clientdata.split(':') | ||||
|             #print(data) | ||||
|             #r:1:srg strip name | ||||
|             if data[0] == "r" and int(data[1]) == CLIENT_TYPE_STRIPE and data[2] != None: | ||||
|                     self.client_type = CLIENT_TYPE_STRIPE | ||||
|                     # registers the strip with websocket object and name. the onRGBStripValueUpdate(rgbStrip) is called by  | ||||
|                     # by the rgbStrip when an effectThread updates it | ||||
|                     # the self.rgbStrip variable is used to unregister the strip only | ||||
|                     self.rgbStrip = self.rgbStripController.registerRGBStrip(data[2],self.onRGBStripValueUpdate) | ||||
|             #s:ping | ||||
|             if data[0] == "s" and data[1] == "ping": | ||||
|                 # if we got a ping and the client has no client type defined, send status unregistered, so the client knows that he has to register | ||||
|                 if self.client_type is None and self.socket is not None: | ||||
|                     self.sendToClient('s:unregistered') | ||||
|                 self.lastping = time() | ||||
|         except Exception as e: | ||||
|             print(e, traceback.format_exc()) | ||||
| 
 | ||||
|   | ||||
| 
 | ||||
|     # unregister the onChangeHandler | ||||
|     # for now this function is not called when a client times out, | ||||
|     # so they don't get unregistered. i mean there is no function that | ||||
|     # is called when a client times out. | ||||
|     def handleClose(self): | ||||
|         if self.client_type is CLIENT_TYPE_STRIPE: | ||||
|             self.rgbStripController.unregisterRGBStrip(self.rgbStrip) | ||||
|         #print(self.client_address, 'closed') | ||||
| 
 | ||||
|     # when a rgbStrip value is changed, send json data to client | ||||
|     def onRGBStripValueUpdate(self,rgbStrip,led = 0): | ||||
|         self.sendToClient('d:'+str(led)+':'+str(rgbStrip.red[led])+':'+str(rgbStrip.green[led])+':'+str(rgbStrip.blue[led])+'') | ||||
|              | ||||
| 
 | ||||
|     def sendToClient(self,message): | ||||
|         while self.sendToClientLock is True: | ||||
|             sleep(1) | ||||
|         self.sendToClientLock = True | ||||
|         if self.socket is not None: | ||||
|             self.socket.sendto( | ||||
|                 message.encode(), self.client_address | ||||
|             ) | ||||
|         self.sendToClientLock = False | ||||
| 
 | ||||
| # class UDPStripHandler: | ||||
| 
 | ||||
| #     def __init__(self): | ||||
| #         #the rgbStrip object returned by the  | ||||
| #         self.rgbStrip = None | ||||
| #         # last ping command from the client | ||||
| #         self.lastPing = 0 | ||||
| 
 | ||||
| 
 | ||||
| #     def handleMessage(self): | ||||
| #         try: | ||||
| #             print(self.address, self.data) | ||||
| #             data = json.loads(self.data) | ||||
| #             # Client Registration on the Websocket Server | ||||
| #             # maybe it would be better to use a websocket server thread for each client type, | ||||
| #             # can be done in future if there is too much latency | ||||
| #             if "register_client_type" in data: | ||||
| #                 # the controler type, add handler on RGBStripContoller and send the current state of the controller | ||||
| #                 if int(data['register_client_type']) is CLIENT_TYPE_CONTROLLER: | ||||
| #                     self.client_type = CLIENT_TYPE_CONTROLLER | ||||
| #                     # add effectController onControllerChangeHandler to get changes in the effectController eg start/stop effects, parameter updates, moved strips | ||||
| #                     # register rgbStripController onRGBStripRegistered/UnRegistered handler to get noticed about new rgbStrips is not necessary | ||||
| #                     # since we will get noticed from the effectController when it added the rgbStrip to the offEffect  | ||||
| #                     self.effectController.addOnControllerChangeHandler(self.onChange) | ||||
| #                 # register new Stripes | ||||
| #                 elif int(data['register_client_type']) is CLIENT_TYPE_STRIPE and "client_name" in data: | ||||
| #                     self.client_type = CLIENT_TYPE_STRIPE | ||||
| #                     # registers the strip with websocket object and name. the onRGBStripValueUpdate(rgbStrip) is called by  | ||||
| #                     # by the rgbStrip when an effectThread updates it | ||||
| #                     # the self.rgbStrip variable is used to unregister the strip only | ||||
| #                     self.rgbStrip = self.rgbStripController.registerRGBStrip(data["client_name"],self.onRGBStripValueUpdate) | ||||
| #                 # register new Audio Recorders | ||||
| #                 elif int(data['register_client_type']) is CLIENT_TYPE_RECORDER: | ||||
| #                     self.client_type = CLIENT_TYPE_RECORDER | ||||
| 
 | ||||
| #             # controller responses are handled by the effectControllerJsonHandler | ||||
| #             if self.client_type is CLIENT_TYPE_CONTROLLER: | ||||
| #                 response = effectControllerJsonHandler.responseHandler(self.effectController, self.rgbStripController, data) | ||||
| #                 self.sendMessage( | ||||
| #                     json.dumps({ | ||||
| #                         'response': response | ||||
| #                     }) | ||||
| #                 ) | ||||
| #                 return | ||||
| #             # the stripe should usualy not send any data, i do not know why it should... | ||||
| #             elif self.client_type is CLIENT_TYPE_STRIPE: | ||||
| #                 return | ||||
| #             # audio recorder responses are handled by the effectControllerJsonHandler | ||||
| #             elif self.client_type is CLIENT_TYPE_RECORDER: | ||||
| #                 return | ||||
| #         except Exception as e: | ||||
| #             print(e, traceback.format_exc()) | ||||
| 
 | ||||
|      | ||||
| 
 | ||||
|          | ||||
							
								
								
									
										56
									
								
								LEDServer.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,56 @@ | ||||
| #!/usr/bin/python | ||||
| 
 | ||||
| import os | ||||
| import sys | ||||
| import time | ||||
| import traceback | ||||
| def main(): | ||||
|     try: | ||||
| 
 | ||||
|         running = True | ||||
|         os.chdir(os.path.dirname(sys.argv[0])) | ||||
| 
 | ||||
|         # i want some external providers the effects can interact with. for example the music reaction. | ||||
|         # Idea is: eg a Pi with a soundcard processing input via pyaudio and sending this data to the server. an musicEffect is bind to this input and processing it. | ||||
|         # to be as flexible as possible the client registers with a name(sting), a type(string) and the data as an dict. the effect filters these clients by type. jea?  | ||||
| 
 | ||||
|         # rgbStrips register themselves at the rgbStripContoller | ||||
|         # the rgbStripController calls the backend Provider's onChange function  | ||||
|         # when there are new values for the strip | ||||
|         from rgbUtils.rgbStripController import rgbStripController | ||||
|         rgbStripController = rgbStripController() | ||||
|         rgbStripController.start() | ||||
|          | ||||
|         # the effectController handles the effects and pushes the values to the rgbStripContoller | ||||
|         # it also calls the backendProvider's onChange function when there are changes made on the effects | ||||
|         from rgbUtils.effectController import effectController | ||||
|         effectController = effectController(rgbStripController) | ||||
| 
 | ||||
|         # register effectControllers onRGBStripRegistered and onRGBStripUnregistered handler on the rgbStripContoller to detect added or removed strips | ||||
|         rgbStripController.addOnRGBStripRegisteredHandler(effectController.onRGBStripRegistered) | ||||
|         rgbStripController.addOnRGBStripUnRegisteredHandler(effectController.onRGBStripUnRegistered) | ||||
| 
 | ||||
|         # this is a "Backend Provider" that interacts with the effectController and also the rgbStripContoller (via effectController) | ||||
|         # this could be seperated in one websocket server for the frontend and one for the rgbStrips | ||||
|         # or an other frontend / rgbStrip backend provider not using websockets. you could integrate alexa, phillips hue like lamps or whatever you like! | ||||
|         # but then there must be some autoloading of modules in a folder like the effects for easy installing. //todo :) | ||||
|         print("starting websocket:8001") | ||||
|         import webserver.WebSocketServer as WebSocketServer | ||||
|         webSocketThread = WebSocketServer.ThreadedWebSocketServer(effectController,rgbStripController) | ||||
|          | ||||
|         print("starting UDPServer:8002") | ||||
|         import BackendProvider.WemosStripUDPServer as UPDSocketServer | ||||
|         webSocketThread = UPDSocketServer.ThreadedUDPServer(effectController,rgbStripController) | ||||
| 
 | ||||
|         while running: | ||||
|             time.sleep(1) | ||||
| 
 | ||||
|     except Exception as e: | ||||
|         running = False | ||||
|         print(e,traceback.format_exc()) | ||||
|     finally: | ||||
|         print('shutting down the LED-Server') | ||||
|         webSocketThread.stop() | ||||
|         effectController.stopAll() | ||||
| if __name__=='__main__': | ||||
|     main() | ||||
							
								
								
									
										0
									
								
								__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										78
									
								
								config.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,78 @@ | ||||
| #!/usr/bin/env python | ||||
| # -*- coding: utf-8 -*- | ||||
| from os import path | ||||
| 
 | ||||
| #RGBStrip("Unter Theke", | ||||
|             # wiringpi 24,-> BCM 19 -> GPIO. 24 -> kabel fehlt   | ||||
|             # wiringpi 4, -> BCM 23 -> GPIO. 4  -> Mosfet LAHMT (rot) | ||||
|             # wiringpi 0, -> BCM 17 -> GPIO. 0  -> Mosfet TOT   (weiß) | ||||
| #RGBStrip("Über Theke", | ||||
|             # wiringpi 3, -> BCM 22  -> GPIO. 3  | ||||
|             # wiringpi 23,-> BCM 13 -> GPIO. 23 | ||||
|             # wiringpi 2, -> BCM 27 -> GPIO  2 | ||||
| 
 | ||||
| #RGBStrip("Fensterbank", | ||||
|             # wiringpi 21,-> BCM 5  -> GPIO. 21 | ||||
|             # wiringpi 25,-> BCM 26 -> GPIO. 25 | ||||
|             # wiringpi 22,-> BCM 6  -> GPIO. 22 | ||||
| 
 | ||||
| #use the BCM pin numbers here | ||||
| """ | ||||
| from rgbUtils.RGBStrip import RGBStrip | ||||
| rgbStrips = [ | ||||
|     #RGBStrip("Test Dahem", 4, 17 , 22), | ||||
|     RGBStrip("Unter Theke", 20, 16 , 21), | ||||
|     RGBStrip("Über Theke", 22, 13, 27), | ||||
|     RGBStrip("Fensterbank", 5, 26, 6) | ||||
| ] | ||||
| 
 | ||||
| # setup PRi.GPIO | ||||
| GPIO.setmode(GPIO.BCM) | ||||
| # setup PWM for the rgbStrips | ||||
| for RGBStrip in self.getRGBStrips(): | ||||
|     RGBStrip.init() | ||||
| 
 | ||||
| """ | ||||
| """ | ||||
| Use WS2812B Strips: | ||||
| an arduino (uno tested) must be connected via usb while running  | ||||
| the sketch in the root folder. Define the Strip as masterstrip and | ||||
| use parts of it as a rgbStrip | ||||
| 
 | ||||
| 
 | ||||
| """ | ||||
| 
 | ||||
| from rgbUtils.WS2812MasterStrip import WS2812MasterStrip | ||||
| from rgbUtils.WS2812Strip import WS2812Strip | ||||
| # LED_COUNT must be the same than in the arduino sketch | ||||
| ws2812master = WS2812MasterStrip('/dev/ttyACM0',150) | ||||
| rgbStrips = [ | ||||
|     WS2812Strip("LEDS 1-50",1,50,ws2812master), | ||||
|     WS2812Strip("LEDS 51-100",51,100,ws2812master), | ||||
|     WS2812Strip("LEDS 101-150",101,150,ws2812master), | ||||
| ] | ||||
| 
 | ||||
| """ | ||||
| def drange(start, stop, step): | ||||
|      r = start | ||||
|      while r < stop: | ||||
|          yield r | ||||
|          r += step | ||||
| 
 | ||||
| rgbStrips = [] | ||||
| for x in drange(1,150,10): | ||||
|     rgbStrips.append(WS2812Strip(str(x)+"-"+str(x),x,x,ws2812master)) | ||||
| """ | ||||
| 
 | ||||
| # int Port to bind. ports < 1024 need sudo access | ||||
| SocketBindPort = 8000 | ||||
| 
 | ||||
| # Maximum brightness of the RGB Strips Max Value is 100, can be set lower if the strips are too bright. | ||||
| # (What I do not think, RGB Strips are never too bright) | ||||
| # MaxBrightness = 100 | ||||
| 
 | ||||
| # GPIO Pins that are working with pwm. At the moment A and B models only | ||||
| # todo: check rpi version and add the missing pins if there are more that can be used | ||||
| AllowedGPIOPins = [3, 5, 7, 8, 10, 11, 12, 13, 15, 19, 21, 22, 23, 24, 26] | ||||
| 
 | ||||
| BASE_PATH = path.dirname(path.realpath(__file__)) | ||||
							
								
								
									
										240
									
								
								effects/musikEffect.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,240 @@ | ||||
| from rgbUtils.BaseEffect import BaseEffect | ||||
| from rgbUtils.EffectParameter import slider, colorpicker | ||||
| from rgbUtils.debug import debug | ||||
| import time | ||||
| 
 | ||||
| import sys | ||||
| import numpy | ||||
| from rgbUtils.pyAudioRecorder import pyAudioRecorder | ||||
| from time import perf_counter, sleep | ||||
| from random import randint, shuffle | ||||
| 
 | ||||
| class musikEffect(BaseEffect): | ||||
|     name = "musikEffect" | ||||
|     desc = "LED-Band *sollte* nach musik blinken" | ||||
|      | ||||
|      | ||||
|      | ||||
|     # Something that will be used to show descriptions and value options  | ||||
|     # of the parameters the effect will accept, in a way, that eg the webclient can decide,  | ||||
|     # if the parameters can be toggeled by a button/checkbox/slider/whatever | ||||
|     effectParameters = [ | ||||
|     #     radio(\    | ||||
|     #         "Shuffle LED to Freq Order",\ | ||||
|     #         "Off -> Mapping  ",\ | ||||
|     #         [\ | ||||
|     #             [0,255,255,"red"],\ | ||||
|     #             [0,255,255,"green"],\ | ||||
|     #             [0,255,255,"blue"]\ | ||||
|     #         ]\ | ||||
|     #     ),\ | ||||
|     #     slider(\ | ||||
|     #         "Effect Brightnes",\ | ||||
|     #         "Choose a brightness for your LED's",\ | ||||
|     #         [\ | ||||
|     #             [0,100,100,"brightness"],\ | ||||
|     #         ]\ | ||||
|     #     )\ | ||||
|     ] | ||||
| 
 | ||||
|     def init(self): | ||||
| 
 | ||||
|         self.fft_random_keys = [0,1,2,3] | ||||
|         self.fft_random = [0,0,0,0] | ||||
| 
 | ||||
|         # used by strobe()  | ||||
|         self.lastmode = 0 | ||||
| 
 | ||||
|         self.recorderClient = pyAudioRecorder.recorderClient() | ||||
|         self.rgbStripController.pyAudioRecorder.registerRecorderClient(self.recorderClient) | ||||
| 
 | ||||
|         return | ||||
| 
 | ||||
|     #loop effect as long as not stopped | ||||
|     def effect(self): | ||||
|         self.plot_audio_and_detect_beats() | ||||
|         #self.freqtocolor() | ||||
|         #if(time.time() - self.lastTime >= 0.002): | ||||
|         #for RGBStrip in self.effectRGBStrips(): | ||||
|         #    r= RGBStrip.red-1 | ||||
|         #    if(r<0): | ||||
|         #        r=0 | ||||
|         #    g= RGBStrip.green-1 | ||||
|         #    if(g<0): | ||||
|         #        g=0 | ||||
|         #    b= RGBStrip.blue-1  | ||||
|         #    if(b<0): | ||||
|         #        b=0 | ||||
|         #    RGBStrip.RGB(r,g,b) | ||||
|         #self.lastTime = time.time() | ||||
|         sleep(.001) | ||||
| 
 | ||||
|     def end(self): | ||||
|        self.rgbStripController.pyAudioRecorder.unregisterRecorderClient(self.recorderClient) | ||||
| 
 | ||||
|     def plot_audio_and_detect_beats(self): | ||||
|         if not self.rgbStripController.pyAudioRecorder.has_new_audio:  | ||||
|             return | ||||
| 
 | ||||
|         # get x and y values from FFT | ||||
|         xs, ys = self.rgbStripController.pyAudioRecorder.fft() | ||||
| 
 | ||||
|         # calculate average for all frequency ranges | ||||
|         y_avg = numpy.mean(ys) | ||||
|          | ||||
|          | ||||
| 
 | ||||
|         #low_freq = numpy.mean(ys[20:47]) | ||||
|         #mid_freq = numpy.mean(ys[88:115]) | ||||
|         #hig_freq = numpy.mean(ys[156:184]) | ||||
|          | ||||
|         low_freq = numpy.mean(ys[0:67]) | ||||
|         mid_freq = numpy.mean(ys[68:135]) | ||||
|         hig_freq = numpy.mean(ys[136:204]) | ||||
|          | ||||
|         #get the maximum of all freq | ||||
|         if len(self.y_max_freq_avg_list) < 250 or y_avg > 10 and numpy.amax([low_freq,mid_freq,hig_freq])/2 > numpy.amin(self.y_max_freq_avg_list): | ||||
|             self.y_max_freq_avg_list.append(numpy.amax([low_freq,mid_freq,hig_freq])) | ||||
|          | ||||
|         y_max = numpy.amax(self.y_max_freq_avg_list) | ||||
|          | ||||
|         #y_max = numpy.mean([numpy.amax(ys),y_max]) | ||||
|         #print(low_freq,mid_freq,hig_freq,y_max) | ||||
| 
 | ||||
|         for i,item in enumerate([low_freq,mid_freq,hig_freq]): | ||||
|             if item is None: | ||||
|                 item = 0 | ||||
| 
 | ||||
|         low = round(low_freq/(y_max+10)*255) | ||||
|         mid = round(mid_freq/(y_max+10)*255) | ||||
|         hig = round(hig_freq/(y_max+10)*255) | ||||
|         #print(low,mid,hig,y_max, numpy.amax(ys), y_avg) | ||||
|         #print("------") | ||||
| 
 | ||||
|         self.fft_random[self.fft_random_keys[0]] = low | ||||
|         self.fft_random[self.fft_random_keys[1]] = mid | ||||
|         self.fft_random[self.fft_random_keys[2]] = hig | ||||
|         self.fft_random[self.fft_random_keys[3]] = 0 | ||||
| 
 | ||||
|         # calculate low frequency average | ||||
|         #low_freq = [ys[i] for i in range(len(xs)) if xs[i] < 1000] | ||||
|         low_freq = ys[0:47] | ||||
|         low_freq_avg = numpy.mean(low_freq) | ||||
|          | ||||
|         if len(self.low_freq_avg_list) < 250 or low_freq_avg > numpy.amin(self.low_freq_avg_list)/2: | ||||
|             self.low_freq_avg_list.append(low_freq_avg) | ||||
|         cumulative_avg = numpy.mean(self.low_freq_avg_list) | ||||
|          | ||||
|         bass = low_freq[:int(len(low_freq)/2)] | ||||
|         bass_avg = numpy.mean(bass) | ||||
|         #print("bass: {:.2f} vs cumulative: {:.2f}".format(bass_avg, cumulative_avg)) | ||||
|          | ||||
|         # check if there is a beat | ||||
|         # song is pretty uniform across all frequencies | ||||
|         if (y_avg > y_avg/5 and (bass_avg > cumulative_avg * 1.8  or (low_freq_avg < y_avg * 1.2 and bass_avg > cumulative_avg))): | ||||
|             #self.prev_beat | ||||
|             curr_time = perf_counter() | ||||
|                  | ||||
|             # print(curr_time - self.prev_beat) | ||||
|             if curr_time - self.prev_beat > 60/360*2: # 180 BPM max | ||||
|                 shuffle(self.fft_random_keys) | ||||
|                  | ||||
|                 # change the button color | ||||
|                 #self.beats_idx += 1 | ||||
|                 #self.strobe() | ||||
|                 #print("beat {}".format(self.beats_idx)) | ||||
|                 #print("bass: {:.2f} vs cumulative: {:.2f}".format(bass_avg, cumulative_avg)) | ||||
|                  | ||||
|                 #print(self.fft_random) | ||||
|                 # change the button text | ||||
|                 bpm = int(60 / (curr_time - self.prev_beat)) | ||||
|                 if len(self.bpm_list) < 4: | ||||
|                     if bpm > 60: | ||||
|                         self.bpm_list.append(bpm) | ||||
|                 else: | ||||
|                     bpm_avg = int(numpy.mean(self.bpm_list)) | ||||
|                     if abs(bpm_avg - bpm) < 35: | ||||
|                         self.bpm_list.append(bpm) | ||||
|                     print("bpm: {:d}".format(bpm_avg)) | ||||
|                  | ||||
|                 # reset the timer | ||||
|                 self.prev_beat = curr_time | ||||
|         if y_avg > 10: | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB( | ||||
|                     self.fft_random[0], | ||||
|                     self.fft_random[1], | ||||
|                     self.fft_random[2] | ||||
|                 ) | ||||
|          | ||||
|         # shorten the cumulative list to account for changes in dynamics | ||||
|         if len(self.low_freq_avg_list) > 500: | ||||
|             self.low_freq_avg_list = self.low_freq_avg_list[250:] | ||||
|             #print("REFRESH!!") | ||||
|          | ||||
|         # shorten the cumulative list to account for changes in dynamics | ||||
|         if len(self.y_max_freq_avg_list ) > 500: | ||||
|             self.y_max_freq_avg_list = self.y_max_freq_avg_list[250:] | ||||
|             print("--REFRESH y_max_freq_avg_list") | ||||
| 
 | ||||
|         # keep two 8-counts of BPMs so we can maybe catch tempo changes | ||||
|         if len(self.bpm_list) > 24: | ||||
|             self.bpm_list = self.bpm_list[8:] | ||||
| 
 | ||||
|         # reset song data if the song has stopped | ||||
|         if y_avg < 10: | ||||
|             self.bpm_list = [] | ||||
|             self.low_freq_avg_list = [] | ||||
|             print("new song") | ||||
|             self.off() | ||||
| 
 | ||||
|         self.rgbStripController.pyAudioRecorder.newAudio = False | ||||
|         # print(self.bpm_list)250 | ||||
| 
 | ||||
|     def strobe(self): | ||||
|         x = randint(0,5) | ||||
|         while x is self.lastmode: | ||||
|             x = randint(0,5) | ||||
| 
 | ||||
|         self.lastmode = x | ||||
|         r = 255#randint(0,255) | ||||
|         g = 255#randint(0,255) | ||||
|         b = 255#randint(0,255) | ||||
|         if x is 0:     | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(r,g,0) | ||||
|         if x is 1:     | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(0,g,b) | ||||
|         if x is 2:     | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(r,0,b) | ||||
|         if x is 3:     | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(r,0,0) | ||||
|         if x is 4:     | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(0,g,0) | ||||
|         if x is 5:     | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(0,0,b) | ||||
|         if x is 6:     | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(r,g,b) | ||||
| 
 | ||||
|     def off(self): | ||||
|         for RGBStrip in self.effectRGBStrips(): | ||||
|             RGBStrip.RGB(0,0,0) | ||||
| 
 | ||||
|     def left_rotate(self,arr): | ||||
|         if not arr: | ||||
|             return arr | ||||
|          | ||||
|         left_most_element = arr[0] | ||||
|         length = len(arr) | ||||
|          | ||||
|         for i in range(length - 1): | ||||
|             arr[i], arr[i + 1] = arr[i + 1], arr[i] | ||||
|          | ||||
|         arr[length - 1] = left_most_element | ||||
|         return arr | ||||
							
								
								
									
										23
									
								
								effects/offEffect.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,23 @@ | ||||
| from rgbUtils.BaseEffect import BaseEffect | ||||
| from rgbUtils.debug import debug | ||||
| 
 | ||||
| import time | ||||
| 
 | ||||
| class offEffect(BaseEffect): | ||||
|     name = "offEffect" | ||||
|     desc = "LED-Band *sollte* nicht an sein" | ||||
| 
 | ||||
|     def effect(self): | ||||
|         time.sleep(1) | ||||
|         return | ||||
|      | ||||
|     # for overriding by the effect, when a strip is added | ||||
|     def onRGBStripAdded(self,rgbStrip): | ||||
|         rgbStrip.RGB(0,0,0,) | ||||
|         return | ||||
| 
 | ||||
|     # for overriding by the effect, when a strip is added | ||||
|     def onEffectParameterValuesUpdated(self): | ||||
|         for RGBStrip in self.effectRGBStrips(): | ||||
|             RGBStrip.RGB(0,0,0) | ||||
|         return | ||||
							
								
								
									
										67
									
								
								effects/onEffect.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,67 @@ | ||||
| from rgbUtils.BaseEffect import BaseEffect | ||||
| from rgbUtils.EffectParameter import slider, colorpicker | ||||
| from rgbUtils.debug import debug | ||||
| import time | ||||
| 
 | ||||
| class onEffect(BaseEffect): | ||||
|     name = "onEffect" | ||||
|     desc = "LED-Band *sollte* an sein" | ||||
|      | ||||
|     # Something that will be used to show descriptions and value options  | ||||
|     # of the parameters the effect will accept, in a way, that eg the webclient can decide,  | ||||
|     # if the parameters can be toggeled by a button/checkbox/slider/whatever | ||||
|     effectParameters = [ | ||||
|         colorpicker(\ | ||||
|             "Effect Color",\ | ||||
|             "Choose a color for your LED's",\ | ||||
|             [\ | ||||
|                 [0,255,255,"red"],\ | ||||
|                 [0,255,255,"green"],\ | ||||
|                 [0,255,255,"blue"]\ | ||||
|             ]\ | ||||
|         ),\ | ||||
|         slider(\ | ||||
|             "Effect Brightnes",\ | ||||
|             "Choose a brightness for your LED's",\ | ||||
|             [\ | ||||
|                 [0,100,100,"brightness"],\ | ||||
|             ]\ | ||||
|         )\ | ||||
|     ] | ||||
| 
 | ||||
|     def init(self): | ||||
|         return | ||||
| 
 | ||||
|     #loop effect as long as not stopped | ||||
|     def effect(self): | ||||
|         time.sleep(1) | ||||
|         return | ||||
| 
 | ||||
|     # for overriding by the effect, when a strip is added | ||||
|     def onRGBStripAdded(self,rgbStrip): | ||||
|         rgbStrip.RGB(\ | ||||
|             # colorpicker red currentvalue | ||||
|             self.effectParameterValues[0][0],\ | ||||
|             # colorpicker green currentvalue | ||||
|             self.effectParameterValues[0][1],\ | ||||
|             # colorpicker blue currentvalue | ||||
|             self.effectParameterValues[0][2],\ | ||||
|             # slider brightness currentvalue | ||||
|             self.effectParameterValues[1][0]\ | ||||
|         ) | ||||
|         return | ||||
| 
 | ||||
|     # for overriding by the effect, when a params are updated | ||||
|     def onEffectParameterValuesUpdated(self): | ||||
|         for RGBStrip in self.effectRGBStrips(): | ||||
|             #print(self.effectParameterValues) | ||||
|             RGBStrip.RGB(\ | ||||
|                 # colorpicker red currentvalue | ||||
|                 self.effectParameterValues[0][0],\ | ||||
|                 # colorpicker green currentvalue | ||||
|                 self.effectParameterValues[0][1],\ | ||||
|                 # colorpicker blue currentvalue | ||||
|                 self.effectParameterValues[0][2],\ | ||||
|                 # slider brightness currentvalue | ||||
|                 self.effectParameterValues[1][0]\ | ||||
|             ) | ||||
							
								
								
									
										67
									
								
								effects/rainbowEffect.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,67 @@ | ||||
| from rgbUtils.BaseEffect import BaseEffect | ||||
| from rgbUtils.debug import debug | ||||
| import time | ||||
| 
 | ||||
| class rainbowEffect(BaseEffect): | ||||
|     name = "rainbowEffect" | ||||
|     desc = "LED-Band *sollte* rainbowEffect sein" | ||||
| 
 | ||||
|     def init(self): | ||||
|         self.i=0 | ||||
|         self.speed = 1 | ||||
|         self.helligkeit = 100 | ||||
| 
 | ||||
|     #loop effect as long as not stopped | ||||
|     def effect(self): | ||||
|         debug(self) | ||||
|         if self.i < 3*255*self.speed: | ||||
|             c = self.wheel_color(self.i,self.speed) | ||||
|             #print("r: "+ str(round(c[0]/100*helligkeit,2))+" g: "+str(round(c[1]/100*helligkeit,2))+" b: "+str(round(c[2]/100*helligkeit,2))) | ||||
|             for rgbStrip in self.effectRGBStrips(): | ||||
|                 #print(c[0],c[1],c[2]) | ||||
|                 rgbStrip.RGB(c[0],c[1],c[2],self.helligkeit) | ||||
|             time.sleep(0.01) | ||||
|             self.i =self.i +1 | ||||
|         else: | ||||
|             self.i=0 | ||||
|      | ||||
|     # for overriding by the effect, when a strip is added | ||||
|     def onRGBStripAdded(self,rgbStrip): | ||||
|         return | ||||
|          | ||||
|     # for overriding by the effect, when a strip is added | ||||
|     def onEffectParameterValuesUpdated(self): | ||||
|         return | ||||
|      | ||||
|     def wheel_color(self,position,speed = 5): | ||||
|         """Get color from wheel value (0 - 765)""" | ||||
|         if position < 0: | ||||
|             position = 0 | ||||
|         if position > 765*speed: | ||||
|             position = 765*speed | ||||
| 
 | ||||
|         if position < (255*speed): | ||||
|             r = (255*speed) - position % (255*speed) | ||||
|             g = position % (255*speed) | ||||
|             b = 0 | ||||
|         elif position < (510*speed): | ||||
|             g = (255*speed) - position % (255*speed) | ||||
|             b = position % (255*speed) | ||||
|             r = 0 | ||||
|         else: | ||||
|             b = (255*speed) - position % (255*speed) | ||||
|             r = position % (255*speed) | ||||
|             g = 0 | ||||
| 
 | ||||
|         return [r/speed, g/speed, b/speed] | ||||
| 
 | ||||
|     # def wheel_color_2(self,r=255,g=0,b=0): | ||||
|     #     if r<255: | ||||
|     #         r=r+1 | ||||
|     #     elif g<255: | ||||
|     #         g=g+1 | ||||
|     #     elif r=255: | ||||
| 
 | ||||
|     #     elif b<255: | ||||
|     #         b=b+1 | ||||
|          | ||||
							
								
								
									
										42
									
								
								effects/strobeEffect.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,42 @@ | ||||
| from rgbUtils.BaseEffect import BaseEffect | ||||
| from rgbUtils.debug import debug | ||||
| from random import randint | ||||
| import time | ||||
| 
 | ||||
| class strobeEffect(BaseEffect): | ||||
|     name = "strobeEffect" | ||||
|     desc = "*Strobe*" | ||||
| 
 | ||||
|     def init(self): | ||||
|         self.state = True | ||||
| 
 | ||||
|     #loop effect as long as not stopped | ||||
|     def effect(self): | ||||
|         y = -1 | ||||
|         x = -1 | ||||
|         if self.state: | ||||
|             while x is y: | ||||
|                 x = randint(0,2) | ||||
|             if x is 0:     | ||||
|                 for RGBStrip in self.effectRGBStrips(): | ||||
|                     RGBStrip.RGB(255,255,0) | ||||
|             if x is 1:     | ||||
|                 for RGBStrip in self.effectRGBStrips(): | ||||
|                     RGBStrip.RGB(0,255,255) | ||||
|             if x is 2:     | ||||
|                 for RGBStrip in self.effectRGBStrips(): | ||||
|                     RGBStrip.RGB(255,0,255) | ||||
|             self.state = False | ||||
|         else: | ||||
|             for RGBStrip in self.effectRGBStrips(): | ||||
|                 RGBStrip.RGB(0,0,0) | ||||
|             self.state = True | ||||
|         time.sleep(0.01) | ||||
|      | ||||
|     # for overriding by the effect, when a strip is added | ||||
|     def onRGBStripAdded(self,rgbStrip): | ||||
|         return | ||||
|          | ||||
|     # for overriding by the effect, when a strip is added | ||||
|     def onEffectParameterValuesUpdated(self): | ||||
|         return | ||||
							
								
								
									
										197
									
								
								htdocs/css/addons/datatables.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,197 @@ | ||||
| /* | ||||
|  * MDBootstrap integration with Datatables | ||||
|  * Learn more: https://mdbootstrap.com/content/bootstrap-datatables/ | ||||
|  * About MDBootstrap: https://mdbootstrap.com/ | ||||
|  * | ||||
|  * This combined file was created by the DataTables downloader builder: | ||||
|  *   https://datatables.net/download | ||||
|  * | ||||
|  * To rebuild or modify this file with the latest versions of the included | ||||
|  * software please visit: | ||||
|  *   https://datatables.net/download/#bs4/dt-1.10.18 | ||||
|  * | ||||
|  * Included libraries: | ||||
|  *   DataTables 1.10.18 | ||||
|  */ | ||||
| 
 | ||||
| table.dataTable thead { | ||||
|     cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| table.dataTable thead>tr>th:active { | ||||
|     outline: none; | ||||
| } | ||||
| 
 | ||||
| table.dataTable thead>tr>td:active { | ||||
|     outline: none; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label { | ||||
|     margin-top: 1.2rem; | ||||
|     margin-right: 1rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span, | ||||
| div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown { | ||||
|     margin-top: 1rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length label, | ||||
| div.dataTables_wrapper div.dataTables_filter label { | ||||
|     text-align: left; | ||||
|     font-weight: normal; | ||||
|     padding-top: .5rem; | ||||
|     padding-bottom: .5rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length select, | ||||
| div.dataTables_wrapper div.dataTables_length input, | ||||
| div.dataTables_wrapper div.dataTables_filter select, | ||||
| div.dataTables_wrapper div.dataTables_filter input { | ||||
|     width: auto; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_filter { | ||||
|     text-align: right; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_filter input { | ||||
|     margin-left: .5rem; | ||||
|     display: inline-block; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_info, | ||||
| div.dataTables_wrapper div.dataTables_paginate { | ||||
|     font-weight: normal; | ||||
|     padding-top: 1rem; | ||||
|     padding-bottom: 1rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate { | ||||
|     text-align: right; | ||||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate ul.pagination { | ||||
|     -webkit-box-pack: end; | ||||
|     -webkit-justify-content: flex-end; | ||||
|     -ms-flex-pack: end; | ||||
|     justify-content: flex-end; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus { | ||||
|     background-color: #4285f4; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus { | ||||
|     -webkit-box-shadow: none; | ||||
|     box-shadow: none; | ||||
| } | ||||
| 
 | ||||
| @media (max-width: 767px) { | ||||
|     div.dataTables_wrapper div .dataTables_length, | ||||
|     div.dataTables_wrapper div .dataTables_filter, | ||||
|     div.dataTables_wrapper div .dataTables_info, | ||||
|     div.dataTables_wrapper div .dataTables_paginate ul.pagination { | ||||
|         text-align: center; | ||||
|         -webkit-box-pack: center; | ||||
|         -webkit-justify-content: center; | ||||
|         -ms-flex-pack: center; | ||||
|         justify-content: center; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| .bs-select select { | ||||
|     display: inline-block !important; | ||||
| } | ||||
| 
 | ||||
| table.dataTable thead { | ||||
|     cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| table.dataTable thead>tr>th:active { | ||||
|     outline: none; | ||||
| } | ||||
| 
 | ||||
| table.dataTable thead>tr>td:active { | ||||
|     outline: none; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label { | ||||
|     margin-top: 1.2rem; | ||||
|     margin-right: 1rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span, | ||||
| div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown { | ||||
|     margin-top: 1rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length label, | ||||
| div.dataTables_wrapper div.dataTables_filter label { | ||||
|     text-align: left; | ||||
|     font-weight: normal; | ||||
|     padding-top: .5rem; | ||||
|     padding-bottom: .5rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_length select, | ||||
| div.dataTables_wrapper div.dataTables_length input, | ||||
| div.dataTables_wrapper div.dataTables_filter select, | ||||
| div.dataTables_wrapper div.dataTables_filter input { | ||||
|     width: auto; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_filter { | ||||
|     text-align: right; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_filter input { | ||||
|     margin-left: .5rem; | ||||
|     display: inline-block; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_info, | ||||
| div.dataTables_wrapper div.dataTables_paginate { | ||||
|     font-weight: normal; | ||||
|     padding-top: 1rem; | ||||
|     padding-bottom: 1rem; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate { | ||||
|     text-align: right; | ||||
|     margin: 0; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate ul.pagination { | ||||
|     -webkit-box-pack: end; | ||||
|     -webkit-justify-content: flex-end; | ||||
|     -ms-flex-pack: end; | ||||
|     justify-content: flex-end; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus { | ||||
|     background-color: #4285f4; | ||||
| } | ||||
| 
 | ||||
| div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus { | ||||
|     -webkit-box-shadow: none; | ||||
|     box-shadow: none; | ||||
| } | ||||
| 
 | ||||
| @media (max-width: 767px) { | ||||
|     div.dataTables_wrapper div .dataTables_length, | ||||
|     div.dataTables_wrapper div .dataTables_filter, | ||||
|     div.dataTables_wrapper div .dataTables_info, | ||||
|     div.dataTables_wrapper div .dataTables_paginate ul.pagination { | ||||
|         text-align: center; | ||||
|         -webkit-box-pack: center; | ||||
|         -webkit-justify-content: center; | ||||
|         -ms-flex-pack: center; | ||||
|         justify-content: center; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| .bs-select select { | ||||
|     display: inline-block !important; | ||||
| } | ||||
							
								
								
									
										1
									
								
								htdocs/css/addons/datatables.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| table.dataTable thead{cursor:pointer}table.dataTable thead>tr>td:active,table.dataTable thead>tr>th:active{outline:0}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row label{margin-top:1.2rem;margin-right:1rem}div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select .select-dropdown,div.dataTables_wrapper div.dataTables_length.d-flex.flex-row .select-wrapper.mdb-select span{margin-top:1rem}div.dataTables_wrapper div.dataTables_filter label,div.dataTables_wrapper div.dataTables_length label{text-align:left;font-weight:400;padding-top:.5rem;padding-bottom:.5rem}div.dataTables_wrapper div.dataTables_filter input,div.dataTables_wrapper div.dataTables_filter select,div.dataTables_wrapper div.dataTables_length input,div.dataTables_wrapper div.dataTables_length select{width:auto}div.dataTables_wrapper div.dataTables_filter{text-align:right}div.dataTables_wrapper div.dataTables_filter input{margin-left:.5rem;display:inline-block}div.dataTables_wrapper div.dataTables_info,div.dataTables_wrapper div.dataTables_paginate{font-weight:400;padding-top:1rem;padding-bottom:1rem}div.dataTables_wrapper div.dataTables_paginate{text-align:right;margin:0}div.dataTables_wrapper div.dataTables_paginate ul.pagination{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item.active .page-link:focus{background-color:#4285f4}div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-item .page-link:focus{-webkit-box-shadow:none;box-shadow:none}@media (max-width:767px){div.dataTables_wrapper div .dataTables_filter,div.dataTables_wrapper div .dataTables_info,div.dataTables_wrapper div .dataTables_length,div.dataTables_wrapper div .dataTables_paginate ul.pagination{text-align:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}}.bs-select select{display:inline-block!important} | ||||
							
								
								
									
										1339
									
								
								htdocs/css/bootstrap-grid.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/css/bootstrap-grid.css.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/css/bootstrap-grid.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/css/bootstrap-grid.min.css.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										459
									
								
								htdocs/css/bootstrap-reboot.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,459 @@ | ||||
| /*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ | ||||
| html { | ||||
|   font-family: sans-serif; | ||||
|   line-height: 1.15; | ||||
|   -ms-text-size-adjust: 100%; | ||||
|   -webkit-text-size-adjust: 100%; | ||||
| } | ||||
| 
 | ||||
| body { | ||||
|   margin: 0; | ||||
| } | ||||
| 
 | ||||
| article, | ||||
| aside, | ||||
| footer, | ||||
| header, | ||||
| nav, | ||||
| section { | ||||
|   display: block; | ||||
| } | ||||
| 
 | ||||
| h1 { | ||||
|   font-size: 2em; | ||||
|   margin: 0.67em 0; | ||||
| } | ||||
| 
 | ||||
| figcaption, | ||||
| figure, | ||||
| main { | ||||
|   display: block; | ||||
| } | ||||
| 
 | ||||
| figure { | ||||
|   margin: 1em 40px; | ||||
| } | ||||
| 
 | ||||
| hr { | ||||
|   -webkit-box-sizing: content-box; | ||||
|           box-sizing: content-box; | ||||
|   height: 0; | ||||
|   overflow: visible; | ||||
| } | ||||
| 
 | ||||
| pre { | ||||
|   font-family: monospace, monospace; | ||||
|   font-size: 1em; | ||||
| } | ||||
| 
 | ||||
| a { | ||||
|   background-color: transparent; | ||||
|   -webkit-text-decoration-skip: objects; | ||||
| } | ||||
| 
 | ||||
| a:active, | ||||
| a:hover { | ||||
|   outline-width: 0; | ||||
| } | ||||
| 
 | ||||
| abbr[title] { | ||||
|   border-bottom: none; | ||||
|   text-decoration: underline; | ||||
|   text-decoration: underline dotted; | ||||
| } | ||||
| 
 | ||||
| b, | ||||
| strong { | ||||
|   font-weight: inherit; | ||||
| } | ||||
| 
 | ||||
| b, | ||||
| strong { | ||||
|   font-weight: bolder; | ||||
| } | ||||
| 
 | ||||
| code, | ||||
| kbd, | ||||
| samp { | ||||
|   font-family: monospace, monospace; | ||||
|   font-size: 1em; | ||||
| } | ||||
| 
 | ||||
| dfn { | ||||
|   font-style: italic; | ||||
| } | ||||
| 
 | ||||
| mark { | ||||
|   background-color: #ff0; | ||||
|   color: #000; | ||||
| } | ||||
| 
 | ||||
| small { | ||||
|   font-size: 80%; | ||||
| } | ||||
| 
 | ||||
| sub, | ||||
| sup { | ||||
|   font-size: 75%; | ||||
|   line-height: 0; | ||||
|   position: relative; | ||||
|   vertical-align: baseline; | ||||
| } | ||||
| 
 | ||||
| sub { | ||||
|   bottom: -0.25em; | ||||
| } | ||||
| 
 | ||||
| sup { | ||||
|   top: -0.5em; | ||||
| } | ||||
| 
 | ||||
| audio, | ||||
| video { | ||||
|   display: inline-block; | ||||
| } | ||||
| 
 | ||||
| audio:not([controls]) { | ||||
|   display: none; | ||||
|   height: 0; | ||||
| } | ||||
| 
 | ||||
| img { | ||||
|   border-style: none; | ||||
| } | ||||
| 
 | ||||
| svg:not(:root) { | ||||
|   overflow: hidden; | ||||
| } | ||||
| 
 | ||||
| button, | ||||
| input, | ||||
| optgroup, | ||||
| select, | ||||
| textarea { | ||||
|   font-family: sans-serif; | ||||
|   font-size: 100%; | ||||
|   line-height: 1.15; | ||||
|   margin: 0; | ||||
| } | ||||
| 
 | ||||
| button, | ||||
| input { | ||||
|   overflow: visible; | ||||
| } | ||||
| 
 | ||||
| button, | ||||
| select { | ||||
|   text-transform: none; | ||||
| } | ||||
| 
 | ||||
| button, | ||||
| html [type="button"], | ||||
| [type="reset"], | ||||
| [type="submit"] { | ||||
|   -webkit-appearance: button; | ||||
| } | ||||
| 
 | ||||
| button::-moz-focus-inner, | ||||
| [type="button"]::-moz-focus-inner, | ||||
| [type="reset"]::-moz-focus-inner, | ||||
| [type="submit"]::-moz-focus-inner { | ||||
|   border-style: none; | ||||
|   padding: 0; | ||||
| } | ||||
| 
 | ||||
| button:-moz-focusring, | ||||
| [type="button"]:-moz-focusring, | ||||
| [type="reset"]:-moz-focusring, | ||||
| [type="submit"]:-moz-focusring { | ||||
|   outline: 1px dotted ButtonText; | ||||
| } | ||||
| 
 | ||||
| fieldset { | ||||
|   border: 1px solid #c0c0c0; | ||||
|   margin: 0 2px; | ||||
|   padding: 0.35em 0.625em 0.75em; | ||||
| } | ||||
| 
 | ||||
| legend { | ||||
|   -webkit-box-sizing: border-box; | ||||
|           box-sizing: border-box; | ||||
|   color: inherit; | ||||
|   display: table; | ||||
|   max-width: 100%; | ||||
|   padding: 0; | ||||
|   white-space: normal; | ||||
| } | ||||
| 
 | ||||
| progress { | ||||
|   display: inline-block; | ||||
|   vertical-align: baseline; | ||||
| } | ||||
| 
 | ||||
| textarea { | ||||
|   overflow: auto; | ||||
| } | ||||
| 
 | ||||
| [type="checkbox"], | ||||
| [type="radio"] { | ||||
|   -webkit-box-sizing: border-box; | ||||
|           box-sizing: border-box; | ||||
|   padding: 0; | ||||
| } | ||||
| 
 | ||||
| [type="number"]::-webkit-inner-spin-button, | ||||
| [type="number"]::-webkit-outer-spin-button { | ||||
|   height: auto; | ||||
| } | ||||
| 
 | ||||
| [type="search"] { | ||||
|   -webkit-appearance: textfield; | ||||
|   outline-offset: -2px; | ||||
| } | ||||
| 
 | ||||
| [type="search"]::-webkit-search-cancel-button, | ||||
| [type="search"]::-webkit-search-decoration { | ||||
|   -webkit-appearance: none; | ||||
| } | ||||
| 
 | ||||
| ::-webkit-file-upload-button { | ||||
|   -webkit-appearance: button; | ||||
|   font: inherit; | ||||
| } | ||||
| 
 | ||||
| details, | ||||
| menu { | ||||
|   display: block; | ||||
| } | ||||
| 
 | ||||
| summary { | ||||
|   display: list-item; | ||||
| } | ||||
| 
 | ||||
| canvas { | ||||
|   display: inline-block; | ||||
| } | ||||
| 
 | ||||
| template { | ||||
|   display: none; | ||||
| } | ||||
| 
 | ||||
| [hidden] { | ||||
|   display: none; | ||||
| } | ||||
| 
 | ||||
| html { | ||||
|   -webkit-box-sizing: border-box; | ||||
|           box-sizing: border-box; | ||||
| } | ||||
| 
 | ||||
| *, | ||||
| *::before, | ||||
| *::after { | ||||
|   -webkit-box-sizing: inherit; | ||||
|           box-sizing: inherit; | ||||
| } | ||||
| 
 | ||||
| @-ms-viewport { | ||||
|   width: device-width; | ||||
| } | ||||
| 
 | ||||
| html { | ||||
|   -ms-overflow-style: scrollbar; | ||||
|   -webkit-tap-highlight-color: transparent; | ||||
| } | ||||
| 
 | ||||
| body { | ||||
|   font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; | ||||
|   font-size: 1rem; | ||||
|   font-weight: normal; | ||||
|   line-height: 1.5; | ||||
|   color: #292b2c; | ||||
|   background-color: #fff; | ||||
| } | ||||
| 
 | ||||
| [tabindex="-1"]:focus { | ||||
|   outline: none !important; | ||||
| } | ||||
| 
 | ||||
| h1, h2, h3, h4, h5, h6 { | ||||
|   margin-top: 0; | ||||
|   margin-bottom: .5rem; | ||||
| } | ||||
| 
 | ||||
| p { | ||||
|   margin-top: 0; | ||||
|   margin-bottom: 1rem; | ||||
| } | ||||
| 
 | ||||
| abbr[title], | ||||
| abbr[data-original-title] { | ||||
|   cursor: help; | ||||
| } | ||||
| 
 | ||||
| address { | ||||
|   margin-bottom: 1rem; | ||||
|   font-style: normal; | ||||
|   line-height: inherit; | ||||
| } | ||||
| 
 | ||||
| ol, | ||||
| ul, | ||||
| dl { | ||||
|   margin-top: 0; | ||||
|   margin-bottom: 1rem; | ||||
| } | ||||
| 
 | ||||
| ol ol, | ||||
| ul ul, | ||||
| ol ul, | ||||
| ul ol { | ||||
|   margin-bottom: 0; | ||||
| } | ||||
| 
 | ||||
| dt { | ||||
|   font-weight: bold; | ||||
| } | ||||
| 
 | ||||
| dd { | ||||
|   margin-bottom: .5rem; | ||||
|   margin-left: 0; | ||||
| } | ||||
| 
 | ||||
| blockquote { | ||||
|   margin: 0 0 1rem; | ||||
| } | ||||
| 
 | ||||
| a { | ||||
|   color: #0275d8; | ||||
|   text-decoration: none; | ||||
| } | ||||
| 
 | ||||
| a:focus, a:hover { | ||||
|   color: #014c8c; | ||||
|   text-decoration: underline; | ||||
| } | ||||
| 
 | ||||
| a:not([href]):not([tabindex]) { | ||||
|   color: inherit; | ||||
|   text-decoration: none; | ||||
| } | ||||
| 
 | ||||
| a:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover { | ||||
|   color: inherit; | ||||
|   text-decoration: none; | ||||
| } | ||||
| 
 | ||||
| a:not([href]):not([tabindex]):focus { | ||||
|   outline: 0; | ||||
| } | ||||
| 
 | ||||
| pre { | ||||
|   margin-top: 0; | ||||
|   margin-bottom: 1rem; | ||||
|   overflow: auto; | ||||
| } | ||||
| 
 | ||||
| figure { | ||||
|   margin: 0 0 1rem; | ||||
| } | ||||
| 
 | ||||
| img { | ||||
|   vertical-align: middle; | ||||
| } | ||||
| 
 | ||||
| [role="button"] { | ||||
|   cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| a, | ||||
| area, | ||||
| button, | ||||
| [role="button"], | ||||
| input, | ||||
| label, | ||||
| select, | ||||
| summary, | ||||
| textarea { | ||||
|   -ms-touch-action: manipulation; | ||||
|       touch-action: manipulation; | ||||
| } | ||||
| 
 | ||||
| table { | ||||
|   border-collapse: collapse; | ||||
|   background-color: transparent; | ||||
| } | ||||
| 
 | ||||
| caption { | ||||
|   padding-top: 0.75rem; | ||||
|   padding-bottom: 0.75rem; | ||||
|   color: #636c72; | ||||
|   text-align: left; | ||||
|   caption-side: bottom; | ||||
| } | ||||
| 
 | ||||
| th { | ||||
|   text-align: left; | ||||
| } | ||||
| 
 | ||||
| label { | ||||
|   display: inline-block; | ||||
|   margin-bottom: .5rem; | ||||
| } | ||||
| 
 | ||||
| button:focus { | ||||
|   outline: 1px dotted; | ||||
|   outline: 5px auto -webkit-focus-ring-color; | ||||
| } | ||||
| 
 | ||||
| input, | ||||
| button, | ||||
| select, | ||||
| textarea { | ||||
|   line-height: inherit; | ||||
| } | ||||
| 
 | ||||
| input[type="radio"]:disabled, | ||||
| input[type="checkbox"]:disabled { | ||||
|   cursor: not-allowed; | ||||
| } | ||||
| 
 | ||||
| input[type="date"], | ||||
| input[type="time"], | ||||
| input[type="datetime-local"], | ||||
| input[type="month"] { | ||||
|   -webkit-appearance: listbox; | ||||
| } | ||||
| 
 | ||||
| textarea { | ||||
|   resize: vertical; | ||||
| } | ||||
| 
 | ||||
| fieldset { | ||||
|   min-width: 0; | ||||
|   padding: 0; | ||||
|   margin: 0; | ||||
|   border: 0; | ||||
| } | ||||
| 
 | ||||
| legend { | ||||
|   display: block; | ||||
|   width: 100%; | ||||
|   padding: 0; | ||||
|   margin-bottom: .5rem; | ||||
|   font-size: 1.5rem; | ||||
|   line-height: inherit; | ||||
| } | ||||
| 
 | ||||
| input[type="search"] { | ||||
|   -webkit-appearance: none; | ||||
| } | ||||
| 
 | ||||
| output { | ||||
|   display: inline-block; | ||||
| } | ||||
| 
 | ||||
| [hidden] { | ||||
|   display: none !important; | ||||
| } | ||||
| /*# sourceMappingURL=bootstrap-reboot.css.map */ | ||||
							
								
								
									
										1
									
								
								htdocs/css/bootstrap-reboot.css.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/css/bootstrap-reboot.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| /*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}html{-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;font-weight:400;line-height:1.5;color:#292b2c;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{cursor:help}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle}[role=button]{cursor:pointer}[role=button],a,area,button,input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#636c72;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,select,textarea{line-height:inherit}input[type=checkbox]:disabled,input[type=radio]:disabled{cursor:not-allowed}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type=search]{-webkit-appearance:none}output{display:inline-block}[hidden]{display:none!important}/*# sourceMappingURL=bootstrap-reboot.min.css.map */ | ||||
							
								
								
									
										1
									
								
								htdocs/css/bootstrap-reboot.min.css.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| {"version":3,"sources":["../../scss/_normalize.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss"],"names":[],"mappings":"4EAYA,KACE,YAAA,WACA,YAAA,KACA,qBAAA,KACA,yBAAA,KAUF,KACE,OAAA,EAOF,QAAA,MAAA,OAAA,OAAA,IAAA,QAME,QAAA,MAQF,GACE,UAAA,IACA,OAAA,MAAA,EAWF,WAAA,OAAA,KAGE,QAAA,MAOF,OACE,OAAA,IAAA,KAQF,GACE,mBAAA,YAAA,WAAA,YACA,OAAA,EACA,SAAA,QAQF,IACE,YAAA,UAAA,UACA,UAAA,IAWF,EACE,iBAAA,YACA,6BAAA,QAQF,SAAA,QAEE,cAAA,EAQF,YACE,cAAA,KACA,gBAAA,UACA,gBAAA,UAAA,OAOF,EAAA,OAEE,YAAA,QAOF,EAAA,OAEE,YAAA,OAQF,KAAA,IAAA,KAGE,YAAA,UAAA,UACA,UAAA,IAOF,IACE,WAAA,OAOF,KACE,iBAAA,KACA,MAAA,KAOF,MACE,UAAA,IAQF,IAAA,IAEE,UAAA,IACA,YAAA,EACA,SAAA,SACA,eAAA,SAGF,IACE,OAAA,OAGF,IACE,IAAA,MAUF,MAAA,MAEE,QAAA,aAOF,sBACE,QAAA,KACA,OAAA,EAOF,IACE,aAAA,KAOF,eACE,SAAA,OAWF,OAAA,MAAA,SAAA,OAAA,SAKE,YAAA,WACA,UAAA,KACA,YAAA,KACA,OAAA,EAQF,OAAA,MAEE,SAAA,QAQF,OAAA,OAEE,eAAA,KASF,aAAA,cAAA,OAAA,mBAIE,mBAAA,OAOF,gCAAA,+BAAA,gCAAA,yBAIE,aAAA,KACA,QAAA,EAOF,6BAAA,4BAAA,6BAAA,sBAIE,QAAA,IAAA,OAAA,WAOF,SACE,OAAA,IAAA,MAAA,OACA,OAAA,EAAA,IACA,QAAA,MAAA,OAAA,MAUF,OACE,mBAAA,WAAA,WAAA,WACA,MAAA,QACA,QAAA,MACA,UAAA,KACA,QAAA,EACA,YAAA,OAQF,SACE,QAAA,aACA,eAAA,SAOF,SACE,SAAA,KCrKF,gBAAA,aD+KE,mBAAA,WAAA,WAAA,WACA,QAAA,EC1KF,yCAAA,yCDmLE,OAAA,KC9KF,cDuLE,mBAAA,UACA,eAAA,KCnLF,4CAAA,yCD4LE,mBAAA,KAQF,6BACE,mBAAA,OACA,KAAA,QAWF,QAAA,KAEE,QAAA,MAOF,QACE,QAAA,UAUF,OACE,QAAA,aAOF,SACE,QAAA,KCnNF,SD8NE,QAAA,KEtbF,KACE,mBAAA,WAAA,WAAA,WAGF,EAAA,QAAA,SAGE,mBAAA,QAAA,WAAA,QAoBA,cAAgB,MAAA,aAQlB,KAYE,mBAAA,UAGA,4BAAA,YAGF,KACE,YAAA,cAAA,UAAA,mBAAA,WAAA,OC2K4H,iBD3K5H,MAAA,WACA,UAAA,KACA,YAAA,IACA,YAAA,IAEA,MAAA,QAEA,iBAAA,KD2LF,sBClLE,QAAA,YAYF,GAAI,GAAI,GAAI,GAAI,GAAI,GAClB,WAAA,EACA,cAAA,MAOF,EACE,WAAA,EACA,cAAA,KAIF,0BAAA,YAGE,OAAA,KAGF,QACE,cAAA,KACA,WAAA,OACA,YAAA,QAGF,GAAA,GAAA,GAGE,WAAA,EACA,cAAA,KAGF,MAAA,MAAA,MAAA,MAIE,cAAA,EAGF,GACE,YAAA,IAGF,GACE,cAAA,MACA,YAAA,EAGF,WACE,OAAA,EAAA,EAAA,KAQF,EACE,MAAA,QACA,gBAAA,KEhJE,QAAA,QFmJA,MAAA,QACA,gBAAA,UAUJ,8BACE,MAAA,QACA,gBAAA,KEhKE,oCAAA,oCFmKA,MAAA,QACA,gBAAA,KANJ,oCAUI,QAAA,EASJ,IAEE,WAAA,EAEA,cAAA,KAEA,SAAA,KAQF,OAGE,OAAA,EAAA,EAAA,KAQF,IAGE,eAAA,ODsIF,cCzHE,OAAA,QAcF,cAAA,EAAA,KAAA,OAAA,MAAA,MAAA,OAAA,QAAA,SASE,iBAAA,aAAA,aAAA,aAQF,MAEE,gBAAA,SAEA,iBAAA,YAGF,QACE,YAAA,OACA,eAAA,OACA,MAAA,QACA,WAAA,KACA,aAAA,OAGF,GAEE,WAAA,KAQF,MAEE,QAAA,aACA,cAAA,MAOF,aACE,QAAA,IAAA,OACA,QAAA,IAAA,KAAA,yBAGF,OAAA,MAAA,OAAA,SAME,YAAA,QAGF,8BAAA,2BAMI,OAAA,YAKJ,iBAAA,iBAAA,2BAAA,kBASE,mBAAA,QAGF,SAEE,OAAA,SAGF,SAME,UAAA,EAEA,QAAA,EACA,OAAA,EACA,OAAA,EAGF,OAEE,QAAA,MACA,MAAA,KACA,QAAA,EACA,cAAA,MACA,UAAA,OACA,YAAA,QAGF,mBAKE,mBAAA,KAIF,OACE,QAAA,aDsEF,SC9DE,QAAA"} | ||||
							
								
								
									
										9030
									
								
								htdocs/css/bootstrap.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/css/bootstrap.css.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										6
									
								
								htdocs/css/bootstrap.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/css/bootstrap.min.css.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										4
									
								
								htdocs/css/font-awesome.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2327
									
								
								htdocs/css/free/modules/animations-extended/animations-extended.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										432
									
								
								htdocs/css/jquery.minicolors.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,432 @@ | ||||
| .minicolors { | ||||
|     position: relative; | ||||
|   } | ||||
|    | ||||
|   .minicolors-sprite { | ||||
|     background-image: url(../img/jquery.minicolors.png); | ||||
|   } | ||||
|    | ||||
|   .minicolors-swatch { | ||||
|     position: absolute; | ||||
|     vertical-align: middle; | ||||
|     background-position: -80px 0; | ||||
|     border: solid 1px #ccc; | ||||
|     cursor: text; | ||||
|     padding: 0; | ||||
|     margin: 0; | ||||
|     display: inline-block; | ||||
|   } | ||||
|    | ||||
|   .minicolors-swatch-color { | ||||
|     position: absolute; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     right: 0; | ||||
|     bottom: 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors input[type=hidden] + .minicolors-swatch { | ||||
|     width: 28px; | ||||
|     position: static; | ||||
|     cursor: pointer; | ||||
|   } | ||||
|    | ||||
|   .minicolors input[type=hidden][disabled] + .minicolors-swatch { | ||||
|     cursor: default; | ||||
|   } | ||||
|    | ||||
|   /* Panel */ | ||||
|   .minicolors-panel { | ||||
|     position: absolute; | ||||
|     width: 173px; | ||||
|     background: white; | ||||
|     border: solid 1px #CCC; | ||||
|     box-shadow: 0 0 20px rgba(0, 0, 0, .2); | ||||
|     z-index: 99999; | ||||
|     box-sizing: content-box; | ||||
|     display: none; | ||||
|   } | ||||
|    | ||||
|   .minicolors-panel.minicolors-visible { | ||||
|     display: block; | ||||
|   } | ||||
|    | ||||
|   /* Panel positioning */ | ||||
|   .minicolors-position-top .minicolors-panel { | ||||
|     top: -154px; | ||||
|   } | ||||
|    | ||||
|   .minicolors-position-right .minicolors-panel { | ||||
|     right: 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-position-bottom .minicolors-panel { | ||||
|     top: auto; | ||||
|   } | ||||
|    | ||||
|   .minicolors-position-left .minicolors-panel { | ||||
|     left: 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-with-opacity .minicolors-panel { | ||||
|     width: 194px; | ||||
|   } | ||||
|    | ||||
|   .minicolors .minicolors-grid { | ||||
|     position: relative; | ||||
|     top: 1px; | ||||
|     left: 1px; /* LTR */ | ||||
|     width: 150px; | ||||
|     height: 150px; | ||||
|     margin-bottom: 2px; | ||||
|     background-position: -120px 0; | ||||
|     cursor: crosshair; | ||||
|   } | ||||
|   [dir=rtl] .minicolors .minicolors-grid { | ||||
|     right: 1px; | ||||
|   } | ||||
|    | ||||
|   .minicolors .minicolors-grid-inner { | ||||
|     position: absolute; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     width: 150px; | ||||
|     height: 150px; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-saturation .minicolors-grid { | ||||
|     background-position: -420px 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-saturation .minicolors-grid-inner { | ||||
|     background-position: -270px 0; | ||||
|     background-image: inherit; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-brightness .minicolors-grid { | ||||
|     background-position: -570px 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-brightness .minicolors-grid-inner { | ||||
|     background-color: black; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-wheel .minicolors-grid { | ||||
|     background-position: -720px 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider, | ||||
|   .minicolors-opacity-slider { | ||||
|     position: absolute; | ||||
|     top: 1px; | ||||
|     left: 152px; /* LTR */ | ||||
|     width: 20px; | ||||
|     height: 150px; | ||||
|     background-color: white; | ||||
|     background-position: 0 0; | ||||
|     cursor: row-resize; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-slider, | ||||
|   [dir=rtl] .minicolors-opacity-slider { | ||||
|     right: 152px; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-saturation .minicolors-slider { | ||||
|     background-position: -60px 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-brightness .minicolors-slider { | ||||
|     background-position: -20px 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-slider-wheel .minicolors-slider { | ||||
|     background-position: -20px 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-opacity-slider { | ||||
|     left: 173px; /* LTR */ | ||||
|     background-position: -40px 0; | ||||
|     display: none; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-opacity-slider { | ||||
|     right: 173px; | ||||
|   } | ||||
|    | ||||
|   .minicolors-with-opacity .minicolors-opacity-slider { | ||||
|     display: block; | ||||
|   } | ||||
|    | ||||
|   /* Pickers */ | ||||
|   .minicolors-grid .minicolors-picker { | ||||
|     position: absolute; | ||||
|     top: 70px; | ||||
|     left: 70px; | ||||
|     width: 12px; | ||||
|     height: 12px; | ||||
|     border: solid 1px black; | ||||
|     border-radius: 10px; | ||||
|     margin-top: -6px; | ||||
|     margin-left: -6px; | ||||
|     background: none; | ||||
|   } | ||||
|    | ||||
|   .minicolors-grid .minicolors-picker > div { | ||||
|     position: absolute; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     width: 8px; | ||||
|     height: 8px; | ||||
|     border-radius: 8px; | ||||
|     border: solid 2px white; | ||||
|     box-sizing: content-box; | ||||
|   } | ||||
|    | ||||
|   .minicolors-picker { | ||||
|     position: absolute; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     width: 18px; | ||||
|     height: 2px; | ||||
|     background: white; | ||||
|     border: solid 1px black; | ||||
|     margin-top: -2px; | ||||
|     box-sizing: content-box; | ||||
|   } | ||||
|    | ||||
|   /* Swatches */ | ||||
|   .minicolors-swatches, | ||||
|   .minicolors-swatches li { | ||||
|     margin: 5px 0 3px 5px; /* LTR */ | ||||
|     padding: 0; | ||||
|     list-style: none; | ||||
|     overflow: hidden; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-swatches, | ||||
|   [dir=rtl] .minicolors-swatches li { | ||||
|     margin: 5px 5px 3px 0; | ||||
|   } | ||||
|    | ||||
|   .minicolors-swatches .minicolors-swatch { | ||||
|     position: relative; | ||||
|     float: left; /* LTR */ | ||||
|     cursor: pointer; | ||||
|     margin:0 4px 0 0; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-swatches .minicolors-swatch { | ||||
|     float: right; | ||||
|     margin:0 0 0 4px; | ||||
|   } | ||||
|    | ||||
|   .minicolors-with-opacity .minicolors-swatches .minicolors-swatch { | ||||
|     margin-right: 7px; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-with-opacity .minicolors-swatches .minicolors-swatch { | ||||
|     margin-right: 0; | ||||
|     margin-left: 7px; | ||||
|   } | ||||
|    | ||||
|   .minicolors-swatch.selected { | ||||
|     border-color: #000; | ||||
|   } | ||||
|    | ||||
|   /* Inline controls */ | ||||
|   .minicolors-inline { | ||||
|     display: inline-block; | ||||
|   } | ||||
|    | ||||
|   .minicolors-inline .minicolors-input { | ||||
|     display: none !important; | ||||
|   } | ||||
|    | ||||
|   .minicolors-inline .minicolors-panel { | ||||
|     position: relative; | ||||
|     top: auto; | ||||
|     left: auto; /* LTR */ | ||||
|     box-shadow: none; | ||||
|     z-index: auto; | ||||
|     display: inline-block; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-inline .minicolors-panel { | ||||
|     right: auto; | ||||
|   } | ||||
|    | ||||
|   /* Default theme */ | ||||
|   .minicolors-theme-default .minicolors-swatch { | ||||
|     top: 5px; | ||||
|     left: 5px; /* LTR */ | ||||
|     width: 18px; | ||||
|     height: 18px; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-default .minicolors-swatch { | ||||
|     right: 5px; | ||||
|   } | ||||
|   .minicolors-theme-default .minicolors-swatches .minicolors-swatch { | ||||
|     margin-bottom: 2px; | ||||
|     top: 0; | ||||
|     left: 0; /* LTR */ | ||||
|     width: 18px; | ||||
|     height: 18px; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-default .minicolors-swatches .minicolors-swatch { | ||||
|     right: 0; | ||||
|   } | ||||
|   .minicolors-theme-default.minicolors-position-right .minicolors-swatch { | ||||
|     left: auto; /* LTR */ | ||||
|     right: 5px; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-swatch { | ||||
|     right: auto; | ||||
|     left: 5px; | ||||
|   } | ||||
|   .minicolors-theme-default.minicolors { | ||||
|     width: auto; | ||||
|     display: inline-block; | ||||
|   } | ||||
|   .minicolors-theme-default .minicolors-input { | ||||
|     height: 20px; | ||||
|     width: auto; | ||||
|     display: inline-block; | ||||
|     padding-left: 26px; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-default .minicolors-input { | ||||
|     text-align: right; | ||||
|     unicode-bidi: plaintext; | ||||
|     padding-left: 1px; | ||||
|     padding-right: 26px; | ||||
|   } | ||||
|   .minicolors-theme-default.minicolors-position-right .minicolors-input { | ||||
|     padding-right: 26px; /* LTR */ | ||||
|     padding-left: inherit; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-default.minicolors-position-left .minicolors-input { | ||||
|     padding-right: inherit; | ||||
|     padding-left: 26px; | ||||
|   } | ||||
|    | ||||
|   /* Bootstrap theme */ | ||||
|   .minicolors-theme-bootstrap .minicolors-swatch { | ||||
|     z-index: 2; | ||||
|     top: 3px; | ||||
|     left: 3px; /* LTR */ | ||||
|     width: 28px; | ||||
|     height: 28px; | ||||
|     border-radius: 3px; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-bootstrap .minicolors-swatch { | ||||
|     right: 3px; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch { | ||||
|     margin-bottom: 2px; | ||||
|     top: 0; | ||||
|     left: 0; /* LTR */ | ||||
|     width: 20px; | ||||
|     height: 20px; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-bootstrap .minicolors-swatches .minicolors-swatch { | ||||
|     right: 0; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap .minicolors-swatch-color { | ||||
|     border-radius: inherit; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap.minicolors-position-right > .minicolors-swatch { | ||||
|     left: auto; /* LTR */ | ||||
|     right: 3px; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left > .minicolors-swatch { | ||||
|     right: auto; | ||||
|     left: 3px; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap .minicolors-input { | ||||
|     float: none; | ||||
|     padding-left: 44px; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-bootstrap .minicolors-input { | ||||
|     text-align: right; | ||||
|     unicode-bidi: plaintext; | ||||
|     padding-left: 12px; | ||||
|     padding-right: 44px; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap.minicolors-position-right .minicolors-input { | ||||
|     padding-right: 44px; /* LTR */ | ||||
|     padding-left: 12px; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-bootstrap.minicolors-position-left .minicolors-input { | ||||
|     padding-right: 12px; | ||||
|     padding-left: 44px; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch { | ||||
|     top: 4px; | ||||
|     left: 4px; /* LTR */ | ||||
|     width: 37px; | ||||
|     height: 37px; | ||||
|     border-radius: 5px; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-bootstrap .minicolors-input.input-lg + .minicolors-swatch { | ||||
|     right: 4px; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap .minicolors-input.input-sm + .minicolors-swatch { | ||||
|     width: 24px; | ||||
|     height: 24px; | ||||
|   } | ||||
|   .minicolors-theme-bootstrap .minicolors-input.input-xs + .minicolors-swatch { | ||||
|     width: 18px; | ||||
|     height: 18px; | ||||
|   } | ||||
|   .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input { | ||||
|     border-top-left-radius: 0; /* LTR */ | ||||
|     border-bottom-left-radius: 0; /* LTR */ | ||||
|   } | ||||
|   [dir=rtl] .input-group .minicolors-theme-bootstrap .minicolors-input { | ||||
|     border-radius: 4px; | ||||
|   } | ||||
|   [dir=rtl] .input-group .minicolors-theme-bootstrap:not(:first-child) .minicolors-input { | ||||
|     border-top-right-radius: 0; | ||||
|     border-bottom-right-radius: 0; | ||||
|   } | ||||
|   [dir=rtl] .input-group .minicolors-theme-bootstrap:not(:last-child) .minicolors-input { | ||||
|     border-top-left-radius: 0; | ||||
|     border-bottom-left-radius: 0; | ||||
|   } | ||||
|   /* bootstrap input-group rtl override */ | ||||
|   [dir=rtl] .input-group .form-control, | ||||
|   [dir=rtl] .input-group-addon, | ||||
|   [dir=rtl] .input-group-btn > .btn, | ||||
|   [dir=rtl] .input-group-btn > .btn-group > .btn, | ||||
|   [dir=rtl] .input-group-btn > .dropdown-toggle { | ||||
|     border: 1px solid #ccc; | ||||
|     border-radius: 4px; | ||||
|   } | ||||
|   [dir=rtl] .input-group .form-control:first-child, | ||||
|   [dir=rtl] .input-group-addon:first-child, | ||||
|   [dir=rtl] .input-group-btn:first-child > .btn, | ||||
|   [dir=rtl] .input-group-btn:first-child > .btn-group > .btn, | ||||
|   [dir=rtl] .input-group-btn:first-child > .dropdown-toggle, | ||||
|   [dir=rtl] .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), | ||||
|   [dir=rtl] .input-group-btn:last-child > .btn-group:not(:last-child) > .btn { | ||||
|     border-top-left-radius: 0; | ||||
|     border-bottom-left-radius: 0; | ||||
|     border-left: 0; | ||||
|   } | ||||
|   [dir=rtl] .input-group .form-control:last-child, | ||||
|   [dir=rtl] .input-group-addon:last-child, | ||||
|   [dir=rtl] .input-group-btn:last-child > .btn, | ||||
|   [dir=rtl] .input-group-btn:last-child > .btn-group > .btn, | ||||
|   [dir=rtl] .input-group-btn:last-child > .dropdown-toggle, | ||||
|   [dir=rtl] .input-group-btn:first-child > .btn:not(:first-child), | ||||
|   [dir=rtl] .input-group-btn:first-child > .btn-group:not(:first-child) > .btn { | ||||
|     border-top-right-radius: 0; | ||||
|     border-bottom-right-radius: 0; | ||||
|   } | ||||
|    | ||||
|   /* Semantic Ui theme */ | ||||
|   .minicolors-theme-semanticui .minicolors-swatch { | ||||
|     top: 0; | ||||
|     left: 0; /* LTR */ | ||||
|     padding: 18px; | ||||
|   } | ||||
|   [dir=rtl] .minicolors-theme-semanticui .minicolors-swatch { | ||||
|     right: 0; | ||||
|   } | ||||
|   .minicolors-theme-semanticui input { | ||||
|     text-indent: 30px; | ||||
|   } | ||||
							
								
								
									
										7785
									
								
								htdocs/css/mdb.css
									
									
									
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										5462
									
								
								htdocs/css/mdb.lite.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										38
									
								
								htdocs/css/mdb.lite.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										44
									
								
								htdocs/css/mdb.min.css
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										0
									
								
								htdocs/css/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										0
									
								
								htdocs/css/style.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										160
									
								
								htdocs/css/wheelcolorpicker.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,160 @@ | ||||
| /** | ||||
|  * jQuery Wheel Color Picker | ||||
|  * Base Stylesheet | ||||
|  *  | ||||
|  * http://www.jar2.net/projects/jquery-wheelcolorpicker | ||||
|  *  | ||||
|  * Copyright © 2011-2016 Fajar Chandra. All rights reserved. | ||||
|  * Released under MIT License. | ||||
|  * http://www.opensource.org/licenses/mit-license.php | ||||
|  *  | ||||
|  * Note: Width, height, left, and top properties are handled by the  | ||||
|  * plugin. These values might change on the fly. | ||||
|  */ | ||||
| 
 | ||||
| .jQWCP-wWidget { | ||||
| 	position: absolute; | ||||
| 	width: 250px; | ||||
| 	height: 180px; | ||||
| 	background: #eee; | ||||
| 	box-shadow: 1px 1px 4px rgba(0,0,0,.5); | ||||
| 	border-radius: 4px; | ||||
| 	border: solid 1px #aaa; | ||||
| 	padding: 10px; | ||||
| 	z-index: 1001; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-wWidget.jQWCP-block { | ||||
| 	position: relative; | ||||
| 	border-color: #aaa; | ||||
| 	box-shadow: inset 1px 1px 1px #ccc; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-wWheel { | ||||
| 	background-repeat: no-repeat; | ||||
| 	background-position: center; | ||||
| 	background-size: contain; | ||||
| 	position: relative; | ||||
| 	float: left; | ||||
| 	width: 180px; | ||||
| 	height: 180px; | ||||
| 	-webkit-border-radius: 90px; | ||||
| 	-moz-border-radius: 50%; | ||||
| 	border-radius: 50%; | ||||
| 	border: solid 1px #aaa; | ||||
| 	margin: -1px; | ||||
| 	margin-right: 10px; | ||||
| 	transition: border .15s; | ||||
| 	cursor: crosshair; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-wWheel:hover { | ||||
| 	border-color: #666; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-wWheelOverlay { | ||||
| 	position: absolute; | ||||
| 	top: 0; | ||||
| 	left: 0; | ||||
| 	width: 100%; | ||||
| 	height: 100%; | ||||
| 	background: #000; | ||||
| 	opacity: 0; | ||||
| 	-webkit-border-radius: 90px; | ||||
| 	-moz-border-radius: 50%; | ||||
| 	border-radius: 50%; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-wWheelCursor { | ||||
| 	width: 8px; | ||||
| 	height: 8px; | ||||
| 	position: absolute; | ||||
| 	top: 50%; | ||||
| 	left: 50%; | ||||
| 	margin: -6px -6px; | ||||
| 	cursor: crosshair; | ||||
| 	border: solid 2px #fff; | ||||
| 	box-shadow: 1px 1px 2px #000; | ||||
| 	border-radius: 50%; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-slider-wrapper, | ||||
| .jQWCP-wPreview { | ||||
| 	position: relative; | ||||
| 	width: 20px; | ||||
| 	height: 180px; | ||||
| 	float: left; | ||||
| 	margin-right: 10px; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-wWheel:last-child, | ||||
| .jQWCP-slider-wrapper:last-child, | ||||
| .jQWCP-wPreview:last-child { | ||||
|     margin-right: 0; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-slider, | ||||
| .jQWCP-wPreviewBox { | ||||
| 	position: absolute; | ||||
| 	width: 100%; | ||||
| 	height: 100%; | ||||
| 	left: 0; | ||||
| 	top: 0; | ||||
| 	box-sizing: border-box; | ||||
| 	border: solid 1px #aaa; | ||||
| 	margin: -1px; | ||||
| 	-moz-border-radius: 4px; | ||||
| 	border-radius: 4px; | ||||
| 	transition: border .15s; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-slider { | ||||
| 	cursor: crosshair; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-slider-wrapper:hover .jQWCP-slider { | ||||
| 	border-color: #666; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-scursor { | ||||
| 	position: absolute; | ||||
| 	left: 0; | ||||
| 	top: 0; | ||||
| 	right: 0; | ||||
| 	height: 6px; | ||||
| 	margin: -5px -1px -5px -3px; | ||||
| 	cursor: crosshair; | ||||
| 	border: solid 2px #fff; | ||||
| 	box-shadow: 1px 1px 2px #000; | ||||
| 	border-radius: 4px; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-wAlphaSlider, | ||||
| .jQWCP-wPreviewBox { | ||||
| 	background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEVAQEB/f39eaJUuAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYRBDgK9dKdMgAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAARSURBVAjXY/jPwIAVYRf9DwB+vw/x6vMT1wAAAABJRU5ErkJggg==') center center; | ||||
| } | ||||
| 
 | ||||
| .jQWCP-overlay { | ||||
| 	position: fixed; | ||||
| 	top: 0; | ||||
| 	left: 0; | ||||
| 	bottom: 0; | ||||
| 	right: 0; | ||||
| 	z-index: 1000; | ||||
| } | ||||
| 
 | ||||
| /*********************/ | ||||
| 
 | ||||
| /* Mobile layout */ | ||||
| 
 | ||||
| .jQWCP-mobile.jQWCP-wWidget { | ||||
|     position: fixed; | ||||
|     bottom: 0; | ||||
|     left: 0 !important; | ||||
|     top: auto !important; | ||||
|     width: 100%; | ||||
|     height: 75%; | ||||
|     max-height: 240px; | ||||
|     box-sizing: border-box; | ||||
|     border-radius: 0; | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								htdocs/favicon.ico
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 361 KiB | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Bold.eot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Bold.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Bold.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Bold.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Light.eot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Light.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Light.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Light.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Medium.eot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Medium.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Medium.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Medium.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Regular.eot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Regular.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Regular.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Regular.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Thin.eot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Thin.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Thin.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								htdocs/font/roboto/Roboto-Thin.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										90
									
								
								htdocs/htmlstrip.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,90 @@ | ||||
| <html> | ||||
|     <head> | ||||
|          | ||||
|     </head> | ||||
|     <body ng-app="stripApp" ng-controller="stripCtrl" > | ||||
|         <div class="col-12" ng-repeat="led in data" style="border-style: solid;display: table"> | ||||
|             <div style="width: 60px; height: 60px; background: red; display: table-cell;"> | ||||
|                     {{led.red}} | ||||
|             </div> | ||||
|             <div style="width: 60px; height: 60px; background: green; display: table-cell;"> | ||||
|                     {{led.green}} | ||||
|             </div> | ||||
|             <div style="width: 60px; height: 60px; background: blue; display: table-cell;"> | ||||
|                     {{led.blue}} | ||||
|             </div> | ||||
|         </div> | ||||
|         <script src="js/angularjs.js"></script> | ||||
|         <script src="js/reconnecting-websocket.js"></script> | ||||
|         <script> | ||||
|             var app = angular.module('stripApp',[]); | ||||
|             app.factory('socket', [function() { | ||||
|                 var stack = []; | ||||
|                 var onmessageDefer; | ||||
|                 var host = "localhost" | ||||
|                 if (window.location.hostname != ""){ | ||||
|                     host = window.location.hostname | ||||
|                 } | ||||
|                 var socket = { | ||||
|                     ws: new ReconnectingWebSocket("ws://"+host+":8001", null, {debug: false, reconnectInterval: 2000}), | ||||
|                     send: function(data) { | ||||
|                         if (socket.ws.readyState == 1) { | ||||
|                             socket.ws.send(data); | ||||
|                         } else { | ||||
|                             stack.push(data); | ||||
|                         } | ||||
|                     }, | ||||
|                     onmessage: function(callback) { | ||||
|                         if (socket.ws.readyState == 1) { | ||||
|                             socket.ws.onmessage = callback; | ||||
|                         } else { | ||||
|                             onmessageDefer = callback; | ||||
|                         } | ||||
|                     } | ||||
|                 }; | ||||
|                 socket.ws.onopen = function(event) { | ||||
|                     for (i in stack) { | ||||
|                         socket.ws.send(stack[i]); | ||||
|                     } | ||||
|                     stack = []; | ||||
|                     if (onmessageDefer) { | ||||
|                         socket.ws.onmessage = onmessageDefer; | ||||
|                         onmessageDefer = null; | ||||
|                     } | ||||
|                 }; | ||||
|                 return socket; | ||||
|             }]); | ||||
|      | ||||
|             app.controller('stripCtrl', ['$scope',  'socket', function($scope, socket) {  | ||||
|      | ||||
|                 $scope.connected = false; | ||||
|                 $scope.data = {} | ||||
|      | ||||
|                 socket.ws.addEventListener('close',function(event) {  | ||||
|                     $scope.$apply(function(){ | ||||
|                         $scope.connected = false | ||||
|                     });  | ||||
|                 }); | ||||
|                 socket.ws.addEventListener('open',function(event) {  | ||||
|                     $scope.$apply(function(){ | ||||
|                         socket.send( | ||||
|                             JSON.stringify({  | ||||
|                                 'register_client_type': 1, | ||||
|                                 'client_name': "htmlstrip", | ||||
|                             }) | ||||
|                         ); | ||||
|                         $scope.connected = true | ||||
|                     });  | ||||
|                 }); | ||||
|                 | ||||
|                 socket.onmessage(function(event) { | ||||
|                     $scope.$apply(function(){ | ||||
|                         console.log(event.data) | ||||
|                         json = JSON.parse(event.data) | ||||
|                         $scope.data = json.data | ||||
|                     }); | ||||
|                 });             | ||||
|             }]); | ||||
|         </script> | ||||
|     </body> | ||||
| </html> | ||||
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/jquery.minicolors.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 67 KiB | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/lightbox/default-skin.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 547 B | 
							
								
								
									
										1
									
								
								htdocs/img/lightbox/default-skin.svg
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| <svg width="264" height="88" viewBox="0 0 264 88" xmlns="http://www.w3.org/2000/svg"><title>default-skin 2</title><g fill="none" fill-rule="evenodd"><g><path d="M67.002 59.5v3.768c-6.307.84-9.184 5.75-10.002 9.732 2.22-2.83 5.564-5.098 10.002-5.098V71.5L73 65.585 67.002 59.5z" id="Shape" fill="#fff"/><g fill="#fff"><path d="M13 29v-5h2v3h3v2h-5zM13 15h5v2h-3v3h-2v-5zM31 15v5h-2v-3h-3v-2h5zM31 29h-5v-2h3v-3h2v5z" id="Shape"/></g><g fill="#fff"><path d="M62 24v5h-2v-3h-3v-2h5zM62 20h-5v-2h3v-3h2v5zM70 20v-5h2v3h3v2h-5zM70 24h5v2h-3v3h-2v-5z"/></g><path d="M20.586 66l-5.656-5.656 1.414-1.414L22 64.586l5.656-5.656 1.414 1.414L23.414 66l5.656 5.656-1.414 1.414L22 67.414l-5.656 5.656-1.414-1.414L20.586 66z" fill="#fff"/><path d="M111.785 65.03L110 63.5l3-3.5h-10v-2h10l-3-3.5 1.785-1.468L117 59l-5.215 6.03z" fill="#fff"/><path d="M152.215 65.03L154 63.5l-3-3.5h10v-2h-10l3-3.5-1.785-1.468L147 59l5.215 6.03z" fill="#fff"/><g><path id="Rectangle-11" fill="#fff" d="M160.957 28.543l-3.25-3.25-1.413 1.414 3.25 3.25z"/><path d="M152.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" id="Oval-1" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M150 21h5v1h-5z"/></g><g><path d="M116.957 28.543l-1.414 1.414-3.25-3.25 1.414-1.414 3.25 3.25z" fill="#fff"/><path d="M108.5 27c3.038 0 5.5-2.462 5.5-5.5s-2.462-5.5-5.5-5.5-5.5 2.462-5.5 5.5 2.462 5.5 5.5 5.5z" stroke="#fff" stroke-width="1.5"/><path fill="#fff" d="M106 21h5v1h-5z"/><path fill="#fff" d="M109.043 19.008l-.085 5-1-.017.085-5z"/></g></g></g></svg> | ||||
| After Width: | Height: | Size: 1.5 KiB | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/lightbox/preloader.gif
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 866 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/01.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 211 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/02.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 213 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/03.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 209 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/04.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 211 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/05.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 213 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/06.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 211 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/07.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 215 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/08.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 146 B | 
							
								
								
									
										
											BIN
										
									
								
								htdocs/img/overlays/09.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| After Width: | Height: | Size: 137 B | 
							
								
								
									
										4
									
								
								htdocs/img/svg/arrow_left.svg
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,4 @@ | ||||
| <svg fill="#FFFFFF" height="36" viewBox="0 0 24 24" width="36" xmlns="http://www.w3.org/2000/svg"> | ||||
|     <path d="M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z"/> | ||||
|     <path d="M0-.5h24v24H0z" fill="none"/> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 218 B | 
							
								
								
									
										4
									
								
								htdocs/img/svg/arrow_right.svg
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,4 @@ | ||||
| <svg fill="#FFFFFF" height="36" viewBox="0 0 24 24" width="36" xmlns="http://www.w3.org/2000/svg"> | ||||
|     <path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"/> | ||||
|     <path d="M0-.25h24v24H0z" fill="none"/> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 217 B | 
							
								
								
									
										429
									
								
								htdocs/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,429 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang="de"> | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>LED-Server :: KJ-intern</title> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||||
|     <meta http-equiv="X-UA-Compatible" content="IE=edge" /> | ||||
|     <!-- Font Awesome --> | ||||
|     <link rel="stylesheet" href="css/font-awesome.min.css"> | ||||
|     <!-- Bootstrap core CSS --> | ||||
|     <link href="css/bootstrap.min.css" rel="stylesheet"> | ||||
|     <!-- Material Design Bootstrap --> | ||||
|     <link href="css/mdb.min.css" rel="stylesheet"> | ||||
|     <!-- Your custom styles (optional) --> | ||||
|     <link href="css/style.css" rel="stylesheet"> | ||||
|     <link href="css/wheelcolorpicker.css" rel="stylesheet"> | ||||
| 
 | ||||
|     <link href="css/jquery.minicolors.css" rel="stylesheet"> | ||||
| 
 | ||||
|     <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> | ||||
|     <!--[if lt IE 9]> | ||||
|     <script src="js/html5shiv.js"></script> | ||||
|     <script src="js/respond.min.js"></script> | ||||
|     <![endif]--> | ||||
|     <style> | ||||
|         .text-nowrap { | ||||
|             white-space: nowrap; | ||||
|         } | ||||
| 
 | ||||
|         .dimmScreen | ||||
|         { | ||||
|             position:fixed; | ||||
|             padding:0; | ||||
|             margin:0; | ||||
| 
 | ||||
|             top:0; | ||||
|             left:0; | ||||
| 
 | ||||
|             width: 100%; | ||||
|             height: 100%; | ||||
|             background:rgba(0, 0, 0, 0.5); | ||||
|         } | ||||
|     </style> | ||||
| </head> | ||||
| <body  ng-app="LED-WebFrontend" ng-controller="LED-ServerCtrl" > | ||||
|     <div style="height: 100vh"> | ||||
|         <div class="container"> | ||||
|             <!-- Not Connected --> | ||||
|             <div class="row dimmScreen ng-show justify-content-center" ng-hide="connected"> | ||||
|                 <div class=" col-md-6 "> | ||||
|                     <div class="row"> | ||||
|                         <div class="col-12 mt-3" > | ||||
|                             <div class="card "  >             | ||||
|                                 <!-- Card content --> | ||||
|                                 <div class="card-body justify-content-center"> | ||||
|                                     <!-- Title --> | ||||
|                                     <h4 class="card-title infinite animated headShake text-center"><strong>Verbindung wird hergestellt...</strong></h4> | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|             <div class="row ng-hide" ng-show="connected"> | ||||
|                 <!--Left Col--> | ||||
|                 <div class="col-md-6 mt-3"> | ||||
|                     <div class="row"> | ||||
|                         <div class="col-12 mt-3" > | ||||
|                             <div class="card "  >             | ||||
|                                 <!-- Card content --> | ||||
|                                 <div class="card-body "> | ||||
|                                     <!-- Title --> | ||||
|                                     <h4 class="card-title"><strong>Neuen Effekt starten</strong></h4> | ||||
|                                     <form id="startNewEffectThread"> | ||||
|                                         <div class="row"> | ||||
|                                             <div class="col-12"> | ||||
|                                                 <div class="form-group row"> | ||||
|                                                     <label for="newEffectThread" class="col-sm-3 col-form-label"> Select Effect: </label><br> | ||||
|                                                     <select ng-change="newEffectThread.params=[]" name="newEffectThread" class="form-control col-sm-7 "  id="newEffectThread" ng-model="newEffectThread.effect" ng-options="effect.index as effect.name for effect in effects" ></select> | ||||
|                                                 </div> | ||||
|                                                 <div class="newEffectThreadDesc">{{effects[newEffectThread.effect].desc}}</div> | ||||
| 
 | ||||
|                                             </div> | ||||
|                                             <div class="col-12" ng-repeat="effectParam in effects[newEffectThread.effect].effectParams"> | ||||
| 
 | ||||
|                                                 <input ng-if="effectParam.type=='colorpicker'" | ||||
|                                                     minicolors="colorpickerconfig" | ||||
|                                                     class="form-control" | ||||
|                                                     type="text" | ||||
|                                                     ng-init=" | ||||
|                                                         newEffectThreadParamColorPicker[effectParam.index]=rgbToHex( | ||||
|                                                             effectParam.options[0][2], | ||||
|                                                             effectParam.options[1][2], | ||||
|                                                             effectParam.options[2][2] | ||||
|                                                         ); | ||||
|                                                         newEffectThread.params[effectParam.index] = {}; | ||||
|                                                         newEffectThread.params[effectParam.index][0] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).r; | ||||
|                                                         newEffectThread.params[effectParam.index][1] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).g; | ||||
|                                                         newEffectThread.params[effectParam.index][2] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).b | ||||
|                                                     " | ||||
|                                                     ng-change=" | ||||
|                                                         newEffectThread.params[effectParam.index][0] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).r; | ||||
|                                                         newEffectThread.params[effectParam.index][1] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).g; | ||||
|                                                         newEffectThread.params[effectParam.index][2] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).b" | ||||
|                                                     ng-model="newEffectThreadParamColorPicker[effectParam.index]" | ||||
|                                                     > | ||||
| 
 | ||||
|                                                 <mdb-range-input ng-if="effectParam.type=='slider'" | ||||
|                                                     default="true"  | ||||
|                                                     id="range"  | ||||
|                                                     min="{{effectParam.options[0][0]}}" | ||||
|                                                     ng-value="effectParam.options[0][2]" | ||||
|                                                     ng-model="newEffectThread.params[effectParam.index][0]" | ||||
|                                                     max="{{effectParam.options[0][1]}}"> | ||||
|                                                 </mdb-range-input> | ||||
|                                                      | ||||
|                                                 {{effectParam}} | ||||
|                                             </div> | ||||
|                                         </div> | ||||
|                                         <div class="row"> | ||||
|                                             <div class="col-7 mt-3"> | ||||
|                                                 <div class="row"> | ||||
|                                                     <div class="col" ng-repeat="rgbStrip in rgbStrips"> | ||||
|                                                         <!-- Material unchecked --> | ||||
|                                                         <div class="form-check" > | ||||
|                                                             <input type="checkbox" class="form-check-input" id="newEffectThreadRGBStrips{{rgbStrip.index}}" name="newEffectThreadRGBStrips[]" ng-model="newEffectThread.rgbStrips[rgbStrip.index]"/> | ||||
|                                                             <label class="form-check-label text-nowrap" for="newEffectThreadRGBStrips{{rgbStrip.index}}">{{rgbStrip.name}}</label> | ||||
|                                                         </div> | ||||
|                                                     </div> | ||||
|                                                 </div> | ||||
|                                             </div> | ||||
|                                             <div class="col-5 mt-3"> | ||||
|                                                 <!-- Provides extra visual weight and identifies the primary action in a set of buttons -->  | ||||
|                                                 <a href="#" ng-click="startEffect(newEffectThread.effect,newEffectThread.rgbStrips,newEffectThread.params)" class="btn btn-primary float-right">Anwenden</a> | ||||
|                                             </div> | ||||
|                                         </div> | ||||
|                                     </form> | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                         <!--Debug!--> | ||||
|                         <div class="col-12 mt-3" ng-show="false"> | ||||
|                             <div class="card "  >             | ||||
|                                 <!-- Card content --> | ||||
|                                 <div class="card-body "> | ||||
|                                     <pre>{{rgbStrips | json}}{{effects | json}}{{effectThreads | json}}{{newEffectThread | json}}</pre> | ||||
|                                      | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <!--/Left Col--> | ||||
|                 <!--Right Col--> | ||||
|                 <div class="col-md-6 mt-3"> | ||||
|                     <div class="row" > | ||||
|                         <form name="moveRGBStripToEffectThreadForm"> | ||||
|                             <div class="col-md-12 mt-3" ng-repeat="effectThread in effectThreads" > | ||||
|                                 <div class="card" >             | ||||
|                                     <!-- Card content --> | ||||
|                                     <div class="card-body "> | ||||
|                                  | ||||
|                                         <!-- Title --> | ||||
|                                         <h4 class="card-title"><strong>{{ effectThread.name }}</strong></h4> | ||||
|                                         <!-- Text --> | ||||
|                                         <p class="card-text">{{ effectThread.desc }}</p> | ||||
|                                         <div class="row"> | ||||
|                                             <div class="col-12" ng-repeat="effectParam in effectThread.effectParams"> | ||||
|                                                 <input ng-if="effectParam.type=='colorpicker'" | ||||
|                                                     minicolors="colorpickerconfig" | ||||
|                                                     class="form-control" | ||||
|                                                     type="text" | ||||
|                                                     ng-init=" | ||||
|                                                         effectThreadParamColorPicker[effectThread.index][effectParam.index]=rgbToHex( | ||||
|                                                             effectParam.values[0], | ||||
|                                                             effectParam.values[1], | ||||
|                                                             effectParam.values[2] | ||||
|                                                         ); | ||||
|                                                         effectThreadParamColorPicker[effectThread.index].params[effectParam.index] = {}; | ||||
|                                                         effectThreadParamColorPicker[effectThread.index].params[effectParam.index][0] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).r; | ||||
|                                                         effectThreadParamColorPicker[effectThread.index].params[effectParam.index][1] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).g; | ||||
|                                                         effectThreadParamColorPicker[effectThread.index].params[effectParam.index][2] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).b | ||||
|                                                     " | ||||
|                                                     ng-change=" | ||||
|                                                         effectThreadParamColorPicker[effectThread.index].params[effectParam.index][0] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).r; | ||||
|                                                         effectThreadParamColorPicker[effectThread.index].params[effectParam.index][1] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).g; | ||||
|                                                         effectThreadParamColorPicker[effectThread.index].params[effectParam.index][2] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).b; | ||||
|                                                         effectThreadChangeEffectParam(effectThread.index,effectThreadParamColorPicker[effectThread.index].params) | ||||
|                                                     " | ||||
| 
 | ||||
|                                                     ng-model="effectThreadParamColorPicker[effectThread.index][effectParam.index]" | ||||
|                                                     > | ||||
|                                                     {{effectParam.values}} | ||||
| 
 | ||||
|                                                 <!-- | ||||
|                                                 <input ng-if="effectParam.type=='colorpicker'" | ||||
|                                                     minicolors="colorpickerconfig" | ||||
|                                                     id="color-input" | ||||
|                                                     class="form-control" | ||||
|                                                     type="text" | ||||
|                                                     ng-init="effectThreadParamColorPicker[effectThread.index][effectParam.index]=rgbToHex(effectParam.values[0][2],effectParam.values[1][2],effectParam.values[2][2]);" | ||||
|                                                     ng-change="effectThreadChangeEffectParam(effectThread.index,{0: {0: hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).r,1: hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).g, 2: hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).b}})" | ||||
|                                                     ng-model="effectThreadParamColorPicker[effectThread.index][effectParam.index]" | ||||
|                                                     >--> | ||||
|                                             </div> | ||||
|                                         </div> | ||||
|                                         <div class="row"> | ||||
|                                             <div class="col" ng-repeat="rgbStrip in rgbStrips"> | ||||
|                                                 <!-- Material unchecked --> | ||||
|                                                 <div class="form-check" > | ||||
|                                                         <input type="radio" ng-checked="isRGBStripActive(rgbStrip,effectThread.activeRGBStips)" ng-change="moveRGBStripToEffectThread(rgbStrip.index,effectThread.index)" class="form-check-input" id="{{ effectThread.name }}EffectThreadRGBStrip{{rgbStrip.index}}" ng-model="moveRGBStripToEffectThreadModel[rgbStrip.index]" name="{{rgbStrip.index}}" value="{{effect.index}}"> | ||||
|                                                         <label class="form-check-label text-nowrap" for="{{ effectThread.name }}EffectThreadRGBStrip{{rgbStrip.index}}">{{rgbStrip.name}}</label> | ||||
|                                                 </div> | ||||
|                                             </div> | ||||
|                                         </div> | ||||
|                                         <p class="card-text">{{effectThread.dump}}</p> | ||||
|                                     </div> | ||||
|                                 </div>    | ||||
|                             </div> | ||||
|                         </form> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <!--/Right Col--> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|      | ||||
|     <!-- SCRIPTS --> | ||||
|     <!-- JQuery --> | ||||
|     <script type="text/javascript" src="js/jquery-3.3.1.min.js"></script> | ||||
|     <script type="text/javascript" src="js/jquery.wheelcolorpicker-3.0.5.min.js"></script> | ||||
|     <script type="text/javascript" src="js/jquery.minicolors.min.js"></script> | ||||
|     <!-- Bootstrap tooltips --> | ||||
|     <script type="text/javascript" src="js/popper.min.js"></script> | ||||
|     <!-- Bootstrap core JavaScript --> | ||||
|     <script type="text/javascript" src="js/bootstrap.min.js"></script> | ||||
|     <!-- MDB core JavaScript --> | ||||
|     <script type="text/javascript" src="js/mdb.min.js"></script> | ||||
|     <script src="js/angularjs.js"></script> | ||||
|     <script type="text/javascript" src="js/angular-minicolors.js"></script> | ||||
|     <script src="js/reconnecting-websocket.js"></script> | ||||
|     <script> | ||||
|         var app = angular.module('LED-WebFrontend',['minicolors']); | ||||
|         app.factory('socket', [function() { | ||||
|             var stack = []; | ||||
|             var onmessageDefer; | ||||
|             var host = "localhost" | ||||
|             if (window.location.hostname != ""){ | ||||
|                 host = window.location.hostname | ||||
|             } | ||||
|             var socket = { | ||||
|                 ws: new ReconnectingWebSocket("ws://"+host+":8001", null, {debug: false, reconnectInterval: 2000}), | ||||
|                 send: function(data) { | ||||
|                     if (socket.ws.readyState == 1) { | ||||
|                         socket.ws.send(data); | ||||
|                     } else { | ||||
|                         stack.push(data); | ||||
|                     } | ||||
|                 }, | ||||
|                 onmessage: function(callback) { | ||||
|                     if (socket.ws.readyState == 1) { | ||||
|                         socket.ws.onmessage = callback; | ||||
|                     } else { | ||||
|                         onmessageDefer = callback; | ||||
|                     } | ||||
|                 } | ||||
|             }; | ||||
|             socket.ws.onopen = function(event) { | ||||
|                 for (i in stack) { | ||||
|                     socket.ws.send(stack[i]); | ||||
|                 } | ||||
|                 stack = []; | ||||
|                 if (onmessageDefer) { | ||||
|                     socket.ws.onmessage = onmessageDefer; | ||||
|                     onmessageDefer = null; | ||||
|                 } | ||||
|             }; | ||||
|             return socket; | ||||
|         }]); | ||||
| 
 | ||||
|         app.controller('LED-ServerCtrl', ['$scope',  'socket', function($scope, socket) {  | ||||
| 
 | ||||
|             $scope.connected = false; | ||||
| 
 | ||||
|             $scope.rgbStrips = {}; | ||||
|             $scope.effects = {}; | ||||
|             $scope.effectThreads = {}; | ||||
|              | ||||
|             $scope.newEffectThreadParamColorPicker = {} | ||||
|             $scope.newEffectThread = {} | ||||
|             $scope.newEffectThread.params = {}; | ||||
|             $scope.newEffectThread.rgbStrips = {}; | ||||
| 
 | ||||
| 
 | ||||
|             $scope.colorpickerconfig = { | ||||
|                 // control: 'saturation', | ||||
|                 control: 'hue', | ||||
|                 // control: 'brightness', | ||||
|                 // control: 'wheel', | ||||
|                 theme: 'bootstrap', | ||||
|                 inline: true, | ||||
|                 position: 'top left' | ||||
|             }; | ||||
| 
 | ||||
|             socket.ws.addEventListener('close',function(event) {  | ||||
|                 $scope.$apply(function(){ | ||||
|                     $scope.connected = false | ||||
|                 });  | ||||
|             }); | ||||
|             socket.ws.addEventListener('open',function(event) {  | ||||
|                 $scope.$apply(function(){ | ||||
|                     socket.send( | ||||
|                         JSON.stringify({  | ||||
|                             'register_client_type': 0 | ||||
|                         }) | ||||
|                     ); | ||||
|                     $scope.connected = true | ||||
|                 });  | ||||
|             }); | ||||
|             | ||||
|             socket.onmessage(function(event) { | ||||
|                 $scope.$apply(function(){ | ||||
|                     json = JSON.parse(event.data) | ||||
|                     console.log("Message: ",json) | ||||
|                     //remove strips from startEffect that may not exist anymore | ||||
|                     if(json.hasOwnProperty('rgbStrips')){ | ||||
|                         jQuery.each($scope.newEffectThread.rgbStrips,function(key,value){ | ||||
|                             if (!(key in json.rgbStrips)){ | ||||
|                                 delete $scope.newEffectThread.rgbStrips[key]; | ||||
|                             } | ||||
|                         }); | ||||
| 
 | ||||
|                     } | ||||
|                     if(json.hasOwnProperty('effects') && json.hasOwnProperty('rgbStrips')){ | ||||
|                         //$("#startNewEffectThread")[0].reset(); | ||||
|                         //$("#newEffectThread").removeAttr("selected"); | ||||
| 
 | ||||
|                         //$scope.effects = {} | ||||
|                         $scope.effects = json.effects | ||||
|                         //$scope.rgbStrips = {} | ||||
|                         $scope.rgbStrips = json.rgbStrips | ||||
|                     } | ||||
|                     if(json.hasOwnProperty('effectThreads')){ | ||||
|                         $scope.effectThreads = {} | ||||
|                         $scope.effectThreads = json.effectThreads | ||||
|                         $scope.moveRGBStripToEffectThreadModel = {} | ||||
| 
 | ||||
|                         $scope.moveRGBStripToEffectThreadForm.$setUntouched(); | ||||
|                         $scope.moveRGBStripToEffectThreadForm.$setPristine(); | ||||
|                     } | ||||
|                 }); | ||||
|             }); | ||||
|              | ||||
|             $scope.isRGBStripActive=function(rgbStrip, activeRGBStrips) { | ||||
|                 rval = false; | ||||
|                 jQuery.each( | ||||
|                     activeRGBStrips, function() { | ||||
|                         if(this.index == rgbStrip.index){ | ||||
|                             rval = true; | ||||
|                             return false; | ||||
|                         } | ||||
|                     }); | ||||
|                 return rval; | ||||
|             }; | ||||
| 
 | ||||
|             $scope.moveRGBStripToEffectThread = function(rgbStripIndex,effectThreadIndex){ | ||||
|                 socket.send( | ||||
|                     JSON.stringify({  | ||||
|                         'moveRGBStripToEffectThread': {  | ||||
|                             'rgbStrip': rgbStripIndex,  | ||||
|                             'effectThread': effectThreadIndex | ||||
|                         } | ||||
|                     }) | ||||
|                 ); | ||||
|             }; | ||||
| 
 | ||||
|             $scope.effectThreadChangeEffectParam = function(effectThreadIndex,params){ | ||||
|                 console.log(params) | ||||
|                 socket.send( | ||||
|                     JSON.stringify({  | ||||
|                         'effectThreadChangeEffectParam': {  | ||||
|                             'params': Object.entries(params),  | ||||
|                             'effectThread': effectThreadIndex | ||||
|                         } | ||||
|                     }) | ||||
|                 ); | ||||
|             }; | ||||
| 
 | ||||
|             $scope.startEffect = function(effectIndex,rgbStrips,params){ | ||||
|                 console.log(params) | ||||
|                 socket.send( | ||||
|                     JSON.stringify({ | ||||
|                         'startEffect': { | ||||
|                             'rgbStrips': Object.entries(rgbStrips),  | ||||
|                             'effect': effectIndex, | ||||
|                             'params': Object.entries(params) | ||||
|                         } | ||||
|                     }) | ||||
|                 ); | ||||
|             }; | ||||
| 
 | ||||
|             $scope.changeEffectThreadParameters = function(effectThreadIndex,paramIndex,values){ | ||||
| 
 | ||||
|             } | ||||
|              | ||||
|             //https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb | ||||
|             $scope.hexToRgb = function(hex) { | ||||
|                 // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") | ||||
|                 var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i; | ||||
|                 hex = hex.replace(shorthandRegex, function(m, r, g, b) { | ||||
|                     return r + r + g + g + b + b; | ||||
|                 }); | ||||
| 
 | ||||
|                 var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); | ||||
|                 return result ? { | ||||
|                     r: parseInt(result[1], 16), | ||||
|                     g: parseInt(result[2], 16), | ||||
|                     b: parseInt(result[3], 16) | ||||
|                 } : null; | ||||
|             } | ||||
| 
 | ||||
|             $scope.rgbToHex = function rgbToHex(r, g, b) { | ||||
|                 return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); | ||||
|             } | ||||
|          | ||||
|         }]); | ||||
|     </script> | ||||
| </body> | ||||
| </html> | ||||
							
								
								
									
										15500
									
								
								htdocs/js/addons/datatables.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										3
									
								
								htdocs/js/addons/datatables.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										155
									
								
								htdocs/js/angular-minicolors.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,155 @@ | ||||
| 'format cjs'; | ||||
| 'use strict'; | ||||
| 
 | ||||
| (function(root, factory) { | ||||
|   if (typeof define === 'function' && define.amd) { | ||||
|     define(['angular', 'jquery-minicolors'], factory); | ||||
|   } else if (typeof exports === 'object') { | ||||
|     module.exports = factory(require('angular'), require('jquery-minicolors')); | ||||
|     module.exports = 'minicolors'; | ||||
|   } else { | ||||
|     root.angularMinicolors = factory(root.angular, root.jqueryMinicolors); | ||||
|   } | ||||
| })(this, function(angular) { | ||||
| 
 | ||||
|   angular.module('minicolors', []); | ||||
| 
 | ||||
|   angular.module('minicolors').provider('minicolors', function() { | ||||
|     this.defaults = { | ||||
|       theme: 'bootstrap', | ||||
|       position: 'top left', | ||||
|       defaultValue: '', | ||||
|       animationSpeed: 50, | ||||
|       animationEasing: 'swing', | ||||
|       change: null, | ||||
|       changeDelay: 0, | ||||
|       control: 'hue', | ||||
|       hide: null, | ||||
|       hideSpeed: 100, | ||||
|       inline: false, | ||||
|       letterCase: 'lowercase', | ||||
|       opacity: false, | ||||
|       show: null, | ||||
|       showSpeed: 100 | ||||
|     }; | ||||
| 
 | ||||
|     this.$get = function() { | ||||
|       return this; | ||||
|     }; | ||||
| 
 | ||||
|   }); | ||||
| 
 | ||||
|   angular.module('minicolors').directive('minicolors', ['minicolors', '$timeout', function(minicolors, $timeout) { | ||||
|     return { | ||||
|       require: '?ngModel', | ||||
|       restrict: 'A', | ||||
|       priority: 1, //since we bind on an input element, we have to set a higher priority than angular-default input
 | ||||
|       link: function(scope, element, attrs, ngModel) { | ||||
| 
 | ||||
|         var inititalized = false; | ||||
| 
 | ||||
|         //gets the settings object
 | ||||
|         var getSettings = function() { | ||||
|           var config = angular.extend({}, minicolors.defaults, scope.$eval(attrs.minicolors)); | ||||
|           return config; | ||||
|         }; | ||||
| 
 | ||||
|         /** | ||||
|          * check if value is valid color value | ||||
|          * e.g.#fff000 or #fff | ||||
|          * @param color | ||||
|          */ | ||||
|         function isValidColor(color) { | ||||
|           return /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(color); | ||||
|         } | ||||
| 
 | ||||
|         function canSetValue() { | ||||
|           return (element.data('minicolors-settings') != null) | ||||
|         } | ||||
| 
 | ||||
|         /** | ||||
|          * set color value as minicolors internal color value | ||||
|          * @param color | ||||
|          */ | ||||
|         function setMinicolorsValue(color) { | ||||
|           if (isValidColor(color) && canSetValue()) { | ||||
|             element.minicolors('value', color); | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         //what to do if the value changed
 | ||||
|         ngModel.$render = function() { | ||||
|           console.log("ngModel.$render"); | ||||
| 
 | ||||
|           //we are in digest or apply, and therefore call a timeout function
 | ||||
|           $timeout(function() { | ||||
|             var color = ngModel.$viewValue; | ||||
|             setMinicolorsValue(color); | ||||
|           }, 0, false); | ||||
|         }; | ||||
| 
 | ||||
|         //init method
 | ||||
|         var initMinicolors = function() { | ||||
| 
 | ||||
|           if (!ngModel) { | ||||
|             return; | ||||
|           } | ||||
|           var settings = getSettings(); | ||||
|           settings.change = function(hex) { | ||||
|             scope.$apply(function() { | ||||
|               if (isValidColor(hex)) | ||||
|                 ngModel.$setViewValue(hex); | ||||
|             }); | ||||
|           }; | ||||
| 
 | ||||
|           //destroy the old colorpicker if one already exists
 | ||||
|           if (element.hasClass('minicolors-input')) { | ||||
|             element.minicolors('destroy'); | ||||
|             element.off('blur', onBlur); | ||||
|           } | ||||
| 
 | ||||
|           // Create the new minicolors widget
 | ||||
|           element.minicolors(settings); | ||||
| 
 | ||||
|           // hook up into the jquery-minicolors onBlur event.
 | ||||
|           element.on('blur', onBlur); | ||||
| 
 | ||||
|           // are we inititalized yet ?
 | ||||
|           //needs to be wrapped in $timeout, to prevent $apply / $digest errors
 | ||||
|           //$scope.$apply will be called by $timeout, so we don't have to handle that case
 | ||||
|           if (!inititalized) { | ||||
|             $timeout(function() { | ||||
|               var color = ngModel.$viewValue; | ||||
|               setMinicolorsValue(color); | ||||
|             }, 0); | ||||
|             inititalized = true; | ||||
|             return; | ||||
|           } | ||||
| 
 | ||||
|           function onBlur(e) { | ||||
|             scope.$apply(function() { | ||||
|                 var color = element.minicolors('value'); | ||||
|                 if (isValidColor(color)) | ||||
|                   ngModel.$setViewValue(color); | ||||
|             });               | ||||
|           } | ||||
|         }; | ||||
| 
 | ||||
|         initMinicolors(); | ||||
|         //initital call
 | ||||
| 
 | ||||
|         // Watch for changes to the directives options and then call init method again
 | ||||
|         var unbindWatch = scope.$watch(getSettings, initMinicolors, true); | ||||
| 
 | ||||
|         scope.$on('$destroy', function () { | ||||
|           if (element.hasClass('minicolors-input')) { | ||||
|               element.minicolors('destroy'); | ||||
|               element.remove(); | ||||
|           } | ||||
|           if (unbindWatch) unbindWatch(); | ||||
|         }); | ||||
| 
 | ||||
|       } | ||||
|     }; | ||||
|   }]); | ||||
| }); | ||||
							
								
								
									
										347
									
								
								htdocs/js/angularjs.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,347 @@ | ||||
| /* | ||||
|  AngularJS v1.7.5 | ||||
|  (c) 2010-2018 Google, Inc. http://angularjs.org
 | ||||
|  License: MIT | ||||
| */ | ||||
| (function(B){'use strict';function oe(a){if(F(a))v(a.objectMaxDepth)&&(Vb.objectMaxDepth=Wb(a.objectMaxDepth)?a.objectMaxDepth:NaN),v(a.urlErrorParamsEnabled)&&Fa(a.urlErrorParamsEnabled)&&(Vb.urlErrorParamsEnabled=a.urlErrorParamsEnabled);else return Vb}function Wb(a){return ba(a)&&0<a}function M(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.7.5/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var e=encodeURIComponent, | ||||
| f;f=arguments[d];f="function"==typeof f?f.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof f?"undefined":"string"!=typeof f?JSON.stringify(f):f;c+=e(f)}return new b(c)}}function xa(a){if(null==a||$a(a))return!1;if(I(a)||C(a)||y&&a instanceof y)return!0;var b="length"in Object(a)&&a.length;return ba(b)&&(0<=b&&b-1 in a||"function"===typeof a.item)}function r(a,b,d){var c,e;if(a)if(z(a))for(c in a)"prototype"!==c&&"length"!==c&&"name"!==c&&a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else if(I(a)|| | ||||
| xa(a)){var f="object"!==typeof a;c=0;for(e=a.length;c<e;c++)(f||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==r)a.forEach(b,d,a);else if(Mc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)sa.call(a,c)&&b.call(d,a[c],c,a);return a}function Nc(a,b,d){for(var c=Object.keys(a).sort(),e=0;e<c.length;e++)b.call(d,a[c[e]],c[e]);return c}function Xb(a){return function(b,d){a(d,b)}}function pe(){return++pb} | ||||
| function Yb(a,b,d){for(var c=a.$$hashKey,e=0,f=b.length;e<f;++e){var g=b[e];if(F(g)||z(g))for(var k=Object.keys(g),h=0,l=k.length;h<l;h++){var m=k[h],q=g[m];d&&F(q)?ha(q)?a[m]=new Date(q.valueOf()):ab(q)?a[m]=new RegExp(q):q.nodeName?a[m]=q.cloneNode(!0):Zb(q)?a[m]=q.clone():(F(a[m])||(a[m]=I(q)?[]:{}),Yb(a[m],[q],!0)):a[m]=q}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function R(a){return Yb(a,Ga.call(arguments,1),!1)}function qe(a){return Yb(a,Ga.call(arguments,1),!0)}function da(a){return parseInt(a, | ||||
| 10)}function $b(a,b){return R(Object.create(a),b)}function A(){}function Ta(a){return a}function ia(a){return function(){return a}}function ac(a){return z(a.toString)&&a.toString!==ma}function x(a){return"undefined"===typeof a}function v(a){return"undefined"!==typeof a}function F(a){return null!==a&&"object"===typeof a}function Mc(a){return null!==a&&"object"===typeof a&&!Oc(a)}function C(a){return"string"===typeof a}function ba(a){return"number"===typeof a}function ha(a){return"[object Date]"=== | ||||
| ma.call(a)}function I(a){return Array.isArray(a)||a instanceof Array}function bc(a){switch(ma.call(a)){case "[object Error]":return!0;case "[object Exception]":return!0;case "[object DOMException]":return!0;default:return a instanceof Error}}function z(a){return"function"===typeof a}function ab(a){return"[object RegExp]"===ma.call(a)}function $a(a){return a&&a.window===a}function bb(a){return a&&a.$evalAsync&&a.$watch}function Fa(a){return"boolean"===typeof a}function re(a){return a&&ba(a.length)&& | ||||
| se.test(ma.call(a))}function Zb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function te(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function ta(a){return O(a.nodeName||a[0]&&a[0].nodeName)}function cb(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function Ha(a,b,d){function c(a,b,c){c--;if(0>c)return"...";var d=b.$$hashKey,f;if(I(a)){f=0;for(var g=a.length;f<g;f++)b.push(e(a[f],c))}else if(Mc(a))for(f in a)b[f]=e(a[f],c);else if(a&&"function"===typeof a.hasOwnProperty)for(f in a)a.hasOwnProperty(f)&& | ||||
| (b[f]=e(a[f],c));else for(f in a)sa.call(a,f)&&(b[f]=e(a[f],c));d?b.$$hashKey=d:delete b.$$hashKey;return b}function e(a,b){if(!F(a))return a;var d=g.indexOf(a);if(-1!==d)return k[d];if($a(a)||bb(a))throw Ia("cpws");var d=!1,e=f(a);void 0===e&&(e=I(a)?[]:Object.create(Oc(a)),d=!0);g.push(a);k.push(e);return d?c(a,e,b):e}function f(a){switch(ma.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(e(a.buffer), | ||||
| a.byteOffset,a.length);case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(z(a.cloneNode))return a.cloneNode(!0)} | ||||
| var g=[],k=[];d=Wb(d)?d:NaN;if(b){if(re(b)||"[object ArrayBuffer]"===ma.call(b))throw Ia("cpta");if(a===b)throw Ia("cpi");I(b)?b.length=0:r(b,function(a,c){"$$hashKey"!==c&&delete b[c]});g.push(a);k.push(b);return c(a,b,d)}return e(a,d)}function cc(a,b){return a===b||a!==a&&b!==b}function ua(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d===typeof b&&"object"===d)if(I(a)){if(!I(b))return!1;if((d=a.length)===b.length){for(c=0;c<d;c++)if(!ua(a[c], | ||||
| b[c]))return!1;return!0}}else{if(ha(a))return ha(b)?cc(a.getTime(),b.getTime()):!1;if(ab(a))return ab(b)?a.toString()===b.toString():!1;if(bb(a)||bb(b)||$a(a)||$a(b)||I(b)||ha(b)||ab(b))return!1;d=S();for(c in a)if("$"!==c.charAt(0)&&!z(a[c])){if(!ua(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&v(b[c])&&!z(b[c]))return!1;return!0}return!1}function db(a,b,d){return a.concat(Ga.call(b,d))}function Va(a,b){var d=2<arguments.length?Ga.call(arguments,2):[];return!z(b)||b instanceof | ||||
| RegExp?b:d.length?function(){return arguments.length?b.apply(a,db(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function Pc(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:$a(b)?d="$WINDOW":b&&B.document===b?d="$DOCUMENT":bb(b)&&(d="$SCOPE");return d}function eb(a,b){if(!x(a))return ba(b)||(b=b?2:null),JSON.stringify(a,Pc,b)}function Qc(a){return C(a)?JSON.parse(a):a}function dc(a,b){a=a.replace(ue,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+ | ||||
| a)/6E4;return V(d)?b:d}function Rc(a,b){a=new Date(a.getTime());a.setMinutes(a.getMinutes()+b);return a}function ec(a,b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=dc(b,c);return Rc(a,d*(b-c))}function ya(a){a=y(a).clone().empty();var b=y("<div></div>").append(a).html();try{return a[0].nodeType===Oa?O(b):b.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+O(b)})}catch(d){return O(b)}}function Sc(a){try{return decodeURIComponent(a)}catch(b){}}function fc(a){var b={};r((a||"").split("&"), | ||||
| function(a){var c,e,f;a&&(e=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(e=a.substring(0,c),f=a.substring(c+1)),e=Sc(e),v(e)&&(f=v(f)?Sc(f):!0,sa.call(b,e)?I(b[e])?b[e].push(f):b[e]=[b[e],f]:b[e]=f))});return b}function ve(a){var b=[];r(a,function(a,c){I(a)?r(a,function(a){b.push(ca(c,!0)+(!0===a?"":"="+ca(a,!0)))}):b.push(ca(c,!0)+(!0===a?"":"="+ca(a,!0)))});return b.length?b.join("&"):""}function gc(a){return ca(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function ca(a, | ||||
| b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function we(a,b){var d,c,e=Pa.length;for(c=0;c<e;++c)if(d=Pa[c]+b,C(d=a.getAttribute(d)))return d;return null}function xe(a,b){var d,c,e={};r(Pa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});r(Pa,function(b){b+="app";var e;!d&&(e=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=e,c=e.getAttribute(b))}); | ||||
| if(d)if(ye)e.strictDi=null!==we(d,"strict-di"),b(d,c?[c]:[],e);else try{B.console.error("AngularJS: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match.")}catch(f){}}function Tc(a,b,d){F(d)||(d={});d=R({strictDi:!1},d);var c=function(){a=y(a);if(a.injector()){var c=a[0]===B.document?"document":ya(a);throw Ia("btstrpd",c.replace(/</,"<").replace(/>/,">"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&& | ||||
| b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);b.unshift("ng");c=fb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;B&&e.test(B.name)&&(d.debugInfoEnabled=!0,B.name=B.name.replace(e,""));if(B&&!f.test(B.name))return c();B.name=B.name.replace(f,"");ea.resumeBootstrap=function(a){r(a,function(a){b.push(a)});return c()};z(ea.resumeDeferredBootstrap)&& | ||||
| ea.resumeDeferredBootstrap()}function ze(){B.name="NG_ENABLE_DEBUG_INFO!"+B.name;B.location.reload()}function Ae(a){a=ea.element(a).injector();if(!a)throw Ia("test");return a.get("$$testability")}function Uc(a,b){b=b||"_";return a.replace(Be,function(a,c){return(c?b:"")+a.toLowerCase()})}function Ce(){var a;if(!Vc){var b=qb();(rb=x(b)?B.jQuery:b?B[b]:void 0)&&rb.fn.on?(y=rb,R(rb.fn,{scope:Wa.scope,isolateScope:Wa.isolateScope,controller:Wa.controller,injector:Wa.injector,inheritedData:Wa.inheritedData})): | ||||
| y=W;a=y.cleanData;y.cleanData=function(b){for(var c,e=0,f;null!=(f=b[e]);e++)(c=(y._data(f)||{}).events)&&c.$destroy&&y(f).triggerHandler("$destroy");a(b)};ea.element=y;Vc=!0}}function gb(a,b,d){if(!a)throw Ia("areq",b||"?",d||"required");return a}function sb(a,b,d){d&&I(a)&&(a=a[a.length-1]);gb(z(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Qa(a,b){if("hasOwnProperty"===a)throw Ia("badname",b);}function De(a,b,d){if(!b)return a;b=b.split("."); | ||||
| for(var c,e=a,f=b.length,g=0;g<f;g++)c=b[g],a&&(a=(e=a)[c]);return!d&&z(a)?Va(e,a):a}function tb(a){for(var b=a[0],d=a[a.length-1],c,e=1;b!==d&&(b=b.nextSibling);e++)if(c||a[e]!==b)c||(c=y(Ga.call(a,0,e))),c.push(b);return c||a}function S(){return Object.create(null)}function hc(a){if(null==a)return"";switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=!ac(a)||I(a)||ha(a)?eb(a):a.toString()}return a}function Ee(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=M("$injector"), | ||||
| c=M("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||M;return b(a,"module",function(){var a={};return function(f,g,k){var h={};if("hasOwnProperty"===f)throw c("badname","module");g&&a.hasOwnProperty(f)&&(a[f]=null);return b(a,f,function(){function a(b,c,d,f){f||(f=e);return function(){f[d||"push"]([b,c,arguments]);return u}}function b(a,c,d){d||(d=e);return function(b,e){e&&z(e)&&(e.$$moduleName=f);d.push([a,c,arguments]);return u}}if(!g)throw d("nomod",f);var e=[],n=[],s=[],t=a("$injector","invoke", | ||||
| "push",n),u={_invokeQueue:e,_configBlocks:n,_runBlocks:s,info:function(a){if(v(a)){if(!F(a))throw c("aobj","value");h=a;return this}return h},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",n),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider", | ||||
| "directive"),component:b("$compileProvider","component"),config:t,run:function(a){s.push(a);return this}};k&&t(k);return u})}})}function oa(a,b){if(I(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(F(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];return b||a}function Fe(a,b){var d=[];Wb(b)&&(a=ea.copy(a,null,b));return JSON.stringify(a,function(a,b){b=Pc(a,b);if(F(b)){if(0<=d.indexOf(b))return"...";d.push(b)}return b})}function Ge(a){R(a,{errorHandlingConfig:oe, | ||||
| bootstrap:Tc,copy:Ha,extend:R,merge:qe,equals:ua,element:y,forEach:r,injector:fb,noop:A,bind:Va,toJson:eb,fromJson:Qc,identity:Ta,isUndefined:x,isDefined:v,isString:C,isFunction:z,isObject:F,isNumber:ba,isElement:Zb,isArray:I,version:He,isDate:ha,callbacks:{$$counter:0},getTestability:Ae,reloadWithDebugInfo:ze,$$minErr:M,$$csp:pa,$$encodeUriSegment:gc,$$encodeUriQuery:ca,$$lowercase:O,$$stringify:hc,$$uppercase:ub});jc=Ee(B);jc("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Ie}); | ||||
| a.provider("$compile",Wc).directive({a:Je,input:Xc,textarea:Xc,form:Ke,script:Le,select: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:$e,ngNonBindable:af,ngPluralize:bf,ngRef:cf,ngRepeat:df,ngShow:ef,ngStyle:ff,ngSwitch:gf,ngSwitchWhen:hf,ngSwitchDefault:jf,ngOptions:kf,ngTransclude:lf,ngModel:mf,ngList:nf,ngChange:of,pattern:Yc,ngPattern:Yc,required:Zc,ngRequired:Zc,minlength:$c, | ||||
| ngMinlength:$c,maxlength:ad,ngMaxlength:ad,ngValue:pf,ngModelOptions:qf}).directive({ngInclude:rf}).directive(vb).directive(bd);a.provider({$anchorScroll:sf,$animate:tf,$animateCss:uf,$$animateJs:vf,$$animateQueue:wf,$$AnimateRunner:xf,$$animateAsyncRun:yf,$browser:zf,$cacheFactory:Af,$controller:Bf,$document:Cf,$$isDocumentHidden:Df,$exceptionHandler:Ef,$filter:cd,$$forceReflow:Ff,$interpolate:Gf,$interval:Hf,$$intervalFactory:If,$http:Jf,$httpParamSerializer:Kf,$httpParamSerializerJQLike:Lf,$httpBackend:Mf, | ||||
| $xhrFactory:Nf,$jsonpCallbacks:Of,$location:Pf,$log:Qf,$parse:Rf,$rootScope:Sf,$q:Tf,$$q:Uf,$sce:Vf,$sceDelegate:Wf,$sniffer:Xf,$$taskTrackerFactory:Yf,$templateCache:Zf,$templateRequest:$f,$$testability:ag,$timeout:bg,$window:cg,$$rAF:dg,$$jqLite:eg,$$Map:fg,$$cookieReader:gg})}]).info({angularVersion:"1.7.5"})}function wb(a,b){return b.toUpperCase()}function xb(a){return a.replace(hg,wb)}function kc(a){a=a.nodeType;return 1===a||!a||9===a}function dd(a,b){var d,c,e=b.createDocumentFragment(),f= | ||||
| [];if(lc.test(a)){d=e.appendChild(b.createElement("div"));c=(ig.exec(a)||["",""])[1].toLowerCase();c=ja[c]||ja._default;d.innerHTML=c[1]+a.replace(jg,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;f=db(f,d.childNodes);d=e.firstChild;d.textContent=""}else f.push(b.createTextNode(a));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});return e}function W(a){if(a instanceof W)return a;var b;C(a)&&(a=T(a),b=!0);if(!(this instanceof W)){if(b&&"<"!==a.charAt(0))throw mc("nosel");return new W(a)}if(b){b= | ||||
| B.document;var d;a=(d=kg.exec(a))?[b.createElement(d[1])]:(d=dd(a,b))?d.childNodes:[];nc(this,a)}else z(a)?ed(a):nc(this,a)}function oc(a){return a.cloneNode(!0)}function yb(a,b){!b&&kc(a)&&y.cleanData([a]);a.querySelectorAll&&y.cleanData(a.querySelectorAll("*"))}function fd(a){for(var b in a)return!1;return!0}function gd(a){var b=a.ng339,d=b&&Ja[b],c=d&&d.events,d=d&&d.data;d&&!fd(d)||c&&!fd(c)||(delete Ja[b],a.ng339=void 0)}function hd(a,b,d,c){if(v(c))throw mc("offargs");var e=(c=zb(a))&&c.events, | ||||
| f=c&&c.handle;if(f){if(b){var g=function(b){var c=e[b];v(d)&&cb(c||[],d);v(d)&&c&&0<c.length||(a.removeEventListener(b,f),delete e[b])};r(b.split(" "),function(a){g(a);Ab[a]&&g(Ab[a])})}else for(b in e)"$destroy"!==b&&a.removeEventListener(b,f),delete e[b];gd(a)}}function pc(a,b){var d=a.ng339;if(d=d&&Ja[d])b?delete d.data[b]:d.data={},gd(a)}function zb(a,b){var d=a.ng339,d=d&&Ja[d];b&&!d&&(a.ng339=d=++lg,d=Ja[d]={events:{},data:{},handle:void 0});return d}function qc(a,b,d){if(kc(a)){var c,e=v(d), | ||||
| f=!e&&b&&!F(b),g=!b;a=(a=zb(a,!f))&&a.data;if(e)a[xb(b)]=d;else{if(g)return a;if(f)return a&&a[xb(b)];for(c in b)a[xb(c)]=b[c]}}}function Bb(a,b){return a.getAttribute?-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Cb(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=T(a);c=c.replace(" "+a+" "," ")});c!==d&&a.setAttribute("class",T(c))}}function Db(a,b){if(b&&a.setAttribute){var d= | ||||
| (" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," "),c=d;r(b.split(" "),function(a){a=T(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});c!==d&&a.setAttribute("class",T(c))}}function nc(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function id(a,b){return Eb(a,"$"+(b||"ngController")+"Controller")}function Eb(a,b,d){9===a.nodeType&&(a=a.documentElement);for(b=I(b)?b:[b];a;){for(var c= | ||||
| 0,e=b.length;c<e;c++)if(v(d=y.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function jd(a){for(yb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Fb(a,b){b||yb(a);var d=a.parentNode;d&&d.removeChild(a)}function mg(a,b){b=b||B;if("complete"===b.document.readyState)b.setTimeout(a);else y(b).on("load",a)}function ed(a){function b(){B.document.removeEventListener("DOMContentLoaded",b);B.removeEventListener("load",b);a()}"complete"===B.document.readyState?B.setTimeout(a):(B.document.addEventListener("DOMContentLoaded", | ||||
| b),B.addEventListener("load",b))}function kd(a,b){var d=Gb[b.toLowerCase()];return d&&ld[ta(a)]&&d}function ng(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=b[d||c.type],g=f?f.length:0;if(g){if(x(c.immediatePropagationStopped)){var k=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();k&&k.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped}; | ||||
| var h=f.specialHandlerWrapper||og;1<g&&(f=oa(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||h(a,c,f[l])}};d.elem=a;return d}function og(a,b,d){d.call(a,b)}function pg(a,b,d){var c=b.relatedTarget;c&&(c===a||qg.call(a,c))||d.call(a,b)}function eg(){this.$get=function(){return R(W,{hasClass:function(a,b){a.attr&&(a=a[0]);return Bb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Db(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);return Cb(a,b)}})}}function Ka(a,b){var d=a&&a.$$hashKey; | ||||
| if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"===d||"object"===d&&null!==a?a.$$hashKey=d+":"+(b||pe)():d+":"+a}function md(){this._keys=[];this._values=[];this._lastKey=NaN;this._lastIndex=-1}function nd(a){a=Function.prototype.toString.call(a).replace(rg,"");return a.match(sg)||a.match(tg)}function ug(a){return(a=nd(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function fb(a,b){function d(a){return function(b,c){if(F(b))r(b,Xb(a));else return a(b, | ||||
| c)}}function c(a,b){Qa(a,"service");if(z(b)||I(b))b=n.instantiate(b);if(!b.$get)throw za("pget",a);return q[a+"Provider"]=b}function e(a,b){return function(){var c=u.invoke(b,this);if(x(c))throw za("undef",a);return c}}function f(a,b,d){return c(a,{$get:!1!==d?e(a,b):b})}function g(a){gb(x(a)||I(a),"modulesToLoad","not an array");var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=n.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.set(a,!0);try{C(a)?(c=jc(a), | ||||
| u.modules[a]=c,b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):z(a)?b.push(n.invoke(a)):I(a)?b.push(n.invoke(a)):sb(a,"module")}catch(e){throw I(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1===e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),za("modulerr",a,e.stack||e.message||e);}}});return b}function k(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===h)throw za("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=h,a[b]=c(b,e), | ||||
| a[b]}catch(f){throw a[b]===h&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=fb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!==typeof l)throw za("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);I(a)&&(a=a[a.length-1]);d=a;if(Aa||"function"!==typeof d)d=!1;else{var f=d.$$ngIsClass;Fa(f)||(f=d.$$ngIsClass=/^class\b/.test(Function.prototype.toString.call(d)));d=f}return d? | ||||
| (c.unshift(null),new (Function.prototype.bind.apply(a,c))):a.apply(b,c)},instantiate:function(a,b,c){var d=I(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,a))},get:d,annotate:fb.$$annotate,has:function(b){return q.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var h={},l=[],m=new Hb,q={$provide:{provider:d(c),factory:d(f),service:d(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return f(a, | ||||
| ia(b),!1)}),constant:d(function(a,b){Qa(a,"constant");q[a]=b;s[a]=b}),decorator:function(a,b){var c=n.get(a+"Provider"),d=c.$get;c.$get=function(){var a=u.invoke(d,c);return u.invoke(b,null,{$delegate:a})}}}},n=q.$injector=k(q,function(a,b){ea.isString(b)&&l.push(b);throw za("unpr",l.join(" <- "));}),s={},t=k(s,function(a,b){var c=n.get(a+"Provider",b);return u.invoke(c.$get,c,void 0,a)}),u=t;q.$injectorProvider={$get:ia(t)};u.modules=n.modules=S();var D=g(a),u=t.get("$injector");u.strictDi=b;r(D, | ||||
| function(a){a&&u.invoke(a)});u.loadNewModules=function(a){r(g(a),function(a){a&&u.invoke(a)})};return u}function sf(){var a=!0;this.disableAutoScrolling=function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){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(a){if(a){a.scrollIntoView();var c;c=g.yOffset;z(c)?c=c():Zb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):ba(c)|| | ||||
| (c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=C(a)?a:ba(a)?a.toString():d.hash();var b;a?(b=k.getElementById(a))?f(b):(b=e(k.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var k=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||mg(function(){c.$evalAsync(g)})});return g}]}function hb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;I(a)&&(a=a.join(" "));I(b)&&(b=b.join(" "));return a+" "+b}function vg(a){C(a)&& | ||||
| (a=a.split(" "));var b=S();r(a,function(a){a.length&&(b[a]=!0)});return b}function Ba(a){return F(a)?a:{}}function wg(a,b,d,c,e){function f(){Z=null;k()}function g(){u=E();u=x(u)?null:u;ua(u,H)&&(u=H);D=H=u}function k(){var a=D;g();if(w!==h.url()||a!==u)w=h.url(),D=u,r(G,function(a){a(h.url(),u)})}var h=this,l=a.location,m=a.history,q=a.setTimeout,n=a.clearTimeout,s={},t=e(d);h.isMock=!1;h.$$completeOutstandingRequest=t.completeTask;h.$$incOutstandingRequestCount=t.incTaskCount;h.notifyWhenNoOutstandingRequests= | ||||
| t.notifyWhenNoPendingTasks;var u,D,w=l.href,ic=b.find("base"),Z=null,E=c.history?function(){try{return m.state}catch(a){}}:A;g();h.url=function(b,d,e){x(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=D===e;if(w===b&&(!c.history||f))return h;var k=w&&qa(w)===qa(b);w=b;D=e;!c.history||k&&f?(k||(Z=b),d?l.replace(b):k?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(Z=b)):(m[d?"replaceState":"pushState"](e,"",b),g());Z&&(Z=b);return h}return(Z|| | ||||
| l.href).replace(/#$/,"")};h.state=function(){return u};var G=[],J=!1,H=null;h.onUrlChange=function(b){if(!J){if(c.history)y(a).on("popstate",f);y(a).on("hashchange",f);J=!0}G.push(b);return b};h.$$applicationDestroyed=function(){y(a).off("hashchange popstate",f)};h.$$checkUrlChange=k;h.baseHref=function(){var a=ic.attr("href");return a?a.replace(/^(https?:)?\/\/[^/]*/,""):""};h.defer=function(a,b,c){var d;b=b||0;c=c||t.DEFAULT_TASK_TYPE;t.incTaskCount(c);d=q(function(){delete s[d];t.completeTask(a, | ||||
| c)},b);s[d]=c;return d};h.defer.cancel=function(a){if(s.hasOwnProperty(a)){var b=s[a];delete s[a];n(a);t.completeTask(A,b);return!0}return!1}}function zf(){this.$get=["$window","$log","$sniffer","$document","$$taskTrackerFactory",function(a,b,d,c,e){return new wg(a,c,b,d,e)}]}function Af(){this.$get=function(){function a(a,c){function e(a){a!==q&&(n?n===a&&(n=a.n):n=a,f(a.n,a.p),f(a,q),q=a,q.n=null)}function f(a,b){a!==b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw M("$cacheFactory")("iid",a);var g=0, | ||||
| k=R({},c,{id:a}),h=S(),l=c&&c.capacity||Number.MAX_VALUE,m=S(),q=null,n=null;return b[a]={put:function(a,b){if(!x(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}a in h||g++;h[a]=b;g>l&&this.remove(n.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return h[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b===q&&(q=b.p);b===n&&(n=b.n);f(b.n,b.p);delete m[a]}a in h&&(delete h[a],g--)},removeAll:function(){h=S();g=0;m=S();q=n=null}, | ||||
| destroy:function(){m=k=h=null;delete b[a]},info:function(){return R({},k,{size:g})}}}var b={};a.info=function(){var a={};r(b,function(b,e){a[e]=b.info()});return a};a.get=function(a){return b[a]};return a}}function Zf(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Wc(a,b){function d(a,b,c){var d=/^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/,e=S();r(a,function(a,f){a=a.trim();if(a in q)e[f]=q[a];else{var g=a.match(d);if(!g)throw aa("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};g[4]&&(q[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||b!==O(b))throw aa("baddir",a);if(a!==a.trim())throw aa("baddir",a);}function e(a){var b=a.require||a.controller&&a.name;!I(b)&&F(b)&&r(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var f={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,k=/(([\w-]+)(?::([^;]+))?;?)/,h=te("ngSrc,ngSrcset,src,srcset"), | ||||
| l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,q=S();this.directive=function Z(b,d){gb(b,"name");Qa(b,"directive");C(b)?(c(b),gb(d,"directiveFactory"),f.hasOwnProperty(b)||(f[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];r(f[b],function(f,g){try{var h=a.invoke(f);z(h)?h={compile:ia(h)}:!h.compile&&h.link&&(h.compile=ia(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=e(h);var k=h,l=h.restrict;if(l&&(!C(l)||!/[EACM]/.test(l)))throw aa("badrestrict", | ||||
| l,b);k.restrict=l||"EA";h.$$moduleName=f.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),f[b].push(d)):r(b,Xb(Z));return this};this.component=function E(a,b){function c(a){function e(b){return z(b)||I(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:xg(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E", | ||||
| require:b.require};r(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}if(!C(a))return r(a,Xb(Va(this,E))),this;var d=b.controller||function(){};r(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,z(d)&&(d[b]=a))});c.$inject=["$injector"];return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return v(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return v(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()}; | ||||
| var n=!0;this.debugInfoEnabled=function(a){return v(a)?(n=a,this):n};var s=!1;this.strictComponentBindingsEnabled=function(a){return v(a)?(s=a,this):s};var t=10;this.onChangesTtl=function(a){return arguments.length?(t=a,this):t};var u=!0;this.commentDirectivesEnabled=function(a){return arguments.length?(u=a,this):u};var D=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(D=a,this):D};var w=S();this.addPropertySecurityContext=function(a,b,c){var d=a.toLowerCase()+"|"+b.toLowerCase(); | ||||
| if(d in w&&w[d]!==c)throw aa("ctxoverride",a,b,w[d],c);w[d]=c;return this};(function(){function a(b,c){r(c,function(a){w[a.toLowerCase()]=b})}a(U.HTML,["iframe|srcdoc","*|innerHTML","*|outerHTML"]);a(U.CSS,["*|style"]);a(U.URL,"area|href area|ping a|href a|ping blockquote|cite body|background del|cite input|src ins|cite q|cite".split(" "));a(U.MEDIA_URL,"audio|src img|src img|srcset source|src source|srcset track|src video|src video|poster".split(" "));a(U.RESOURCE_URL,"*|formAction applet|code applet|codebase base|href embed|src frame|src form|action head|profile html|manifest iframe|src link|href media|src object|codebase object|data script|src".split(" "))})(); | ||||
| this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate",function(a,b,c,e,q,K,L,P,Q){function p(){try{if(!--Ja)throw Ua=void 0,aa("infchng",t);L.$apply(function(){for(var a=0,b=Ua.length;a<b;++a)try{Ua[a]()}catch(d){c(d)}Ua=void 0})}finally{Ja++}}function na(a,b){if(!a)return a;if(!C(a))throw aa("srcset",b,a.toString());for(var c="",d=T(a),e=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,e=/\s/.test(d)?e:/(,)/,d=d.split(e),e=Math.floor(d.length/ | ||||
| 2),f=0;f<e;f++)var g=2*f,c=c+P.getTrustedMediaUrl(T(d[g])),c=c+(" "+T(d[g+1]));d=T(d[2*f]).split(/\s/);c+=P.getTrustedMediaUrl(T(d[0]));2===d.length&&(c+=" "+T(d[1]));return c}function v(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}function N(a,b,c){Ea.innerHTML="<span "+b+">";b=Ea.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function ra(a,b){try{a.addClass(b)}catch(c){}} | ||||
| function fa(a,b,c,d,e){a instanceof y||(a=y(a));var f=Xa(a,b,a,c,d,e);fa.$$addScopeClass(a);var g=null;return function(b,c,d){if(!a)throw aa("multilink");gb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var h=d.parentBoundTranscludeFn,k=d.transcludeControllers;d=d.futureParentElement;h&&h.$$boundTransclude&&(h=h.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ta(d)&&ma.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==g?y(ja(g,y("<div></div>").append(a).html())):c?Wa.clone.call(a): | ||||
| a;if(k)for(var l in k)d.data("$"+l+"Controller",k[l].instance);fa.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,h);c||(a=f=null);return d}}function Xa(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,q,n,G;if(J)for(G=Array(c.length),m=0;m<h.length;m+=3)f=h[m],G[f]=c[f];else G=c;m=0;for(q=h.length;m<q;)k=G[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),fa.$$addScopeInfo(y(k),l)):l=a,n=c.transcludeOnThisElement?ka(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?ka(a,b):null,c(f,l,k,d,n)):f&&f(a,k.childNodes, | ||||
| void 0,e)}for(var h=[],k=I(a)||a instanceof y,l,m,q,n,J,G=0;G<a.length;G++){l=new v;11===Aa&&ib(a,G,k);m=rc(a[G],[],l,0===G?d:void 0,e);(f=m.length?ba(m,a[G],l,b,c,null,[],[],f):null)&&f.scope&&fa.$$addScopeClass(l.$$element);l=f&&f.terminal||!(q=a[G].childNodes)||!q.length?null:Xa(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(G,f,l),n=!0,J=J||f;f=null}return n?g:null}function ib(a,b,c){var d=a[b],e=d.parentNode,f;if(d.nodeType===Oa)for(;;){f=e?d.nextSibling: | ||||
| a[b+1];if(!f||f.nodeType!==Oa)break;d.nodeValue+=f.nodeValue;f.parentNode&&f.parentNode.removeChild(f);c&&f===a[b+1]&&a.splice(b+1,1)}}function ka(a,b,c){function d(e,f,g,h,k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var e=d.$$slots=S(),f;for(f in b.$$slots)e[f]=b.$$slots[f]?ka(a,b.$$slots[f],c):null;return d}function rc(a,b,d,e,f){var g=d.$attr,h;switch(a.nodeType){case 1:h=ta(a);V(b,va(h),"E",e,f);for(var l,m, | ||||
| n,G,u,s=a.attributes,w=0,E=s&&s.length;w<E;w++){var D=!1,r=!1,P=!1,H=!1,t=!1,K;l=s[w];m=l.name;G=l.value;n=va(m.toLowerCase());(u=n.match(Ra))?(P="Attr"===u[1],H="Prop"===u[1],t="On"===u[1],m=m.replace(od,"").toLowerCase().substr(4+u[1].length).replace(/_(.)/g,function(a,b){return b.toUpperCase()})):(K=n.match(Sa))&&ea(K[1])&&(D=m,r=m.substr(0,m.length-5)+"end",m=m.substr(0,m.length-6));if(H||t)d[n]=G,g[n]=l.name,H?Ha(a,b,n,m):b.push(pd(q,L,c,n,m,!1));else{n=va(m.toLowerCase());g[n]=m;if(P||!d.hasOwnProperty(n))d[n]= | ||||
| G,kd(a,n)&&(d[n]=!0);Ia(a,b,G,n,P);V(b,n,"A",e,f,D,r)}}"input"===h&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!Qa)break;g=a.className;F(g)&&(g=g.animVal);if(C(g)&&""!==g)for(;a=k.exec(g);)n=va(a[2]),V(b,n,"C",e,f)&&(d[n]=T(a[3])),g=g.substr(a.index+a[0].length);break;case Oa:oa(b,a.nodeValue);break;case 8:if(!Pa)break;M(a,b,d,e,f)}b.sort(la);return b}function M(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=va(f[1]);V(b,h,"M",d,e)&&(c[h]=T(f[2]))}}catch(k){}} | ||||
| function U(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw aa("uterdir",b,c);1===a.nodeType&&(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 W(a,b,c){return function(d,e,f,g,h){e=U(e[0],b,c);return a(d,e,f,g,h)}}function Y(a,b,c,d,e,f){var g;return a?fa(b,c,d,e,f):function(){g||(g=fa(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function ba(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&& | ||||
| (a=W(a,c,d));a.require=t.require;a.directiveName=K;if(s===t||t.$$isolateScope)a=za(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=W(b,c,d));b.require=t.require;b.directiveName=K;if(s===t||t.$$isolateScope)b=za(b,{isolateScope:!0});k.push(b)}}function q(a,e,f,g,l){function m(a,b,c,d){var e;bb(a)||(d=c,c=b,b=a,a=void 0);P&&(e=D);c||(c=P?K.parent():K);if(d){var f=l.$$slots[d];if(f)return f(a,b,e,c,Q);if(x(f))throw aa("noslot",d,ya(K));}else return l(a,b,e,c,Q)}var n,t,L,H,E,D,X,K;b===f?(g=d,K=d.$$element): | ||||
| (K=y(f),g=new v(K,d));E=e;s?H=e.$new(!0):G&&(E=e.$parent);l&&(X=m,X.$$boundTransclude=l,X.isSlotFilled=function(a){return!!l.$$slots[a]});u&&(D=ga(K,g,X,u,H,e,s));s&&(fa.$$addScopeInfo(K,H,!0,!(w&&(w===s||w===s.$$originalDirective))),fa.$$addScopeClass(K,!0),H.$$isolateBindings=s.$$isolateBindings,t=Ca(e,g,H,H.$$isolateBindings,s),t.removeWatches&&H.$on("$destroy",t.removeWatches));for(n in D){t=u[n];L=D[n];var yg=t.$$bindings.bindToController;L.instance=L();K.data("$"+t.name+"Controller",L.instance); | ||||
| L.bindingInfo=Ca(E,g,L.instance,yg,t)}r(u,function(a,b){var c=a.require;a.bindToController&&!I(c)&&F(c)&&R(D[b].instance,$(b,c,K,D))});r(D,function(a){var b=a.instance;if(z(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(z(b.$onInit))try{b.$onInit()}catch(e){c(e)}z(b.$doCheck)&&(E.$watch(function(){b.$doCheck()}),b.$doCheck());z(b.$onDestroy)&&E.$on("$destroy",function(){b.$onDestroy()})});n=0;for(t=h.length;n<t;n++)L=h[n],Ba(L,L.isolateScope?H:e,K,g,L.require&&$(L.directiveName, | ||||
| L.require,K,D),X);var Q=e;s&&(s.template||null===s.templateUrl)&&(Q=H);a&&a(Q,f.childNodes,void 0,l);for(n=k.length-1;0<=n;n--)L=k[n],Ba(L,L.isolateScope?H:e,K,g,L.require&&$(L.directiveName,L.require,K,D),X);r(D,function(a){a=a.instance;z(a.$postLink)&&a.$postLink()})}l=l||{};for(var n=-Number.MAX_VALUE,G=l.newScopeDirective,u=l.controllerDirectives,s=l.newIsolateScopeDirective,w=l.templateDirective,L=l.nonTlbTranscludeDirective,E=!1,D=!1,P=l.hasElementTranscludeDirective,H=d.$$element=y(b),t,K, | ||||
| X,Q=e,p,na=!1,Ib=!1,N,ra=0,C=a.length;ra<C;ra++){t=a[ra];var A=t.$$start,ib=t.$$end;A&&(H=U(b,A,ib));X=void 0;if(n>t.priority)break;if(N=t.scope)t.templateUrl||(F(N)?(ca("new/isolated scope",s||G,t,H),s=t):ca("new/isolated scope",s,t,H)),G=G||t;K=t.name;if(!na&&(t.replace&&(t.templateUrl||t.template)||t.transclude&&!t.$$tlb)){for(N=ra+1;na=a[N++];)if(na.transclude&&!na.$$tlb||na.replace&&(na.templateUrl||na.template)){Ib=!0;break}na=!0}!t.templateUrl&&t.controller&&(u=u||S(),ca("'"+K+"' controller", | ||||
| u[K],t,H),u[K]=t);if(N=t.transclude)if(E=!0,t.$$tlb||(ca("transclusion",L,t,H),L=t),"element"===N)P=!0,n=t.priority,X=H,H=d.$$element=y(fa.$$createComment(K,d[K])),b=H[0],pa(f,Ga.call(X,0),b),Q=Y(Ib,X,e,n,g&&g.name,{nonTlbTranscludeDirective:L});else{var ka=S();if(F(N)){X=B.document.createDocumentFragment();var Xa=S(),M=S();r(N,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Xa[a]=b;ka[b]=null;M[b]=c});r(H.contents(),function(a){var b=Xa[va(ta(a))];b?(M[b]=!0,ka[b]=ka[b]||B.document.createDocumentFragment(), | ||||
| ka[b].appendChild(a)):X.appendChild(a)});r(M,function(a,b){if(!a)throw aa("reqslot",b);});for(var O in ka)ka[O]&&(Q=y(ka[O].childNodes),ka[O]=Y(Ib,Q,e));X=y(X.childNodes)}else X=y(oc(b)).contents();H.empty();Q=Y(Ib,X,e,void 0,void 0,{needsNewScope:t.$$isolateScope||t.$$newScope});Q.$$slots=ka}if(t.template)if(D=!0,ca("template",w,t,H),w=t,N=z(t.template)?t.template(H,d):t.template,N=Na(N),t.replace){g=t;X=lc.test(N)?qd(ja(t.templateNamespace,T(N))):[];b=X[0];if(1!==X.length||1!==b.nodeType)throw aa("tplrt", | ||||
| K,"");pa(f,H,b);C={$attr:{}};N=rc(b,[],C);var zg=a.splice(ra+1,a.length-(ra+1));(s||G)&&da(N,s,G);a=a.concat(N).concat(zg);ha(d,C);C=a.length}else H.html(N);if(t.templateUrl)D=!0,ca("template",w,t,H),w=t,t.replace&&(g=t),q=ia(a.splice(ra,a.length-ra),H,d,f,E&&Q,h,k,{controllerDirectives:u,newScopeDirective:G!==t&&G,newIsolateScopeDirective:s,templateDirective:w,nonTlbTranscludeDirective:L}),C=a.length;else if(t.compile)try{p=t.compile(H,d,Q);var V=t.$$originalDirective||t;z(p)?m(null,Va(V,p),A,ib): | ||||
| p&&m(Va(V,p.pre),Va(V,p.post),A,ib)}catch(ea){c(ea,ya(H))}t.terminal&&(q.terminal=!0,n=Math.max(n,t.priority))}q.scope=G&&!0===G.scope;q.transcludeOnThisElement=E;q.templateOnThisElement=D;q.transclude=Q;l.hasElementTranscludeDirective=P;return q}function $(a,b,c,d){var e;if(C(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;if(!e){var h="$"+b+"Controller";e="^^"===g&&c[0]&&9===c[0].nodeType?null:g?c.inheritedData(h):c.data(h)}if(!e&& | ||||
| !f)throw aa("ctreq",b,a);}else if(I(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=$(a,b[g],c,d);else F(b)&&(e={},r(b,function(b,f){e[f]=$(a,b,c,d)}));return e||null}function ga(a,b,c,d,e,f,g){var h=S(),k;for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},n=l.controller;"@"===n&&(n=b[l.name]);m=K(n,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function da(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=$b(a[d],{$$isolateScope:b, | ||||
| $$newScope:c})}function V(b,c,e,g,h,k,l){if(c===h)return null;var m=null;if(f.hasOwnProperty(c)){h=a.get(c+"Directive");for(var n=0,q=h.length;n<q;n++)if(c=h[n],(x(g)||g>c.priority)&&-1!==c.restrict.indexOf(e)){k&&(c=$b(c,{$$start:k,$$end:l}));if(!c.$$bindings){var J=m=c,G=c.name,u={isolateScope:null,bindToController:null};F(J.scope)&&(!0===J.bindToController?(u.bindToController=d(J.scope,G,!0),u.isolateScope={}):u.isolateScope=d(J.scope,G,!1));F(J.bindToController)&&(u.bindToController=d(J.bindToController, | ||||
| G,!0));if(u.bindToController&&!J.controller)throw aa("noctrl",G);m=m.$$bindings=u;F(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function ea(b){if(f.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,e=c.length;d<e;d++)if(b=c[d],b.multiElement)return!0;return!1}function ha(a,b){var c=b.$attr,d=a.$attr;r(a,function(d,e){"$"!==e.charAt(0)&&(b[e]&&b[e]!==d&&(d=d.length?d+(("style"===e?";":" ")+b[e]):b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,e){a.hasOwnProperty(e)|| | ||||
| "$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ia(a,b,d,f,g,h,k,l){var m=[],n,q,G=b[0],u=a.shift(),t=$b(u,{templateUrl:null,transclude:null,replace:null,$$originalDirective:u}),s=z(u.templateUrl)?u.templateUrl(b,d):u.templateUrl,L=u.templateNamespace;b.empty();e(s).then(function(c){var e,J;c=Na(c);if(u.replace){c=lc.test(c)?qd(ja(L,T(c))):[];e=c[0];if(1!==c.length||1!==e.nodeType)throw aa("tplrt",u.name,s);c={$attr:{}};pa(f,b,e);var w=rc(e,[],c);F(u.scope)&&da(w,!0); | ||||
| a=w.concat(a);ha(d,c)}else e=G,b.html(c);a.unshift(t);n=ba(a,e,d,g,b,u,h,k,l);r(f,function(a,c){a===e&&(f[c]=b[0])});for(q=Xa(b[0].childNodes,g);m.length;){c=m.shift();J=m.shift();var H=m.shift(),D=m.shift(),w=b[0];if(!c.$$destroyed){if(J!==G){var E=J.className;l.hasElementTranscludeDirective&&u.replace||(w=oc(e));pa(H,y(J),w);ra(y(w),E)}J=n.transcludeOnThisElement?ka(c,n.transclude,D):D;n(q,c,w,f,J)}}m=null}).catch(function(a){bc(a)&&c(a)});return function(a,b,c,d,e){a=e;b.$$destroyed||(m?m.push(b, | ||||
| c,d,a):(n.transcludeOnThisElement&&(a=ka(b,n.transclude,e)),n(q,b,c,d,a)))}}function la(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 ca(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw aa("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,ya(d));}function oa(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&fa.$$addBindingClass(a);return function(a,c){var e=c.parent(); | ||||
| b||fa.$$addBindingClass(e);fa.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ja(a,b){a=O(a||"html");switch(a){case "svg":case "math":var c=B.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function wa(a,b){if("srcdoc"===b)return P.HTML;if("src"===b||"ngSrc"===b)return-1===["img","video","audio","source","track"].indexOf(a)?P.RESOURCE_URL:P.MEDIA_URL;if("xlinkHref"===b)return"image"===a?P.MEDIA_URL: | ||||
| "a"===a?P.URL:P.RESOURCE_URL;if("form"===a&&"action"===b||"base"===a&&"href"===b||"link"===a&&"href"===b)return P.RESOURCE_URL;if("a"===a&&("href"===b||"ngHref"===b))return P.URL}function xa(a,b){var c=b.toLowerCase();return w[a+"|"+c]||w["*|"+c]}function Da(a){return na(P.valueOf(a),"ng-prop-srcset")}function Ha(a,b,c,d){if(m.test(d))throw aa("nodomevents");a=ta(a);var e=xa(a,d),f=Ta;"srcset"!==d||"img"!==a&&"source"!==a?e&&(f=P.getTrusted.bind(P,e)):f=Da;b.push({priority:100,compile:function(a, | ||||
| b){var e=q(b[c]),g=q(b[c],function(a){return P.valueOf(a)});return{pre:function(a,b){function c(){var g=e(a);b.prop(d,f(g))}c();a.$watch(g,c)}}}})}function Ia(a,c,d,e,f){var g=ta(a),k=wa(g,e),l=h[e]||f,n=b(d,!f,k,l);if(n){if("multiple"===e&&"select"===g)throw aa("selmulti",ya(a));if(m.test(e))throw aa("nodomevents");c.push({priority:100,compile:function(){return{pre:function(a,c,f){c=f.$$observers||(f.$$observers=S());var g=f[e];g!==d&&(n=g&&b(g,!0,k,l),d=g);n&&(f[e]=n(a),(c[e]||(c[e]=[])).$$inter= | ||||
| !0,(f.$$observers&&f.$$observers[e].$$scope||a).$watch(n,function(a,b){"class"===e&&a!==b?f.$updateClass(a,b):f.$set(e,a)}))}}}})}}function pa(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=B.document.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);y.hasData(d)&&(y.data(c,y.data(d)),y(d).off("$destroy")); | ||||
| y.cleanData(a.querySelectorAll("*"));for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function za(a,b){return R(function(){return a.apply(null,arguments)},a,b)}function Ba(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ya(d))}}function qa(a,b){if(s)throw aa("missingattr",a,b);}function Ca(a,c,d,e,f){function g(b,c,e){z(d.$onChanges)&&!cc(c,e)&&(Ua||(a.$$postDigest(p),Ua=[]),m||(m={},Ua.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Jb(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],l={},m;r(e,function(e, | ||||
| h){var m=e.attrName,n=e.optional,J,u,t,s;switch(e.mode){case "@":n||sa.call(c,m)||(qa(m,f.name),d[h]=c[m]=void 0);n=c.$observe(m,function(a){if(C(a)||Fa(a))g(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;J=c[m];C(J)?d[h]=b(J)(a):Fa(J)&&(d[h]=J);l[h]=new Jb(sc,d[h]);k.push(n);break;case "=":if(!sa.call(c,m)){if(n)break;qa(m,f.name);c[m]=void 0}if(n&&!c[m])break;u=q(c[m]);s=u.literal?ua:cc;t=u.assign||function(){J=d[h]=u(a);throw aa("nonassign",c[m],m,f.name);};J=d[h]=u(a);n=function(b){s(b,d[h])|| | ||||
| (s(b,J)?t(a,b=d[h]):d[h]=b);return J=b};n.$stateful=!0;n=e.collection?a.$watchCollection(c[m],n):a.$watch(q(c[m],n),null,u.literal);k.push(n);break;case "<":if(!sa.call(c,m)){if(n)break;qa(m,f.name);c[m]=void 0}if(n&&!c[m])break;u=q(c[m]);var L=u.literal,w=d[h]=u(a);l[h]=new Jb(sc,d[h]);n=a[e.collection?"$watchCollection":"$watch"](u,function(a,b){if(b===a){if(b===w||L&&ua(b,w))return;b=w}g(h,a,b);d[h]=a});k.push(n);break;case "&":n||sa.call(c,m)||qa(m,f.name);u=c.hasOwnProperty(m)?q(c[m]):A;if(u=== | ||||
| A&&n)break;d[h]=function(b){return u(a,b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var Ma=/^\w/,Ea=B.document.createElement("div"),Pa=u,Qa=D,Ja=t,Ua;v.prototype={$normalize:va,$addClass:function(a){a&&0<a.length&&Q.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&Q.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=rd(a,b);c&&c.length&&Q.addClass(this.$$element,c);(c=rd(b,a))&&c.length&&Q.removeClass(this.$$element, | ||||
| c)},$set:function(a,b,d,e){var f=kd(this.$$element[0],a),g=sd[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Uc(a,"-"));"img"===ta(this.$$element)&&"srcset"===a&&(this[a]=b=na(b,"$set('srcset', value)"));!1!==d&&(null===b||x(b)?this.$$element.removeAttr(e):Ma.test(e)?this.$$element.attr(e,b):N(this.$$element[0],e,b));(a=this.$$observers)&&r(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers|| | ||||
| (c.$$observers=S()),e=d[a]||(d[a]=[]);e.push(b);L.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||x(c[a])||b(c[a])});return function(){cb(e,b)}}};var Ka=b.startSymbol(),La=b.endSymbol(),Na="{{"===Ka&&"}}"===La?Ta:function(a){return a.replace(/\{\{/g,Ka).replace(/}}/g,La)},Ra=/^ng(Attr|Prop|On)([A-Z].*)$/,Sa=/^(.+)Start$/;fa.$$addBindingInfo=n?function(a,b){var c=a.data("$binding")||[];I(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:A;fa.$$addBindingClass=n?function(a){ra(a,"ng-binding")}: | ||||
| A;fa.$$addScopeInfo=n?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:A;fa.$$addScopeClass=n?function(a,b){ra(a,b?"ng-isolate-scope":"ng-scope")}:A;fa.$$createComment=function(a,b){var c="";n&&(c=" "+(a||"")+": ",b&&(c+=b+" "));return B.document.createComment(c)};return fa}]}function Jb(a,b){this.previousValue=a;this.currentValue=b}function va(a){return a.replace(od,"").replace(Ag,function(a,d,c){return c?d.toUpperCase():d})}function rd(a,b){var d="",c=a.split(/\s+/), | ||||
| e=b.split(/\s+/),f=0;a:for(;f<c.length;f++){for(var g=c[f],k=0;k<e.length;k++)if(g===e[k])continue a;d+=(0<d.length?" ":"")+g}return d}function qd(a){a=y(a);var b=a.length;if(1>=b)return a;for(;b--;){var d=a[b];(8===d.nodeType||d.nodeType===Oa&&""===d.nodeValue.trim())&&Bg.call(a,b,1)}return a}function xg(a,b){if(b&&C(b))return b;if(C(a)){var d=td.exec(a);if(d)return d[3]}}function Bf(){var a={};this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,d){Qa(b,"controller");F(b)?R(a, | ||||
| b):a[b]=d};this.$get=["$injector",function(b){function d(a,b,d,g){if(!a||!F(a.$scope))throw M("$controller")("noscp",g,b);a.$scope[b]=d}return function(c,e,f,g){var k,h,l;f=!0===f;g&&C(g)&&(l=g);if(C(c)){g=c.match(td);if(!g)throw ud("ctrlfmt",c);h=g[1];l=l||g[3];c=a.hasOwnProperty(h)?a[h]:De(e.$scope,h,!0);if(!c)throw ud("ctrlreg",h);sb(c,h,!0)}if(f)return f=(I(c)?c[c.length-1]:c).prototype,k=Object.create(f||null),l&&d(e,l,k,h||c.name),R(function(){var a=b.invoke(c,k,e,h);a!==k&&(F(a)||z(a))&&(k= | ||||
| a,l&&d(e,l,k,h||c.name));return k},{instance:k,identifier:l});k=b.instantiate(c,e,h);l&&d(e,l,k,h||c.name);return k}}]}function Cf(){this.$get=["$window",function(a){return y(a.document)}]}function Df(){this.$get=["$document","$rootScope",function(a,b){function d(){e=c.hidden}var c=a[0],e=c&&c.hidden;a.on("visibilitychange",d);b.$on("$destroy",function(){a.off("visibilitychange",d)});return function(){return e}}]}function Ef(){this.$get=["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]} | ||||
| function tc(a){return F(a)?ha(a)?a.toISOString():eb(a):a}function Kf(){this.$get=function(){return function(a){if(!a)return"";var b=[];Nc(a,function(a,c){null===a||x(a)||z(a)||(I(a)?r(a,function(a){b.push(ca(c)+"="+ca(tc(a)))}):b.push(ca(c)+"="+ca(tc(a))))});return b.join("&")}}}function Lf(){this.$get=function(){return function(a){function b(a,e,f){I(a)?r(a,function(a,c){b(a,e+"["+(F(a)?c:"")+"]")}):F(a)&&!ha(a)?Nc(a,function(a,c){b(a,e+(f?"":"[")+c+(f?"":"]"))}):(z(a)&&(a=a()),d.push(ca(e)+"="+ | ||||
| (null==a?"":ca(tc(a)))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function uc(a,b){if(C(a)){var d=a.replace(Cg,"").trim();if(d){var c=b("Content-Type"),c=c&&0===c.indexOf(vd),e;(e=c)||(e=(e=d.match(Dg))&&Eg[e[0]].test(d));if(e)try{a=Qc(d)}catch(f){if(!c)return a;throw Kb("baddata",a,f);}}}return a}function wd(a){var b=S(),d;C(a)?r(a.split("\n"),function(a){d=a.indexOf(":");var e=O(T(a.substr(0,d)));a=T(a.substr(d+1));e&&(b[e]=b[e]?b[e]+", "+a:a)}):F(a)&&r(a,function(a,d){var f=O(d), | ||||
| g=T(a);f&&(b[f]=b[f]?b[f]+", "+g:g)});return b}function xd(a){var b;return function(d){b||(b=wd(a));return d?(d=b[O(d)],void 0===d&&(d=null),d):b}}function yd(a,b,d,c){if(z(c))return c(a,b,d);r(c,function(c){a=c(a,b,d)});return a}function Jf(){var a=this.defaults={transformResponse:[uc],transformRequest:[function(a){return F(a)&&"[object File]"!==ma.call(a)&&"[object Blob]"!==ma.call(a)&&"[object FormData]"!==ma.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:oa(vc), | ||||
| put:oa(vc),patch:oa(vc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer",jsonpCallbackParam:"callback"},b=!1;this.useApplyAsync=function(a){return v(a)?(b=!!a,this):b};var d=this.interceptors=[],c=this.xsrfWhitelistedOrigins=[];this.$get=["$browser","$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector","$sce",function(e,f,g,k,h,l,m,q){function n(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f, | ||||
| g)}b.length=0;return a}function d(a,b){var c,e={};r(a,function(a,d){z(a)?(c=a(b),null!=c&&(e[d]=c)):e[d]=a});return e}function f(a){var b=R({},a);b.data=yd(a.data,a.headers,a.status,g.transformResponse);a=a.status;return 200<=a&&300>a?b:l.reject(b)}if(!F(b))throw M("$http")("badreq",b);if(!C(q.valueOf(b.url)))throw M("$http")("badreq",b.url);var g=R({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer,jsonpCallbackParam:a.jsonpCallbackParam}, | ||||
| b);g.headers=function(b){var c=a.headers,e=R({},b.headers),f,g,h,c=R({},c.common,c[O(b.method)]);a:for(f in c){g=O(f);for(h in e)if(O(h)===g)continue a;e[f]=c[f]}return d(e,oa(b))}(b);g.method=ub(g.method);g.paramSerializer=C(g.paramSerializer)?m.get(g.paramSerializer):g.paramSerializer;e.$$incOutstandingRequestCount("$http");var h=[],k=[];b=l.resolve(g);r(w,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&k.push(a.response,a.responseError)}); | ||||
| b=c(b,h);b=b.then(function(b){var c=b.headers,d=yd(b.data,xd(c),void 0,b.transformRequest);x(d)&&r(c,function(a,b){"content-type"===O(b)&&delete c[b]});x(b.withCredentials)&&!x(a.withCredentials)&&(b.withCredentials=a.withCredentials);return s(b,d).then(f,f)});b=c(b,k);return b=b.finally(function(){e.$$completeOutstandingRequest(A,"$http")})}function s(c,d){function e(a){if(a){var c={};r(a,function(a,d){c[d]=function(c){function d(){a(c)}b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function k(a, | ||||
| c,d,e,f){function g(){m(c,a,d,e,f)}Q&&(200<=a&&300>a?Q.put(N,[a,c,wd(d),e,f]):Q.remove(N));b?h.$applyAsync(g):(g(),h.$$phase||h.$apply())}function m(a,b,d,e,f){b=-1<=b?b:0;(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:xd(d),config:c,statusText:e,xhrStatus:f})}function s(a){m(a.data,a.status,oa(a.headers()),a.statusText,a.xhrStatus)}function w(){var a=n.pendingRequests.indexOf(c);-1!==a&&n.pendingRequests.splice(a,1)}var L=l.defer(),P=L.promise,Q,p,na=c.headers,y="jsonp"===O(c.method), | ||||
| N=c.url;y?N=q.getTrustedResourceUrl(N):C(N)||(N=q.valueOf(N));N=t(N,c.paramSerializer(c.params));y&&(N=u(N,c.jsonpCallbackParam));n.pendingRequests.push(c);P.then(w,w);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(Q=F(c.cache)?c.cache:F(a.cache)?a.cache:D);Q&&(p=Q.get(N),v(p)?p&&z(p.then)?p.then(s,s):I(p)?m(p[1],p[0],oa(p[2]),p[3],p[4]):m(p,200,{},"OK","complete"):Q.put(N,P));x(p)&&((p=ic(c.url)?g()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(na[c.xsrfHeaderName||a.xsrfHeaderName]= | ||||
| p),f(c.method,N,d,k,na,c.timeout,c.withCredentials,c.responseType,e(c.eventHandlers),e(c.uploadEventHandlers)));return P}function t(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}function u(a,b){var c=a.split("?");if(2<c.length)throw Kb("badjsonp",a);c=fc(c[1]);r(c,function(c,d){if("JSON_CALLBACK"===c)throw Kb("badjsonp",a);if(d===b)throw Kb("badjsonp",b,a);});return a+=(-1===a.indexOf("?")?"?":"&")+b+"=JSON_CALLBACK"}var D=k("$http");a.paramSerializer=C(a.paramSerializer)?m.get(a.paramSerializer): | ||||
| a.paramSerializer;var w=[];r(d,function(a){w.unshift(C(a)?m.get(a):m.invoke(a))});var ic=Fg(c);n.pendingRequests=[];(function(a){r(arguments,function(a){n[a]=function(b,c){return n(R({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){n[a]=function(b,c,d){return n(R({},d||{},{method:a,url:b,data:c}))}})})("post","put","patch");n.defaults=a;return n}]}function Nf(){this.$get=function(){return function(){return new B.XMLHttpRequest}}}function Mf(){this.$get= | ||||
| ["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return Gg(a,c,a.defer,b,d[0])}]}function Gg(a,b,d,c,e){function f(a,b,d){a=a.replace("JSON_CALLBACK",b);var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m);f.removeEventListener("error",m);e.body.removeChild(f);f=null;var g=-1,s="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),s=a.type,g="error"===a.type?404:200);d&&d(g,s)};f.addEventListener("load", | ||||
| m);f.addEventListener("error",m);e.body.appendChild(f);return m}return function(e,k,h,l,m,q,n,s,t,u){function D(a){G="timeout"===a;Z&&Z();E&&E.abort()}function w(a,b,c,e,f,g){v(H)&&d.cancel(H);Z=E=null;a(b,c,e,f,g)}k=k||a.url();if("jsonp"===O(e))var p=c.createCallback(k),Z=f(k,p,function(a,b){var d=200===a&&c.getResponse(p);w(l,a,d,"",b,"complete");c.removeCallback(p)});else{var E=b(e,k),G=!1;E.open(e,k,!0);r(m,function(a,b){v(a)&&E.setRequestHeader(b,a)});E.onload=function(){var a=E.statusText|| | ||||
| "",b="response"in E?E.response:E.responseText,c=1223===E.status?204:E.status;0===c&&(c=b?200:"file"===la(k).protocol?404:0);w(l,c,b,E.getAllResponseHeaders(),a,"complete")};E.onerror=function(){w(l,-1,null,null,"","error")};E.ontimeout=function(){w(l,-1,null,null,"","timeout")};E.onabort=function(){w(l,-1,null,null,"",G?"timeout":"abort")};r(t,function(a,b){E.addEventListener(b,a)});r(u,function(a,b){E.upload.addEventListener(b,a)});n&&(E.withCredentials=!0);if(s)try{E.responseType=s}catch(J){if("json"!== | ||||
| s)throw J;}E.send(x(h)?null:h)}if(0<q)var H=d(function(){D("timeout")},q);else q&&z(q.then)&&q.then(function(){D(v(q.$$timeoutId)?"timeout":"abort")})}}function Gf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(q,a).replace(n,b)}function k(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e} | ||||
| function h(f,h,n,q){function w(a){try{return a=n&&!r?e.getTrusted(n,a):e.valueOf(a),q&&!v(a)?a:hc(a)}catch(b){c(Ca.interr(f,b))}}var r=n===e.URL||n===e.MEDIA_URL;if(!f.length||-1===f.indexOf(a)){if(h&&!r)return;h=g(f);r&&(h=e.getTrusted(n,h));h=ia(h);h.exp=f;h.expressions=[];h.$$watchDelegate=k;return h}q=!!q;for(var p,E,G=0,J=[],H,X=f.length,K=[],L=[],P;G<X;)if(-1!==(p=f.indexOf(a,G))&&-1!==(E=f.indexOf(b,p+l)))G!==p&&K.push(g(f.substring(G,p))),G=f.substring(p+l,E),J.push(G),G=E+m,L.push(K.length), | ||||
| K.push("");else{G!==X&&K.push(g(f.substring(G)));break}P=1===K.length&&1===L.length;var Q=r&&P?void 0:w;H=J.map(function(a){return d(a,Q)});if(!h||J.length){var y=function(a){for(var b=0,c=J.length;b<c;b++){if(q&&x(a[b]))return;K[L[b]]=a[b]}if(r)return e.getTrusted(n,P?K[0]:K.join(""));n&&1<K.length&&Ca.throwNoconcat(f);return K.join("")};return R(function(a){var b=0,d=J.length,e=Array(d);try{for(;b<d;b++)e[b]=H[b](a);return y(e)}catch(g){c(Ca.interr(f,g))}},{exp:f,expressions:J,$$watchDelegate:function(a, | ||||
| b){var c;return a.$watchGroup(H,function(d,e){var f=y(d);b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,q=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g,f),"g");h.startSymbol=function(){return a};h.endSymbol=function(){return b};return h}]}function Hf(){this.$get=["$$intervalFactory","$window",function(a,b){var d={},c=function(a){b.clearInterval(a);delete d[a]},e=a(function(a,c,e){a=b.setInterval(a,c);d[a]=e;return a},c);e.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$intervalId"))throw Hg("badprom"); | ||||
| if(!d.hasOwnProperty(a.$$intervalId))return!1;a=a.$$intervalId;var b=d[a];b.promise.$$state.pur=!0;b.reject("canceled");c(a);return!0};return e}]}function If(){this.$get=["$browser","$q","$$q","$rootScope",function(a,b,d,c){return function(e,f){return function(g,k,h,l){function m(){q?g.apply(null,n):g(s)}var q=4<arguments.length,n=q?Ga.call(arguments,4):[],s=0,t=v(l)&&!l,u=(t?d:b).defer(),D=u.promise;h=v(h)?h:0;D.$$intervalId=e(function(){t?a.defer(m):c.$evalAsync(m);u.notify(s++);0<h&&s>=h&&(u.resolve(s), | ||||
| f(D.$$intervalId));t||c.$apply()},k,u,t);return D}}}]}function zd(a,b){var d=la(a);b.$$protocol=d.protocol;b.$$host=d.hostname;b.$$port=da(d.port)||Ig[d.protocol]||null}function Ad(a,b,d){if(Jg.test(a))throw jb("badpath",a);var c="/"!==a.charAt(0);c&&(a="/"+a);a=la(a);for(var c=(c&&"/"===a.pathname.charAt(0)?a.pathname.substring(1):a.pathname).split("/"),e=c.length;e--;)c[e]=decodeURIComponent(c[e]),d&&(c[e]=c[e].replace(/\//g,"%2F"));d=c.join("/");b.$$path=d;b.$$search=fc(a.search);b.$$hash=decodeURIComponent(a.hash); | ||||
| b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function wc(a,b){return a.slice(0,b.length)===b}function wa(a,b){if(wc(b,a))return b.substr(a.length)}function qa(a){var b=a.indexOf("#");return-1===b?a:a.substr(0,b)}function xc(a,b,d){this.$$html5=!0;d=d||"";zd(a,this);this.$$parse=function(a){var d=wa(b,a);if(!C(d))throw jb("ipthprfx",a,b);Ad(d,this,!0);this.$$path||(this.$$path="/");this.$$compose()};this.$$normalizeUrl=function(a){return b+a.substr(1)};this.$$parseLinkUrl=function(c, | ||||
| e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;v(f=wa(a,c))?(g=f,g=d&&v(f=wa(d,f))?b+(wa("/",f)||f):a+g):v(f=wa(b,c))?g=b+f:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function yc(a,b,d){zd(a,this);this.$$parse=function(c){var e=wa(a,c)||wa(b,c),f;x(e)||"#"!==e.charAt(0)?this.$$html5?f=e:(f="",x(e)&&(a=c,this.replace())):(f=wa(d,e),x(f)&&(f=e));Ad(f,this,!1);c=this.$$path;var e=a,g=/^\/[A-Z]:(\/.*)/;wc(f,e)&&(f=f.replace(e,""));g.exec(f)||(c=(f=g.exec(c))?f[1]:c);this.$$path=c;this.$$compose()}; | ||||
| this.$$normalizeUrl=function(b){return a+(b?d+b:"")};this.$$parseLinkUrl=function(b,d){return qa(a)===qa(b)?(this.$$parse(b),!0):!1}}function Bd(a,b,d){this.$$html5=!0;yc.apply(this,arguments);this.$$parseLinkUrl=function(c,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;a===qa(c)?f=c:(g=wa(b,c))?f=a+d+g:b===c+"/"&&(f=b);f&&this.$$parse(f);return!!f};this.$$normalizeUrl=function(b){return a+d+b}}function Lb(a){return function(){return this[a]}}function Cd(a,b){return function(d){if(x(d))return this[a]; | ||||
| this[a]=b(d);this.$$compose();return this}}function Pf(){var a="!",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return v(b)?(a=b,this):a};this.html5Mode=function(a){if(Fa(a))return b.enabled=a,this;if(F(a)){Fa(a.enabled)&&(b.enabled=a.enabled);Fa(a.requireBase)&&(b.requireBase=a.requireBase);if(Fa(a.rewriteLinks)||C(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,e, | ||||
| f,g){function k(a,b){return a===b||la(a).href===la(b).href}function h(a,b,d){var e=m.url(),f=m.$$state;try{c.url(a,b,d),m.$$state=c.state()}catch(g){throw m.url(e),m.$$state=f,g;}}function l(a,b){d.$broadcast("$locationChangeSuccess",m.absUrl(),a,m.$$state,b)}var m,q;q=c.baseHref();var n=c.url(),s;if(b.enabled){if(!q&&b.requireBase)throw jb("nobase");s=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(q||"/");q=e.history?xc:Bd}else s=qa(n),q=yc;var t=s.substr(0,qa(s).lastIndexOf("/")+1);m=new q(s, | ||||
| t,"#"+a);m.$$parseLinkUrl(n,n);m.$$state=c.state();var u=/^\s*(javascript|mailto):/i;f.on("click",function(a){var e=b.rewriteLinks;if(e&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var g=y(a.target);"a"!==ta(g[0]);)if(g[0]===f[0]||!(g=g.parent())[0])return;if(!C(e)||!x(g.attr(e))){var e=g.prop("href"),h=g.attr("href")||g.attr("xlink:href");F(e)&&"[object SVGAnimatedString]"===e.toString()&&(e=la(e.animVal).href);u.test(e)||!e||g.attr("target")||a.isDefaultPrevented()||!m.$$parseLinkUrl(e, | ||||
| h)||(a.preventDefault(),m.absUrl()!==c.url()&&d.$apply())}}});m.absUrl()!==n&&c.url(m.absUrl(),!0);var D=!0;c.onUrlChange(function(a,b){wc(a,t)?(d.$evalAsync(function(){var c=m.absUrl(),e=m.$$state,f;m.$$parse(a);m.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;m.absUrl()===a&&(f?(m.$$parse(c),m.$$state=e,h(c,!1,e)):(D=!1,l(c,e)))}),d.$$phase||d.$digest()):g.location.href=a});d.$watch(function(){if(D||m.$$urlUpdatedByLocation){m.$$urlUpdatedByLocation=!1;var a=c.url(),b= | ||||
| m.absUrl(),f=c.state(),g=m.$$replace,n=!k(a,b)||m.$$html5&&e.history&&f!==m.$$state;if(D||n)D=!1,d.$evalAsync(function(){var b=m.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,m.$$state,f).defaultPrevented;m.absUrl()===b&&(c?(m.$$parse(a),m.$$state=f):(n&&h(b,g,f===m.$$state?null:m.$$state),l(a,f)))})}m.$$replace=!1});return m}]}function Qf(){var a=!0,b=this;this.debugEnabled=function(b){return v(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){bc(a)&&(a.stack&&f?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=d.console||{},e=b[a]||b.log||A;return function(){var a=[];r(arguments,function(b){a.push(c(b))});return Function.prototype.apply.call(e,b,a)}}var f=Aa||/\bEdge\//.test(d.navigator&&d.navigator.userAgent);return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]} | ||||
| function Kg(a){return a+""}function Lg(a,b){return"undefined"!==typeof a?a:b}function Dd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function Mg(a,b){switch(a.type){case p.MemberExpression:if(a.computed)return!1;break;case p.UnaryExpression:return 1;case p.BinaryExpression:return"+"!==a.operator?1:!1;case p.CallExpression:return!1}return void 0===b?Ed:b}function Y(a,b,d){var c,e,f=a.isPure=Mg(a,d);switch(a.type){case p.Program:c=!0;r(a.body,function(a){Y(a.expression,b,f);c=c&& | ||||
| a.expression.constant});a.constant=c;break;case p.Literal:a.constant=!0;a.toWatch=[];break;case p.UnaryExpression:Y(a.argument,b,f);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case p.BinaryExpression:Y(a.left,b,f);Y(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case p.LogicalExpression:Y(a.left,b,f);Y(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case p.ConditionalExpression:Y(a.test, | ||||
| b,f);Y(a.alternate,b,f);Y(a.consequent,b,f);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case p.Identifier:a.constant=!1;a.toWatch=[a];break;case p.MemberExpression:Y(a.object,b,f);a.computed&&Y(a.property,b,f);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=a.constant?[]:[a];break;case p.CallExpression:c=d=a.filter?!b(a.callee.name).$stateful:!1;e=[];r(a.arguments,function(a){Y(a,b,f);c=c&&a.constant;e.push.apply(e, | ||||
| a.toWatch)});a.constant=c;a.toWatch=d?e:[a];break;case p.AssignmentExpression:Y(a.left,b,f);Y(a.right,b,f);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case p.ArrayExpression:c=!0;e=[];r(a.elements,function(a){Y(a,b,f);c=c&&a.constant;e.push.apply(e,a.toWatch)});a.constant=c;a.toWatch=e;break;case p.ObjectExpression:c=!0;e=[];r(a.properties,function(a){Y(a.value,b,f);c=c&&a.value.constant;e.push.apply(e,a.value.toWatch);a.computed&&(Y(a.key,b,!1),c=c&&a.key.constant,e.push.apply(e, | ||||
| a.key.toWatch))});a.constant=c;a.toWatch=e;break;case p.ThisExpression:a.constant=!1;a.toWatch=[];break;case p.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Fd(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Gd(a){return a.type===p.Identifier||a.type===p.MemberExpression}function Hd(a){if(1===a.body.length&&Gd(a.body[0].expression))return{type:p.AssignmentExpression,left:a.body[0].expression,right:{type:p.NGValueParameter},operator:"="}} | ||||
| function Id(a){this.$filter=a}function Jd(a){this.$filter=a}function Mb(a,b,d){this.ast=new p(a,d);this.astCompiler=d.csp?new Jd(b):new Id(b)}function zc(a){return z(a.valueOf)?a.valueOf():Ng.call(a)}function Rf(){var a=S(),b={"true":!0,"false":!1,"null":null,undefined:void 0},d,c;this.addLiteral=function(a,c){b[a]=c};this.setIdentifierFns=function(a,b){d=a;c=b;return this};this.$get=["$filter",function(e){function f(b,c){var d,f;switch(typeof b){case "string":return f=b=b.trim(),d=a[f],d||(d=new Nb(t), | ||||
| d=(new Mb(d,e,t)).parse(b),a[f]=q(d)),s(d,c);case "function":return s(b,c);default:return s(A,c)}}function g(a,b,c){return null==a||null==b?a===b:"object"!==typeof a||(a=zc(a),"object"!==typeof a||c)?a===b||a!==a&&b!==b:!1}function k(a,b,c,d,e){var f=d.inputs,h;if(1===f.length){var k=g,f=f[0];return a.$watch(function(a){var b=f(a);g(b,k,f.isPure)||(h=d(a,void 0,void 0,[b]),k=b&&zc(b));return h},b,c,e)}for(var l=[],m=[],n=0,q=f.length;n<q;n++)l[n]=g,m[n]=null;return a.$watch(function(a){for(var b= | ||||
| !1,c=0,e=f.length;c<e;c++){var k=f[c](a);if(b||(b=!g(k,l[c],f[c].isPure)))m[c]=k,l[c]=k&&zc(k)}b&&(h=d(a,void 0,void 0,m));return h},b,c,e)}function h(a,b,c,d,e){function f(){h(m)&&k()}function g(a,b,c,d){m=s&&d?d[0]:n(a,b,c,d);h(m)&&a.$$postDigest(f);return t(m)}var h=d.literal?l:v,k,m,n=d.$$intercepted||d,t=d.$$interceptor||Ta,s=d.inputs&&!n.inputs;g.literal=d.literal;g.constant=d.constant;g.inputs=d.inputs;q(g);return k=a.$watch(g,b,c,e)}function l(a){var b=!0;r(a,function(a){v(a)||(b=!1)});return b} | ||||
| function m(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function q(a){a.constant?a.$$watchDelegate=m:a.oneTime?a.$$watchDelegate=h:a.inputs&&(a.$$watchDelegate=k);return a}function n(a,b){function c(d){return b(a(d))}c.$stateful=a.$stateful||b.$stateful;c.$$pure=a.$$pure&&b.$$pure;return c}function s(a,b){if(!b)return a;a.$$interceptor&&(b=n(a.$$interceptor,b),a=a.$$intercepted);var c=!1,d=function(d,e,f,g){d=c&&g?g[0]:a(d,e,f,g);return b(d)};d.$$intercepted=a;d.$$interceptor= | ||||
| b;d.literal=a.literal;d.oneTime=a.oneTime;d.constant=a.constant;b.$stateful||(c=!a.inputs,d.inputs=a.inputs?a.inputs:[a],b.$$pure||(d.inputs=d.inputs.map(function(a){return a.isPure===Ed?function(b){return a(b)}:a})));return q(d)}var t={csp:pa().noUnsafeEval,literals:Ha(b),isIdentifierStart:z(d)&&d,isIdentifierContinue:z(c)&&c};f.$$getAst=function(a){var b=new Nb(t);return(new Mb(b,e,t)).getAst(a).ast};return f}]}function Tf(){var a=!0;this.$get=["$rootScope","$exceptionHandler",function(b,d){return Kd(function(a){b.$evalAsync(a)}, | ||||
| d,a)}];this.errorOnUnhandledRejections=function(b){return v(b)?(a=b,this):a}}function Uf(){var a=!0;this.$get=["$browser","$exceptionHandler",function(b,d){return Kd(function(a){b.defer(a)},d,a)}];this.errorOnUnhandledRejections=function(b){return v(b)?(a=b,this):a}}function Kd(a,b,d){function c(){return new e}function e(){var a=this.promise=new f;this.resolve=function(b){h(a,b)};this.reject=function(b){m(a,b)};this.notify=function(b){n(a,b)}}function f(){this.$$state={status:0}}function g(){for(;!v&& | ||||
| Z.length;){var a=Z.shift();if(!a.pur){a.pur=!0;var c=a.value,c="Possibly unhandled rejection: "+("function"===typeof c?c.toString().replace(/ \{[\s\S]*$/,""):x(c)?"undefined":"string"!==typeof c?Fe(c,void 0):c);bc(a.value)?b(a.value,c):b(c)}}}function k(c){!d||c.pending||2!==c.status||c.pur||(0===v&&0===Z.length&&a(g),Z.push(c));!c.processScheduled&&c.pending&&(c.processScheduled=!0,++v,a(function(){var e,f,k;k=c.pending;c.processScheduled=!1;c.pending=void 0;try{for(var l=0,n=k.length;l<n;++l){c.pur= | ||||
| !0;f=k[l][0];e=k[l][c.status];try{z(e)?h(f,e(c.value)):1===c.status?h(f,c.value):m(f,c.value)}catch(q){m(f,q),q&&!0===q.$$passToExceptionHandler&&b(q)}}}finally{--v,d&&0===v&&a(g)}}))}function h(a,b){a.$$state.status||(b===a?q(a,w("qcycle",b)):l(a,b))}function l(a,b){function c(b){g||(g=!0,l(a,b))}function d(b){g||(g=!0,q(a,b))}function e(b){n(a,b)}var f,g=!1;try{if(F(b)||z(b))f=b.then;z(f)?(a.$$state.status=-1,f.call(b,c,d,e)):(a.$$state.value=b,a.$$state.status=1,k(a.$$state))}catch(h){d(h)}}function m(a, | ||||
| b){a.$$state.status||q(a,b)}function q(a,b){a.$$state.value=b;a.$$state.status=2;k(a.$$state)}function n(c,d){var e=c.$$state.pending;0>=c.$$state.status&&e&&e.length&&a(function(){for(var a,c,f=0,g=e.length;f<g;f++){c=e[f][0];a=e[f][3];try{n(c,z(a)?a(d):d)}catch(h){b(h)}}})}function s(a){var b=new f;m(b,a);return b}function t(a,b,c){var d=null;try{z(c)&&(d=c())}catch(e){return s(e)}return d&&z(d.then)?d.then(function(){return b(a)},s):b(a)}function u(a,b,c,d){var e=new f;h(e,a);return e.then(b,c, | ||||
| d)}function p(a){if(!z(a))throw w("norslvr",a);var b=new f;a(function(a){h(b,a)},function(a){m(b,a)});return b}var w=M("$q",TypeError),v=0,Z=[];R(f.prototype,{then:function(a,b,c){if(x(a)&&x(b)&&x(c))return this;var d=new f;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&k(this.$$state);return d},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return t(b,E,a)},function(b){return t(b,s,a)}, | ||||
| b)}});var E=u;p.prototype=f.prototype;p.defer=c;p.reject=s;p.when=u;p.resolve=E;p.all=function(a){var b=new f,c=0,d=I(a)?[]:{};r(a,function(a,e){c++;u(a).then(function(a){d[e]=a;--c||h(b,d)},function(a){m(b,a)})});0===c&&h(b,d);return b};p.race=function(a){var b=c();r(a,function(a){u(a).then(b.resolve,b.reject)});return b.promise};return p}function dg(){this.$get=["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame|| | ||||
| a.webkitCancelRequestAnimationFrame,e=!!d,f=e?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};f.supported=e;return f}]}function Sf(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++pb;this.$$ChildScope=null;this.$$suspended=!1}b.prototype=a;return b}var b=10,d=M("$rootScope"),c=null,e=null;this.digestTtl= | ||||
| function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(f,g,k){function h(a){a.currentScope.$$destroyed=!0}function l(a){9===Aa&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++pb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root= | ||||
| this;this.$$suspended=this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function q(a){if(w.$$phase)throw d("inprog",w.$$phase);w.$$phase=a}function n(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function s(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function t(){}function u(){for(;E.length;)try{E.shift()()}catch(a){f(a)}e=null}function p(){null===e&&(e=k.defer(function(){w.$apply(u)}, | ||||
| null,"$applyAsync"))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(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;(b||c!==this)&&d.$on("$destroy",h);return d},$watch:function(a,b,d,e){var f=g(a);b=z(b)?b:A;if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,f,a);var h=this,k=h.$$watchers,l= | ||||
| {fn:b,last:t,get:f,exp:e||a,eq:!!d};c=null;k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;n(this,1);return function(){var a=cb(k,l);0<=a&&(n(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;try{k?(k=!1,b(e,e,g)):b(e,d,g)}finally{for(var f=0;f<a.length;f++)d[f]=e[f]}}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)});r(a,function(a,b){var d=g.$watch(a,function(a){e[b]=a;h||(h=!0,g.$evalAsync(c))});f.push(d)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!x(e)){if(F(e))if(xa(e))for(f!==n&&(f=n,s=f.length=0,l++),a=e.length,s!==a&&(l++,f.length=s=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!==q&&(f=q={},s=0,l++);a=0;for(b in e)sa.call(e, | ||||
| b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(s++,f[b]=g,l++));if(s>a)for(b in l++,f)sa.call(e,b)||(s--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$$pure=g(a).literal;c.$stateful=!c.$$pure;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],q={},t=!0,s=0;return this.$watch(m,function(){t?(t=!1,b(e,e,d)):b(e,h,d);if(k)if(F(e))if(xa(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)sa.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a, | ||||
| g,h,l,m,n,s,r=b,p,D=v.length?w:this,E=[],x,y;q("$digest");k.$$checkUrlChange();this===w&&null!==e&&(k.defer.cancel(e),u());c=null;do{s=!1;p=D;for(n=0;n<v.length;n++){try{y=v[n],l=y.fn,l(y.scope,y.locals)}catch(C){f(C)}c=null}v.length=0;a:do{if(n=!p.$$suspended&&p.$$watchers)for(n.$$digestWatchIndex=n.length;n.$$digestWatchIndex--;)try{if(a=n[n.$$digestWatchIndex])if(m=a.get,(g=m(p))!==(h=a.last)&&!(a.eq?ua(g,h):V(g)&&V(h)))s=!0,c=a,a.last=a.eq?Ha(g,null):g,l=a.fn,l(g,h===t?g:h,p),5>r&&(x=4-r,E[x]|| | ||||
| (E[x]=[]),E[x].push({msg:z(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:g,oldVal:h}));else if(a===c){s=!1;break a}}catch(B){f(B)}if(!(n=!p.$$suspended&&p.$$watchersCount&&p.$$childHead||p!==D&&p.$$nextSibling))for(;p!==D&&!(n=p.$$nextSibling);)p=p.$parent}while(p=n);if((s||v.length)&&!r--)throw w.$$phase=null,d("infdig",b,E);}while(s||v.length);for(w.$$phase=null;G<Z.length;)try{Z[G++]()}catch(A){f(A)}Z.length=G=0;k.$$checkUrlChange()},$suspend:function(){this.$$suspended=!0},$isSuspended:function(){return this.$$suspended}, | ||||
| $resume:function(){this.$$suspended=!1},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===w&&k.$$applicationDestroyed();n(this,-this.$$watchersCount);for(var b in this.$$listenerCount)s(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=A;this.$on=this.$watch=this.$watchGroup=function(){return A};this.$$listeners={};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){w.$$phase||v.length||k.defer(function(){v.length&&w.$digest()},null,"$evalAsync");v.push({scope:this,fn:g(a),locals:b})},$$postDigest:function(a){Z.push(a)},$apply:function(a){try{q("$apply");try{return this.$eval(a)}finally{w.$$phase= | ||||
| null}}catch(b){f(b)}finally{try{w.$digest()}catch(c){throw f(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&E.push(b);a=g(a);p()},$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&&(delete c[d],s(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g= | ||||
| !0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=db([h],arguments,1),l,m;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(m=d.length;l<m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){f(n)}else d.splice(l,1),l--,m--;if(g)break;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 g=db([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,g)}catch(l){f(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 w=new m,v=w.$$asyncQueue=[],Z=w.$$postDigestQueue=[],E=w.$$applyAsyncQueue=[],G=0;return w}]}function Ie(){var a=/^\s*(https?|s?ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/; | ||||
| this.aHrefSanitizationWhitelist=function(b){return v(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return v(a)?(b=a,this):b};this.$get=function(){return function(d,c){var e=c?b:a,f=la(d&&d.trim()).href;return""===f||f.match(e)?d:"unsafe:"+f}}}function Og(a){if("self"===a)return a;if(C(a)){if(-1<a.indexOf("***"))throw Da("iwcard",a);a=Ld(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if(ab(a))return new RegExp("^"+a.source+"$");throw Da("imatcher"); | ||||
| }function Md(a){var b=[];v(a)&&r(a,function(a){b.push(Og(a))});return b}function Wf(){this.SCE_CONTEXTS=U;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){arguments.length&&(a=Md(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=Md(a));return b};this.$get=["$injector","$$sanitizeUri",function(d,c){function e(a,b){var c;"self"===a?(c=Ac(b,Nd))||(B.document.baseURI?c=B.document.baseURI:(La||(La=B.document.createElement("a"),La.href=".",La=La.cloneNode(!1)),c=La.href), | ||||
| c=Ac(b,c)):c=!!a.exec(b.href);return c}function f(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 g=function(a){throw Da("unsafe");};d.has("$sanitize")&&(g=d.get("$sanitize"));var k=f(),h={};h[U.HTML]=f(k);h[U.CSS]=f(k);h[U.MEDIA_URL]=f(k);h[U.URL]=f(h[U.MEDIA_URL]);h[U.JS]=f(k);h[U.RESOURCE_URL]= | ||||
| f(h[U.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Da("icontext",a,b);if(null===b||x(b)||""===b)return b;if("string"!==typeof b)throw Da("itype",a);return new c(b)},getTrusted:function(d,f){if(null===f||x(f)||""===f)return f;var k=h.hasOwnProperty(d)?h[d]:null;if(k&&f instanceof k)return f.$$unwrapTrustedValue();z(f.$$unwrapTrustedValue)&&(f=f.$$unwrapTrustedValue());if(d===U.MEDIA_URL||d===U.URL)return c(f.toString(),d===U.MEDIA_URL);if(d===U.RESOURCE_URL){var k= | ||||
| la(f.toString()),n,s,t=!1;n=0;for(s=a.length;n<s;n++)if(e(a[n],k)){t=!0;break}if(t)for(n=0,s=b.length;n<s;n++)if(e(b[n],k)){t=!1;break}if(t)return f;throw Da("insecurl",f.toString());}if(d===U.HTML)return g(f);throw Da("unsafe");},valueOf:function(a){return a instanceof k?a.$$unwrapTrustedValue():a}}}]}function Vf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Aa)throw Da("iequirks");var c=oa(U);c.isEnabled=function(){return a}; | ||||
| c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=Ta);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var e=c.parseAs,f=c.getTrusted,g=c.trustAs;r(U,function(a,b){var d=O(b);c[("parse_as_"+d).replace(Bc,wb)]=function(b){return e(a,b)};c[("get_trusted_"+d).replace(Bc,wb)]=function(b){return f(a,b)};c[("trust_as_"+d).replace(Bc,wb)]=function(b){return g(a,b)}}); | ||||
| return c}]}function Xf(){this.$get=["$window","$document",function(a,b){var d={},c=!((!a.nw||!a.nw.process)&&a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,e=da((/android (\d+)/.exec(O((a.navigator||{}).userAgent))||[])[1]),f=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},k=g.body&&g.body.style,h=!1,l=!1;k&&(h=!!("transition"in k||"webkitTransition"in k),l=!!("animation"in k||"webkitAnimation"in k));return{history:!(!c|| | ||||
| 4>e||f),hasEvent:function(a){if("input"===a&&Aa)return!1;if(x(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:pa(),transitions:h,animations:l,android:e}}]}function Yf(){this.$get=ia(function(a){return new Pg(a)})}function Pg(a){function b(){var a=e.pop();return a&&a.cb}function d(a){for(var b=e.length-1;0<=b;--b){var c=e[b];if(c.type===a)return e.splice(b,1),c.cb}}var c={},e=[],f=this.ALL_TASKS_TYPE="$$all$$",g=this.DEFAULT_TASK_TYPE="$$default$$";this.completeTask=function(e, | ||||
| h){h=h||g;try{e()}finally{var l;l=h||g;c[l]&&(c[l]--,c[f]--);l=c[h];var m=c[f];if(!m||!l)for(l=m?d:b;m=l(h);)try{m()}catch(q){a.error(q)}}};this.incTaskCount=function(a){a=a||g;c[a]=(c[a]||0)+1;c[f]=(c[f]||0)+1};this.notifyWhenNoPendingTasks=function(a,b){b=b||f;c[b]?e.push({type:b,cb:a}):a()}}function $f(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$exceptionHandler","$templateCache","$http","$q","$sce",function(b,d,c,e,f){function g(k,h){g.totalPendingRequests++;if(!C(k)|| | ||||
| x(d.get(k)))k=f.getTrustedResourceUrl(k);var l=c.defaults&&c.defaults.transformResponse;I(l)?l=l.filter(function(a){return a!==uc}):l===uc&&(l=null);return c.get(k,R({cache:d,transformResponse:l},a)).finally(function(){g.totalPendingRequests--}).then(function(a){return d.put(k,a.data)},function(a){h||(a=Qg("tpload",k,a.status,a.statusText),b(a));return e.reject(a)})}g.totalPendingRequests=0;return g}]}function ag(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a, | ||||
| b,d){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var c=ea.element(a).data("$binding");c&&r(c,function(c){d?(new RegExp("(^|\\s)"+Ld(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!==c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],k=0;k<g.length;++k){var h=a.querySelectorAll("["+g[k]+"model"+(d?"=":"*=")+'"'+b+'"]');if(h.length)return h}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())}, | ||||
| whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function bg(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,e){function f(f,h,l){z(f)||(l=h,h=f,f=A);var m=Ga.call(arguments,3),q=v(l)&&!l,n=(q?c:d).defer(),s=n.promise,t;t=b.defer(function(){try{n.resolve(f.apply(null,m))}catch(b){n.reject(b),e(b)}finally{delete g[s.$$timeoutId]}q||a.$apply()},h,"$timeout");s.$$timeoutId=t;g[t]=n;return s}var g={};f.cancel=function(a){if(!a)return!1;if(!a.hasOwnProperty("$$timeoutId"))throw Rg("badprom"); | ||||
| if(!g.hasOwnProperty(a.$$timeoutId))return!1;a=a.$$timeoutId;var c=g[a];c.promise.$$state.pur=!0;c.reject("canceled");delete g[a];return b.defer.cancel(a)};return f}]}function la(a){if(!C(a))return a;Aa&&($.setAttribute("href",a),a=$.href);$.setAttribute("href",a);return{href:$.href,protocol:$.protocol?$.protocol.replace(/:$/,""):"",host:$.host,search:$.search?$.search.replace(/^\?/,""):"",hash:$.hash?$.hash.replace(/^#/,""):"",hostname:$.hostname,port:$.port,pathname:"/"===$.pathname.charAt(0)?$.pathname: | ||||
| "/"+$.pathname}}function Fg(a){var b=[Nd].concat(a.map(la));return function(a){a=la(a);return b.some(Ac.bind(null,a))}}function Ac(a,b){a=la(a);b=la(b);return a.protocol===b.protocol&&a.host===b.host}function cg(){this.$get=ia(B)}function Od(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},c={},e="";return function(){var a,g,k,h,l;try{a=d.cookie||""}catch(m){a=""}if(a!==e)for(e=a,a=e.split("; "),c={},k=0;k<a.length;k++)g=a[k],h=g.indexOf("="),0<h&&(l=b(g.substring(0, | ||||
| h)),x(c[l])&&(c[l]=b(g.substring(h+1))));return c}}function gg(){this.$get=Od}function cd(a){function b(d,c){if(F(d)){var e={};r(d,function(a,c){e[c]=b(c,a)});return e}return a.factory(d+"Filter",c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",Pd);b("date",Qd);b("filter",Sg);b("json",Tg);b("limitTo",Ug);b("lowercase",Vg);b("number",Rd);b("orderBy",Sd);b("uppercase",Wg)}function Sg(){return function(a,b,d,c){if(!xa(a)){if(null==a)return a; | ||||
| throw M("filter")("notarray",a);}c=c||"$";var e;switch(Cc(b)){case "function":break;case "boolean":case "null":case "number":case "string":e=!0;case "object":b=Xg(b,d,c,e);break;default:return a}return Array.prototype.filter.call(a,b)}}function Xg(a,b,d,c){var e=F(a)&&d in a;!0===b?b=ua:z(b)||(b=function(a,b){if(x(a))return!1;if(null===a||null===b)return a===b;if(F(b)||F(a)&&!ac(a))return!1;a=O(""+a);b=O(""+b);return-1!==a.indexOf(b)});return function(f){return e&&!F(f)?Ma(f,a[d],b,d,!1):Ma(f,a,b, | ||||
| d,c)}}function Ma(a,b,d,c,e,f){var g=Cc(a),k=Cc(b);if("string"===k&&"!"===b.charAt(0))return!Ma(a,b.substring(1),d,c,e);if(I(a))return a.some(function(a){return Ma(a,b,d,c,e)});switch(g){case "object":var h;if(e){for(h in a)if(h.charAt&&"$"!==h.charAt(0)&&Ma(a[h],b,d,c,!0))return!0;return f?!1:Ma(a,b,d,c,!1)}if("object"===k){for(h in b)if(f=b[h],!z(f)&&!x(f)&&(g=h===c,!Ma(g?a:a[h],f,d,c,g,g)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function Cc(a){return null=== | ||||
| a?"null":typeof a}function Pd(a){var b=a.NUMBER_FORMATS;return function(a,c,e){x(c)&&(c=b.CURRENCY_SYM);x(e)&&(e=b.PATTERNS[1].maxFrac);var f=c?/\u00A4/g:/\s*\u00A4\s*/g;return null==a?a:Td(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,e).replace(f,c)}}function Rd(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Td(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function Yg(a){var b=0,d,c,e,f,g;-1<(c=a.indexOf(Ud))&&(a=a.replace(Ud,""));0<(e=a.search(/e/i))?(0>c&&(c=e),c+=+a.slice(e+1),a= | ||||
| a.substring(0,e)):0>c&&(c=a.length);for(e=0;a.charAt(e)===Dc;e++);if(e===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===Dc;)g--;c-=e;d=[];for(f=0;e<=g;e++,f++)d[f]=+a.charAt(e)}c>Vd&&(d=d.splice(0,Vd-1),b=c-1,c=1);return{d:d,e:b,i:c}}function Zg(a,b,d,c){var e=a.d,f=e.length-a.i;b=x(b)?Math.min(Math.max(d,f),c):+b;d=b+a.i;c=e[d];if(0<d){e.splice(Math.max(a.i,d));for(var g=d;g<e.length;g++)e[g]=0}else for(f=Math.max(0,f),a.i=1,e.length=Math.max(1,d=b+1),e[0]=0,g=1;g<d;g++)e[g]=0;if(5<=c)if(0>d- | ||||
| 1){for(c=0;c>d;c--)e.unshift(0),a.i++;e.unshift(1);a.i++}else e[d-1]++;for(;f<Math.max(0,b);f++)e.push(0);if(b=e.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))e.unshift(b),a.i++}function Td(a,b,d,c,e){if(!C(a)&&!ba(a)||isNaN(a))return"";var f=!isFinite(a),g=!1,k=Math.abs(a)+"",h="";if(f)h="\u221e";else{g=Yg(k);Zg(g,e,b.minFrac,b.maxFrac);h=g.d;k=g.i;e=g.e;f=[];for(g=h.reduce(function(a,b){return a&&!b},!0);0>k;)h.unshift(0),k++;0<k?f=h.splice(k,h.length):(f=h,h=[0]);k=[]; | ||||
| for(h.length>=b.lgSize&&k.unshift(h.splice(-b.lgSize,h.length).join(""));h.length>b.gSize;)k.unshift(h.splice(-b.gSize,h.length).join(""));h.length&&k.unshift(h.join(""));h=k.join(d);f.length&&(h+=c+f.join(""));e&&(h+="e+"+e)}return 0>a&&!g?b.negPre+h+b.negSuf:b.posPre+h+b.posSuf}function Ob(a,b,d,c){var e="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,e="-");for(a=""+a;a.length<b;)a=Dc+a;d&&(a=a.substr(a.length-b));return e+a}function ga(a,b,d,c,e){d=d||0;return function(f){f=f["get"+a]();if(0<d||f>-d)f+=d;0=== | ||||
| f&&-12===d&&(f=12);return Ob(f,b,c,e)}}function kb(a,b,d){return function(c,e){var f=c["get"+a](),g=ub((d?"STANDALONE":"")+(b?"SHORT":"")+a);return e[g][f]}}function Wd(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Xd(a){return function(b){var d=Wd(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Ob(b,a)}}function Ec(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Qd(a){function b(a){var b; | ||||
| if(b=a.match(d)){a=new Date(0);var f=0,g=0,k=b[8]?a.setUTCFullYear:a.setFullYear,h=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=da(b[9]+b[10]),g=da(b[9]+b[11]));k.call(a,da(b[1]),da(b[2])-1,da(b[3]));f=da(b[4]||0)-f;g=da(b[5]||0)-g;k=da(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));h.call(a,f,g,k,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,f){var g="",k=[],h,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]|| | ||||
| d;C(c)&&(c=$g.test(c)?da(c):b(c));ba(c)&&(c=new Date(c));if(!ha(c)||!isFinite(c.getTime()))return c;for(;d;)(l=ah.exec(d))?(k=db(k,l,1),d=k.pop()):(k.push(d),d=null);var m=c.getTimezoneOffset();f&&(m=dc(f,m),c=ec(c,f,!0));r(k,function(b){h=bh[b];g+=h?h(c,a.DATETIME_FORMATS,m):"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Tg(){return function(a,b){x(b)&&(b=2);return eb(a,b)}}function Ug(){return function(a,b,d){b=Infinity===Math.abs(Number(b))?Number(b):da(b);if(V(b))return a; | ||||
| ba(a)&&(a=a.toString());if(!xa(a))return a;d=!d||isNaN(d)?0:da(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?Fc(a,d,d+b):0===d?Fc(a,b,a.length):Fc(a,Math.max(0,d+b),d)}}function Fc(a,b,d){return C(a)?a.slice(b,d):Ga.call(a,b,d)}function Sd(a){function b(b){return b.map(function(b){var c=1,d=Ta;if(z(b))d=b;else if(C(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var e=d(),d=function(a){return a[e]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0; | ||||
| default:return!1}}function c(a,b){var c=0,d=a.type,h=b.type;if(d===h){var h=a.value,l=b.value;"string"===d?(h=h.toLowerCase(),l=l.toLowerCase()):"object"===d&&(F(h)&&(h=a.index),F(l)&&(l=b.index));h!==l&&(c=h<l?-1:1)}else c="undefined"===d?1:"undefined"===h?-1:"null"===d?1:"null"===h?-1:d<h?-1:1;return c}return function(a,f,g,k){if(null==a)return a;if(!xa(a))throw M("orderBy")("notarray",a);I(f)||(f=[f]);0===f.length&&(f=["+"]);var h=b(f),l=g?-1:1,m=z(k)?k:c;a=Array.prototype.map.call(a,function(a, | ||||
| b){return{value:a,tieBreaker:{value:b,type:"number",index:b},predicateValues:h.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="null";else if("object"===c)a:{if(z(e.valueOf)&&(e=e.valueOf(),d(e)))break a;ac(e)&&(e=e.toString(),d(e))}return{value:e,type:c,index:b}})}});a.sort(function(a,b){for(var d=0,e=h.length;d<e;d++){var f=m(a.predicateValues[d],b.predicateValues[d]);if(f)return f*h[d].descending*l}return(m(a.tieBreaker,b.tieBreaker)||c(a.tieBreaker,b.tieBreaker))*l});return a=a.map(function(a){return a.value})}} | ||||
| function Na(a){z(a)&&(a={link:a});a.restrict=a.restrict||"AC";return ia(a)}function Pb(a,b,d,c,e){this.$$controls=[];this.$error={};this.$$success={};this.$pending=void 0;this.$name=e(b.name||b.ngForm||"")(d);this.$dirty=!1;this.$valid=this.$pristine=!0;this.$submitted=this.$invalid=!1;this.$$parentForm=lb;this.$$element=a;this.$$animate=c;Yd(this)}function Yd(a){a.$$classCache={};a.$$classCache[Zd]=!(a.$$classCache[mb]=a.$$element.hasClass(mb))}function $d(a){function b(a,b,c){c&&!a.$$classCache[b]? | ||||
| (a.$$animate.addClass(a.$$element,b),a.$$classCache[b]=!0):!c&&a.$$classCache[b]&&(a.$$animate.removeClass(a.$$element,b),a.$$classCache[b]=!1)}function d(a,c,d){c=c?"-"+Uc(c,"-"):"";b(a,mb+c,!0===d);b(a,Zd+c,!1===d)}var c=a.set,e=a.unset;a.clazz.prototype.$setValidity=function(a,g,k){x(g)?(this.$pending||(this.$pending={}),c(this.$pending,a,k)):(this.$pending&&e(this.$pending,a,k),ae(this.$pending)&&(this.$pending=void 0));Fa(g)?g?(e(this.$error,a,k),c(this.$$success,a,k)):(c(this.$error,a,k),e(this.$$success, | ||||
| a,k)):(e(this.$error,a,k),e(this.$$success,a,k));this.$pending?(b(this,"ng-pending",!0),this.$valid=this.$invalid=void 0,d(this,"",null)):(b(this,"ng-pending",!1),this.$valid=ae(this.$error),this.$invalid=!this.$valid,d(this,"",this.$valid));g=this.$pending&&this.$pending[a]?void 0:this.$error[a]?!1:this.$$success[a]?!0:null;d(this,a,g);this.$$parentForm.$setValidity(a,g,this)}}function ae(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function Gc(a){a.$formatters.push(function(b){return a.$isEmpty(b)? | ||||
| b:b.toString()})}function Ra(a,b,d,c,e,f){var g=O(b[0].type);if(!e.android){var k=!1;b.on("compositionstart",function(){k=!0});b.on("compositionupdate",function(a){if(x(a.data)||""===a.data)k=!1});b.on("compositionend",function(){k=!1;l()})}var h,l=function(a){h&&(f.defer.cancel(h),h=null);if(!k){var e=b.val();a=a&&a.type;"password"===g||d.ngTrim&&"false"===d.ngTrim||(e=T(e));(c.$viewValue!==e||""===e&&c.$$hasNativeValidators)&&c.$setViewValue(e,a)}};if(e.hasEvent("input"))b.on("input",l);else{var m= | ||||
| function(a,b,c){h||(h=f.defer(function(){h=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))b.on("paste cut drop",m)}b.on("change",l);if(be[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!h){var b=this.validity,c=b.badInput,d=b.typeMismatch;h=f.defer(function(){h=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)? | ||||
| "":c.$viewValue;b.val()!==a&&b.val(a)}}function Qb(a,b){return function(d,c){var e,f;if(ha(d))return d;if(C(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(ch.test(d))return new Date(d);a.lastIndex=0;if(e=a.exec(d))return e.shift(),f=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(a,c){c<b.length&&(f[b[c]]=+a)}),e=new Date(f.yyyy, | ||||
| f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0),100>f.yyyy&&e.setFullYear(f.yyyy),e}return NaN}}function nb(a,b,d,c){return function(e,f,g,k,h,l,m){function q(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function n(a){return v(a)&&!ha(a)?s(a)||void 0:a}function s(a,b){var c=k.$options.getOption("timezone");p&&p!==c&&(b=Rc(b,dc(p)));var e=d(a,b);!isNaN(e)&&c&&(e=ec(e,c));return e}Hc(e,f,g,k,a);Ra(e,f,g,k,h,l);var t="time"===a||"datetimelocal"===a,u,p;k.$parsers.push(function(c){if(k.$isEmpty(c))return null; | ||||
| if(b.test(c))return s(c,u);k.$$parserName=a});k.$formatters.push(function(a){if(a&&!ha(a))throw ob("datefmt",a);if(q(a)){u=a;var b=k.$options.getOption("timezone");b&&(p=b,u=ec(u,b,!0));var d=c;t&&C(k.$options.getOption("timeSecondsFormat"))&&(d=c.replace("ss.sss",k.$options.getOption("timeSecondsFormat")).replace(/:$/,""));a=m("date")(a,d,b);t&&k.$options.getOption("timeStripZeroSeconds")&&(a=a.replace(/(?::00)?(?:\.000)?$/,""));return a}p=u=null;return""});if(v(g.min)||g.ngMin){var r;k.$validators.min= | ||||
| function(a){return!q(a)||x(r)||d(a)>=r};g.$observe("min",function(a){r=n(a);k.$validate()})}if(v(g.max)||g.ngMax){var y;k.$validators.max=function(a){return!q(a)||x(y)||d(a)<=y};g.$observe("max",function(a){y=n(a);k.$validate()})}}}function Hc(a,b,d,c,e){(c.$$hasNativeValidators=F(b[0].validity))&&c.$parsers.push(function(a){var d=b.prop("validity")||{};if(d.badInput||d.typeMismatch)c.$$parserName=e;else return a})}function ce(a){a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(dh.test(b))return parseFloat(b); | ||||
| a.$$parserName="number"});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!ba(b))throw ob("numfmt",b);b=b.toString()}return b})}function Sa(a){v(a)&&!ba(a)&&(a=parseFloat(a));return V(a)?void 0:a}function Ic(a){var b=a.toString(),d=b.indexOf(".");return-1===d?-1<a&&1>a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function de(a,b,d){a=Number(a);var c=(a|0)!==a,e=(b|0)!==b,f=(d|0)!==d;if(c||e||f){var g=c?Ic(a):0,k=e?Ic(b):0,h=f?Ic(d):0,g=Math.max(g,k,h),g=Math.pow(10,g);a*=g;b*=g;d*=g;c&& | ||||
| (a=Math.round(a));e&&(b=Math.round(b));f&&(d=Math.round(d))}return 0===(a-b)%d}function ee(a,b,d,c,e){if(v(c)){a=a(c);if(!a.constant)throw ob("constexpr",d,c);return a(b)}return e}function Jc(a,b){function d(a,b){if(!a||!a.length)return[];if(!b||!b.length)return a;var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e===b[m])continue a;c.push(e)}return c}function c(a){if(!a)return a;var b=a;I(a)?b=a.map(c).join(" "):F(a)?b=Object.keys(a).filter(function(b){return a[b]}).join(" "): | ||||
| C(a)||(b=a+"");return b}a="ngClass"+a;var e;return["$parse",function(f){return{restrict:"AC",link:function(g,k,h){function l(a,b){var c=[];r(a,function(a){if(0<b||q[a])q[a]=(q[a]||0)+b,q[a]===+(0<b)&&c.push(a)});return c.join(" ")}function m(a){if(a===b){var c=s,c=l(c&&c.split(" "),1);h.$addClass(c)}else c=s,c=l(c&&c.split(" "),-1),h.$removeClass(c);n=a}var q=k.data("$classCounts"),n=!0,s;q||(q=S(),k.data("$classCounts",q));"ngClass"!==a&&(e||(e=f("$index",function(a){return a&1})),g.$watch(e,m)); | ||||
| g.$watch(f(h[a],c),function(a){if(n===b){var c=s&&s.split(" "),e=a&&a.split(" "),f=d(c,e),c=d(e,c),f=l(f,-1),c=l(c,1);h.$addClass(c);h.$removeClass(f)}s=a})}}}]}function pd(a,b,d,c,e,f){return{restrict:"A",compile:function(g,k){var h=a(k[c]);return function(a,c){c.on(e,function(c){var e=function(){h(a,{$event:c})};if(b.$$phase)if(f)a.$evalAsync(e);else try{e()}catch(g){d(g)}else a.$apply(e)})}}}}function Rb(a,b,d,c,e,f,g,k,h){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0; | ||||
| 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=void 0;this.$name=h(d.name||"",!1)(a);this.$$parentForm=lb;this.$options=Sb;this.$$updateEvents="";this.$$updateEventHandler=this.$$updateEventHandler.bind(this);this.$$parsedNgModel=e(d.ngModel);this.$$parsedNgModelAssign=this.$$parsedNgModel.assign; | ||||
| this.$$ngModelGet=this.$$parsedNgModel;this.$$ngModelSet=this.$$parsedNgModelAssign;this.$$pendingDebounce=null;this.$$parserValid=void 0;this.$$parserName="parse";this.$$currentValidationRunId=0;this.$$scope=a;this.$$rootScope=a.$root;this.$$attr=d;this.$$element=c;this.$$animate=f;this.$$timeout=g;this.$$parse=e;this.$$q=k;this.$$exceptionHandler=b;Yd(this);eh(this)}function eh(a){a.$$scope.$watch(function(b){b=a.$$ngModelGet(b);b===a.$modelValue||a.$modelValue!==a.$modelValue&&b!==b||a.$$setModelValue(b); | ||||
| return b})}function Kc(a){this.$$options=a}function fe(a,b){r(b,function(b,c){v(a[c])||(a[c]=b)})}function Ea(a,b){a.prop("selected",b);a.attr("selected",b)}var Vb={objectMaxDepth:5,urlErrorParamsEnabled:!0},fh=/^\/(.+)\/([a-z]*)$/,sa=Object.prototype.hasOwnProperty,O=function(a){return C(a)?a.toLowerCase():a},ub=function(a){return C(a)?a.toUpperCase():a},Aa,y,rb,Ga=[].slice,Bg=[].splice,gh=[].push,ma=Object.prototype.toString,Oc=Object.getPrototypeOf,Ia=M("ng"),ea=B.angular||(B.angular={}),jc,pb= | ||||
| 0;Aa=B.document.documentMode;var V=Number.isNaN||function(a){return a!==a};A.$inject=[];Ta.$inject=[];var se=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,T=function(a){return C(a)?a.trim():a},Ld=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},pa=function(){if(!v(pa.rules)){var a=B.document.querySelector("[ng-csp]")||B.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp"); | ||||
| pa.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=pa;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,noInlineStyle:!1}}}return pa.rules},qb=function(){if(v(qb.name_))return qb.name_;var a,b,d=Pa.length,c,e;for(b=0;b<d;++b)if(c=Pa[b],a=B.document.querySelector("["+c.replace(":","\\:")+"jq]")){e=a.getAttribute(c+"jq");break}return qb.name_=e},ue=/:/g,Pa=["ng-","data-ng-","ng:","x-ng-"],ye=function(a){var b=a.currentScript; | ||||
| if(!b)return!0;if(!(b instanceof B.HTMLScriptElement||b instanceof B.SVGScriptElement))return!1;b=b.attributes;return[b.getNamedItem("src"),b.getNamedItem("href"),b.getNamedItem("xlink:href")].every(function(b){if(!b)return!0;if(!b.value)return!1;var c=a.createElement("a");c.href=b.value;if(a.location.origin===c.origin)return!0;switch(c.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;default:return!1}})}(B.document),Be=/[A-Z]/g,Vc=!1,Oa=3,He={full:"1.7.5", | ||||
| major:1,minor:7,dot:5,codeName:"anti-prettification"};W.expando="ng339";var Ja=W.cache={},lg=1;W._data=function(a){return this.cache[a[this.expando]]||{}};var hg=/-([a-z])/g,hh=/^-ms-/,Ab={mouseleave:"mouseout",mouseenter:"mouseover"},mc=M("jqLite"),kg=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,lc=/<|&#?\w+;/,ig=/<([\w:-]+)/,jg=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,ja={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,"",""]};ja.optgroup=ja.option;ja.tbody=ja.tfoot=ja.colgroup=ja.caption=ja.thead;ja.th=ja.td;var qg=B.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Wa=W.prototype={ready:ed,toString:function(){var a=[];r(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?y(this[a]):y(this[this.length+a])},length:0, | ||||
| push:gh,sort:[].sort,splice:[].splice},Gb={};r("multiple selected checked disabled readOnly required open".split(" "),function(a){Gb[O(a)]=a});var ld={};r("input select option textarea button form details".split(" "),function(a){ld[a]=!0});var sd={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern",ngStep:"step"};r({data:qc,removeData:pc,hasData:function(a){for(var b in Ja[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)pc(a[b]), | ||||
| hd(a[b])}},function(a,b){W[b]=a});r({data:qc,inheritedData:Eb,scope:function(a){return y.data(a,"$scope")||Eb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return y.data(a,"$isolateScope")||y.data(a,"$isolateScopeNoTemplate")},controller:id,injector:function(a){return Eb(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Bb,css:function(a,b,d){b=xb(b.replace(hh,"ms-"));if(v(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!== | ||||
| Oa&&2!==c&&8!==c&&a.getAttribute){var c=O(b),e=Gb[c];if(v(d))null===d||!1===d&&e?a.removeAttribute(b):a.setAttribute(b,e?c:d);else return a=a.getAttribute(b),e&&null!==a&&(a=c),null===a?void 0:a}},prop:function(a,b,d){if(v(d))a[b]=d;else return a[b]},text:function(){function a(a,d){if(x(d)){var c=a.nodeType;return 1===c||c===Oa?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(x(b)){if(a.multiple&&"select"===ta(a)){var d=[];r(a.options,function(a){a.selected&&d.push(a.value|| | ||||
| a.text)});return d}return a.value}a.value=b},html:function(a,b){if(x(b))return a.innerHTML;yb(a,!0);a.innerHTML=b},empty:jd},function(a,b){W.prototype[b]=function(b,c){var e,f,g=this.length;if(a!==jd&&x(2===a.length&&a!==Bb&&a!==id?b:c)){if(F(b)){for(e=0;e<g;e++)if(a===qc)a(this[e],b);else for(f in b)a(this[e],f,b[f]);return this}e=a.$dv;g=x(e)?Math.min(g,1):g;for(f=0;f<g;f++){var k=a(this[f],b,c);e=e?e+k:k}return e}for(e=0;e<g;e++)a(this[e],b,c);return this}});r({removeData:pc,on:function(a,b,d, | ||||
| c){if(v(c))throw mc("onargs");if(kc(a)){c=zb(a,!0);var e=c.events,f=c.handle;f||(f=c.handle=ng(a,e));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,k=function(b,c,g){var k=e[b];k||(k=e[b]=[],k.specialHandlerWrapper=c,"$destroy"===b||g||a.addEventListener(b,f));k.push(d)};g--;)b=c[g],Ab[b]?(k(Ab[b],pg),k(b,void 0,!0)):k(b)}},off:hd,one:function(a,b,d){a=y(a);a.on(b,function e(){a.off(b,d);a.off(b,e)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;yb(a);r(new W(b),function(b){d? | ||||
| c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];r(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=a.nodeType;if(1===d||11===d){b=new W(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;r(new W(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){var d=y(b).eq(0).clone()[0],c=a.parentNode; | ||||
| c&&c.replaceChild(d,a);d.appendChild(a)},remove:Fb,detach:function(a){Fb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;if(c){b=new W(b);for(var e=0,f=b.length;e<f;e++){var g=b[e];c.insertBefore(g,d.nextSibling);d=g}}},addClass:Db,removeClass:Cb,toggleClass:function(a,b,d){b&&r(b.split(" "),function(b){var e=d;x(e)&&(e=!Bb(a,b));(e?Db:Cb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName? | ||||
| a.getElementsByTagName(b):[]},clone:oc,triggerHandler:function(a,b,d){var c,e,f=b.type||b,g=zb(a);if(g=(g=g&&g.events)&&g[f])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:A,type:f,target:a},b.type&&(c=R(c,b)),b=oa(g),e=d?[c].concat(d):[c],r(b,function(b){c.isImmediatePropagationStopped()|| | ||||
| b.apply(a,e)})}},function(a,b){W.prototype[b]=function(b,c,e){for(var f,g=0,k=this.length;g<k;g++)x(f)?(f=a(this[g],b,c,e),v(f)&&(f=y(f))):nc(f,a(this[g],b,c,e));return v(f)?f:this}});W.prototype.bind=W.prototype.on;W.prototype.unbind=W.prototype.off;var ih=Object.create(null);md.prototype={_idx:function(a){a!==this._lastKey&&(this._lastKey=a,this._lastIndex=this._keys.indexOf(a));return this._lastIndex},_transformKey:function(a){return V(a)?ih:a},get:function(a){a=this._transformKey(a);a=this._idx(a); | ||||
| if(-1!==a)return this._values[a]},has:function(a){a=this._transformKey(a);return-1!==this._idx(a)},set:function(a,b){a=this._transformKey(a);var d=this._idx(a);-1===d&&(d=this._lastIndex=this._keys.length);this._keys[d]=a;this._values[d]=b},delete:function(a){a=this._transformKey(a);a=this._idx(a);if(-1===a)return!1;this._keys.splice(a,1);this._values.splice(a,1);this._lastKey=NaN;this._lastIndex=-1;return!0}};var Hb=md,fg=[function(){this.$get=[function(){return Hb}]}],sg=/^([^(]+?)=>/,tg=/^[^(]*\(\s*([^)]*)\)/m, | ||||
| jh=/,/,kh=/^\s*(_?)(\S+?)\1\s*$/,rg=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,za=M("$injector");fb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw C(d)&&d||(d=a.name||ug(a)),za("strictdi",d);b=nd(a);r(b[1].split(jh),function(a){a.replace(kh,function(a,b,d){c.push(d)})})}a.$inject=c}}else I(a)?(b=a.length-1,sb(a[b],"fn"),c=a.slice(0,b)):sb(a,"fn",!0);return c};var ge=M("$animate"),vf=function(){this.$get=A},wf=function(){var a=new Hb,b=[];this.$get= | ||||
| ["$$AnimateRunner","$rootScope",function(d,c){function e(a,b,c){var d=!1;b&&(b=C(b)?b.split(" "):I(b)?b:[],r(b,function(b){b&&(d=!0,a[b]=c)}));return d}function f(){r(b,function(b){var c=a.get(b);if(c){var d=vg(b.attr("class")),e="",f="";r(c,function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});r(b,function(a){e&&Db(a,e);f&&Cb(a,f)});a.delete(b)}});b.length=0}return{enabled:A,on:A,off:A,pin:A,push:function(g,k,h,l){l&&l();h=h||{};h.from&&g.css(h.from);h.to&&g.css(h.to);if(h.addClass|| | ||||
| h.removeClass)if(k=h.addClass,l=h.removeClass,h=a.get(g)||{},k=e(h,k,!0),l=e(h,l,!1),k||l)a.set(g,h),b.push(g),1===b.length&&c.$$postDigest(f);g=new d;g.complete();return g}}}]},tf=["$provide",function(a){var b=this,d=null,c=null;this.$$registeredAnimations=Object.create(null);this.register=function(c,d){if(c&&"."!==c.charAt(0))throw ge("notcsel",c);var g=c+"-animation";b.$$registeredAnimations[c.substr(1)]=g;a.factory(g,d)};this.customFilter=function(a){1===arguments.length&&(c=z(a)?a:null);return c}; | ||||
| this.classNameFilter=function(a){if(1===arguments.length&&(d=a instanceof RegExp?a:null)&&/[(\s|\/)]ng-animate[(\s|\/)]/.test(d.toString()))throw d=null,ge("nongcls","ng-animate");return d};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var e;a:{for(e=0;e<d.length;e++){var f=d[e];if(1===f.nodeType){e=f;break a}}e=void 0}!e||e.parentNode||e.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.cancel&&a.cancel()}, | ||||
| enter:function(c,d,h,l){d=d&&y(d);h=h&&y(h);d=d||h.parent();b(c,d,h);return a.push(c,"enter",Ba(l))},move:function(c,d,h,l){d=d&&y(d);h=h&&y(h);d=d||h.parent();b(c,d,h);return a.push(c,"move",Ba(l))},leave:function(b,c){return a.push(b,"leave",Ba(c),function(){b.remove()})},addClass:function(b,c,d){d=Ba(d);d.addClass=hb(d.addclass,c);return a.push(b,"addClass",d)},removeClass:function(b,c,d){d=Ba(d);d.removeClass=hb(d.removeClass,c);return a.push(b,"removeClass",d)},setClass:function(b,c,d,f){f=Ba(f); | ||||
| f.addClass=hb(f.addClass,c);f.removeClass=hb(f.removeClass,d);return a.push(b,"setClass",f)},animate:function(b,c,d,f,m){m=Ba(m);m.from=m.from?R(m.from,c):c;m.to=m.to?R(m.to,d):d;m.tempClasses=hb(m.tempClasses,f||"ng-inline-animate");return a.push(b,"animate",m)}}}]}],yf=function(){this.$get=["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},xf=function(){this.$get= | ||||
| ["$q","$sniffer","$$animateAsyncRun","$$isDocumentHidden","$timeout",function(a,b,d,c,e){function f(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){c()?e(a,0,!1):b(a)};this._state=0}f.chain=function(a,b){function c(){if(d===a.length)b(!0);else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};f.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;r(a,function(a){a.done(c)})};f.prototype={setHost:function(a){this.host=a||{}},done:function(a){2=== | ||||
| this._state?a():this._doneCallbacks.push(a)},progress:A,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._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(r(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=2)}};return f}]},uf=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,e){function f(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass= | ||||
| null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);k||h.complete();k=!0});return h}var g=e||{};g.$$prepared||(g=Ha(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var k,h=new d;return{start:f,end:f}}}]},aa=M("$compile"),sc=new function(){};Wc.$inject=["$provide","$$sanitizeUriProvider"];Jb.prototype.isFirstChange=function(){return this.previousValue===sc};var od=/^((?:x|data)[:\-_])/i,Ag=/[:\-_]+(.)/g,ud=M("$controller"), | ||||
| td=/^(\S+)(\s+as\s+([\w$]+))?$/,Ff=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof y&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},vd="application/json",vc={"Content-Type":vd+";charset=utf-8"},Dg=/^\[|^\{(?!\{)/,Eg={"[":/]$/,"{":/}$/},Cg=/^\)]\}',?\n/,Kb=M("$http"),Ca=ea.$interpolateMinErr=M("$interpolate");Ca.throwNoconcat=function(a){throw Ca("noconcat",a);};Ca.interr=function(a,b){return Ca("interr",a,b.toString())};var Hg=M("$interval"),Of=function(){this.$get= | ||||
| function(){function a(a){var b=function(a){b.data=a;b.called=!0};b.id=a;return b}var b=ea.callbacks,d={};return{createCallback:function(c){c="_"+(b.$$counter++).toString(36);var e="angular.callbacks."+c,f=a(c);d[e]=b[c]=f;return e},wasCalled:function(a){return d[a].called},getResponse:function(a){return d[a].data},removeCallback:function(a){delete b[d[a].id];delete d[a]}}}},lh=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,Ig={http:80,https:443,ftp:21},jb=M("$location"),Jg=/^\s*[\\/]{2,}/,mh={$$absUrl:"",$$html5:!1, | ||||
| $$replace:!1,$$compose:function(){for(var a=this.$$path,b=this.$$hash,d=ve(this.$$search),b=b?"#"+gc(b):"",a=a.split("/"),c=a.length;c--;)a[c]=gc(a[c].replace(/%2F/g,"/"));this.$$url=a.join("/")+(d?"?"+d:"")+b;this.$$absUrl=this.$$normalizeUrl(this.$$url);this.$$urlUpdatedByLocation=!0},absUrl:Lb("$$absUrl"),url:function(a){if(x(a))return this.$$url;var b=lh.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Lb("$$protocol"), | ||||
| host:Lb("$$host"),port:Lb("$$port"),path:Cd("$$path",function(a){a=null!==a?a.toString():"";return"/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(C(a)||ba(a))a=a.toString(),this.$$search=fc(a);else if(F(a))a=Ha(a,{}),r(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw jb("isrcharg");break;default:x(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:Cd("$$hash",function(a){return null!== | ||||
| a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};r([Bd,yc,xc],function(a){a.prototype=Object.create(mh);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==xc||!this.$$html5)throw jb("nostate");this.$$state=x(b)?null:b;this.$$urlUpdatedByLocation=!0;return this}});var Ya=M("$parse"),Ng={}.constructor.prototype.valueOf,Tb=S();r("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){Tb[a]=!0});var nh={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v", | ||||
| "'":"'",'"':'"'},Nb=function(a){this.options=a};Nb.prototype={constructor:Nb,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.isIdentifierStart(this.peekMultichar()))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 b=a+this.peek(),d=b+this.peek(2),c=Tb[b],e=Tb[d];Tb[a]||c||e?(a=e?d:c?b: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,b){return-1!==b.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},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a, | ||||
| b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=v(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw Ya("lexerr", | ||||
| a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=O(this.text.charAt(this.index));if("."===d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"===d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"===a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!==a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})}, | ||||
| readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index),c=c+f;if(e)"u"===f?(e=this.text.substring(this.index+1,this.index+5),e.match(/[\da-f]{4}/i)|| | ||||
| this.throwError("Invalid unicode escape [\\u"+e+"]"),this.index+=4,d+=String.fromCharCode(parseInt(e,16))):d+=nh[f]||f,e=!1;else if("\\"===f)e=!0;else{if(f===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=f}this.index++}this.throwError("Unterminated quote",b)}};var p=function(a,b){this.lexer=a;this.options=b};p.Program="Program";p.ExpressionStatement="ExpressionStatement";p.AssignmentExpression="AssignmentExpression";p.ConditionalExpression="ConditionalExpression"; | ||||
| p.LogicalExpression="LogicalExpression";p.BinaryExpression="BinaryExpression";p.UnaryExpression="UnaryExpression";p.CallExpression="CallExpression";p.MemberExpression="MemberExpression";p.Identifier="Identifier";p.Literal="Literal";p.ArrayExpression="ArrayExpression";p.Property="Property";p.ObjectExpression="ObjectExpression";p.ThisExpression="ThisExpression";p.LocalsExpression="LocalsExpression";p.NGValueParameter="NGValueParameter";p.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:p.Program,body:a}},expressionStatement:function(){return{type:p.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();if(this.expect("=")){if(!Gd(a))throw Ya("lval");a={type:p.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:p.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:p.LogicalExpression,operator:"||",left:a,right:this.logicalAND()}; | ||||
| return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:p.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:p.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:p.BinaryExpression,operator:b.text,left:a,right:this.additive()};return a},additive:function(){for(var a= | ||||
| this.multiplicative(),b;b=this.expect("+","-");)a={type:p.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:p.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:p.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.selfReferential.hasOwnProperty(this.peek().text)?a=Ha(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:p.Literal,value:this.options.literals[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 b;b=this.expect("(","[",".");)"("=== | ||||
| b.text?(a={type:p.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:p.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:p.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:p.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());return b},parseArguments:function(){var a= | ||||
| [];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:p.Identifier,name:a.text}},constant:function(){return{type:p.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:p.ArrayExpression, | ||||
| elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:p.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),b.value=this.expression()): | ||||
| this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");return{type:p.ObjectExpression,properties:a}},throwError:function(a,b){throw Ya("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw Ya("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw Ya("ueoe",this.text);return this.tokens[0]}, | ||||
| peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,e){if(this.tokens.length>a){a=this.tokens[a];var f=a.text;if(f===b||f===d||f===c||f===e||!(b||d||c||e))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:p.ThisExpression},$locals:{type:p.LocalsExpression}}};var Ed=2;Id.prototype={compile:function(a){var b=this;this.state={nextId:0,filters:{},fn:{vars:[],body:[],own:{}},assign:{vars:[], | ||||
| body:[],own:{}},inputs:[]};Y(a,b.$filter);var d="",c;this.stage="assign";if(c=Hd(a))this.state.computing="assign",d=this.nextId(),this.recurse(c,d),this.return_(d),d="fn.assign="+this.generateFunction("assign","s,v,l");c=Fd(a.body);b.stage="inputs";r(c,function(a,c){var d="fn"+c;b.state[d]={vars:[],body:[],own:{}};b.state.computing=d;var k=b.nextId();b.recurse(a,k);b.return_(k);b.state.inputs.push({name:d,isPure:a.isPure});a.watchId=c});this.state.computing="fn";this.stage="main";this.recurse(a); | ||||
| a='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+d+this.watchFns()+"return fn;";a=(new Function("$filter","getStringValue","ifDefined","plus",a))(this.$filter,Kg,Lg,Dd);this.state=this.stage=void 0;return a},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,d=this;r(b,function(b){a.push("var "+b.name+"="+d.generateFunction(b.name,"s"));b.isPure&&a.push(b.name,".isPure="+JSON.stringify(b.isPure)+";")});b.length&&a.push("fn.inputs=["+ | ||||
| b.map(function(a){return a.name}).join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;r(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});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,b,d,c,e, | ||||
| f){var g,k,h=this,l,m,q;c=c||A;if(!f&&v(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,e,!0));else switch(a.type){case p.Program:r(a.body,function(b,c){h.recurse(b.expression,void 0,void 0,function(a){k=a});c!==a.body.length-1?h.current().body.push(k,";"):h.return_(k)});break;case p.Literal:m=this.escape(a.value);this.assign(b,m);c(b||m);break;case p.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){k=a});m= | ||||
| a.operator+"("+this.ifDefined(k,0)+")";this.assign(b,m);c(m);break;case p.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){k=a});m="+"===a.operator?this.plus(g,k):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(k,0):"("+g+")"+a.operator+"("+k+")";this.assign(b,m);c(m);break;case p.LogicalExpression:b=b||this.nextId();h.recurse(a.left,b);h.if_("&&"===a.operator?b:h.not(b),h.lazyRecurse(a.right,b));c(b);break;case p.ConditionalExpression:b= | ||||
| b||this.nextId();h.recurse(a.test,b);h.if_(b,h.lazyRecurse(a.alternate,b),h.lazyRecurse(a.consequent,b));c(b);break;case p.Identifier:b=b||this.nextId();d&&(d.context="inputs"===h.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);h.if_("inputs"===h.stage||h.not(h.getHasOwnProperty("l",a.name)),function(){h.if_("inputs"===h.stage||"s",function(){e&&1!==e&&h.if_(h.isNull(h.nonComputedMember("s",a.name)),h.lazyAssign(h.nonComputedMember("s",a.name), | ||||
| "{}"));h.assign(b,h.nonComputedMember("s",a.name))})},b&&h.lazyAssign(b,h.nonComputedMember("l",a.name)));c(b);break;case p.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();h.recurse(a.object,g,void 0,function(){h.if_(h.notNull(g),function(){a.computed?(k=h.nextId(),h.recurse(a.property,k),h.getStringValue(k),e&&1!==e&&h.if_(h.not(h.computedMember(g,k)),h.lazyAssign(h.computedMember(g,k),"{}")),m=h.computedMember(g,k),h.assign(b,m),d&&(d.computed=!0,d.name=k)):(e&& | ||||
| 1!==e&&h.if_(h.isNull(h.nonComputedMember(g,a.property.name)),h.lazyAssign(h.nonComputedMember(g,a.property.name),"{}")),m=h.nonComputedMember(g,a.property.name),h.assign(b,m),d&&(d.computed=!1,d.name=a.property.name))},function(){h.assign(b,"undefined")});c(b)},!!e);break;case p.CallExpression:b=b||this.nextId();a.filter?(k=h.filter(a.callee.name),l=[],r(a.arguments,function(a){var b=h.nextId();h.recurse(a,b);l.push(b)}),m=k+"("+l.join(",")+")",h.assign(b,m),c(b)):(k=h.nextId(),g={},l=[],h.recurse(a.callee, | ||||
| k,g,function(){h.if_(h.notNull(k),function(){r(a.arguments,function(b){h.recurse(b,a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m=g.name?h.member(g.context,g.name,g.computed)+"("+l.join(",")+")":k+"("+l.join(",")+")";h.assign(b,m)},function(){h.assign(b,"undefined")});c(b)}));break;case p.AssignmentExpression:k=this.nextId();g={};this.recurse(a.left,void 0,g,function(){h.if_(h.notNull(g.context),function(){h.recurse(a.right,k);m=h.member(g.context,g.name,g.computed)+a.operator+k; | ||||
| h.assign(b,m);c(b||m)})},1);break;case p.ArrayExpression:l=[];r(a.elements,function(b){h.recurse(b,a.constant?void 0:h.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(b||m);break;case p.ObjectExpression:l=[];q=!1;r(a.properties,function(a){a.computed&&(q=!0)});q?(b=b||this.nextId(),this.assign(b,"{}"),r(a.properties,function(a){a.computed?(g=h.nextId(),h.recurse(a.key,g)):g=a.key.type===p.Identifier?a.key.name:""+a.key.value;k=h.nextId();h.recurse(a.value,k);h.assign(h.member(b, | ||||
| g,a.computed),k)})):(r(a.properties,function(b){h.recurse(b.value,a.constant?void 0:h.nextId(),void 0,function(a){l.push(h.escape(b.key.type===p.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,m));c(b||m);break;case p.ThisExpression:this.assign(b,"s");c(b||"s");break;case p.LocalsExpression:this.assign(b,"l");c(b||"l");break;case p.NGValueParameter:this.assign(b,"v"),c(b||"v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)|| | ||||
| (c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body; | ||||
| c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},isNull:function(a){return a+"==null"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},getStringValue:function(a){this.assign(a, | ||||
| "getStringValue("+a+")")},lazyRecurse:function(a,b,d,c,e,f){var g=this;return function(){g.recurse(a,b,d,c,e,f)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(C(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(ba(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 Ya("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};Jd.prototype={compile:function(a){var b=this;Y(a,b.$filter);var d,c;if(d=Hd(a))c=this.recurse(d);d=Fd(a.body);var e;d&&(e=[],r(d,function(a,c){var d=b.recurse(a);d.isPure=a.isPure;a.input=d;e.push(d);a.watchId=c}));var f=[];r(a.body,function(a){f.push(b.recurse(a.expression))}); | ||||
| a=0===a.body.length?A:1===a.body.length?f[0]:function(a,b){var c;r(f,function(d){c=d(a,b)});return c};c&&(a.assign=function(a,b,d){return c(a,d,b)});e&&(a.inputs=e);return a},recurse:function(a,b,d){var c,e,f=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case p.Literal:return this.value(a.value,b);case p.UnaryExpression:return e=this.recurse(a.argument),this["unary"+a.operator](e,b);case p.BinaryExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+ | ||||
| a.operator](c,e,b);case p.LogicalExpression:return c=this.recurse(a.left),e=this.recurse(a.right),this["binary"+a.operator](c,e,b);case p.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case p.Identifier:return f.identifier(a.name,b,d);case p.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(e=a.property.name),a.computed&&(e=this.recurse(a.property)),a.computed?this.computedMember(c,e,b,d):this.nonComputedMember(c, | ||||
| e,b,d);case p.CallExpression:return g=[],r(a.arguments,function(a){g.push(f.recurse(a))}),a.filter&&(e=this.$filter(a.callee.name)),a.filter||(e=this.recurse(a.callee,!0)),a.filter?function(a,c,d,f){for(var q=[],n=0;n<g.length;++n)q.push(g[n](a,c,d,f));a=e.apply(void 0,q,f);return b?{context:void 0,name:void 0,value:a}:a}:function(a,c,d,f){var q=e(a,c,d,f),n;if(null!=q.value){n=[];for(var s=0;s<g.length;++s)n.push(g[s](a,c,d,f));n=q.value.apply(q.context,n)}return b?{value:n}:n};case p.AssignmentExpression:return c= | ||||
| this.recurse(a.left,!0,1),e=this.recurse(a.right),function(a,d,f,g){var q=c(a,d,f,g);a=e(a,d,f,g);q.context[q.name]=a;return b?{value:a}:a};case p.ArrayExpression:return g=[],r(a.elements,function(a){g.push(f.recurse(a))}),function(a,c,d,e){for(var f=[],n=0;n<g.length;++n)f.push(g[n](a,c,d,e));return b?{value:f}:f};case p.ObjectExpression:return g=[],r(a.properties,function(a){a.computed?g.push({key:f.recurse(a.key),computed:!0,value:f.recurse(a.value)}):g.push({key:a.key.type===p.Identifier?a.key.name: | ||||
| ""+a.key.value,computed:!1,value:f.recurse(a.value)})}),function(a,c,d,e){for(var f={},n=0;n<g.length;++n)g[n].computed?f[g[n].key(a,c,d,e)]=g[n].value(a,c,d,e):f[g[n].key]=g[n].value(a,c,d,e);return b?{value:f}:f};case p.ThisExpression:return function(a){return b?{value:a}:a};case p.LocalsExpression:return function(a,c){return b?{value:c}:c};case p.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=v(d)?+d:0;return b?{value:d}: | ||||
| d}},"unary-":function(a,b){return function(d,c,e,f){d=a(d,c,e,f);d=v(d)?-d:-0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,e,f){d=!a(d,c,e,f);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,e,f,g){var k=a(c,e,f,g);c=b(c,e,f,g);k=Dd(k,c);return d?{value:k}:k}},"binary-":function(a,b,d){return function(c,e,f,g){var k=a(c,e,f,g);c=b(c,e,f,g);k=(v(k)?k:0)-(v(c)?c:0);return d?{value:k}:k}},"binary*":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)*b(c,e,f,g); | ||||
| return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)/b(c,e,f,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)%b(c,e,f,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)===b(c,e,f,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!==b(c,e,f,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)==b(c,e,f,g);return d? | ||||
| {value:c}:c}},"binary!=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)!=b(c,e,f,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<b(c,e,f,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>b(c,e,f,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)<=b(c,e,f,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)>=b(c,e,f,g);return d?{value:c}: | ||||
| c}},"binary&&":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)&&b(c,e,f,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,e,f,g){c=a(c,e,f,g)||b(c,e,f,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(e,f,g,k){e=a(e,f,g,k)?b(e,f,g,k):d(e,f,g,k);return c?{value:e}:e}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d){return function(c,e,f,g){c=e&&a in e?e:c;d&&1!==d&&c&&null==c[a]&&(c[a]= | ||||
| {});e=c?c[a]:void 0;return b?{context:c,name:a,value:e}:e}},computedMember:function(a,b,d,c){return function(e,f,g,k){var h=a(e,f,g,k),l,m;null!=h&&(l=b(e,f,g,k),l+="",c&&1!==c&&h&&!h[l]&&(h[l]={}),m=h[l]);return d?{context:h,name:l,value:m}:m}},nonComputedMember:function(a,b,d,c){return function(e,f,g,k){e=a(e,f,g,k);c&&1!==c&&e&&null==e[b]&&(e[b]={});f=null!=e?e[b]:void 0;return d?{context:e,name:b,value:f}:f}},inputs:function(a,b){return function(d,c,e,f){return f?f[b]:a(d,c,e)}}};Mb.prototype= | ||||
| {constructor:Mb,parse:function(a){a=this.getAst(a);var b=this.astCompiler.compile(a.ast),d=a.ast;b.literal=0===d.body.length||1===d.body.length&&(d.body[0].expression.type===p.Literal||d.body[0].expression.type===p.ArrayExpression||d.body[0].expression.type===p.ObjectExpression);b.constant=a.ast.constant;b.oneTime=a.oneTime;return b},getAst:function(a){var b=!1;a=a.trim();":"===a.charAt(0)&&":"===a.charAt(1)&&(b=!0,a=a.substring(2));return{ast:this.ast.ast(a),oneTime:b}}};var Da=M("$sce"),U={HTML:"html", | ||||
| CSS:"css",MEDIA_URL:"mediaUrl",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Bc=/_([a-z])/g,Qg=M("$templateRequest"),Rg=M("$timeout"),$=B.document.createElement("a"),Nd=la(B.location.href),La;Od.$inject=["$document"];cd.$inject=["$provide"];var Vd=22,Ud=".",Dc="0";Pd.$inject=["$locale"];Rd.$inject=["$locale"];var bh={yyyy:ga("FullYear",4,0,!1,!0),yy:ga("FullYear",2,0,!0,!0),y:ga("FullYear",1,0,!1,!0),MMMM:kb("Month"),MMM:kb("Month",!0),MM:ga("Month",2,1),M:ga("Month",1,1),LLLL:kb("Month",!1,!0),dd:ga("Date", | ||||
| 2),d:ga("Date",1),HH:ga("Hours",2),H:ga("Hours",1),hh:ga("Hours",2,-12),h:ga("Hours",1,-12),mm:ga("Minutes",2),m:ga("Minutes",1),ss:ga("Seconds",2),s:ga("Seconds",1),sss:ga("Milliseconds",3),EEEE:kb("Day"),EEE:kb("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,b,d){a=-1*d;return a=(0<=a?"+":"")+(Ob(Math[0<a?"floor":"ceil"](a/60),2)+Ob(Math.abs(a%60),2))},ww:Xd(2),w:Xd(1),G:Ec,GG:Ec,GGG:Ec,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}}, | ||||
| ah=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/,$g=/^-?\d+$/;Qd.$inject=["$locale"];var Vg=ia(O),Wg=ia(ub);Sd.$inject=["$parse"];var Je=ia({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var e="[object SVGAnimatedString]"===ma.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(e)||a.preventDefault()})}}}}),vb={};r(Gb,function(a,b){function d(a,d,e){a.$watch(e[c], | ||||
| function(a){e.$set(b,!!a)})}if("multiple"!==a){var c=va("ng-"+b),e=d;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[c]&&d(a,b,e)});vb[c]=function(){return{restrict:"A",priority:100,link:e}}}});r(sd,function(a,b){vb[b]=function(){return{priority:100,link:function(a,c,e){if("ngPattern"===b&&"/"===e.ngPattern.charAt(0)&&(c=e.ngPattern.match(fh))){e.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(e[b],function(a){e.$set(b,a)})}}}});r(["src","srcset","href"],function(a){var b=va("ng-"+a);vb[b]= | ||||
| function(){return{priority:99,link:function(d,c,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===ma.call(c.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null);e.$observe(b,function(b){b?(e.$set(g,b),Aa&&f&&c.prop(f,e[g])):"href"===a&&e.$set(g,null)})}}}});var lb={$addControl:A,$getControls:ia([]),$$renameControl:function(a,b){a.$name=b},$removeControl:A,$setValidity:A,$setDirty:A,$setPristine:A,$setSubmitted:A,$$setSubmitted:A};Pb.$inject=["$element","$attrs","$scope","$animate", | ||||
| "$interpolate"];Pb.prototype={$rollbackViewValue:function(){r(this.$$controls,function(a){a.$rollbackViewValue()})},$commitViewValue:function(){r(this.$$controls,function(a){a.$commitViewValue()})},$addControl:function(a){Qa(a.$name,"input");this.$$controls.push(a);a.$name&&(this[a.$name]=a);a.$$parentForm=this},$getControls:function(){return oa(this.$$controls)},$$renameControl:function(a,b){var d=a.$name;this[d]===a&&delete this[d];this[b]=a;a.$name=b},$removeControl:function(a){a.$name&&this[a.$name]=== | ||||
| a&&delete this[a.$name];r(this.$pending,function(b,d){this.$setValidity(d,null,a)},this);r(this.$error,function(b,d){this.$setValidity(d,null,a)},this);r(this.$$success,function(b,d){this.$setValidity(d,null,a)},this);cb(this.$$controls,a);a.$$parentForm=lb},$setDirty:function(){this.$$animate.removeClass(this.$$element,Za);this.$$animate.addClass(this.$$element,Ub);this.$dirty=!0;this.$pristine=!1;this.$$parentForm.$setDirty()},$setPristine:function(){this.$$animate.setClass(this.$$element,Za,Ub+ | ||||
| " ng-submitted");this.$dirty=!1;this.$pristine=!0;this.$submitted=!1;r(this.$$controls,function(a){a.$setPristine()})},$setUntouched:function(){r(this.$$controls,function(a){a.$setUntouched()})},$setSubmitted:function(){for(var a=this;a.$$parentForm&&a.$$parentForm!==lb;)a=a.$$parentForm;a.$$setSubmitted()},$$setSubmitted:function(){this.$$animate.addClass(this.$$element,"ng-submitted");this.$submitted=!0;r(this.$$controls,function(a){a.$$setSubmitted&&a.$$setSubmitted()})}};$d({clazz:Pb,set:function(a, | ||||
| b,d){var c=a[b];c?-1===c.indexOf(d)&&c.push(d):a[b]=[d]},unset:function(a,b,d){var c=a[b];c&&(cb(c,d),0===c.length&&delete a[b])}});var he=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||A}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Pb,compile:function(d,f){d.addClass(Za).addClass(mb);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var q=f[0];if(!("action"in e)){var n=function(b){a.$apply(function(){q.$commitViewValue(); | ||||
| q.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",n);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",n)},0,!1)})}(f[1]||q.$$parentForm).$addControl(q);var s=g?c(q.$name):A;g&&(s(a,q),e.$observe(g,function(b){q.$name!==b&&(s(a,void 0),q.$$parentForm.$$renameControl(q,b),s=c(q.$name),s(a,q))}));d.on("$destroy",function(){q.$$parentForm.$removeControl(q);s(a,void 0);R(q,lb)})}}}}}]},Ke=he(),We=he(!0),ch=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/, | ||||
| oh=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,ph=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,dh=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,ie=/^(\d{4,})-(\d{2})-(\d{2})$/,je=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Lc=/^(\d{4,})-W(\d\d)$/,ke=/^(\d{4,})-(\d\d)$/, | ||||
| le=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,be=S();r(["date","datetime-local","month","time","week"],function(a){be[a]=!0});var me={text:function(a,b,d,c,e,f){Ra(a,b,d,c,e,f);Gc(c)},date:nb("date",ie,Qb(ie,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":nb("datetimelocal",je,Qb(je,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:nb("time",le,Qb(le,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:nb("week",Lc,function(a,b){if(ha(a))return a;if(C(a)){Lc.lastIndex=0;var d=Lc.exec(a); | ||||
| if(d){var c=+d[1],e=+d[2],f=d=0,g=0,k=0,h=Wd(c),e=7*(e-1);b&&(d=b.getHours(),f=b.getMinutes(),g=b.getSeconds(),k=b.getMilliseconds());return new Date(c,0,h.getDate()+e,d,f,g,k)}}return NaN},"yyyy-Www"),month:nb("month",ke,Qb(ke,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,e,f){Hc(a,b,d,c,"number");ce(c);Ra(a,b,d,c,e,f);var g,k;if(v(d.min)||d.ngMin)c.$validators.min=function(a,b){return c.$isEmpty(b)||x(g)||b>=g},d.$observe("min",function(a){g=Sa(a);c.$validate()});if(v(d.max)||d.ngMax)c.$validators.max= | ||||
| function(a,b){return c.$isEmpty(b)||x(k)||b<=k},d.$observe("max",function(a){k=Sa(a);c.$validate()});if(v(d.step)||d.ngStep){var h;c.$validators.step=function(a,b){return c.$isEmpty(b)||x(h)||de(b,g||0,h)};d.$observe("step",function(a){h=Sa(a);c.$validate()})}},url:function(a,b,d,c,e,f){Ra(a,b,d,c,e,f);Gc(c);c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||oh.test(d)}},email:function(a,b,d,c,e,f){Ra(a,b,d,c,e,f);Gc(c);c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)|| | ||||
| ph.test(d)}},radio:function(a,b,d,c){var e=!d.ngTrim||"false"!==T(d.ngTrim);x(d.name)&&b.attr("name",++pb);b.on("change",function(a){var g;b[0].checked&&(g=d.value,e&&(g=T(g)),c.$setViewValue(g,a&&a.type))});c.$render=function(){var a=d.value;e&&(a=T(a));b[0].checked=a===c.$viewValue};d.$observe("value",c.$render)},range:function(a,b,d,c,e,f){function g(a,c){b.attr(a,d[a]);d.$observe(a,c)}function k(a){q=Sa(a);V(c.$modelValue)||(m?(a=b.val(),q>a&&(a=q,b.val(a)),c.$setViewValue(a)):c.$validate())} | ||||
| function h(a){n=Sa(a);V(c.$modelValue)||(m?(a=b.val(),n<a&&(b.val(n),a=n<q?q:n),c.$setViewValue(a)):c.$validate())}function l(a){s=Sa(a);V(c.$modelValue)||(m&&c.$viewValue!==b.val()?c.$setViewValue(b.val()):c.$validate())}Hc(a,b,d,c,"range");ce(c);Ra(a,b,d,c,e,f);var m=c.$$hasNativeValidators&&"range"===b[0].type,q=m?0:void 0,n=m?100:void 0,s=m?1:void 0,p=b[0].validity;a=v(d.min);e=v(d.max);f=v(d.step);var r=c.$render;c.$render=m&&v(p.rangeUnderflow)&&v(p.rangeOverflow)?function(){r();c.$setViewValue(b.val())}: | ||||
| r;a&&(c.$validators.min=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||x(q)||b>=q},g("min",k));e&&(c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||x(n)||b<=n},g("max",h));f&&(c.$validators.step=m?function(){return!p.stepMismatch}:function(a,b){return c.$isEmpty(b)||x(s)||de(b,q||0,s)},g("step",l))},checkbox:function(a,b,d,c,e,f,g,k){var h=ee(k,a,"ngTrueValue",d.ngTrueValue,!0),l=ee(k,a,"ngFalseValue",d.ngFalseValue,!1);b.on("change",function(a){c.$setViewValue(b[0].checked, | ||||
| a&&a.type)});c.$render=function(){b[0].checked=c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return ua(a,h)});c.$parsers.push(function(a){return a?h:l})},hidden:A,button:A,submit:A,reset:A,file:A},Xc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,k){k[0]&&(me[O(g.type)]||me.text)(e,f,g,k[0],b,a,d,c)}}}}],qh=/^(true|false|\d+)$/,pf=function(){function a(a,d,c){var e=v(c)?c:9===Aa?"":null; | ||||
| a.prop("value",e);d.$set("value",c)}return{restrict:"A",priority:100,compile:function(b,d){return qh.test(d.ngValue)?function(b,d,f){b=b.$eval(f.ngValue);a(d,f,b)}:function(b,d,f){b.$watch(f.ngValue,function(b){a(d,f,b)})}}}},Oe=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,e){a.$$addBindingInfo(c,e.ngBind);c=c[0];b.$watch(e.ngBind,function(a){c.textContent=hc(a)})}}}}],Qe=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d); | ||||
| return function(c,d,f){c=a(d.attr(f.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];f.$observe("ngBindTemplate",function(a){d.textContent=x(a)?"":a})}}}}],Pe=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);return function(b,c,e){d.$$addBindingInfo(c,e.ngBindHtml);b.$watch(g,function(){var d=f(b);c.html(a.getTrustedHtml(d)||"")})}}}}],of=ia({restrict:"A", | ||||
| require:"ngModel",link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Re=Jc("",!0),Te=Jc("Odd",0),Se=Jc("Even",1),Ue=Na({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Ve=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],bd={},rh={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b= | ||||
| va("ng-"+a);bd[b]=["$parse","$rootScope","$exceptionHandler",function(d,c,e){return pd(d,c,e,b,a,rh[a])}]});var Ye=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,e,f,g){var k,h,l;d.$watch(e.ngIf,function(d){d?h||g(function(d,f){h=f;d[d.length++]=b.$$createComment("end ngIf",e.ngIf);k={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),h&&(h.$destroy(),h=null),k&&(l=tb(k.clone),a.leave(l).done(function(a){!1!== | ||||
| a&&(l=null)}),k=null))})}}}],Ze=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ea.noop,compile:function(c,e){var f=e.ngInclude||e.src,g=e.onload||"",k=e.autoscroll;return function(c,e,m,q,n){var s=0,p,r,D,w=function(){r&&(r.remove(),r=null);p&&(p.$destroy(),p=null);D&&(d.leave(D).done(function(a){!1!==a&&(r=null)}),r=D,D=null)};c.$watch(f,function(f){var m=function(a){!1===a||!v(k)||k&&!c.$eval(k)||b()}, | ||||
| r=++s;f?(a(f,!0).then(function(a){if(!c.$$destroyed&&r===s){var b=c.$new();q.template=a;a=n(b,function(a){w();d.enter(a,null,e).done(m)});p=b;D=a;p.$emit("$includeContentLoaded",f);c.$eval(g)}},function(){c.$$destroyed||r!==s||(w(),c.$emit("$includeContentError",f))}),c.$emit("$includeContentRequested",f)):(w(),q.template=null)})}}}}],rf=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(b,d,c,e){ma.call(d[0]).match(/SVG/)?(d.empty(),a(dd(e.template,B.document).childNodes)(b, | ||||
| function(a){d.append(a)},{futureParentElement:d})):(d.html(e.template),a(d.contents())(b))}}}],$e=Na({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),nf=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var e=d.ngList||", ",f="false"!==d.ngTrim,g=f?T(e):e;c.$parsers.push(function(a){if(!x(a)){var b=[];a&&r(a.split(g),function(a){a&&b.push(f?T(a):a)});return b}});c.$formatters.push(function(a){if(I(a))return a.join(e)});c.$isEmpty= | ||||
| function(a){return!a||!a.length}}}},mb="ng-valid",Zd="ng-invalid",Za="ng-pristine",Ub="ng-dirty",ob=M("ngModel");Rb.$inject="$scope $exceptionHandler $attrs $element $parse $animate $timeout $q $interpolate".split(" ");Rb.prototype={$$initGetterSetters:function(){if(this.$options.getOption("getterSetter")){var a=this.$$parse(this.$$attr.ngModel+"()"),b=this.$$parse(this.$$attr.ngModel+"($$$p)");this.$$ngModelGet=function(b){var c=this.$$parsedNgModel(b);z(c)&&(c=a(b));return c};this.$$ngModelSet= | ||||
| function(a,c){z(this.$$parsedNgModel(a))?b(a,{$$$p:c}):this.$$parsedNgModelAssign(a,c)}}else if(!this.$$parsedNgModel.assign)throw ob("nonassign",this.$$attr.ngModel,ya(this.$$element));},$render:A,$isEmpty:function(a){return x(a)||""===a||null===a||a!==a},$$updateEmptyClasses:function(a){this.$isEmpty(a)?(this.$$animate.removeClass(this.$$element,"ng-not-empty"),this.$$animate.addClass(this.$$element,"ng-empty")):(this.$$animate.removeClass(this.$$element,"ng-empty"),this.$$animate.addClass(this.$$element, | ||||
| "ng-not-empty"))},$setPristine:function(){this.$dirty=!1;this.$pristine=!0;this.$$animate.removeClass(this.$$element,Ub);this.$$animate.addClass(this.$$element,Za)},$setDirty:function(){this.$dirty=!0;this.$pristine=!1;this.$$animate.removeClass(this.$$element,Za);this.$$animate.addClass(this.$$element,Ub);this.$$parentForm.$setDirty()},$setUntouched:function(){this.$touched=!1;this.$untouched=!0;this.$$animate.setClass(this.$$element,"ng-untouched","ng-touched")},$setTouched:function(){this.$touched= | ||||
| !0;this.$untouched=!1;this.$$animate.setClass(this.$$element,"ng-touched","ng-untouched")},$rollbackViewValue:function(){this.$$timeout.cancel(this.$$pendingDebounce);this.$viewValue=this.$$lastCommittedViewValue;this.$render()},$validate:function(){if(!V(this.$modelValue)){var a=this.$$lastCommittedViewValue,b=this.$$rawModelValue,d=this.$valid,c=this.$modelValue,e=this.$options.getOption("allowInvalid"),f=this;this.$$runValidators(b,a,function(a){e||d===a||(f.$modelValue=a?b:void 0,f.$modelValue!== | ||||
| c&&f.$$writeModelToScope())})}},$$runValidators:function(a,b,d){function c(){var c=!0;r(h.$validators,function(d,e){var g=Boolean(d(a,b));c=c&&g;f(e,g)});return c?!0:(r(h.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;r(h.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!z(h.then))throw ob("nopromise",h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?h.$$q.all(c).then(function(){g(d)},A):g(!0)}function f(a,b){k===h.$$currentValidationRunId&& | ||||
| h.$setValidity(a,b)}function g(a){k===h.$$currentValidationRunId&&d(a)}this.$$currentValidationRunId++;var k=this.$$currentValidationRunId,h=this;(function(){var a=h.$$parserName;if(x(h.$$parserValid))f(a,null);else return h.$$parserValid||(r(h.$validators,function(a,b){f(b,null)}),r(h.$asyncValidators,function(a,b){f(b,null)})),f(a,h.$$parserValid),h.$$parserValid;return!0})()?c()?e():g(!1):g(!1)},$commitViewValue:function(){var a=this.$viewValue;this.$$timeout.cancel(this.$$pendingDebounce);if(this.$$lastCommittedViewValue!== | ||||
| a||""===a&&this.$$hasNativeValidators)this.$$updateEmptyClasses(a),this.$$lastCommittedViewValue=a,this.$pristine&&this.$setDirty(),this.$$parseAndValidate()},$$parseAndValidate:function(){var a=this.$$lastCommittedViewValue,b=this;this.$$parserValid=x(a)?void 0:!0;this.$setValidity(this.$$parserName,null);this.$$parserName="parse";if(this.$$parserValid)for(var d=0;d<this.$parsers.length;d++)if(a=this.$parsers[d](a),x(a)){this.$$parserValid=!1;break}V(this.$modelValue)&&(this.$modelValue=this.$$ngModelGet(this.$$scope)); | ||||
| var c=this.$modelValue,e=this.$options.getOption("allowInvalid");this.$$rawModelValue=a;e&&(this.$modelValue=a,b.$modelValue!==c&&b.$$writeModelToScope());this.$$runValidators(a,this.$$lastCommittedViewValue,function(d){e||(b.$modelValue=d?a:void 0,b.$modelValue!==c&&b.$$writeModelToScope())})},$$writeModelToScope:function(){this.$$ngModelSet(this.$$scope,this.$modelValue);r(this.$viewChangeListeners,function(a){try{a()}catch(b){this.$$exceptionHandler(b)}},this)},$setViewValue:function(a,b){this.$viewValue= | ||||
| a;this.$options.getOption("updateOnDefault")&&this.$$debounceViewValueCommit(b)},$$debounceViewValueCommit:function(a){var b=this.$options.getOption("debounce");ba(b[a])?b=b[a]:ba(b["default"])&&-1===this.$options.getOption("updateOn").indexOf(a)?b=b["default"]:ba(b["*"])&&(b=b["*"]);this.$$timeout.cancel(this.$$pendingDebounce);var d=this;0<b?this.$$pendingDebounce=this.$$timeout(function(){d.$commitViewValue()},b):this.$$rootScope.$$phase?this.$commitViewValue():this.$$scope.$apply(function(){d.$commitViewValue()})}, | ||||
| $overrideModelOptions:function(a){this.$options=this.$options.createChild(a);this.$$setUpdateOnEvents()},$processModelValue:function(){var a=this.$$format();this.$viewValue!==a&&(this.$$updateEmptyClasses(a),this.$viewValue=this.$$lastCommittedViewValue=a,this.$render(),this.$$runValidators(this.$modelValue,this.$viewValue,A))},$$format:function(){for(var a=this.$formatters,b=a.length,d=this.$modelValue;b--;)d=a[b](d);return d},$$setModelValue:function(a){this.$modelValue=this.$$rawModelValue=a;this.$$parserValid= | ||||
| void 0;this.$processModelValue()},$$setUpdateOnEvents:function(){this.$$updateEvents&&this.$$element.off(this.$$updateEvents,this.$$updateEventHandler);if(this.$$updateEvents=this.$options.getOption("updateOn"))this.$$element.on(this.$$updateEvents,this.$$updateEventHandler)},$$updateEventHandler:function(a){this.$$debounceViewValueCommit(a&&a.type)}};$d({clazz:Rb,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]}});var mf=["$rootScope",function(a){return{restrict:"A",require:["ngModel", | ||||
| "^?form","^?ngModelOptions"],controller:Rb,priority:1,compile:function(b){b.addClass(Za).addClass("ng-untouched").addClass(mb);return{pre:function(a,b,e,f){var g=f[0];b=f[1]||g.$$parentForm;if(f=f[2])g.$options=f.$options;g.$$initGetterSetters();b.$addControl(g);e.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,e,f){function g(){k.$setTouched()}var k=f[0];k.$$setUpdateOnEvents();c.on("blur", | ||||
| function(){k.$touched||(a.$$phase?b.$evalAsync(g):b.$apply(g))})}}}}}],Sb,sh=/(\s+|^)default(\s+|$)/;Kc.prototype={getOption:function(a){return this.$$options[a]},createChild:function(a){var b=!1;a=R({},a);r(a,function(d,c){"$inherit"===d?"*"===c?b=!0:(a[c]=this.$$options[c],"updateOn"===c&&(a.updateOnDefault=this.$$options.updateOnDefault)):"updateOn"===c&&(a.updateOnDefault=!1,a[c]=T(d.replace(sh,function(){a.updateOnDefault=!0;return" "})))},this);b&&(delete a["*"],fe(a,this.$$options));fe(a,Sb.$$options); | ||||
| return new Kc(a)}};Sb=new Kc({updateOn:"",updateOnDefault:!0,debounce:0,getterSetter:!1,allowInvalid:!1,timezone:null});var qf=function(){function a(a,d){this.$$attrs=a;this.$$scope=d}a.$inject=["$attrs","$scope"];a.prototype={$onInit:function(){var a=this.parentCtrl?this.parentCtrl.$options:Sb,d=this.$$scope.$eval(this.$$attrs.ngModelOptions);this.$options=a.createChild(d)}};return{restrict:"A",priority:10,require:{parentCtrl:"?^^ngModelOptions"},bindToController:!0,controller:a}},af=Na({terminal:!0, | ||||
| priority:1E3}),th=M("ngOptions"),uh=/^\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]+?))?$/,kf=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!p&&xa(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&& | ||||
| "$"!==c.charAt(0)&&b.push(c)}return b}var q=a.match(uh);if(!q)throw th("iexp",a,ya(b));var n=q[5]||q[7],p=q[6];a=/ as /.test(q[0])&&q[1];var r=q[9];b=d(q[2]?q[1]:n);var u=a&&d(a)||b,v=r&&d(r),w=r?function(a,b){return v(c,b)}:function(a){return Ka(a)},y=function(a,b){return w(a,C(a,b))},x=d(q[2]||q[1]),E=d(q[3]||""),G=d(q[4]||""),J=d(q[8]),z={},C=p?function(a,b){z[p]=b;z[n]=a;return z}:function(a){z[n]=a;return z};return{trackBy:r,getTrackByValue:y,getWatchables:d(J,function(a){var b=[];a=a||[];for(var d= | ||||
| f(a),e=d.length,g=0;g<e;g++){var k=a===d?g:d[g],l=a[k],k=C(l,k),l=w(l,k);b.push(l);if(q[2]||q[1])l=x(c,k),b.push(l);q[4]&&(k=G(c,k),b.push(k))}return b}),getOptions:function(){for(var a=[],b={},d=J(c)||[],g=f(d),k=g.length,n=0;n<k;n++){var q=d===g?n:g[n],p=C(d[q],q),s=u(c,p),q=w(s,p),v=x(c,p),D=E(c,p),p=G(c,p),s=new e(q,s,v,D,p);a.push(s);b[q]=s}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[y(a)]},getViewValueFromOption:function(a){return r?Ha(a.viewValue):a.viewValue}}}}} | ||||
| var e=B.document.createElement("option"),f=B.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=A},post:function(d,k,h,l){function m(a){var b=(a=w.getOptionFromViewValue(a))&&a.element;b&&!b.selected&&(b.selected=!0);return a}function q(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);b.value=a.selectValue}var n=l[0],p=l[1],t=h.multiple;l=0;for(var u=k.children(), | ||||
| D=u.length;l<D;l++)if(""===u[l].value){n.hasEmptyOption=!0;n.emptyOption=u.eq(l);break}k.empty();l=!!n.emptyOption;y(e.cloneNode(!1)).val("?");var w,x=c(h.ngOptions,k,d),z=b[0].createDocumentFragment();n.generateUnknownOptionValue=function(a){return"?"};t?(n.writeValue=function(a){if(w){var b=a&&a.map(m)||[];w.items.forEach(function(a){a.element.selected&&-1===Array.prototype.indexOf.call(b,a)&&(a.element.selected=!1)})}},n.readValue=function(){var a=k.val()||[],b=[];r(a,function(a){(a=w.selectValueMap[a])&& | ||||
| !a.disabled&&b.push(w.getViewValueFromOption(a))});return b},x.trackBy&&d.$watchCollection(function(){if(I(p.$viewValue))return p.$viewValue.map(function(a){return x.getTrackByValue(a)})},function(){p.$render()})):(n.writeValue=function(a){if(w){var b=k[0].options[k[0].selectedIndex],c=w.getOptionFromViewValue(a);b&&b.removeAttribute("selected");c?(k[0].value!==c.selectValue&&(n.removeUnknownOption(),k[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):n.selectUnknownOrEmptyOption(a)}}, | ||||
| n.readValue=function(){var a=w.selectValueMap[k.val()];return a&&!a.disabled?(n.unselectEmptyOption(),n.removeUnknownOption(),w.getViewValueFromOption(a)):null},x.trackBy&&d.$watch(function(){return x.getTrackByValue(p.$viewValue)},function(){p.$render()}));l&&(a(n.emptyOption)(d),k.prepend(n.emptyOption),8===n.emptyOption[0].nodeType?(n.hasEmptyOption=!1,n.registerOption=function(a,b){""===b.val()&&(n.hasEmptyOption=!0,n.emptyOption=b,n.emptyOption.removeClass("ng-scope"),p.$render(),b.on("$destroy", | ||||
| function(){var a=n.$isEmptyOptionSelected();n.hasEmptyOption=!1;n.emptyOption=void 0;a&&p.$render()}))}):n.emptyOption.removeClass("ng-scope"));d.$watchCollection(x.getWatchables,function(){var a=w&&n.readValue();if(w)for(var b=w.items.length-1;0<=b;b--){var c=w.items[b];v(c.group)?Fb(c.element.parentNode):Fb(c.element)}w=x.getOptions();var d={};w.items.forEach(function(a){var b;if(v(a.group)){b=d[a.group];b||(b=f.cloneNode(!1),z.appendChild(b),b.label=null===a.group?"null":a.group,d[a.group]=b); | ||||
| var c=e.cloneNode(!1);b.appendChild(c);q(a,c)}else b=e.cloneNode(!1),z.appendChild(b),q(a,b)});k[0].appendChild(z);p.$render();p.$isEmpty(a)||(b=n.readValue(),(x.trackBy||t?ua(a,b):a===b)||(p.$setViewValue(b),p.$render()))})}}}}],bf=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(f,g,k){function h(a){g.text(a||"")}var l=k.count,m=k.$attr.when&&g.attr(k.$attr.when),q=k.offset||0,n=f.$eval(m)||{},p={},t=b.startSymbol(),u=b.endSymbol(),v=t+l+"-"+ | ||||
| q+u,w=ea.noop,y;r(k,function(a,b){var c=e.exec(b);c&&(c=(c[1]?"-":"")+O(c[2]),n[c]=g.attr(k.$attr[b]))});r(n,function(a,d){p[d]=b(a.replace(c,v))});f.$watch(l,function(b){var c=parseFloat(b),e=V(c);e||c in n||(c=a.pluralCat(c-q));c===y||e&&V(y)||(w(),e=p[c],x(e)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+m),w=A,h()):w=f.$watch(e,h),y=c)})}}}],ne=M("ngRef"),cf=["$parse",function(a){return{priority:-1,restrict:"A",compile:function(b,d){var c=va(ta(b)),e=a(d.ngRef),f=e.assign|| | ||||
| function(){throw ne("nonassign",d.ngRef);};return function(a,b,h){var l;if(h.hasOwnProperty("ngRefRead"))if("$element"===h.ngRefRead)l=b;else{if(l=b.data("$"+h.ngRefRead+"Controller"),!l)throw ne("noctrl",h.ngRefRead,d.ngRef);}else l=b.data("$"+c+"Controller");l=l||b;f(a,l);b.on("$destroy",function(){e(a)===l&&f(a,null)})}}}}],df=["$parse","$animate","$compile",function(a,b,d){var c=M("ngRepeat"),e=function(a,b,c,d,e,m,q){a[c]=d;e&&(a[e]=m);a.$index=b;a.$first=0===b;a.$last=b===q-1;a.$middle=!(a.$first|| | ||||
| a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var k=g.ngRepeat,h=d.$$createComment("end ngRepeat",k),l=k.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw c("iexp",k);var m=l[1],q=l[2],n=l[3],p=l[4],l=m.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);if(!l)throw c("iidexp",m);var t=l[3]||l[1],u=l[2];if(n&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(n)|| | ||||
| /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(n)))throw c("badident",n);var v,w,x,y,z={$id:Ka};p?v=a(p):(x=function(a,b){return Ka(b)},y=function(a){return a});return function(a,d,f,g,l){v&&(w=function(b,c,d){u&&(z[u]=b);z[t]=c;z.$index=d;return v(a,z)});var m=S();a.$watchCollection(q,function(f){var g,q,p=d[0],s,v=S(),D,z,C,B,E,A,F;n&&(a[n]=f);if(xa(f))E=f,q=w||x;else for(F in q=w||y,E=[],f)sa.call(f,F)&&"$"!==F.charAt(0)&&E.push(F);D=E.length;F= | ||||
| Array(D);for(g=0;g<D;g++)if(z=f===E?g:E[g],C=f[z],B=q(z,C,g),m[B])A=m[B],delete m[B],v[B]=A,F[g]=A;else{if(v[B])throw r(F,function(a){a&&a.scope&&(m[a.id]=a)}),c("dupes",k,B,C);F[g]={id:B,scope:void 0,clone:void 0};v[B]=!0}for(s in m){A=m[s];B=tb(A.clone);b.leave(B);if(B[0].parentNode)for(g=0,q=B.length;g<q;g++)B[g].$$NG_REMOVED=!0;A.scope.$destroy()}for(g=0;g<D;g++)if(z=f===E?g:E[g],C=f[z],A=F[g],A.scope){s=p;do s=s.nextSibling;while(s&&s.$$NG_REMOVED);A.clone[0]!==s&&b.move(tb(A.clone),null,p); | ||||
| p=A.clone[A.clone.length-1];e(A.scope,g,t,C,u,z,D)}else l(function(a,c){A.scope=c;var d=h.cloneNode(!1);a[a.length++]=d;b.enter(a,null,p);p=d;A.clone=a;v[A.id]=A;e(A.scope,g,t,C,u,z,D)});m=v})}}}}],ef=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Xe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b? | ||||
| "addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],ff=Na(function(a,b,d){a.$watchCollection(d.ngStyle,function(a,d){d&&a!==d&&r(d,function(a,c){b.css(c,"")});a&&b.css(a)})}),gf=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,e,f){var g=[],k=[],h=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};d.$watch(e.ngSwitch||e.on,function(c){for(var d,e;h.length;)a.cancel(h.pop());d=0; | ||||
| for(e=l.length;d<e;++d){var p=tb(k[d].clone);l[d].$destroy();(h[d]=a.leave(p)).done(m(h,d))}k.length=0;l.length=0;(g=f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");k.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],hf=Na({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){a=d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b- | ||||
| 1]!==a});r(a,function(a){c.cases["!"+a]=c.cases["!"+a]||[];c.cases["!"+a].push({transclude:e,element:b})})}}),jf=Na({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,e){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:e,element:b})}}),vh=M("ngTransclude"),lf=["$compile",function(a){return{restrict:"EAC",compile:function(b){var d=a(b.contents());b.empty();return function(a,b,f,g,k){function h(){d(a,function(a){b.append(a)})}if(!k)throw vh("orphan", | ||||
| ya(b));f.ngTransclude===f.$attr.ngTransclude&&(f.ngTransclude="");f=f.ngTransclude||f.ngTranscludeSlot;k(function(a,c){var d;if(d=a.length)a:{d=0;for(var f=a.length;d<f;d++){var g=a[d];if(g.nodeType!==Oa||g.nodeValue.trim()){d=!0;break a}}d=void 0}d?b.append(a):(h(),c.$destroy())},null,f);f&&!k.isSlotFilled(f)&&h()}}}}],Le=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"===d.type&&a.put(d.id,b[0].text)}}}],wh={$setViewValue:A,$render:A},xh=["$element", | ||||
| "$scope",function(a,b){function d(){g||(g=!0,b.$$postDigest(function(){g=!1;e.ngModelCtrl.$render()}))}function c(a){k||(k=!0,b.$$postDigest(function(){b.$$destroyed||(k=!1,e.ngModelCtrl.$setViewValue(e.readValue()),a&&e.ngModelCtrl.$render())}))}var e=this,f=new Hb;e.selectValueMap={};e.ngModelCtrl=wh;e.multiple=!1;e.unknownOption=y(B.document.createElement("option"));e.hasEmptyOption=!1;e.emptyOption=void 0;e.renderUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b); | ||||
| a.prepend(e.unknownOption);Ea(e.unknownOption,!0);a.val(b)};e.updateUnknownOption=function(b){b=e.generateUnknownOptionValue(b);e.unknownOption.val(b);Ea(e.unknownOption,!0);a.val(b)};e.generateUnknownOptionValue=function(a){return"? "+Ka(a)+" ?"};e.removeUnknownOption=function(){e.unknownOption.parent()&&e.unknownOption.remove()};e.selectEmptyOption=function(){e.emptyOption&&(a.val(""),Ea(e.emptyOption,!0))};e.unselectEmptyOption=function(){e.hasEmptyOption&&Ea(e.emptyOption,!1)};b.$on("$destroy", | ||||
| function(){e.renderUnknownOption=A});e.readValue=function(){var b=a.val(),b=b in e.selectValueMap?e.selectValueMap[b]:b;return e.hasOption(b)?b:null};e.writeValue=function(b){var c=a[0].options[a[0].selectedIndex];c&&Ea(y(c),!1);e.hasOption(b)?(e.removeUnknownOption(),c=Ka(b),a.val(c in e.selectValueMap?c:b),Ea(y(a[0].options[a[0].selectedIndex]),!0)):e.selectUnknownOrEmptyOption(b)};e.addOption=function(a,b){if(8!==b[0].nodeType){Qa(a,'"option value"');""===a&&(e.hasEmptyOption=!0,e.emptyOption= | ||||
| b);var c=f.get(a)||0;f.set(a,c+1);d()}};e.removeOption=function(a){var b=f.get(a);b&&(1===b?(f.delete(a),""===a&&(e.hasEmptyOption=!1,e.emptyOption=void 0)):f.set(a,b-1))};e.hasOption=function(a){return!!f.get(a)};e.$hasEmptyOption=function(){return e.hasEmptyOption};e.$isUnknownOptionSelected=function(){return a[0].options[0]===e.unknownOption[0]};e.$isEmptyOptionSelected=function(){return e.hasEmptyOption&&a[0].options[a[0].selectedIndex]===e.emptyOption[0]};e.selectUnknownOrEmptyOption=function(a){null== | ||||
| a&&e.emptyOption?(e.removeUnknownOption(),e.selectEmptyOption()):e.unknownOption.parent().length?e.updateUnknownOption(a):e.renderUnknownOption(a)};var g=!1,k=!1;e.registerOption=function(a,b,f,g,k){if(f.$attr.ngValue){var p,r;f.$observe("value",function(a){var d,f=b.prop("selected");v(r)&&(e.removeOption(p),delete e.selectValueMap[r],d=!0);r=Ka(a);p=a;e.selectValueMap[r]=a;e.addOption(a,b);b.attr("value",r);d&&f&&c()})}else g?f.$observe("value",function(a){e.readValue();var d,f=b.prop("selected"); | ||||
| v(p)&&(e.removeOption(p),d=!0);p=a;e.addOption(a,b);d&&f&&c()}):k?a.$watch(k,function(a,d){f.$set("value",a);var g=b.prop("selected");d!==a&&e.removeOption(d);e.addOption(a,b);d&&g&&c()}):e.addOption(f.value,b);f.$observe("disabled",function(a){if("true"===a||a&&b.prop("selected"))e.multiple?c(!0):(e.ngModelCtrl.$setViewValue(null),e.ngModelCtrl.$render())});b.on("$destroy",function(){var a=e.readValue(),b=f.value;e.removeOption(b);d();(e.multiple&&a&&-1!==a.indexOf(b)||a===b)&&c(!0)})}}],Me=function(){return{restrict:"E", | ||||
| require:["select","?ngModel"],controller:xh,priority:1,link:{pre:function(a,b,d,c){var e=c[0],f=c[1];if(f){if(e.ngModelCtrl=f,b.on("change",function(){e.removeUnknownOption();a.$apply(function(){f.$setViewValue(e.readValue())})}),d.multiple){e.multiple=!0;e.readValue=function(){var a=[];r(b.find("option"),function(b){b.selected&&!b.disabled&&(b=b.value,a.push(b in e.selectValueMap?e.selectValueMap[b]:b))});return a};e.writeValue=function(a){r(b.find("option"),function(b){var c=!!a&&(-1!==Array.prototype.indexOf.call(a, | ||||
| b.value)||-1!==Array.prototype.indexOf.call(a,e.selectValueMap[b.value]));c!==b.selected&&Ea(y(b),c)})};var g,k=NaN;a.$watch(function(){k!==f.$viewValue||ua(g,f.$viewValue)||(g=oa(f.$viewValue),f.$render());k=f.$viewValue});f.$isEmpty=function(a){return!a||0===a.length}}}else e.registerOption=A},post:function(a,b,d,c){var e=c[1];if(e){var f=c[0];e.$render=function(){f.writeValue(e.$viewValue)}}}}}},Ne=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){var c,e;v(d.ngValue)|| | ||||
| (v(d.value)?c=a(d.value,!0):(e=a(b.text(),!0))||d.$set("value",b.text()));return function(a,b,d){var h=b.parent();(h=h.data("$selectController")||h.parent().data("$selectController"))&&h.registerOption(a,b,d,c,e)}}}}],Zc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},Yc=function(){return{restrict:"A",require:"?ngModel",link:function(a, | ||||
| b,d,c){if(c){var e,f=d.ngPattern||d.pattern;d.$observe("pattern",function(a){C(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw M("ngPattern")("noregexp",f,a,ya(b));e=a||void 0;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||x(e)||e.test(b)}}}}},ad=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=-1;d.$observe("maxlength",function(a){a=da(a);e=V(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>e||c.$isEmpty(b)|| | ||||
| b.length<=e}}}}},$c=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var e=0;d.$observe("minlength",function(a){e=da(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=e}}}}};B.angular.bootstrap?B.console&&console.log("WARNING: Tried to load AngularJS more than once."):(Ce(),Ge(ea),ea.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM", | ||||
| "PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),WEEKENDRANGE:[5, | ||||
| 6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a, | ||||
| c){var e=a|0,f=c;void 0===f&&(f=Math.min(b(a),3));Math.pow(10,f);return 1==e&&0==f?"one":"other"}})}]),y(function(){xe(B.document,Tc)}))})(window);!window.angular.$$csp().noInlineStyle&&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
 | ||||
							
								
								
									
										3944
									
								
								htdocs/js/bootstrap.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										7
									
								
								htdocs/js/bootstrap.min.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										148
									
								
								htdocs/js/checklist-model.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,148 @@ | ||||
| /** | ||||
|  * Checklist-model | ||||
|  * AngularJS directive for list of checkboxes | ||||
|  * https://github.com/vitalets/checklist-model
 | ||||
|  * License: MIT http://opensource.org/licenses/MIT
 | ||||
|  */ | ||||
| 
 | ||||
| angular.module('checklist-model', []) | ||||
| .directive('checklistModel', ['$parse', '$compile', function($parse, $compile) { | ||||
|   // contains
 | ||||
|   function contains(arr, item, comparator) { | ||||
|     if (angular.isArray(arr)) { | ||||
|       for (var i = arr.length; i--;) { | ||||
|         if (comparator(arr[i], item)) { | ||||
|           return true; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   // add
 | ||||
|   function add(arr, item, comparator) { | ||||
|     arr = angular.isArray(arr) ? arr : []; | ||||
|       if(!contains(arr, item, comparator)) { | ||||
|           arr.push(item); | ||||
|       } | ||||
|     return arr; | ||||
|   }   | ||||
| 
 | ||||
|   // remove
 | ||||
|   function remove(arr, item, comparator) { | ||||
|     if (angular.isArray(arr)) { | ||||
|       for (var i = arr.length; i--;) { | ||||
|         if (comparator(arr[i], item)) { | ||||
|           arr.splice(i, 1); | ||||
|           break; | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|     return arr; | ||||
|   } | ||||
| 
 | ||||
|   // http://stackoverflow.com/a/19228302/1458162
 | ||||
|   function postLinkFn(scope, elem, attrs) { | ||||
|      // exclude recursion, but still keep the model
 | ||||
|     var checklistModel = attrs.checklistModel; | ||||
|     attrs.$set("checklistModel", null); | ||||
|     // compile with `ng-model` pointing to `checked`
 | ||||
|     $compile(elem)(scope); | ||||
|     attrs.$set("checklistModel", checklistModel); | ||||
| 
 | ||||
|     // getter / setter for original model
 | ||||
|     var getter = $parse(checklistModel); | ||||
|     var setter = getter.assign; | ||||
|     var checklistChange = $parse(attrs.checklistChange); | ||||
|     var checklistBeforeChange = $parse(attrs.checklistBeforeChange); | ||||
| 
 | ||||
|     // value added to list
 | ||||
|     var value = attrs.checklistValue ? $parse(attrs.checklistValue)(scope.$parent) : attrs.value; | ||||
| 
 | ||||
| 
 | ||||
|     var comparator = angular.equals; | ||||
| 
 | ||||
|     if (attrs.hasOwnProperty('checklistComparator')){ | ||||
|       if (attrs.checklistComparator[0] == '.') { | ||||
|         var comparatorExpression = attrs.checklistComparator.substring(1); | ||||
|         comparator = function (a, b) { | ||||
|           return a[comparatorExpression] === b[comparatorExpression]; | ||||
|         }; | ||||
|          | ||||
|       } else { | ||||
|         comparator = $parse(attrs.checklistComparator)(scope.$parent); | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     // watch UI checked change
 | ||||
|     scope.$watch(attrs.ngModel, function(newValue, oldValue) { | ||||
|       if (newValue === oldValue) {  | ||||
|         return; | ||||
|       }  | ||||
| 
 | ||||
|       if (checklistBeforeChange && (checklistBeforeChange(scope) === false)) { | ||||
|         scope[attrs.ngModel] = contains(getter(scope.$parent), value, comparator); | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       setValueInChecklistModel(value, newValue); | ||||
| 
 | ||||
|       if (checklistChange) { | ||||
|         checklistChange(scope); | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     function setValueInChecklistModel(value, checked) { | ||||
|       var current = getter(scope.$parent); | ||||
|       if (angular.isFunction(setter)) { | ||||
|         if (checked === true) { | ||||
|           setter(scope.$parent, add(current, value, comparator)); | ||||
|         } else { | ||||
|           setter(scope.$parent, remove(current, value, comparator)); | ||||
|         } | ||||
|       } | ||||
|        | ||||
|     } | ||||
| 
 | ||||
|     // declare one function to be used for both $watch functions
 | ||||
|     function setChecked(newArr, oldArr) { | ||||
|       if (checklistBeforeChange && (checklistBeforeChange(scope) === false)) { | ||||
|         setValueInChecklistModel(value, scope[attrs.ngModel]); | ||||
|         return; | ||||
|       } | ||||
|       scope[attrs.ngModel] = contains(newArr, value, comparator); | ||||
|     } | ||||
| 
 | ||||
|     // watch original model change
 | ||||
|     // use the faster $watchCollection method if it's available
 | ||||
|     if (angular.isFunction(scope.$parent.$watchCollection)) { | ||||
|         scope.$parent.$watchCollection(checklistModel, setChecked); | ||||
|     } else { | ||||
|         scope.$parent.$watch(checklistModel, setChecked, true); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return { | ||||
|     restrict: 'A', | ||||
|     priority: 1000, | ||||
|     terminal: true, | ||||
|     scope: true, | ||||
|     compile: function(tElement, tAttrs) { | ||||
|       if ((tElement[0].tagName !== 'INPUT' || tAttrs.type !== 'checkbox') && (tElement[0].tagName !== 'MD-CHECKBOX') && (!tAttrs.btnCheckbox)) { | ||||
|         throw 'checklist-model should be applied to `input[type="checkbox"]` or `md-checkbox`.'; | ||||
|       } | ||||
| 
 | ||||
|       if (!tAttrs.checklistValue && !tAttrs.value) { | ||||
|         throw 'You should provide `value` or `checklist-value`.'; | ||||
|       } | ||||
| 
 | ||||
|       // by default ngModel is 'checked', so we set it if not specified
 | ||||
|       if (!tAttrs.ngModel) { | ||||
|         // local scope var storing individual checkbox model
 | ||||
|         tAttrs.$set("ngModel", "checked"); | ||||
|       } | ||||
| 
 | ||||
|       return postLinkFn; | ||||
|     } | ||||
|   }; | ||||
| }]); | ||||
							
								
								
									
										327
									
								
								htdocs/js/html5shiv.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,327 @@ | ||||
| 
 | ||||
| /** | ||||
|  * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed | ||||
|  */ | ||||
| ;(function(window, document) { | ||||
|     /*jshint evil:true */ | ||||
|     /** version */ | ||||
|     var version = '3.7.3'; | ||||
| 
 | ||||
|     /** Preset options */ | ||||
|     var options = window.html5 || {}; | ||||
| 
 | ||||
|     /** Used to skip problem elements */ | ||||
|     var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; | ||||
| 
 | ||||
|     /** Not all elements can be cloned in IE **/ | ||||
|     var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; | ||||
| 
 | ||||
|     /** Detect whether the browser supports default html5 styles */ | ||||
|     var supportsHtml5Styles; | ||||
| 
 | ||||
|     /** Name of the expando, to work with multiple documents or to re-shiv one document */ | ||||
|     var expando = '_html5shiv'; | ||||
| 
 | ||||
|     /** The id for the the documents expando */ | ||||
|     var expanID = 0; | ||||
| 
 | ||||
|     /** Cached data for each document */ | ||||
|     var expandoData = {}; | ||||
| 
 | ||||
|     /** Detect whether the browser supports unknown elements */ | ||||
|     var supportsUnknownElements; | ||||
| 
 | ||||
|     (function() { | ||||
|         try { | ||||
|             var a = document.createElement('a'); | ||||
|             a.innerHTML = '<xyz></xyz>'; | ||||
|             //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles
 | ||||
|             supportsHtml5Styles = ('hidden' in a); | ||||
| 
 | ||||
|             supportsUnknownElements = a.childNodes.length == 1 || (function() { | ||||
|                 // assign a false positive if unable to shiv
 | ||||
|                 (document.createElement)('a'); | ||||
|                 var frag = document.createDocumentFragment(); | ||||
|                 return ( | ||||
|                     typeof frag.cloneNode == 'undefined' || | ||||
|                     typeof frag.createDocumentFragment == 'undefined' || | ||||
|                     typeof frag.createElement == 'undefined' | ||||
|                 ); | ||||
|             }()); | ||||
|         } catch(e) { | ||||
|             // assign a false positive if detection fails => unable to shiv
 | ||||
|             supportsHtml5Styles = true; | ||||
|             supportsUnknownElements = true; | ||||
|         } | ||||
| 
 | ||||
|     }()); | ||||
| 
 | ||||
|     /*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
|     /** | ||||
|      * Creates a style sheet with the given CSS text and adds it to the document. | ||||
|      * @private | ||||
|      * @param {Document} ownerDocument The document. | ||||
|      * @param {String} cssText The CSS text. | ||||
|      * @returns {StyleSheet} The style element. | ||||
|      */ | ||||
|     function addStyleSheet(ownerDocument, cssText) { | ||||
|         var p = ownerDocument.createElement('p'), | ||||
|             parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; | ||||
| 
 | ||||
|         p.innerHTML = 'x<style>' + cssText + '</style>'; | ||||
|         return parent.insertBefore(p.lastChild, parent.firstChild); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns the value of `html5.elements` as an array. | ||||
|      * @private | ||||
|      * @returns {Array} An array of shived element node names. | ||||
|      */ | ||||
|     function getElements() { | ||||
|         var elements = html5.elements; | ||||
|         return typeof elements == 'string' ? elements.split(' ') : elements; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Extends the built-in list of html5 elements | ||||
|      * @memberOf html5 | ||||
|      * @param {String|Array} newElements whitespace separated list or array of new element names to shiv | ||||
|      * @param {Document} ownerDocument The context document. | ||||
|      */ | ||||
|     function addElements(newElements, ownerDocument) { | ||||
|         var elements = html5.elements; | ||||
|         if(typeof elements != 'string'){ | ||||
|             elements = elements.join(' '); | ||||
|         } | ||||
|         if(typeof newElements != 'string'){ | ||||
|             newElements = newElements.join(' '); | ||||
|         } | ||||
|         html5.elements = elements +' '+ newElements; | ||||
|         shivDocument(ownerDocument); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns the data associated to the given document | ||||
|      * @private | ||||
|      * @param {Document} ownerDocument The document. | ||||
|      * @returns {Object} An object of data. | ||||
|      */ | ||||
|     function getExpandoData(ownerDocument) { | ||||
|         var data = expandoData[ownerDocument[expando]]; | ||||
|         if (!data) { | ||||
|             data = {}; | ||||
|             expanID++; | ||||
|             ownerDocument[expando] = expanID; | ||||
|             expandoData[expanID] = data; | ||||
|         } | ||||
|         return data; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * returns a shived element for the given nodeName and document | ||||
|      * @memberOf html5 | ||||
|      * @param {String} nodeName name of the element | ||||
|      * @param {Document|DocumentFragment} ownerDocument The context document. | ||||
|      * @returns {Object} The shived element. | ||||
|      */ | ||||
|     function createElement(nodeName, ownerDocument, data){ | ||||
|         if (!ownerDocument) { | ||||
|             ownerDocument = document; | ||||
|         } | ||||
|         if(supportsUnknownElements){ | ||||
|             return ownerDocument.createElement(nodeName); | ||||
|         } | ||||
|         if (!data) { | ||||
|             data = getExpandoData(ownerDocument); | ||||
|         } | ||||
|         var node; | ||||
| 
 | ||||
|         if (data.cache[nodeName]) { | ||||
|             node = data.cache[nodeName].cloneNode(); | ||||
|         } else if (saveClones.test(nodeName)) { | ||||
|             node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); | ||||
|         } else { | ||||
|             node = data.createElem(nodeName); | ||||
|         } | ||||
| 
 | ||||
|         // Avoid adding some elements to fragments in IE < 9 because
 | ||||
|         // * Attributes like `name` or `type` cannot be set/changed once an element
 | ||||
|         //   is inserted into a document/fragment
 | ||||
|         // * Link elements with `src` attributes that are inaccessible, as with
 | ||||
|         //   a 403 response, will cause the tab/window to crash
 | ||||
|         // * Script elements appended to fragments will execute when their `src`
 | ||||
|         //   or `text` property is set
 | ||||
|         return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * returns a shived DocumentFragment for the given document | ||||
|      * @memberOf html5 | ||||
|      * @param {Document} ownerDocument The context document. | ||||
|      * @returns {Object} The shived DocumentFragment. | ||||
|      */ | ||||
|     function createDocumentFragment(ownerDocument, data){ | ||||
|         if (!ownerDocument) { | ||||
|             ownerDocument = document; | ||||
|         } | ||||
|         if(supportsUnknownElements){ | ||||
|             return ownerDocument.createDocumentFragment(); | ||||
|         } | ||||
|         data = data || getExpandoData(ownerDocument); | ||||
|         var clone = data.frag.cloneNode(), | ||||
|             i = 0, | ||||
|             elems = getElements(), | ||||
|             l = elems.length; | ||||
|         for(;i<l;i++){ | ||||
|             clone.createElement(elems[i]); | ||||
|         } | ||||
|         return clone; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Shivs the `createElement` and `createDocumentFragment` methods of the document. | ||||
|      * @private | ||||
|      * @param {Document|DocumentFragment} ownerDocument The document. | ||||
|      * @param {Object} data of the document. | ||||
|      */ | ||||
|     function shivMethods(ownerDocument, data) { | ||||
|         if (!data.cache) { | ||||
|             data.cache = {}; | ||||
|             data.createElem = ownerDocument.createElement; | ||||
|             data.createFrag = ownerDocument.createDocumentFragment; | ||||
|             data.frag = data.createFrag(); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         ownerDocument.createElement = function(nodeName) { | ||||
|             //abort shiv
 | ||||
|             if (!html5.shivMethods) { | ||||
|                 return data.createElem(nodeName); | ||||
|             } | ||||
|             return createElement(nodeName, ownerDocument, data); | ||||
|         }; | ||||
| 
 | ||||
|         ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' + | ||||
|             'var n=f.cloneNode(),c=n.createElement;' + | ||||
|             'h.shivMethods&&(' + | ||||
|             // unroll the `createElement` calls
 | ||||
|             getElements().join().replace(/[\w\-:]+/g, function(nodeName) { | ||||
|                 data.createElem(nodeName); | ||||
|                 data.frag.createElement(nodeName); | ||||
|                 return 'c("' + nodeName + '")'; | ||||
|             }) + | ||||
|             ');return n}' | ||||
|         )(html5, data.frag); | ||||
|     } | ||||
| 
 | ||||
|     /*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
|     /** | ||||
|      * Shivs the given document. | ||||
|      * @memberOf html5 | ||||
|      * @param {Document} ownerDocument The document to shiv. | ||||
|      * @returns {Document} The shived document. | ||||
|      */ | ||||
|     function shivDocument(ownerDocument) { | ||||
|         if (!ownerDocument) { | ||||
|             ownerDocument = document; | ||||
|         } | ||||
|         var data = getExpandoData(ownerDocument); | ||||
| 
 | ||||
|         if (html5.shivCSS && !supportsHtml5Styles && !data.hasCSS) { | ||||
|             data.hasCSS = !!addStyleSheet(ownerDocument, | ||||
|                 // corrects block display not defined in IE6/7/8/9
 | ||||
|                 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' + | ||||
|                 // adds styling not present in IE6/7/8/9
 | ||||
|                 'mark{background:#FF0;color:#000}' + | ||||
|                 // hides non-rendered elements
 | ||||
|                 'template{display:none}' | ||||
|             ); | ||||
|         } | ||||
|         if (!supportsUnknownElements) { | ||||
|             shivMethods(ownerDocument, data); | ||||
|         } | ||||
|         return ownerDocument; | ||||
|     } | ||||
| 
 | ||||
|     /*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
|     /** | ||||
|      * The `html5` object is exposed so that more elements can be shived and | ||||
|      * existing shiving can be detected on iframes. | ||||
|      * @type Object | ||||
|      * @example | ||||
|      * | ||||
|      * // options can be changed before the script is included
 | ||||
|      * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false }; | ||||
|      */ | ||||
|     var html5 = { | ||||
| 
 | ||||
|         /** | ||||
|          * An array or space separated string of node names of the elements to shiv. | ||||
|          * @memberOf html5 | ||||
|          * @type Array|String | ||||
|          */ | ||||
|         'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video', | ||||
| 
 | ||||
|         /** | ||||
|          * current version of html5shiv | ||||
|          */ | ||||
|         'version': version, | ||||
| 
 | ||||
|         /** | ||||
|          * A flag to indicate that the HTML5 style sheet should be inserted. | ||||
|          * @memberOf html5 | ||||
|          * @type Boolean | ||||
|          */ | ||||
|         'shivCSS': (options.shivCSS !== false), | ||||
| 
 | ||||
|         /** | ||||
|          * Is equal to true if a browser supports creating unknown/HTML5 elements | ||||
|          * @memberOf html5 | ||||
|          * @type boolean | ||||
|          */ | ||||
|         'supportsUnknownElements': supportsUnknownElements, | ||||
| 
 | ||||
|         /** | ||||
|          * A flag to indicate that the document's `createElement` and `createDocumentFragment` | ||||
|          * methods should be overwritten. | ||||
|          * @memberOf html5 | ||||
|          * @type Boolean | ||||
|          */ | ||||
|         'shivMethods': (options.shivMethods !== false), | ||||
| 
 | ||||
|         /** | ||||
|          * A string to describe the type of `html5` object ("default" or "default print"). | ||||
|          * @memberOf html5 | ||||
|          * @type String | ||||
|          */ | ||||
|         'type': 'default', | ||||
| 
 | ||||
|         // shivs the document according to the specified `html5` object options
 | ||||
|         'shivDocument': shivDocument, | ||||
| 
 | ||||
|         //creates a shived element
 | ||||
|         createElement: createElement, | ||||
| 
 | ||||
|         //creates a shived documentFragment
 | ||||
|         createDocumentFragment: createDocumentFragment, | ||||
| 
 | ||||
|         //extends list of elements
 | ||||
|         addElements: addElements | ||||
|     }; | ||||
| 
 | ||||
|     /*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
|     // expose html5
 | ||||
|     window.html5 = html5; | ||||
| 
 | ||||
|     // shiv the document
 | ||||
|     shivDocument(document); | ||||
| 
 | ||||
|     if(typeof module == 'object' && module.exports){ | ||||
|         module.exports = html5; | ||||
|     } | ||||
| 
 | ||||
| }(typeof window !== "undefined" ? window : this, document)); | ||||
							
								
								
									
										4
									
								
								htdocs/js/jquery-3.2.1.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2
									
								
								htdocs/js/jquery-3.3.1.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										8
									
								
								htdocs/js/jquery.minicolors.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										6
									
								
								htdocs/js/jquery.wheelcolorpicker-3.0.5.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										15683
									
								
								htdocs/js/mdb.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/js/mdb.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										14384
									
								
								htdocs/js/modules/chart.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										26
									
								
								htdocs/js/modules/enhanced-modals.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,26 @@ | ||||
| /* | ||||
|     Enhanced Bootstrap Modals | ||||
|     https://mdbootstrap.com
 | ||||
|     office@mdbootstrap.com | ||||
| */ | ||||
| 
 | ||||
| $('body').on('shown.bs.modal', '.modal', function() { | ||||
|     if($('.modal-backdrop').length) { | ||||
|     } else { | ||||
| 
 | ||||
|         $modal_dialog = $(this).children('.modal-dialog') | ||||
| 
 | ||||
|         if($modal_dialog.hasClass('modal-side')) { | ||||
|             $(this).addClass('modal-scrolling'); | ||||
|             $('body').addClass('scrollable'); | ||||
|         } | ||||
| 
 | ||||
|         if($modal_dialog.hasClass('modal-frame')) { | ||||
|             $(this).addClass('modal-content-clickable'); | ||||
|             $('body').addClass('scrollable'); | ||||
|         } | ||||
|     } | ||||
| }); | ||||
| $('body').on('hidden.bs.modal', '.modal', function() { | ||||
|     $('body').removeClass('scrollable'); | ||||
| }); | ||||
							
								
								
									
										208
									
								
								htdocs/js/modules/forms-free.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,208 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| (function ($) { | ||||
| 
 | ||||
|   var inputSelector = ['text', 'password', 'email', 'url', 'tel', 'number', 'search', 'search-md'].map(function (selector) { | ||||
|     return 'input[type=' + selector + ']'; | ||||
|   }).join(', ') + ', textarea'; | ||||
| 
 | ||||
|   var textAreaSelector = '.materialize-textarea'; | ||||
| 
 | ||||
|   var updateTextFields = function updateTextFields($input) { | ||||
| 
 | ||||
|     var $labelAndIcon = $input.siblings('label, i'); | ||||
|     var hasValue = $input.val().length; | ||||
|     var hasPlaceholder = $input.attr('placeholder'); | ||||
|     var addOrRemove = (hasValue || hasPlaceholder ? 'add' : 'remove') + 'Class'; | ||||
| 
 | ||||
|     $labelAndIcon[addOrRemove]('active'); | ||||
|   }; | ||||
| 
 | ||||
|   var validateField = function validateField($input) { | ||||
| 
 | ||||
|     if ($input.hasClass('validate')) { | ||||
| 
 | ||||
|       var value = $input.val(); | ||||
|       var noValue = !value.length; | ||||
|       var isValid = !$input[0].validity.badInput; | ||||
| 
 | ||||
|       if (noValue && isValid) { | ||||
| 
 | ||||
|         $input.removeClass('valid').removeClass('invalid'); | ||||
|       } else { | ||||
| 
 | ||||
|         var valid = $input.is(':valid'); | ||||
|         var length = Number($input.attr('length')) || 0; | ||||
| 
 | ||||
|         if (valid && (!length || length > value.length)) { | ||||
| 
 | ||||
|           $input.removeClass('invalid').addClass('valid'); | ||||
|         } else { | ||||
| 
 | ||||
|           $input.removeClass('valid').addClass('invalid'); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   var textAreaAutoResize = function textAreaAutoResize() { | ||||
| 
 | ||||
|     var $textarea = $(undefined); | ||||
|     if ($textarea.val().length) { | ||||
| 
 | ||||
|       var $hiddenDiv = $('.hiddendiv'); | ||||
|       var fontFamily = $textarea.css('font-family'); | ||||
|       var fontSize = $textarea.css('font-size'); | ||||
| 
 | ||||
|       if (fontSize) { | ||||
| 
 | ||||
|         $hiddenDiv.css('font-size', fontSize); | ||||
|       } | ||||
| 
 | ||||
|       if (fontFamily) { | ||||
| 
 | ||||
|         $hiddenDiv.css('font-family', fontFamily); | ||||
|       } | ||||
| 
 | ||||
|       if ($textarea.attr('wrap') === 'off') { | ||||
| 
 | ||||
|         $hiddenDiv.css('overflow-wrap', 'normal').css('white-space', 'pre'); | ||||
|       } | ||||
| 
 | ||||
|       $hiddenDiv.text($textarea.val() + '\n'); | ||||
|       var content = $hiddenDiv.html().replace(/\n/g, '<br>'); | ||||
|       $hiddenDiv.html(content); | ||||
| 
 | ||||
|       // When textarea is hidden, width goes crazy.
 | ||||
|       // Approximate with half of window size
 | ||||
|       $hiddenDiv.css('width', $textarea.is(':visible') ? $textarea.width() : $(window).width() / 2); | ||||
|       $textarea.css('height', $hiddenDiv.height()); | ||||
|     } | ||||
|   }; | ||||
| 
 | ||||
|   $(inputSelector).each(function (index, input) { | ||||
| 
 | ||||
|     var $this = $(input); | ||||
|     var $labelAndIcon = $this.siblings('label, i'); | ||||
|     updateTextFields($this); | ||||
|     var isValid = input.validity.badInput; | ||||
|     if (isValid) { | ||||
| 
 | ||||
|       $labelAndIcon.addClass('active'); | ||||
|     } | ||||
|   }); | ||||
| 
 | ||||
|   $(document).on('focus', inputSelector, function (e) { | ||||
| 
 | ||||
|     $(e.target).siblings('label, i').addClass('active'); | ||||
|   }); | ||||
| 
 | ||||
|   $(document).on('blur', inputSelector, function (e) { | ||||
| 
 | ||||
|     var $this = $(e.target); | ||||
|     var noValue = !$this.val(); | ||||
|     var invalid = !e.target.validity.badInput; | ||||
|     var noPlaceholder = $this.attr('placeholder') === undefined; | ||||
| 
 | ||||
|     if (noValue && invalid && noPlaceholder) { | ||||
| 
 | ||||
|       $this.siblings('label, i').removeClass('active'); | ||||
|     } | ||||
| 
 | ||||
|     validateField($this); | ||||
|   }); | ||||
| 
 | ||||
|   $(document).on('change', inputSelector, function (e) { | ||||
| 
 | ||||
|     var $this = $(e.target); | ||||
|     updateTextFields($this); | ||||
|     validateField($this); | ||||
|   }); | ||||
| 
 | ||||
|   $('input[autofocus]').siblings('label, i').addClass('active'); | ||||
| 
 | ||||
|   $(document).on('reset', function (e) { | ||||
| 
 | ||||
|     var $formReset = $(e.target); | ||||
|     if ($formReset.is('form')) { | ||||
| 
 | ||||
|       var $formInputs = $formReset.find(inputSelector); | ||||
|       $formInputs.removeClass('valid').removeClass('invalid').each(function (index, input) { | ||||
| 
 | ||||
|         var $this = $(input); | ||||
|         var noDefaultValue = !$this.val(); | ||||
|         var noPlaceholder = !$this.attr('placeholder'); | ||||
|         if (noDefaultValue && noPlaceholder) { | ||||
|           $this.siblings('label, i').removeClass('active'); | ||||
|         } | ||||
|       }); | ||||
| 
 | ||||
|       $formReset.find('select.initialized').each(function (index, select) { | ||||
| 
 | ||||
|         var $select = $(select); | ||||
|         var $visibleInput = $select.siblings('input.select-dropdown'); | ||||
|         var defaultValue = $select.children('[selected]').val(); | ||||
| 
 | ||||
|         $select.val(defaultValue); | ||||
|         $visibleInput.val(defaultValue); | ||||
|       }); | ||||
|     } | ||||
|   }); | ||||
| 
 | ||||
|   function init() { | ||||
| 
 | ||||
|     var $text = $('.md-textarea-auto'); | ||||
|     if ($text.length) { | ||||
| 
 | ||||
|       var observe = void 0; | ||||
|       if (window.attachEvent) { | ||||
| 
 | ||||
|         observe = function observe(element, event, handler) { | ||||
| 
 | ||||
|           element.attachEvent('on' + event, handler); | ||||
|         }; | ||||
|       } else { | ||||
| 
 | ||||
|         observe = function observe(element, event, handler) { | ||||
| 
 | ||||
|           element.addEventListener(event, handler, false); | ||||
|         }; | ||||
|       } | ||||
| 
 | ||||
|       $text.each(function () { | ||||
| 
 | ||||
|         var self = this; | ||||
| 
 | ||||
|         function resize() { | ||||
| 
 | ||||
|           self.style.height = 'auto'; | ||||
|           self.style.height = self.scrollHeight + 'px'; | ||||
|         } | ||||
| 
 | ||||
|         function delayedResize() { | ||||
| 
 | ||||
|           window.setTimeout(resize, 0); | ||||
|         } | ||||
| 
 | ||||
|         observe(self, 'change', resize); | ||||
|         observe(self, 'cut', delayedResize); | ||||
|         observe(self, 'paste', delayedResize); | ||||
|         observe(self, 'drop', delayedResize); | ||||
|         observe(self, 'keydown', delayedResize); | ||||
| 
 | ||||
|         resize(); | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
|   init(); | ||||
| 
 | ||||
|   var $body = $('body'); | ||||
|   if (!$('.hiddendiv').first().length) { | ||||
| 
 | ||||
|     var $hiddenDiv = $('<div class="hiddendiv common"></div>'); | ||||
|     $body.append($hiddenDiv); | ||||
|   } | ||||
| 
 | ||||
|   $(textAreaSelector).each(textAreaAutoResize); | ||||
|   $body.on('keyup keydown', textAreaSelector, textAreaAutoResize); | ||||
| })(jQuery); | ||||
							
								
								
									
										205
									
								
								htdocs/js/modules/jquery.easing.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,205 @@ | ||||
| /* | ||||
|  * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 | ||||
|  * | ||||
|  * Uses the built in easing capabilities added In jQuery 1.1 | ||||
|  * to offer multiple easing options | ||||
|  * | ||||
|  * TERMS OF USE - jQuery Easing | ||||
|  * | ||||
|  * Open source under the BSD License. | ||||
|  * | ||||
|  * Copyright © 2008 George McGinley Smith | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without modification, | ||||
|  * are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * Redistributions of source code must retain the above copyright notice, this list of | ||||
|  * conditions and the following disclaimer. | ||||
|  * Redistributions in binary form must reproduce the above copyright notice, this list | ||||
|  * of conditions and the following disclaimer in the documentation and/or other materials | ||||
|  * provided with the distribution. | ||||
|  * | ||||
|  * Neither the name of the author nor the names of contributors may be used to endorse | ||||
|  * or promote products derived from this software without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY | ||||
|  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||||
|  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||||
|  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||||
|  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | ||||
|  *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||||
|  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
|  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||||
|  * OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  * | ||||
| */ | ||||
| 
 | ||||
| // t: current time, b: begInnIng value, c: change In value, d: duration
 | ||||
| jQuery.easing['jswing'] = jQuery.easing['swing']; | ||||
| 
 | ||||
| jQuery.extend( jQuery.easing, | ||||
| { | ||||
|     def: 'easeOutQuad', | ||||
|     swing: function (x, t, b, c, d) { | ||||
|         //alert(jQuery.easing.default);
 | ||||
|         return jQuery.easing[jQuery.easing.def](x, t, b, c, d); | ||||
|     }, | ||||
|     easeInQuad: function (x, t, b, c, d) { | ||||
|         return c*(t/=d)*t + b; | ||||
|     }, | ||||
|     easeOutQuad: function (x, t, b, c, d) { | ||||
|         return -c *(t/=d)*(t-2) + b; | ||||
|     }, | ||||
|     easeInOutQuad: function (x, t, b, c, d) { | ||||
|         if ((t/=d/2) < 1) return c/2*t*t + b; | ||||
|         return -c/2 * ((--t)*(t-2) - 1) + b; | ||||
|     }, | ||||
|     easeInCubic: function (x, t, b, c, d) { | ||||
|         return c*(t/=d)*t*t + b; | ||||
|     }, | ||||
|     easeOutCubic: function (x, t, b, c, d) { | ||||
|         return c*((t=t/d-1)*t*t + 1) + b; | ||||
|     }, | ||||
|     easeInOutCubic: function (x, t, b, c, d) { | ||||
|         if ((t/=d/2) < 1) return c/2*t*t*t + b; | ||||
|         return c/2*((t-=2)*t*t + 2) + b; | ||||
|     }, | ||||
|     easeInQuart: function (x, t, b, c, d) { | ||||
|         return c*(t/=d)*t*t*t + b; | ||||
|     }, | ||||
|     easeOutQuart: function (x, t, b, c, d) { | ||||
|         return -c * ((t=t/d-1)*t*t*t - 1) + b; | ||||
|     }, | ||||
|     easeInOutQuart: function (x, t, b, c, d) { | ||||
|         if ((t/=d/2) < 1) return c/2*t*t*t*t + b; | ||||
|         return -c/2 * ((t-=2)*t*t*t - 2) + b; | ||||
|     }, | ||||
|     easeInQuint: function (x, t, b, c, d) { | ||||
|         return c*(t/=d)*t*t*t*t + b; | ||||
|     }, | ||||
|     easeOutQuint: function (x, t, b, c, d) { | ||||
|         return c*((t=t/d-1)*t*t*t*t + 1) + b; | ||||
|     }, | ||||
|     easeInOutQuint: function (x, t, b, c, d) { | ||||
|         if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; | ||||
|         return c/2*((t-=2)*t*t*t*t + 2) + b; | ||||
|     }, | ||||
|     easeInSine: function (x, t, b, c, d) { | ||||
|         return -c * Math.cos(t/d * (Math.PI/2)) + c + b; | ||||
|     }, | ||||
|     easeOutSine: function (x, t, b, c, d) { | ||||
|         return c * Math.sin(t/d * (Math.PI/2)) + b; | ||||
|     }, | ||||
|     easeInOutSine: function (x, t, b, c, d) { | ||||
|         return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; | ||||
|     }, | ||||
|     easeInExpo: function (x, t, b, c, d) { | ||||
|         return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; | ||||
|     }, | ||||
|     easeOutExpo: function (x, t, b, c, d) { | ||||
|         return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; | ||||
|     }, | ||||
|     easeInOutExpo: function (x, t, b, c, d) { | ||||
|         if (t==0) return b; | ||||
|         if (t==d) return b+c; | ||||
|         if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; | ||||
|         return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; | ||||
|     }, | ||||
|     easeInCirc: function (x, t, b, c, d) { | ||||
|         return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; | ||||
|     }, | ||||
|     easeOutCirc: function (x, t, b, c, d) { | ||||
|         return c * Math.sqrt(1 - (t=t/d-1)*t) + b; | ||||
|     }, | ||||
|     easeInOutCirc: function (x, t, b, c, d) { | ||||
|         if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; | ||||
|         return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; | ||||
|     }, | ||||
|     easeInElastic: function (x, t, b, c, d) { | ||||
|         var s=1.70158;var p=0;var a=c; | ||||
|         if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3; | ||||
|         if (a < Math.abs(c)) { a=c; var s=p/4; } | ||||
|         else var s = p/(2*Math.PI) * Math.asin (c/a); | ||||
|         return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; | ||||
|     }, | ||||
|     easeOutElastic: function (x, t, b, c, d) { | ||||
|         var s=1.70158;var p=0;var a=c; | ||||
|         if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3; | ||||
|         if (a < Math.abs(c)) { a=c; var s=p/4; } | ||||
|         else var s = p/(2*Math.PI) * Math.asin (c/a); | ||||
|         return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; | ||||
|     }, | ||||
|     easeInOutElastic: function (x, t, b, c, d) { | ||||
|         var s=1.70158;var p=0;var a=c; | ||||
|         if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5); | ||||
|         if (a < Math.abs(c)) { a=c; var s=p/4; } | ||||
|         else var s = p/(2*Math.PI) * Math.asin (c/a); | ||||
|         if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; | ||||
|         return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; | ||||
|     }, | ||||
|     easeInBack: function (x, t, b, c, d, s) { | ||||
|         if (s == undefined) s = 1.70158; | ||||
|         return c*(t/=d)*t*((s+1)*t - s) + b; | ||||
|     }, | ||||
|     easeOutBack: function (x, t, b, c, d, s) { | ||||
|         if (s == undefined) s = 1.70158; | ||||
|         return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; | ||||
|     }, | ||||
|     easeInOutBack: function (x, t, b, c, d, s) { | ||||
|         if (s == undefined) s = 1.70158; | ||||
|         if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; | ||||
|         return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; | ||||
|     }, | ||||
|     easeInBounce: function (x, t, b, c, d) { | ||||
|         return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; | ||||
|     }, | ||||
|     easeOutBounce: function (x, t, b, c, d) { | ||||
|         if ((t/=d) < (1/2.75)) { | ||||
|             return c*(7.5625*t*t) + b; | ||||
|         } else if (t < (2/2.75)) { | ||||
|             return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; | ||||
|         } else if (t < (2.5/2.75)) { | ||||
|             return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; | ||||
|         } else { | ||||
|             return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; | ||||
|         } | ||||
|     }, | ||||
|     easeInOutBounce: function (x, t, b, c, d) { | ||||
|         if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; | ||||
|         return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; | ||||
|     } | ||||
| }); | ||||
| 
 | ||||
| /* | ||||
|  * | ||||
|  * TERMS OF USE - EASING EQUATIONS | ||||
|  * | ||||
|  * Open source under the BSD License. | ||||
|  * | ||||
|  * Copyright © 2001 Robert Penner | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without modification, | ||||
|  * are permitted provided that the following conditions are met: | ||||
|  * | ||||
|  * Redistributions of source code must retain the above copyright notice, this list of | ||||
|  * conditions and the following disclaimer. | ||||
|  * Redistributions in binary form must reproduce the above copyright notice, this list | ||||
|  * of conditions and the following disclaimer in the documentation and/or other materials | ||||
|  * provided with the distribution. | ||||
|  * | ||||
|  * Neither the name of the author nor the names of contributors may be used to endorse | ||||
|  * or promote products derived from this software without specific prior written permission. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY | ||||
|  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | ||||
|  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||||
|  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||||
|  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE | ||||
|  *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | ||||
|  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | ||||
|  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | ||||
|  * OF THE POSSIBILITY OF SUCH DAMAGE. | ||||
|  * | ||||
|  */ | ||||
							
								
								
									
										21
									
								
								htdocs/js/modules/scrolling-navbar.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,21 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| (function ($) { | ||||
| 
 | ||||
|   var SCROLLING_NAVBAR_OFFSET_TOP = 50; | ||||
| 
 | ||||
|   $(window).on('scroll', function () { | ||||
| 
 | ||||
|     var $navbar = $('.navbar'); | ||||
|     if ($navbar.length) { | ||||
| 
 | ||||
|       if ($navbar.offset().top > SCROLLING_NAVBAR_OFFSET_TOP) { | ||||
| 
 | ||||
|         $('.scrolling-navbar').addClass('top-nav-collapse'); | ||||
|       } else { | ||||
| 
 | ||||
|         $('.scrolling-navbar').removeClass('top-nav-collapse'); | ||||
|       } | ||||
|     } | ||||
|   }); | ||||
| })(jQuery); | ||||
							
								
								
									
										5
									
								
								htdocs/js/modules/velocity.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										5
									
								
								htdocs/js/modules/velocity.min.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										611
									
								
								htdocs/js/modules/waves.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,611 @@ | ||||
| /*! | ||||
|  * Waves v0.7.6 | ||||
|  * http://fian.my.id/Waves
 | ||||
|  * | ||||
|  * Copyright 2014-2018 Alfiana E. Sibuea and other contributors | ||||
|  * Released under the MIT license | ||||
|  * https://github.com/fians/Waves/blob/master/LICENSE
 | ||||
|  */ | ||||
| 
 | ||||
| ;(function(window, factory) { | ||||
|     'use strict'; | ||||
| 
 | ||||
|     // AMD. Register as an anonymous module.  Wrap in function so we have access
 | ||||
|     // to root via `this`.
 | ||||
|     if (typeof define === 'function' && define.amd) { | ||||
|         define([], function() { | ||||
|             window.Waves = factory.call(window); | ||||
|             return window.Waves; | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|     // Node. Does not work with strict CommonJS, but only CommonJS-like
 | ||||
|     // environments that support module.exports, like Node.
 | ||||
|     else if (typeof exports === 'object') { | ||||
|         module.exports = factory.call(window); | ||||
|     } | ||||
| 
 | ||||
|     // Browser globals.
 | ||||
|     else { | ||||
|         window.Waves = factory.call(window); | ||||
|     } | ||||
| })(typeof global === 'object' ? global : this, function() { | ||||
|     'use strict'; | ||||
| 
 | ||||
|     var Waves            = Waves || {}; | ||||
|     var $$               = document.querySelectorAll.bind(document); | ||||
|     var toString         = Object.prototype.toString; | ||||
|     var isTouchAvailable = 'ontouchstart' in window; | ||||
| 
 | ||||
| 
 | ||||
|     // Find exact position of element
 | ||||
|     function isWindow(obj) { | ||||
|         return obj !== null && obj === obj.window; | ||||
|     } | ||||
| 
 | ||||
|     function getWindow(elem) { | ||||
|         return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView; | ||||
|     } | ||||
| 
 | ||||
|     function isObject(value) { | ||||
|         var type = typeof value; | ||||
|         return type === 'function' || type === 'object' && !!value; | ||||
|     } | ||||
| 
 | ||||
|     function isDOMNode(obj) { | ||||
|         return isObject(obj) && obj.nodeType > 0; | ||||
|     } | ||||
| 
 | ||||
|     function getWavesElements(nodes) { | ||||
|         var stringRepr = toString.call(nodes); | ||||
| 
 | ||||
|         if (stringRepr === '[object String]') { | ||||
|             return $$(nodes); | ||||
|         } else if (isObject(nodes) && /^\[object (Array|HTMLCollection|NodeList|Object)\]$/.test(stringRepr) && nodes.hasOwnProperty('length')) { | ||||
|             return nodes; | ||||
|         } else if (isDOMNode(nodes)) { | ||||
|             return [nodes]; | ||||
|         } | ||||
| 
 | ||||
|         return []; | ||||
|     } | ||||
| 
 | ||||
|     function offset(elem) { | ||||
|         var docElem, win, | ||||
|             box = { top: 0, left: 0 }, | ||||
|             doc = elem && elem.ownerDocument; | ||||
| 
 | ||||
|         docElem = doc.documentElement; | ||||
| 
 | ||||
|         if (typeof elem.getBoundingClientRect !== typeof undefined) { | ||||
|             box = elem.getBoundingClientRect(); | ||||
|         } | ||||
|         win = getWindow(doc); | ||||
|         return { | ||||
|             top: box.top + win.pageYOffset - docElem.clientTop, | ||||
|             left: box.left + win.pageXOffset - docElem.clientLeft | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     function convertStyle(styleObj) { | ||||
|         var style = ''; | ||||
| 
 | ||||
|         for (var prop in styleObj) { | ||||
|             if (styleObj.hasOwnProperty(prop)) { | ||||
|                 style += (prop + ':' + styleObj[prop] + ';'); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return style; | ||||
|     } | ||||
| 
 | ||||
|     var Effect = { | ||||
| 
 | ||||
|         // Effect duration
 | ||||
|         duration: 750, | ||||
| 
 | ||||
|         // Effect delay (check for scroll before showing effect)
 | ||||
|         delay: 200, | ||||
| 
 | ||||
|         show: function(e, element, velocity) { | ||||
| 
 | ||||
|             // Disable right click
 | ||||
|             if (e.button === 2) { | ||||
|                 return false; | ||||
|             } | ||||
| 
 | ||||
|             element = element || this; | ||||
| 
 | ||||
|             // Create ripple
 | ||||
|             var ripple = document.createElement('div'); | ||||
|             ripple.className = 'waves-ripple waves-rippling'; | ||||
|             element.appendChild(ripple); | ||||
| 
 | ||||
|             // Get click coordinate and element width
 | ||||
|             var pos       = offset(element); | ||||
|             var relativeY = 0; | ||||
|             var relativeX = 0; | ||||
|             // Support for touch devices
 | ||||
|             if('touches' in e && e.touches.length) { | ||||
|                 relativeY   = (e.touches[0].pageY - pos.top); | ||||
|                 relativeX   = (e.touches[0].pageX - pos.left); | ||||
|             } | ||||
|             //Normal case
 | ||||
|             else { | ||||
|                 relativeY   = (e.pageY - pos.top); | ||||
|                 relativeX   = (e.pageX - pos.left); | ||||
|             } | ||||
|             // Support for synthetic events
 | ||||
|             relativeX = relativeX >= 0 ? relativeX : 0; | ||||
|             relativeY = relativeY >= 0 ? relativeY : 0; | ||||
| 
 | ||||
|             var scale     = 'scale(' + ((element.clientWidth / 100) * 3) + ')'; | ||||
|             var translate = 'translate(0,0)'; | ||||
| 
 | ||||
|             if (velocity) { | ||||
|                 translate = 'translate(' + (velocity.x) + 'px, ' + (velocity.y) + 'px)'; | ||||
|             } | ||||
| 
 | ||||
|             // Attach data to element
 | ||||
|             ripple.setAttribute('data-hold', Date.now()); | ||||
|             ripple.setAttribute('data-x', relativeX); | ||||
|             ripple.setAttribute('data-y', relativeY); | ||||
|             ripple.setAttribute('data-scale', scale); | ||||
|             ripple.setAttribute('data-translate', translate); | ||||
| 
 | ||||
|             // Set ripple position
 | ||||
|             var rippleStyle = { | ||||
|                 top: relativeY + 'px', | ||||
|                 left: relativeX + 'px' | ||||
|             }; | ||||
| 
 | ||||
|             ripple.classList.add('waves-notransition'); | ||||
|             ripple.setAttribute('style', convertStyle(rippleStyle)); | ||||
|             ripple.classList.remove('waves-notransition'); | ||||
| 
 | ||||
|             // Scale the ripple
 | ||||
|             rippleStyle['-webkit-transform'] = scale + ' ' + translate; | ||||
|             rippleStyle['-moz-transform'] = scale + ' ' + translate; | ||||
|             rippleStyle['-ms-transform'] = scale + ' ' + translate; | ||||
|             rippleStyle['-o-transform'] = scale + ' ' + translate; | ||||
|             rippleStyle.transform = scale + ' ' + translate; | ||||
|             rippleStyle.opacity = '1'; | ||||
| 
 | ||||
|             var duration = e.type === 'mousemove' ? 2500 : Effect.duration; | ||||
|             rippleStyle['-webkit-transition-duration'] = duration + 'ms'; | ||||
|             rippleStyle['-moz-transition-duration']    = duration + 'ms'; | ||||
|             rippleStyle['-o-transition-duration']      = duration + 'ms'; | ||||
|             rippleStyle['transition-duration']         = duration + 'ms'; | ||||
| 
 | ||||
|             ripple.setAttribute('style', convertStyle(rippleStyle)); | ||||
|         }, | ||||
| 
 | ||||
|         hide: function(e, element) { | ||||
|             element = element || this; | ||||
| 
 | ||||
|             var ripples = element.getElementsByClassName('waves-rippling'); | ||||
| 
 | ||||
|             for (var i = 0, len = ripples.length; i < len; i++) { | ||||
|                 removeRipple(e, element, ripples[i]); | ||||
|             } | ||||
| 
 | ||||
|             if (isTouchAvailable) { | ||||
|                 element.removeEventListener('touchend', Effect.hide); | ||||
|                 element.removeEventListener('touchcancel', Effect.hide); | ||||
|             } | ||||
| 
 | ||||
|             element.removeEventListener('mouseup', Effect.hide); | ||||
|             element.removeEventListener('mouseleave', Effect.hide); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     /** | ||||
|      * Collection of wrapper for HTML element that only have single tag | ||||
|      * like <input> and <img> | ||||
|      */ | ||||
|     var TagWrapper = { | ||||
| 
 | ||||
|         // Wrap <input> tag so it can perform the effect
 | ||||
|         input: function(element) { | ||||
| 
 | ||||
|             var parent = element.parentNode; | ||||
| 
 | ||||
|             // If input already have parent just pass through
 | ||||
|             if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) { | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             // Put element class and style to the specified parent
 | ||||
|             var wrapper       = document.createElement('i'); | ||||
|             wrapper.className = element.className + ' waves-input-wrapper'; | ||||
|             element.className = 'waves-button-input'; | ||||
| 
 | ||||
|             // Put element as child
 | ||||
|             parent.replaceChild(wrapper, element); | ||||
|             wrapper.appendChild(element); | ||||
| 
 | ||||
|             // Apply element color and background color to wrapper
 | ||||
|             var elementStyle    = window.getComputedStyle(element, null); | ||||
|             var color           = elementStyle.color; | ||||
|             var backgroundColor = elementStyle.backgroundColor; | ||||
| 
 | ||||
|             wrapper.setAttribute('style', 'color:' + color + ';background:' + backgroundColor); | ||||
|             element.setAttribute('style', 'background-color:rgba(0,0,0,0);'); | ||||
| 
 | ||||
|         }, | ||||
| 
 | ||||
|         // Wrap <img> tag so it can perform the effect
 | ||||
|         img: function(element) { | ||||
| 
 | ||||
|             var parent = element.parentNode; | ||||
| 
 | ||||
|             // If input already have parent just pass through
 | ||||
|             if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) { | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             // Put element as child
 | ||||
|             var wrapper  = document.createElement('i'); | ||||
|             parent.replaceChild(wrapper, element); | ||||
|             wrapper.appendChild(element); | ||||
| 
 | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     /** | ||||
|      * Hide the effect and remove the ripple. Must be | ||||
|      * a separate function to pass the JSLint... | ||||
|      */ | ||||
|     function removeRipple(e, el, ripple) { | ||||
| 
 | ||||
|         // Check if the ripple still exist
 | ||||
|         if (!ripple) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         ripple.classList.remove('waves-rippling'); | ||||
| 
 | ||||
|         var relativeX = ripple.getAttribute('data-x'); | ||||
|         var relativeY = ripple.getAttribute('data-y'); | ||||
|         var scale     = ripple.getAttribute('data-scale'); | ||||
|         var translate = ripple.getAttribute('data-translate'); | ||||
| 
 | ||||
|         // Get delay beetween mousedown and mouse leave
 | ||||
|         var diff = Date.now() - Number(ripple.getAttribute('data-hold')); | ||||
|         var delay = 350 - diff; | ||||
| 
 | ||||
|         if (delay < 0) { | ||||
|             delay = 0; | ||||
|         } | ||||
| 
 | ||||
|         if (e.type === 'mousemove') { | ||||
|             delay = 150; | ||||
|         } | ||||
| 
 | ||||
|         // Fade out ripple after delay
 | ||||
|         var duration = e.type === 'mousemove' ? 2500 : Effect.duration; | ||||
| 
 | ||||
|         setTimeout(function() { | ||||
| 
 | ||||
|             var style = { | ||||
|                 top: relativeY + 'px', | ||||
|                 left: relativeX + 'px', | ||||
|                 opacity: '0', | ||||
| 
 | ||||
|                 // Duration
 | ||||
|                 '-webkit-transition-duration': duration + 'ms', | ||||
|                 '-moz-transition-duration': duration + 'ms', | ||||
|                 '-o-transition-duration': duration + 'ms', | ||||
|                 'transition-duration': duration + 'ms', | ||||
|                 '-webkit-transform': scale + ' ' + translate, | ||||
|                 '-moz-transform': scale + ' ' + translate, | ||||
|                 '-ms-transform': scale + ' ' + translate, | ||||
|                 '-o-transform': scale + ' ' + translate, | ||||
|                 'transform': scale + ' ' + translate | ||||
|             }; | ||||
| 
 | ||||
|             ripple.setAttribute('style', convertStyle(style)); | ||||
| 
 | ||||
|             setTimeout(function() { | ||||
|                 try { | ||||
|                     el.removeChild(ripple); | ||||
|                 } catch (e) { | ||||
|                     return false; | ||||
|                 } | ||||
|             }, duration); | ||||
| 
 | ||||
|         }, delay); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * Disable mousedown event for 500ms during and after touch | ||||
|      */ | ||||
|     var TouchHandler = { | ||||
| 
 | ||||
|         /* uses an integer rather than bool so there's no issues with | ||||
|          * needing to clear timeouts if another touch event occurred | ||||
|          * within the 500ms. Cannot mouseup between touchstart and | ||||
|          * touchend, nor in the 500ms after touchend. */ | ||||
|         touches: 0, | ||||
| 
 | ||||
|         allowEvent: function(e) { | ||||
| 
 | ||||
|             var allow = true; | ||||
| 
 | ||||
|             if (/^(mousedown|mousemove)$/.test(e.type) && TouchHandler.touches) { | ||||
|                 allow = false; | ||||
|             } | ||||
| 
 | ||||
|             return allow; | ||||
|         }, | ||||
|         registerEvent: function(e) { | ||||
|             var eType = e.type; | ||||
| 
 | ||||
|             if (eType === 'touchstart') { | ||||
| 
 | ||||
|                 TouchHandler.touches += 1; // push
 | ||||
| 
 | ||||
|             } else if (/^(touchend|touchcancel)$/.test(eType)) { | ||||
| 
 | ||||
|                 setTimeout(function() { | ||||
|                     if (TouchHandler.touches) { | ||||
|                         TouchHandler.touches -= 1; // pop after 500ms
 | ||||
|                     } | ||||
|                 }, 500); | ||||
| 
 | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * Delegated click handler for .waves-effect element. | ||||
|      * returns null when .waves-effect element not in "click tree" | ||||
|      */ | ||||
|     function getWavesEffectElement(e) { | ||||
| 
 | ||||
|         if (TouchHandler.allowEvent(e) === false) { | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         var element = null; | ||||
|         var target = e.target || e.srcElement; | ||||
| 
 | ||||
|         while (target.parentElement) { | ||||
|             if ( (!(target instanceof SVGElement)) && target.classList.contains('waves-effect')) { | ||||
|                 element = target; | ||||
|                 break; | ||||
|             } | ||||
|             target = target.parentElement; | ||||
|         } | ||||
| 
 | ||||
|         return element; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Bubble the click and show effect if .waves-effect elem was found | ||||
|      */ | ||||
|     function showEffect(e) { | ||||
| 
 | ||||
|         // Disable effect if element has "disabled" property on it
 | ||||
|         // In some cases, the event is not triggered by the current element
 | ||||
|         // if (e.target.getAttribute('disabled') !== null) {
 | ||||
|         //     return;
 | ||||
|         // }
 | ||||
| 
 | ||||
|         var element = getWavesEffectElement(e); | ||||
| 
 | ||||
|         if (element !== null) { | ||||
| 
 | ||||
|             // Make it sure the element has either disabled property, disabled attribute or 'disabled' class
 | ||||
|             if (element.disabled || element.getAttribute('disabled') || element.classList.contains('disabled')) { | ||||
|                 return; | ||||
|             } | ||||
| 
 | ||||
|             TouchHandler.registerEvent(e); | ||||
| 
 | ||||
|             if (e.type === 'touchstart' && Effect.delay) { | ||||
| 
 | ||||
|                 var hidden = false; | ||||
| 
 | ||||
|                 var timer = setTimeout(function () { | ||||
|                     timer = null; | ||||
|                     Effect.show(e, element); | ||||
|                 }, Effect.delay); | ||||
| 
 | ||||
|                 var hideEffect = function(hideEvent) { | ||||
| 
 | ||||
|                     // if touch hasn't moved, and effect not yet started: start effect now
 | ||||
|                     if (timer) { | ||||
|                         clearTimeout(timer); | ||||
|                         timer = null; | ||||
|                         Effect.show(e, element); | ||||
|                     } | ||||
|                     if (!hidden) { | ||||
|                         hidden = true; | ||||
|                         Effect.hide(hideEvent, element); | ||||
|                     } | ||||
| 
 | ||||
|                     removeListeners(); | ||||
|                 }; | ||||
| 
 | ||||
|                 var touchMove = function(moveEvent) { | ||||
|                     if (timer) { | ||||
|                         clearTimeout(timer); | ||||
|                         timer = null; | ||||
|                     } | ||||
|                     hideEffect(moveEvent); | ||||
| 
 | ||||
|                     removeListeners(); | ||||
|                 }; | ||||
| 
 | ||||
|                 element.addEventListener('touchmove', touchMove, false); | ||||
|                 element.addEventListener('touchend', hideEffect, false); | ||||
|                 element.addEventListener('touchcancel', hideEffect, false); | ||||
| 
 | ||||
|                 var removeListeners = function() { | ||||
|                     element.removeEventListener('touchmove', touchMove); | ||||
|                     element.removeEventListener('touchend', hideEffect); | ||||
|                     element.removeEventListener('touchcancel', hideEffect); | ||||
|                 }; | ||||
|             } else { | ||||
| 
 | ||||
|                 Effect.show(e, element); | ||||
| 
 | ||||
|                 if (isTouchAvailable) { | ||||
|                     element.addEventListener('touchend', Effect.hide, false); | ||||
|                     element.addEventListener('touchcancel', Effect.hide, false); | ||||
|                 } | ||||
| 
 | ||||
|                 element.addEventListener('mouseup', Effect.hide, false); | ||||
|                 element.addEventListener('mouseleave', Effect.hide, false); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     Waves.init = function(options) { | ||||
|         var body = document.body; | ||||
| 
 | ||||
|         options = options || {}; | ||||
| 
 | ||||
|         if ('duration' in options) { | ||||
|             Effect.duration = options.duration; | ||||
|         } | ||||
| 
 | ||||
|         if ('delay' in options) { | ||||
|             Effect.delay = options.delay; | ||||
|         } | ||||
| 
 | ||||
|         if (isTouchAvailable) { | ||||
|             body.addEventListener('touchstart', showEffect, false); | ||||
|             body.addEventListener('touchcancel', TouchHandler.registerEvent, false); | ||||
|             body.addEventListener('touchend', TouchHandler.registerEvent, false); | ||||
|         } | ||||
| 
 | ||||
|         body.addEventListener('mousedown', showEffect, false); | ||||
|     }; | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * Attach Waves to dynamically loaded inputs, or add .waves-effect and other | ||||
|      * waves classes to a set of elements. Set drag to true if the ripple mouseover | ||||
|      * or skimming effect should be applied to the elements. | ||||
|      */ | ||||
|     Waves.attach = function(elements, classes) { | ||||
| 
 | ||||
|         elements = getWavesElements(elements); | ||||
| 
 | ||||
|         if (toString.call(classes) === '[object Array]') { | ||||
|             classes = classes.join(' '); | ||||
|         } | ||||
| 
 | ||||
|         classes = classes ? ' ' + classes : ''; | ||||
| 
 | ||||
|         var element, tagName; | ||||
| 
 | ||||
|         for (var i = 0, len = elements.length; i < len; i++) { | ||||
| 
 | ||||
|             element = elements[i]; | ||||
|             tagName = element.tagName.toLowerCase(); | ||||
| 
 | ||||
|             if (['input', 'img'].indexOf(tagName) !== -1) { | ||||
|                 TagWrapper[tagName](element); | ||||
|                 element = element.parentElement; | ||||
|             } | ||||
| 
 | ||||
|             if (element.className.indexOf('waves-effect') === -1) { | ||||
|                 element.className += ' waves-effect' + classes; | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * Cause a ripple to appear in an element via code. | ||||
|      */ | ||||
|     Waves.ripple = function(elements, options) { | ||||
|         elements = getWavesElements(elements); | ||||
|         var elementsLen = elements.length; | ||||
| 
 | ||||
|         options          = options || {}; | ||||
|         options.wait     = options.wait || 0; | ||||
|         options.position = options.position || null; // default = centre of element
 | ||||
| 
 | ||||
| 
 | ||||
|         if (elementsLen) { | ||||
|             var element, pos, off, centre = {}, i = 0; | ||||
|             var mousedown = { | ||||
|                 type: 'mousedown', | ||||
|                 button: 1 | ||||
|             }; | ||||
|             var hideRipple = function(mouseup, element) { | ||||
|                 return function() { | ||||
|                     Effect.hide(mouseup, element); | ||||
|                 }; | ||||
|             }; | ||||
| 
 | ||||
|             for (; i < elementsLen; i++) { | ||||
|                 element = elements[i]; | ||||
|                 pos = options.position || { | ||||
|                     x: element.clientWidth / 2, | ||||
|                     y: element.clientHeight / 2 | ||||
|                 }; | ||||
| 
 | ||||
|                 off      = offset(element); | ||||
|                 centre.x = off.left + pos.x; | ||||
|                 centre.y = off.top + pos.y; | ||||
| 
 | ||||
|                 mousedown.pageX = centre.x; | ||||
|                 mousedown.pageY = centre.y; | ||||
| 
 | ||||
|                 Effect.show(mousedown, element); | ||||
| 
 | ||||
|                 if (options.wait >= 0 && options.wait !== null) { | ||||
|                     var mouseup = { | ||||
|                         type: 'mouseup', | ||||
|                         button: 1 | ||||
|                     }; | ||||
| 
 | ||||
|                     setTimeout(hideRipple(mouseup, element), options.wait); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     /** | ||||
|      * Remove all ripples from an element. | ||||
|      */ | ||||
|     Waves.calm = function(elements) { | ||||
|         elements = getWavesElements(elements); | ||||
|         var mouseup = { | ||||
|             type: 'mouseup', | ||||
|             button: 1 | ||||
|         }; | ||||
| 
 | ||||
|         for (var i = 0, len = elements.length; i < len; i++) { | ||||
|             Effect.hide(mouseup, elements[i]); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     /** | ||||
|      * Deprecated API fallback | ||||
|      */ | ||||
|     Waves.displayEffect = function(options) { | ||||
|         console.error('Waves.displayEffect() has been deprecated and will be removed in future version. Please use Waves.init() to initialize Waves effect'); | ||||
|         Waves.init(options); | ||||
|     }; | ||||
| 
 | ||||
|     return Waves; | ||||
| }); | ||||
| 
 | ||||
| //Initialization
 | ||||
| Waves.attach('.btn:not(.btn-flat), .btn-floating', ['waves-light']); | ||||
| Waves.attach('.btn-flat', ['waves-effect']); | ||||
| Waves.attach('.chip', ['waves-effect']); | ||||
| Waves.attach('.view a .mask', ['waves-light']); | ||||
| Waves.attach('.waves-light', ['waves-light']); | ||||
| Waves.attach('.navbar-nav a:not(.navbar-brand), .nav-icons li a, .nav-tabs .nav-item:not(.dropdown)', ['waves-light']); | ||||
| Waves.attach('.pager li a', ['waves-light']); | ||||
| Waves.attach('.pagination .page-item .page-link', ['waves-effect']); | ||||
| Waves.init(); | ||||
							
								
								
									
										180
									
								
								htdocs/js/modules/wow.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,180 @@ | ||||
| 'use strict'; | ||||
| 
 | ||||
| var WOW; | ||||
| 
 | ||||
| (function($) { | ||||
| 
 | ||||
|     WOW = function WOW() { | ||||
| 
 | ||||
|         return { | ||||
| 
 | ||||
|             init: function init() { | ||||
| 
 | ||||
|                 var animationName = []; | ||||
| 
 | ||||
|                 var once = 1; | ||||
| 
 | ||||
|                 function mdbWow() { | ||||
| 
 | ||||
|                     var windowHeight = window.innerHeight; | ||||
|                     var scroll = window.scrollY; | ||||
| 
 | ||||
|                     $('.wow').each(function() { | ||||
| 
 | ||||
|                         if ($(this).css('visibility') == 'visible') { | ||||
|                             return; | ||||
|                         } | ||||
| 
 | ||||
|                         if (windowHeight + scroll - 100 > getOffset(this) && scroll < getOffset(this) || windowHeight + scroll - 100 > getOffset(this) + $(this).height() && scroll < getOffset(this) + $(this).height() || windowHeight + scroll == $(document).height() && getOffset(this) + 100 > $(document).height()) { | ||||
| 
 | ||||
|                             var index = $(this).index('.wow'); | ||||
| 
 | ||||
|                             var delay = $(this).attr('data-wow-delay'); | ||||
| 
 | ||||
|                             if (delay) { | ||||
| 
 | ||||
|                                 delay = $(this).attr('data-wow-delay').slice(0, -1 | ||||
| 
 | ||||
|                                 ); | ||||
|                                 var self = this; | ||||
| 
 | ||||
|                                 var timeout = parseFloat(delay) * 1000; | ||||
| 
 | ||||
|                                 $(self).addClass('animated'); | ||||
|                                 $(self).css({ 'visibility': 'visible' }); | ||||
|                                 $(self).css({ 'animation-delay': delay }); | ||||
|                                 $(self).css({ 'animation-name': animationName[index] }); | ||||
| 
 | ||||
|                                 var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000; | ||||
| 
 | ||||
|                                 if ($(this).attr('data-wow-delay')) { | ||||
| 
 | ||||
|                                     removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000; | ||||
|                                 } | ||||
| 
 | ||||
|                                 var self = this; | ||||
| 
 | ||||
|                                 setTimeout(function() { | ||||
| 
 | ||||
|                                     $(self).removeClass('animated'); | ||||
|                                 }, removeTime); | ||||
|                             } else { | ||||
| 
 | ||||
|                                 $(this).addClass('animated'); | ||||
|                                 $(this).css({ 'visibility': 'visible' }); | ||||
|                                 $(this).css({ 'animation-name': animationName[index] }); | ||||
| 
 | ||||
|                                 var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000; | ||||
| 
 | ||||
|                                 var self = this; | ||||
| 
 | ||||
|                                 setTimeout(function() { | ||||
| 
 | ||||
|                                     $(self).removeClass('animated'); | ||||
|                                 }, removeTime); | ||||
|                             } | ||||
|                         } | ||||
|                     }); | ||||
|                 } | ||||
| 
 | ||||
|                 function appear() { | ||||
| 
 | ||||
|                     $('.wow').each(function() { | ||||
| 
 | ||||
|                         var index = $(this).index('.wow'); | ||||
| 
 | ||||
|                         var delay = $(this).attr('data-wow-delay'); | ||||
| 
 | ||||
|                         if (delay) { | ||||
| 
 | ||||
|                             delay = $(this).attr('data-wow-delay').slice(0, -1); | ||||
| 
 | ||||
|                             var timeout = parseFloat(delay) * 1000; | ||||
| 
 | ||||
|                             $(this).addClass('animated'); | ||||
|                             $(this).css({ 'visibility': 'visible' }); | ||||
|                             $(this).css({ 'animation-delay': delay + 's' }); | ||||
|                             $(this).css({ 'animation-name': animationName[index] }); | ||||
|                         } else { | ||||
| 
 | ||||
|                             $(this).addClass('animated'); | ||||
|                             $(this).css({ 'visibility': 'visible' }); | ||||
|                             $(this).css({ 'animation-name': animationName[index] }); | ||||
|                         } | ||||
|                     }); | ||||
|                 } | ||||
| 
 | ||||
|                 function hide() { | ||||
| 
 | ||||
|                     var windowHeight = window.innerHeight; | ||||
|                     var scroll = window.scrollY; | ||||
| 
 | ||||
|                     $('.wow.animated').each(function() { | ||||
| 
 | ||||
|                         if (windowHeight + scroll - 100 > getOffset(this) && scroll > getOffset(this) + 100 || windowHeight + scroll - 100 < getOffset(this) && scroll < getOffset(this) + 100 || getOffset(this) + $(this).height > $(document).height() - 100) { | ||||
| 
 | ||||
|                             $(this).removeClass('animated'); | ||||
|                             $(this).css({ 'animation-name': 'none' }); | ||||
|                             $(this).css({ 'visibility': 'hidden' }); | ||||
|                         } else { | ||||
| 
 | ||||
|                             var removeTime = $(this).css('animation-duration').slice(0, -1) * 1000; | ||||
| 
 | ||||
|                             if ($(this).attr('data-wow-delay')) { | ||||
| 
 | ||||
|                                 removeTime += $(this).attr('data-wow-delay').slice(0, -1) * 1000; | ||||
|                             } | ||||
| 
 | ||||
|                             var self = this; | ||||
| 
 | ||||
|                             setTimeout(function() { | ||||
| 
 | ||||
|                                 $(self).removeClass('animated'); | ||||
|                             }, removeTime); | ||||
|                         } | ||||
|                     }); | ||||
| 
 | ||||
|                     mdbWow(); | ||||
| 
 | ||||
|                     once--; | ||||
|                 } | ||||
| 
 | ||||
|                 function getOffset(elem) { | ||||
| 
 | ||||
|                     var box = elem.getBoundingClientRect(); | ||||
| 
 | ||||
|                     var body = document.body; | ||||
|                     var docEl = document.documentElement; | ||||
| 
 | ||||
|                     var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop; | ||||
| 
 | ||||
|                     var clientTop = docEl.clientTop || body.clientTop || 0; | ||||
| 
 | ||||
|                     var top = box.top + scrollTop - clientTop; | ||||
| 
 | ||||
|                     return Math.round(top); | ||||
|                 } | ||||
| 
 | ||||
|                 $('.wow').each(function() { | ||||
| 
 | ||||
|                     $(this).css({ 'visibility': 'hidden' }); | ||||
|                     animationName[$(this).index('.wow')] = $(this).css('animation-name'); | ||||
|                     $(this).css({ 'animation-name': 'none' }); | ||||
|                 }); | ||||
| 
 | ||||
|                 $(window).scroll(function() { | ||||
| 
 | ||||
|                     if (once) { | ||||
| 
 | ||||
|                         hide(); | ||||
|                     } else { | ||||
| 
 | ||||
|                         mdbWow(); | ||||
|                     } | ||||
|                 }); | ||||
| 
 | ||||
|                 appear(); | ||||
|             } | ||||
|         }; | ||||
|     }; | ||||
| })(jQuery); | ||||
							
								
								
									
										5
									
								
								htdocs/js/popper.min.js
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
							
								
								
									
										365
									
								
								htdocs/js/reconnecting-websocket.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,365 @@ | ||||
| // MIT License:
 | ||||
| //
 | ||||
| // Copyright (c) 2010-2012, Joe Walnes
 | ||||
| //
 | ||||
| // Permission is hereby granted, free of charge, to any person obtaining a copy
 | ||||
| // of this software and associated documentation files (the "Software"), to deal
 | ||||
| // in the Software without restriction, including without limitation the rights
 | ||||
| // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | ||||
| // copies of the Software, and to permit persons to whom the Software is
 | ||||
| // furnished to do so, subject to the following conditions:
 | ||||
| //
 | ||||
| // The above copyright notice and this permission notice shall be included in
 | ||||
| // all copies or substantial portions of the Software.
 | ||||
| //
 | ||||
| // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | ||||
| // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | ||||
| // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | ||||
| // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | ||||
| // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | ||||
| // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | ||||
| // THE SOFTWARE.
 | ||||
| 
 | ||||
| /** | ||||
|  * This behaves like a WebSocket in every way, except if it fails to connect, | ||||
|  * or it gets disconnected, it will repeatedly poll until it successfully connects | ||||
|  * again. | ||||
|  * | ||||
|  * It is API compatible, so when you have: | ||||
|  *   ws = new WebSocket('ws://....'); | ||||
|  * you can replace with: | ||||
|  *   ws = new ReconnectingWebSocket('ws://....'); | ||||
|  * | ||||
|  * The event stream will typically look like: | ||||
|  *  onconnecting | ||||
|  *  onopen | ||||
|  *  onmessage | ||||
|  *  onmessage | ||||
|  *  onclose // lost connection
 | ||||
|  *  onconnecting | ||||
|  *  onopen  // sometime later...
 | ||||
|  *  onmessage | ||||
|  *  onmessage | ||||
|  *  etc... | ||||
|  * | ||||
|  * It is API compatible with the standard WebSocket API, apart from the following members: | ||||
|  * | ||||
|  * - `bufferedAmount` | ||||
|  * - `extensions` | ||||
|  * - `binaryType` | ||||
|  * | ||||
|  * Latest version: https://github.com/joewalnes/reconnecting-websocket/
 | ||||
|  * - Joe Walnes | ||||
|  * | ||||
|  * Syntax | ||||
|  * ====== | ||||
|  * var socket = new ReconnectingWebSocket(url, protocols, options); | ||||
|  * | ||||
|  * Parameters | ||||
|  * ========== | ||||
|  * url - The url you are connecting to. | ||||
|  * protocols - Optional string or array of protocols. | ||||
|  * options - See below | ||||
|  * | ||||
|  * Options | ||||
|  * ======= | ||||
|  * Options can either be passed upon instantiation or set after instantiation: | ||||
|  * | ||||
|  * var socket = new ReconnectingWebSocket(url, null, { debug: true, reconnectInterval: 4000 }); | ||||
|  * | ||||
|  * or | ||||
|  * | ||||
|  * var socket = new ReconnectingWebSocket(url); | ||||
|  * socket.debug = true; | ||||
|  * socket.reconnectInterval = 4000; | ||||
|  * | ||||
|  * debug | ||||
|  * - Whether this instance should log debug messages. Accepts true or false. Default: false. | ||||
|  * | ||||
|  * automaticOpen | ||||
|  * - Whether or not the websocket should attempt to connect immediately upon instantiation. The socket can be manually opened or closed at any time using ws.open() and ws.close(). | ||||
|  * | ||||
|  * reconnectInterval | ||||
|  * - The number of milliseconds to delay before attempting to reconnect. Accepts integer. Default: 1000. | ||||
|  * | ||||
|  * maxReconnectInterval | ||||
|  * - The maximum number of milliseconds to delay a reconnection attempt. Accepts integer. Default: 30000. | ||||
|  * | ||||
|  * reconnectDecay | ||||
|  * - The rate of increase of the reconnect delay. Allows reconnect attempts to back off when problems persist. Accepts integer or float. Default: 1.5. | ||||
|  * | ||||
|  * timeoutInterval | ||||
|  * - The maximum time in milliseconds to wait for a connection to succeed before closing and retrying. Accepts integer. Default: 2000. | ||||
|  * | ||||
|  */ | ||||
| (function (global, factory) { | ||||
|   if (typeof define === 'function' && define.amd) { | ||||
|       define([], factory); | ||||
|   } else if (typeof module !== 'undefined' && module.exports){ | ||||
|       module.exports = factory(); | ||||
|   } else { | ||||
|       global.ReconnectingWebSocket = factory(); | ||||
|   } | ||||
| })(this, function () { | ||||
| 
 | ||||
|   if (!('WebSocket' in window)) { | ||||
|       return; | ||||
|   } | ||||
| 
 | ||||
|   function ReconnectingWebSocket(url, protocols, options) { | ||||
| 
 | ||||
|       // Default settings
 | ||||
|       var settings = { | ||||
| 
 | ||||
|           /** Whether this instance should log debug messages. */ | ||||
|           debug: false, | ||||
| 
 | ||||
|           /** Whether or not the websocket should attempt to connect immediately upon instantiation. */ | ||||
|           automaticOpen: true, | ||||
| 
 | ||||
|           /** The number of milliseconds to delay before attempting to reconnect. */ | ||||
|           reconnectInterval: 1000, | ||||
|           /** The maximum number of milliseconds to delay a reconnection attempt. */ | ||||
|           maxReconnectInterval: 30000, | ||||
|           /** The rate of increase of the reconnect delay. Allows reconnect attempts to back off when problems persist. */ | ||||
|           reconnectDecay: 1.5, | ||||
| 
 | ||||
|           /** The maximum time in milliseconds to wait for a connection to succeed before closing and retrying. */ | ||||
|           timeoutInterval: 2000, | ||||
| 
 | ||||
|           /** The maximum number of reconnection attempts to make. Unlimited if null. */ | ||||
|           maxReconnectAttempts: null, | ||||
| 
 | ||||
|           /** The binary type, possible values 'blob' or 'arraybuffer', default 'blob'. */ | ||||
|           binaryType: 'blob' | ||||
|       } | ||||
|       if (!options) { options = {}; } | ||||
| 
 | ||||
|       // Overwrite and define settings with options if they exist.
 | ||||
|       for (var key in settings) { | ||||
|           if (typeof options[key] !== 'undefined') { | ||||
|               this[key] = options[key]; | ||||
|           } else { | ||||
|               this[key] = settings[key]; | ||||
|           } | ||||
|       } | ||||
| 
 | ||||
|       // These should be treated as read-only properties
 | ||||
| 
 | ||||
|       /** The URL as resolved by the constructor. This is always an absolute URL. Read only. */ | ||||
|       this.url = url; | ||||
| 
 | ||||
|       /** The number of attempted reconnects since starting, or the last successful connection. Read only. */ | ||||
|       this.reconnectAttempts = 0; | ||||
| 
 | ||||
|       /** | ||||
|        * The current state of the connection. | ||||
|        * Can be one of: WebSocket.CONNECTING, WebSocket.OPEN, WebSocket.CLOSING, WebSocket.CLOSED | ||||
|        * Read only. | ||||
|        */ | ||||
|       this.readyState = WebSocket.CONNECTING; | ||||
| 
 | ||||
|       /** | ||||
|        * A string indicating the name of the sub-protocol the server selected; this will be one of | ||||
|        * the strings specified in the protocols parameter when creating the WebSocket object. | ||||
|        * Read only. | ||||
|        */ | ||||
|       this.protocol = null; | ||||
| 
 | ||||
|       // Private state variables
 | ||||
| 
 | ||||
|       var self = this; | ||||
|       var ws; | ||||
|       var forcedClose = false; | ||||
|       var timedOut = false; | ||||
|       var eventTarget = document.createElement('div'); | ||||
| 
 | ||||
|       // Wire up "on*" properties as event handlers
 | ||||
| 
 | ||||
|       eventTarget.addEventListener('open',       function(event) { self.onopen(event); }); | ||||
|       eventTarget.addEventListener('close',      function(event) { self.onclose(event); }); | ||||
|       eventTarget.addEventListener('connecting', function(event) { self.onconnecting(event); }); | ||||
|       eventTarget.addEventListener('message',    function(event) { self.onmessage(event); }); | ||||
|       eventTarget.addEventListener('error',      function(event) { self.onerror(event); }); | ||||
| 
 | ||||
|       // Expose the API required by EventTarget
 | ||||
| 
 | ||||
|       this.addEventListener = eventTarget.addEventListener.bind(eventTarget); | ||||
|       this.removeEventListener = eventTarget.removeEventListener.bind(eventTarget); | ||||
|       this.dispatchEvent = eventTarget.dispatchEvent.bind(eventTarget); | ||||
| 
 | ||||
|       /** | ||||
|        * This function generates an event that is compatible with standard | ||||
|        * compliant browsers and IE9 - IE11 | ||||
|        * | ||||
|        * This will prevent the error: | ||||
|        * Object doesn't support this action | ||||
|        * | ||||
|        * http://stackoverflow.com/questions/19345392/why-arent-my-parameters-getting-passed-through-to-a-dispatched-event/19345563#19345563
 | ||||
|        * @param s String The name that the event should use | ||||
|        * @param args Object an optional object that the event will use | ||||
|        */ | ||||
|       function generateEvent(s, args) { | ||||
|         var evt = document.createEvent("CustomEvent"); | ||||
|         evt.initCustomEvent(s, false, false, args); | ||||
|         return evt; | ||||
|       }; | ||||
| 
 | ||||
|       this.open = function (reconnectAttempt) { | ||||
|           ws = new WebSocket(self.url, protocols || []); | ||||
|           ws.binaryType = this.binaryType; | ||||
| 
 | ||||
|           if (reconnectAttempt) { | ||||
|               if (this.maxReconnectAttempts && this.reconnectAttempts > this.maxReconnectAttempts) { | ||||
|                   return; | ||||
|               } | ||||
|           } else { | ||||
|               eventTarget.dispatchEvent(generateEvent('connecting')); | ||||
|               this.reconnectAttempts = 0; | ||||
|           } | ||||
| 
 | ||||
|           if (self.debug || ReconnectingWebSocket.debugAll) { | ||||
|               console.debug('ReconnectingWebSocket', 'attempt-connect', self.url); | ||||
|           } | ||||
| 
 | ||||
|           var localWs = ws; | ||||
|           var timeout = setTimeout(function() { | ||||
|               if (self.debug || ReconnectingWebSocket.debugAll) { | ||||
|                   console.debug('ReconnectingWebSocket', 'connection-timeout', self.url); | ||||
|               } | ||||
|               timedOut = true; | ||||
|               localWs.close(); | ||||
|               timedOut = false; | ||||
|           }, self.timeoutInterval); | ||||
| 
 | ||||
|           ws.onopen = function(event) { | ||||
|               clearTimeout(timeout); | ||||
|               if (self.debug || ReconnectingWebSocket.debugAll) { | ||||
|                   console.debug('ReconnectingWebSocket', 'onopen', self.url); | ||||
|               } | ||||
|               self.protocol = ws.protocol; | ||||
|               self.readyState = WebSocket.OPEN; | ||||
|               self.reconnectAttempts = 0; | ||||
|               var e = generateEvent('open'); | ||||
|               e.isReconnect = reconnectAttempt; | ||||
|               reconnectAttempt = false; | ||||
|               eventTarget.dispatchEvent(e); | ||||
|           }; | ||||
| 
 | ||||
|           ws.onclose = function(event) { | ||||
|               clearTimeout(timeout); | ||||
|               ws = null; | ||||
|               if (forcedClose) { | ||||
|                   self.readyState = WebSocket.CLOSED; | ||||
|                   eventTarget.dispatchEvent(generateEvent('close')); | ||||
|               } else { | ||||
|                   self.readyState = WebSocket.CONNECTING; | ||||
|                   var e = generateEvent('connecting'); | ||||
|                   e.code = event.code; | ||||
|                   e.reason = event.reason; | ||||
|                   e.wasClean = event.wasClean; | ||||
|                   eventTarget.dispatchEvent(e); | ||||
|                   if (!reconnectAttempt && !timedOut) { | ||||
|                       if (self.debug || ReconnectingWebSocket.debugAll) { | ||||
|                           console.debug('ReconnectingWebSocket', 'onclose', self.url); | ||||
|                       } | ||||
|                       eventTarget.dispatchEvent(generateEvent('close')); | ||||
|                   } | ||||
| 
 | ||||
|                   var timeout = self.reconnectInterval * Math.pow(self.reconnectDecay, self.reconnectAttempts); | ||||
|                   setTimeout(function() { | ||||
|                       self.reconnectAttempts++; | ||||
|                       self.open(true); | ||||
|                   }, timeout > self.maxReconnectInterval ? self.maxReconnectInterval : timeout); | ||||
|               } | ||||
|           }; | ||||
|           ws.onmessage = function(event) { | ||||
|               if (self.debug || ReconnectingWebSocket.debugAll) { | ||||
|                   console.debug('ReconnectingWebSocket', 'onmessage', self.url, event.data); | ||||
|               } | ||||
|               var e = generateEvent('message'); | ||||
|               e.data = event.data; | ||||
|               eventTarget.dispatchEvent(e); | ||||
|           }; | ||||
|           ws.onerror = function(event) { | ||||
|               if (self.debug || ReconnectingWebSocket.debugAll) { | ||||
|                   console.debug('ReconnectingWebSocket', 'onerror', self.url, event); | ||||
|               } | ||||
|               eventTarget.dispatchEvent(generateEvent('error')); | ||||
|           }; | ||||
|       } | ||||
| 
 | ||||
|       // Whether or not to create a websocket upon instantiation
 | ||||
|       if (this.automaticOpen == true) { | ||||
|           this.open(false); | ||||
|       } | ||||
| 
 | ||||
|       /** | ||||
|        * Transmits data to the server over the WebSocket connection. | ||||
|        * | ||||
|        * @param data a text string, ArrayBuffer or Blob to send to the server. | ||||
|        */ | ||||
|       this.send = function(data) { | ||||
|           if (ws) { | ||||
|               if (self.debug || ReconnectingWebSocket.debugAll) { | ||||
|                   console.debug('ReconnectingWebSocket', 'send', self.url, data); | ||||
|               } | ||||
|               return ws.send(data); | ||||
|           } else { | ||||
|               throw 'INVALID_STATE_ERR : Pausing to reconnect websocket'; | ||||
|           } | ||||
|       }; | ||||
| 
 | ||||
|       /** | ||||
|        * Closes the WebSocket connection or connection attempt, if any. | ||||
|        * If the connection is already CLOSED, this method does nothing. | ||||
|        */ | ||||
|       this.close = function(code, reason) { | ||||
|           // Default CLOSE_NORMAL code
 | ||||
|           if (typeof code == 'undefined') { | ||||
|               code = 1000; | ||||
|           } | ||||
|           forcedClose = true; | ||||
|           if (ws) { | ||||
|               ws.close(code, reason); | ||||
|           } | ||||
|       }; | ||||
| 
 | ||||
|       /** | ||||
|        * Additional public API method to refresh the connection if still open (close, re-open). | ||||
|        * For example, if the app suspects bad data / missed heart beats, it can try to refresh. | ||||
|        */ | ||||
|       this.refresh = function() { | ||||
|           if (ws) { | ||||
|               ws.close(); | ||||
|           } | ||||
|       }; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * An event listener to be called when the WebSocket connection's readyState changes to OPEN; | ||||
|    * this indicates that the connection is ready to send and receive data. | ||||
|    */ | ||||
|   ReconnectingWebSocket.prototype.onopen = function(event) {}; | ||||
|   /** An event listener to be called when the WebSocket connection's readyState changes to CLOSED. */ | ||||
|   ReconnectingWebSocket.prototype.onclose = function(event) {}; | ||||
|   /** An event listener to be called when a connection begins being attempted. */ | ||||
|   ReconnectingWebSocket.prototype.onconnecting = function(event) {}; | ||||
|   /** An event listener to be called when a message is received from the server. */ | ||||
|   ReconnectingWebSocket.prototype.onmessage = function(event) {}; | ||||
|   /** An event listener to be called when an error occurs. */ | ||||
|   ReconnectingWebSocket.prototype.onerror = function(event) {}; | ||||
| 
 | ||||
|   /** | ||||
|    * Whether all instances of ReconnectingWebSocket should log debug messages. | ||||
|    * Setting this to true is the equivalent of setting all instances of ReconnectingWebSocket.debug to true. | ||||
|    */ | ||||
|   ReconnectingWebSocket.debugAll = false; | ||||
| 
 | ||||
|   ReconnectingWebSocket.CONNECTING = WebSocket.CONNECTING; | ||||
|   ReconnectingWebSocket.OPEN = WebSocket.OPEN; | ||||
|   ReconnectingWebSocket.CLOSING = WebSocket.CLOSING; | ||||
|   ReconnectingWebSocket.CLOSED = WebSocket.CLOSED; | ||||
| 
 | ||||
|   return ReconnectingWebSocket; | ||||
| }); | ||||
							
								
								
									
										6
									
								
								htdocs/js/respond.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,6 @@ | ||||
| 
 | ||||
| /*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl | ||||
|  * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
 | ||||
|  *  */ | ||||
| 
 | ||||
| !function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this); | ||||
							
								
								
									
										1
									
								
								htdocs/js/tether.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								htdocs/scss/_custom-styles.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| // Your custom styles | ||||