diff --git a/frontend/delta/css/clipperz.css b/frontend/delta/css/clipperz.css index 8229a83..4a8262c 100644 --- a/frontend/delta/css/clipperz.css +++ b/frontend/delta/css/clipperz.css @@ -58,7 +58,7 @@ table { font-family: "clipperz-icons"; font-style: normal; font-weight: normal; - src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABgcAAwAAAAAF8wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABHAAAA4wAAAOM98f5K09TLzIAAASoAAAAYAAAAGAIYwbQY21hcAAABQgAAAC8AAAAvKjvnoJnYXNwAAAFxAAAAAgAAAAIAAAAEGdseWYAAAXMAAAOgAAADoAOtoyEaGVhZAAAFEwAAAA2AAAANgUXq5VoaGVhAAAUhAAAACQAAAAkA/kCOmhtdHgAABSoAAAA5AAAAOQ3igNTbG9jYQAAFYwAAAB0AAAAdEG6RPxtYXhwAAAWAAAAACAAAAAgAEIAfG5hbWUAABYgAAAB2gAAAdo7wz5qcG9zdAAAF/wAAAAgAAAAIAADAAAAAQAAAAoAHgAsAAFsYXRuAAgABAAAAAAAAAABAAAAAWxpZ2EACAAAAAEAAAABAAQABAAAAAEACgAAAAEAKAARAE4AggCQAQYBQAFQAXQBnAHqAfgCFAI+ApwC8AMIAygDSAABABEABwAIAAkACgALAAwADQARABIAFAAVABYAFwAYABkAGgA4AAIABgAiAC4ADQAKAAoAAwATAAsAGwADAAwADwALABEACgAnAAgACgAKAAMACQAHABYACgABAAQAKwAEAAcACQAQAAYADgAsAD4ASgBcAGgALgAOABYACwAHABgACwADABMACwAbAAMABAAGAAUAMgAIABQAEgASAAcAEwAKABcAIQAFABEAFAAXAAsAIwAIABEADwAVABUACwAWABwAIQAFABEACwAHABYAIQAGAAcAEwAJAAsAEQADAAgAEgAsACIABAAUABMACwApAAwADwAWAAsACQAYAAMAEQAUAA0ADwATACEABgALABEACwAYAAsAAQAEAC0ABQASAAcADwARAAIABgAWACEABwAHAA8AEQAZABYACwAhAAYABwAPABEACwAKAAEABAA1ABEACwATAAsAFgAHABgACwADABUABwAXABcAGwAUABYACgAFAAwAGgAoADIAQgAoAAYAFAANABQAGQAYAC8ABgAUAAkAEAALAAoAHQAEABQACQAQACoABwAUAAcACgAPABMADQAeAAUABwAIAAsAEQABAAQAIAAEAAsAEwAZAAIABgAWADcABwAVABgADwAUABMAFwAiAAIAEAABAAQAMwASAAcAFwAXABsAFAAWAAoAAwAN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) format("woff"); } + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAACIoAAwAAAAAIdgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABHAAABFAAAARQ/jUEQE9TLzIAAAVsAAAAYAAAAGAIYwbVY21hcAAABcwAAADkAAAA5Ip/TMpnYXNwAAAGsAAAAAgAAAAIAAAAEGdseWYAAAa4AAAXaAAAF2iz8c/0aGVhZAAAHiAAAAA2AAAANgXWF1JoaGVhAAAeWAAAACQAAAAkA/kCQ2htdHgAAB58AAABCAAAAQhHigRZbG9jYQAAH4QAAACGAAAAhnNibdxtYXhwAAAgDAAAACAAAAAgAFAAxG5hbWUAACAsAAAB2gAAAdo7wz5qcG9zdAAAIggAAAAgAAAAIAADAAAAAQAAAAoAHgAsAAFsYXRuAAgABAAAAAAAAAABAAAAAWxpZ2EACAAAAAEAAAABAAQABAAAAAEACgAAAAEAKgASAFIA0gDgAVYBkAGgAcQB7AIGAlQCYgKWAtQDMgOGA7QD1AQMAAEAEgAHAAgACQAKAAsADAANAA8AEQASABQAFQAWABcAGAAZABoAQQAFAAwAIgA4AFIAbgA4AAoAGQAKAA8AFAADAAwADwARAAsANAAKABgAGAAHAAkADgASAAsAEwAYADoADAAWAAkADgAPABoACwADAAwADwARAAsALwANAAoACgADABMACwAbAAMADAAPAAsAEQAKACgACAAKAAoAAwAJAAcAFgAKAAEABAAsAAQABwAJABAABgAOACwAPgBKAFwAaAAvAA4AFgALAAcAGAALAAMAEwALABsAAwAEAAYABQAzAAgAFAASABIABwATAAoAFwAiAAUAEQAUABcACwAkAAgAEQAPABUAFQALABYAHQAiAAUAEQALAAcAFgAiAAYABwATAAkACwARAAMACAASACwAIwAEABQAEwALACoADAAPABYACwAJABgAAwARABQADQAPABMAIgAGAAsAEQALABgACwABAAQALgAFABIABwAPABEAAgAGABYAIgAHAAcADwARABkAFgALACIABgAHAA8AEQALAAoAAQAEAD0AEQALABMACwAWAAcAGAALAAMAFQAHABcAFwAbABQAFgAKAAEABAA3AAoAEgAHAA0ACwADAAwADwARAAsABQAMABoAKAAyAEIAKQAGABQADQAUABkAGAAwAAYAFAAJABAACwAKAB4ABAAUAAkAEAArAAcAFAAHAAoADwATAA0AHwAFAAcACAALABEAAQAEACEABAALABMAGQADAAgAHgAuADUACgAYAA4ACwAWAAMADAAPABEACwBAAAcAFQAYAA8AFAATABcAIwACABAAAgAGABgAPwAIAAoADAADAAwADwARAAsAOwASAAcAFwAXABsAFAAWAAoAAwANAAsAEwALABYABwAYABQAFgAEAAoAIAA6AFAAMgAKAAsAEgAUABoACwADABgABwANADIADAALABIAFAAaAAsAAwAMAA8ACwARAAoAMgAKAAsAEgAUABoACwADAAQABgAFACcABgALAAkACwATABgABAAKACIAPABKAC0ACwAOABQAGwADAAoACwAYAAcADwARAD4ADAALABgAAwAVAAcAFwAXABsAFAAWAAoAJgAGAAsABwAWAAkADgAjAAQABwAaAAsAAwAIABwAJgA2AAkACwAcABgAAwAMAA8AEQALACAABAAHAA0AFwAlAAMABwANAAIABgAOACoAAwAWABEAMQAIABMAEQAUAAkAEAALAAoAAgAGACIAPAANAA8ACwAbAAMAFQAHABcAFwAbABQAFgAKADkACgAPAAoACwAUAAMADAAPABEACwABAAQAQAACAEEAAwHvAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADwMAHg/+AAIAHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAyAAAAC4AIAAEAA4AAQAgAFAAVABpAHAAeAB64SXipuYT6ADpJOko6SvpjenO6i7qNura8DD//f//AAAAAAAgAE8AVABhAGsAcgB64SXipuYA6ADpJOkm6SrpjenO6i7qNura8C///f//AAH/4/+1/7L/pv+l/6T/ox75HXkaIBg0FxEXEBcPFq4WbhYPFggVZRARAAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAwBA/+oBwAHAAAsAEgAXAAABFxUUBwYHJicmPQEXFTY3NjcjMTUHFTMBAMA3N1JSNzfAOykpCJWVlQHAVoBZSUoUFEpJWYCVvxM1NEO8QnoAAAAAAQBAAEAB1QFqABEAAAEXBwYrASInJj0BNDc2OwEyFwF4XV0NFuoRDQ0NDRHqFg0BWIODEg0MEdYRDQwSAAAAAAMAAAAJAg4BwAAUACEAMgAAEzMyFh8BFhQPAQYiLwEuAT0BNDYzFzI2NTQmIyIGFRQWMwUHFjY/ATY0LwEuASMXFhQHMHAUMA68Dg6MDigOvA4UHBRAFBwcFBQcHBQBhawOIAuMDg68DjAU9QQEAcAUDrwOKA6MDg68DjAUcBQcoBwUFBwcFBQca6wHBQuMDigOvA4U9QQOBAAAAAMAIAAgAeABgAADAAcACwAAEyEVIRUhFSEVIRUhIAHA/kABwP5AAcD+QAGAYCBgIGAAAAABAAH/4QH/Ad8AVAAAJTgBMSc3OAExPgE3NiYvAS4BBw4BBzgBMQcnOAExLgEnJgYPAQ4BFx4BFzgBMRcHOAExDgEHBhYfAR4BNz4BNzgBMTcXOAExHgEXFjY/AT4BJy4BJwH7m5sCAQECAgRJAwoEAgICm5sCAgIECgNJBAICAQECm5sCAQECAgRJAwoEAgICm5sCAgIECgNJBAICAQECRZubAgICBAoDSQQCAgEBApubAgEBAgIESQMKBAICApubAgICBAoDSQQCAgEBApubAgEBAgIESQMKBAICAgAAAAEAAAAQAgABoAAFAAABBycHFwEBsPBwUMABQAGg8HBQwAFAAAEABf/aAhcB0gAOAAABNSMVJwcXBxc3FzcnNycBToaWLZtkcVxmbmWfLQEpqak8gTSEUoyMUoQ1gQAAAAIAAP/uAfIB4AAUACEAABMzMhYfARYUDwEGIi8BLgE9ATQ2MxcyNjU0JiMiBhUUFjMwkBQwDuAODqwPJw7gDhQcFEAUHBwUFBwcFAHgFA7gDicPrA4O4A4wFJAUHKAcFBQcHBQUHAAAAgAA/+wB9AHgAB0AKgAAJScuAQc+ATU0JiMiBhUUFjMyNjcGFh8BHgE3NiYnJSImNTQ2MzIWFRQGIwHweQoTCBYYcFBQcHBQJD8aAQgJZw0mDQ0CD/7QNUtLNTVLSzUsZwkIARo/JFBwcFBQcBgWCBMKeQ8CDQ0mDXRLNTVLSzU1SwAAAwAA/+ACAAHgAAUAGgAnAAAlJzUzFRcDIg4CFRQeAjMyPgI1NC4CIxEiJjU0NjMyFhUUBiMBSWlAV3c1XUYoKEZdNTVdRigoRl01UHBwUFBwcFBpao1zVgFJKEZdNTVdRigoRl01NV1GKP5AcFBQcHBQUHAAAAAAAQBsAFIBlAF7ACAAAAEjNTQmIyIGHQEjIgYVFBY7ARUUFjMyNj0BMzI2NTQmIwGFaw8LCw9rCwQEC2sPCwsPawsEBAsBAGwKBQUKbA8LCg9sCgUFCmwPCgsPAAACABoAAAHmAc0ABwAWAAAlJxUjFTMVNyUzNSMiBhURFBY7ATUjEQHmmbOzmf5nzc0VHh4Vzc3mgExnTYC0Mx4V/pkVHjMBZwADADMAGgHNAbMAEAAVAB8AAAEjIgYdARQWOwEyNj0BNCYjESM1MxUlIxUUFjsBNSM1AZrOFR0eFc0VHh4Vzc3+zDMeFZqaAbMdFc4VHh4VzRUe/wDNzTOZFR4zmQAAAAAIABwAAAHgAeAADAAZACYAMwBGAFkAbAB5AAATNDYzMhYVFAYjIiY1FzQ2MzIWFRQGIyImNRc0NjMyFhUUBiMiJjUHNDYzMhYVFAYjIiY1BzgBMTQ2MzIWFTgBMRQGIyImNSc4ATE0NjMyFhU4ATEUBiMiJjUDOAExNDYzMhYVOAExFAYjIiY1BzQ2MzIWFRQGIyImNcAlGxslJRsbJYglGxomJhobJVgTDQ0TEw0NEzgTDQ0TEw0NE4gTDQ0TEw0NE4gTDQ0TEw0NExAcFBQcHBQUHCwVDw8VFQ8PFQGgGyUlGxslJRs4GiYmGhslJRuIDRMTDQ0TEw2IDRMTDQ0TEw04DRMTDQ0TEw04DRMTDQ0TEw0BEBQcHBQUHBwUiA8VFQ8PFRUPAAEAqQBaAU4BcwAaAAABDgExDgEVFBYXMBYXFjI3NjQvATc2NCcmIgcBJQhrBQQEBWsICBkICQlgYAkJCBkIAXMIcAUKBgULBHAICAgIFgpkZAsVCQgIAAABALIAWgFXAXMAGgAAEx4BMR4BFRQGBzAGBwYiJyY0PwEnJjQ3NjIX2whrBQQEBWsICBkICQlgYAkJCBkIAXMIcAUKBgULBHAICAgIFgpkZAsVCQgIAAAAAgAaAFIB5gF7ABcAPwAAEx4DFx4BMzI2Nz4DNz4BIyEiFhcFDgMHDgEjIiYnLgMnJgYVHAMxFBYzITI2NTA8AjU0JgcpBDxEOQMFDAYGDAUDOUQ8BAoJEf5OEQkKAbMFPEY7AwYLBgYLBgM7RjwFCAIRCAGaCBECCAFfAiAlHwEDAgIDAR8lIAIFFxcFMwMgJB8BBAEBBAEfJCADBAYEATxFOggQEAg6RTsCBAYEAAACACkADwHXAb0AFAAhAAABIg4CFRQeAjMyPgI1NC4CIxcVIzUjNTM1MxUzFSMBAC1OOiIiOk4tLU46IiI6Ti0aNGdnNGdnAb0hO04tLE47IiI7TiwtTjsh8WdnNWdnNQADAAD/4AFAAcAAGgAqADUAAAEjNTQmKwEiBh0BIyIGHQEUFjMhMjY9ATQmIwcjNy4BNTQ2MzIWFRQGBxc3IzU0NjsBMhYdAQEoCDgoQCg4CAoODgoBEAoODgpoQA4GCBMNDRMIBg4ggBMNQA0TAQBgKDg4KGAOCvAKDg4K8AoO4EYEDggNExMNCA4ERuBgDRMTDWAAAgAA/+AB4AHAACQANAAAASMiBh0BIyIGHQEUFjMhMjY9ATQmKwE1NDY7ATIWHQEzNTQmIwMjNy4BNTQ2MzIWFRQGBxcBgEAoOMgKDg4KARAKDg4KCBMNQA0TQDgowEAOBggTDQ0TCAYOAcA4KGAOCvAKDg4K8AoOYA0TEw1gYCg4/mBGBA4IDRMTDQgOBEYAAgApAA8B1wG9ABQAIQAAASIOAhUUHgIzMj4CNTQuAiMfAQcnByc3JzcXNxcHAQAtTjoiIjpOLS1OOiIiOk4tLE8tTk4tT08tTk4tTwG9ITtOLSxOOyIiO04sLU47IddOLE5OLE5PLE5OLE8AAwAB/9YAjQHUAAQACQAOAAA3MxUjNREzFSM1FTMVIzUBjIyMjIyMZpCQAW6Pj7ePjwAAAAEAJv/mAeEB4wBPAAAXIiYnLgE3PgM3PgEXHgEXFgYPAQ4BBwYmJyY2PwE2MhcWFA8BDgEXHgEzPgE/AT4BJy4BJyYGBw4DBwYWFx4BNwE2MhcWFAcBDgEjfxouESIILw4/TE0cFC8YGCMHBg8T9woYDAwVCA8BGK0FDwYFBa4LAwQDBgMGDAb3DQkEBBUODx0MHE1MPw4kBxcYSyQBAgUPBQYG/v4WMhgaFREiaS8OP0xNHBMPBwYjGBgvFPcKDAIBBwgPMReuBQUGDwWtDBMFAgIBBwb3DB0PDhUEBAkNHE1MPw4kSxcXCCQBAgYGBQ8G/v8XFQAAAwAg/+AB4AHgABkAIgA5AAABLgEnLgEnLgErASIGFREUFjMhMjY1ETQmJyceARcjNR4BFxMUBiMhIiY1ETQ2MzA6AjEVFBY7AREBywgXDQwaDBMVBfgRFxcRAXARFwcOQgsSB00JFAw3BQP+kAMFBQNNXU4JB3ABbQwaDA0XCA4HFxH+UBEXFxEBOAUVExwMFAlNBxIL/n8DBQUDAbADBXAHCf7IAAAABgAg/+AB4AHgABkAIgA5AEgAVwBmAAABLgEnLgEnLgErASIGFREUFjMhMjY1ETQmJyceARcjNR4BFxMUBiMhIiY1ETQ2MzA6AjEVFBY7AREnIyImNTQ2OwEyFhUUBiM1IyImNTQ2OwEyFhUUBiM1IyImNTQ2OwEyFhUUBiMBywgXDQwaDBMVBfgRFxcRAXARFwcOQgsSB00JFAw3BQP+kAMFBQNNXU4JB3BQ4AcJCQfgBwkJB+AHCQkH4AcJCQfgBwkJB+AHCQkHAW0MGgwNFwgOBxcR/lARFxcRATgFFRMcDBQJTQcSC/5/AwUFAwGwAwVwBwn+yDgJBwcJCQcHCUAJBwcJCQcHCUAJBwcJCQcHCQAABQAg/+AB4AHgAAYAEwAtADYATQAAJSE1Nxc3FTUUBiMiJjU0NjMyFhU3LgEnLgEnLgErASIGFREUFjMhMjY1ETQmJyceARcjNR4BFxMUBiMhIiY1ETQ2MzA6AjEVFBY7AREBoP7AYINdHBQUHBwUFBwrCBcNDBoMExUF+BEXFxEBcBEXBw5CCxIHTQkUDDcFA/6QAwUFA01dTgkHcCBAoKBAgNAUHBwUFBwcFH0MGgwNFwgOBxcR/lARFxcRATgFFRMcDBQJTQcSC/5/AwUFAwGwAwVwBwn+yAAAAAQAIP/gAeAB4AAaACQAOwBjAAABLgEnLgEnLgErASIGFREUFjMhMjY1ETQmJzEnHgEXIzUeARcxExQGIyEiJjURNDYzMDoCMRUUFjsBEQMuASMHDgEdAS4BIyIGFRQWMzI2PQE3FS4BIyIGFRQWMzI2PQE0JicBywgXDQwaDBMVBfgRFxcRAXARFwcOQgsSB00JFAw3BQP+kAMFBQNNXU4JB3BGAwcDoAYHBxAJGyUlGxslgAcQCRslJRsbJQMDAW0MGgwNFwgOBxcR/lARFxcRATgFFRMcDBQJTQcSC/5/AwUFAwGwAwVwBwn+yAEUAwEgAQkGdgMDHBQUHBwUcxlCAwMcFBQcHBSgBAYCAAAABQAg/+AB4AHgABsAJgA9AEIARgAAAS4BJy4BJy4BKwEiBhURFBYzITI2NRE0Jic5ASceARcjNR4BFzkBExQGIyEiJjURNDYzMDoCMRUUFjsBESUzFSM1FzcVJwHLCBcNDBoMExUF+BEXFxEBcBEXBw5CCxIHTQkUDDcFA/6QAwUFA01dTgkHcP7AoKCgYGABbQwaDA0XCA4HFxH+UBEXFxEBOAUVExwMFAlNBxIL/n8DBQUDAbADBXAHCf7I2KCgQECgQAAAAAANACD/4AHgAeAAGwAmAD0AQgBHAEwAUQBWAFsAYABlAHUAegAAAS4BJy4BJy4BKwEiBhURFBYzITI2NRE0Jic5ASceARcjNR4BFzkBExQGIyEiJjURNDYzMDoCMRUUFjsBEQEzFSM1FzMVIzUHMxUjNRczFSM1BzMVIzUXMxUjNQczFSM1FzMVIzUHFBY7ATI2PQE0JisBNSMVNxUjNTMBywgXDQwaDBMVBfgRFxcRAXARFwcOQgsSB00JFAw3BQP+kAMFBQNNXU4JB3D+wEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQA4KUAoODgooQGBAQAFtDBoMDRcIDgcXEf5QERcXEQE4BRUTHAwUCU0HEgv+fwMFBQMBsAMFcAcJ/sgBuCAgICAgICAgICAgICAgICAgICAgICAgqAoODgpQCg4giCggIAAAAgAA/+ACAAHgABwAKQAAASIGFRQWFwcVFBY7ATUzNTM1MzceATMyNjU0JiMXIiY1NDYzMhYVFAYjAWBCXgECwxMNIEBAQCoMHA5CXl5CMBQcHBQUHBwUAeBeQggOB8NgDRMgQEAqBQVeQkJeoBwUFBwcFBQcAAAAAwAAAEACAAGAABQAOgBHAAABIg4CBx4DMzI+AjcuAyMXHgEXDgEHDgEjIiYnLgEnPgE3PgE3DgEVFBYzMjY1NCYnHgEXMQcUBiMiJjU0NjMyFhUBACpNQjUSEjVCTSoqTUI1EhI1Qk0qfhcmDg4mFxxAIiJAHBcmDg4mFwEDAgQESzU1SwQEAgMBfhwUFBwcFBQcAYAXKjskJDsqFxcqOyQkOyoXVQ4mFxcmDhITExIOJhcXJg4BAgEKFgw1S0s1DBYKAQIBGxQcHBQUHBwUAAIAAP/gAgAB4AAVACsAAAEuASMiDgIVMzQ+AjMyFhcHMzUHFxQOAiMiJic3IxU3HgEzMj4CNSMBvSNiODVdRigwIThMKy5QHUuwQxMhOEwrLlAdS7BDI2I4NV1GKDABjSYtKEZdNStMOCElIEuwQ60rTDghJSBLsEMmLShGXTUAAQAQ//AB8AHgAAYAAAU3IxEjESMBAPCQwJAQ8AEA/wAAAAAACAAg/+AB4AHgAEsAVQBjAHQAhQCgAKoAwQAAJS4BIyIGBy4BJy4BJzQ2NTA2JzQmNScuASsBIgYHBhYXBw4BDwEOAQ8BFAYHDgEHBhYfAR4BMzI2Nz4BNx4BMzoBNz4BNz4BJzQmJwU+ATc+ATcOAQcTMhYVFAYHLgE1MDYzMQc+ATc+ATceARceARcOAQcxNw4BIyImJzI2MzIWFx4BBzE3LgEnLgEnLgErASIGFREUFjMhMjY1ETQmJzEnHgEXIzUeARcxExQGIyEiJjURNDYzMDoCMRUUFjsBEQGlBRcRDBsPBw0FDxcHAQoCAQECCQcFCAsCBQgKAwcQBwEIDgYJEAMWHAIBAgQIAwUDECYaHUAdFjIRAwUCBAUCAwIBAwL+xQMWEAEFAxIYCIUFBgQEAwMBAigEBwQJDQQIFgwCAwIaLBTXAQgCChcQBgsFCQoJCQMCLQgXDQwaDBMVBfgRFxcRAXARFwcOQgsSB00JFAw3BQP+kAMFBQNNXU4JB3C5BQYCAgQIBQ4kFQEEAkIQAgICAgUJBwYSNiMIECAOAg8aCwQBCAINHAwECQIEAgEpLAoPBAwQAQEEAgUNCAIEAnAIHA4BBAIcGgMBMxUMDBEHChkKGNsHDQcRHAsPGwoCAgIFDAgCAQEIBwEBAgIIAcoMGgwNFwgOBxcR/lARFxcRATgFFRMcDBQJTQcSC/5/AwUFAwGwAwVwBwn+yAAAAAACAAAAAAHAAcAADAAwAAATIgYVFBYzMjY1NCYjFwcXBycPAiMvAQcnNy8BNT8BLwE3Fz8CMx8BNxcHHwEVB+AiLy8iIi8vIqIOHSQ7IxICMxYkOiQcDj4+DhoDJDsjEgIzFiQ6JBwOPj4BMS8iIi8vIiIvgCM6JBwONwc+Dh0kOyMUMxYkMwckHA43Bz4OHSQ7IxQzFwAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAEAAGsq6ulfDzz1AAsCAAAAAADST+tOAAAAANJP604AAP/WAhcB4wAAAAgAAgAAAAAAAAABAAAB4P/gAAACIAAAAAACFwABAAAAAAAAAAAAAAAAAAAAQgIAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAEACAABAAiAAAAIAACACAAABAgAAAAIcAAUCAAAAAgAAAAIAAAACAABsAgAAGgIAADMCAAAcAgAAqQIAALICAAAaAgAAKQIAAAACAAAAAgAAKQCOAAECAAAmAgAAIAIAACACAAAgAgAAIAIAACACAAAgAgAAAAIAAAACAAAAAgAAEAIAACABwAAAAAAAAAAAAAAACgAUAB4AKAAyADwARgBQAFoAZABuAHgAggCMAJYAoACqALQAvgDIANIA3ADmAPAA+gEEAQ4BGAEiAUwBbAG6AdQCRAJWAnQCqALqAyYDVAN4A6gEPARoBJQE7AUcBWYFrgXkBf4GegbOB1gHxghOCLIJVgmSCfoKOgpMC14Lqgu0AAAAAQAAAEIAwgANAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAA4AAAABAAAAAAACAAcAnwABAAAAAAADAA4ASwABAAAAAAAEAA4AtAABAAAAAAAFAAsAKgABAAAAAAAGAA4AdQABAAAAAAAKABoA3gADAAEECQABABwADgADAAEECQACAA4ApgADAAEECQADABwAWQADAAEECQAEABwAwgADAAEECQAFABYANQADAAEECQAGABwAgwADAAEECQAKADQA+GNsaXBwZXJ6LWljb25zAGMAbABpAHAAcABlAHIAegAtAGkAYwBvAG4Ac1ZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGNsaXBwZXJ6LWljb25zAGMAbABpAHAAcABlAHIAegAtAGkAYwBvAG4Ac2NsaXBwZXJ6LWljb25zAGMAbABpAHAAcABlAHIAegAtAGkAYwBvAG4Ac1JlZ3VsYXIAUgBlAGcAdQBsAGEAcmNsaXBwZXJ6LWljb25zAGMAbABpAHAAcABlAHIAegAtAGkAYwBvAG4Ac0ZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format("woff"); } @font-face { font-family: "clipperz-password"; font-style: normal; @@ -119,7 +119,6 @@ http://jonibologna.com/flexbox-cheatsheet/ -ms-transform: rotate(0deg) translate(0, 0); -o-transform: rotate(0deg) translate(0, 0); transform: rotate(0deg) translate(0, 0); } - 100% { -webkit-transform: rotate(359deg) translate(0, 0); -moz-transform: rotate(359deg) translate(0, 0); @@ -133,7 +132,6 @@ http://jonibologna.com/flexbox-cheatsheet/ -ms-transform: rotate(0deg) translate(0, 0); -o-transform: rotate(0deg) translate(0, 0); transform: rotate(0deg) translate(0, 0); } - 100% { -webkit-transform: rotate(359deg) translate(0, 0); -moz-transform: rotate(359deg) translate(0, 0); @@ -147,7 +145,6 @@ http://jonibologna.com/flexbox-cheatsheet/ -ms-transform: rotate(0deg) translate(0, 0); -o-transform: rotate(0deg) translate(0, 0); transform: rotate(0deg) translate(0, 0); } - 100% { -webkit-transform: rotate(359deg) translate(0, 0); -moz-transform: rotate(359deg) translate(0, 0); @@ -161,7 +158,6 @@ http://jonibologna.com/flexbox-cheatsheet/ -ms-transform: rotate(0deg) translate(0, 0); -o-transform: rotate(0deg) translate(0, 0); transform: rotate(0deg) translate(0, 0); } - 100% { -webkit-transform: rotate(359deg) translate(0, 0); -moz-transform: rotate(359deg) translate(0, 0); @@ -480,73 +476,61 @@ div.overlay { @-webkit-keyframes overlay-spin { from { opacity: 1; } - to { opacity: 0.25; } } @-moz-keyframes overlay-spin { from { opacity: 1; } - to { opacity: 0.25; } } @-ms-keyframes overlay-spin { from { opacity: 1; } - to { opacity: 0.25; } } @keyframes overlay-spin { from { opacity: 1; } - to { opacity: 0.25; } } @-webkit-keyframes ios-overlay-show { 0% { opacity: 0; } - 100% { opacity: 1; } } @-moz-keyframes ios-overlay-show { 0% { opacity: 0; } - 100% { opacity: 1; } } @-ms-keyframes ios-overlay-show { 0% { opacity: 0; } - 100% { opacity: 1; } } @keyframes ios-overlay-show { 0% { opacity: 0; } - 100% { opacity: 1; } } @-webkit-keyframes ios-overlay-hide { 0% { opacity: 1; } - 100% { opacity: 0; } } @-moz-keyframes ios-overlay-hide { 0% { opacity: 1; } - 100% { opacity: 0; } } @-ms-keyframes ios-overlay-hide { 0% { opacity: 1; } - 100% { opacity: 0; } } @keyframes ios-overlay-hide { 0% { opacity: 1; } - 100% { opacity: 0; } } /* @@ -1004,6 +988,8 @@ div.cardToolbar header { text-align: center; } div.cardToolbar header div.clipperz span.logo.tag, div.cardToolbar header div.clipperz span.logo.search { font-size: 14pt; } + div.cardToolbar header div.clipperz span.logo.withAttachments { + font-weight: bold; } div.cardToolbar header div.clipperz span.value { display: inline-block; padding-left: 5px; @@ -1014,22 +1000,51 @@ div.cardToolbar header { -moz-box-flex: 1; -moz-flex: 1; -ms-flex: 1; - flex: 1; } + flex: 1; + text-align: left; } div.cardToolbar header div.selectionToggle .button { - text-align: left; } + display: inline-block; } div.cardToolbar header div.selectionToggle .button .label { - padding-left: 8px; } + padding-left: 8px; + padding-right: 8px; } div.cardToolbar header div.settingsToggle { -webkit-box-flex: 1; -webkit-flex: 1; -moz-box-flex: 1; -moz-flex: 1; -ms-flex: 1; - flex: 1; } + flex: 1; + text-align: right; } div.cardToolbar header div.settingsToggle .button { - text-align: right; } + display: inline-block; } div.cardToolbar header div.settingsToggle .button .label { - padding-right: 8px; } + padding-right: 8px; + padding-left: 8px; } + div.cardToolbar header div.settingsToggle .button .attachmentQueueToggleButton { + font-family: "clipperz-font"; + margin-right: 10px; } + div.cardToolbar header div.settingsToggle .button .attachmentQueueToggleButton h3 { + font-weight: bold; + font-size: 33pt; + letter-spacing: -10px; } + div.cardToolbar header div.settingsToggle .button .attachmentQueueToggleButton .badge { + position: absolute; + margin-left: -12px; + width: auto; + height: 16px; + line-height: 17px; + background-color: #1863a1; + color: white; + text-align: center; + font-size: 8pt; + font-weight: bold; + border-radius: 8px; + padding: 0px 4px; } + div.cardToolbar header div.settingsToggle .button .attachmentQueueToggleButton .badge.top { + top: 11px; } + div.cardToolbar header div.settingsToggle .button .attachmentQueueToggleButton .badge.bottom { + top: 25px; + margin-left: -42px; } div.cardToolbar header div .button { overflow: hidden; font-size: 24pt; @@ -1043,6 +1058,139 @@ div.cardToolbar header { text-rendering: optimizeLegibility; vertical-align: center; } +div.attachmentQueueStatus { + position: fixed; + top: calc(48px - 8px); + right: 0; + padding: 0; + color: white; + z-index: 10; + height: calc(100% - 48px); + pointer-events: none; } + div.attachmentQueueStatus .arrow { + width: 0; + height: 0; + border-style: solid; + border-width: 0 8px 8px 8px; + border-color: transparent transparent black transparent; + position: fixed; + right: 70px; + top: calc(49px - 8px); } + div.attachmentQueueStatus.closed { + display: none; + visibility: hidden; } + div.attachmentQueueStatus p { + padding: 1em; } + div.attachmentQueueStatus ul { + pointer-events: all; + max-height: 100%; + overflow-y: auto; + overflow-x: hidden; + white-space: nowrap; + background: black; + margin-top: 8px; + padding: 0; + box-shadow: 0px 2px 5px #888888; } + div.attachmentQueueStatus ul li { + padding: 0 0 0 1em; + border-bottom: 1px solid white; } + div.attachmentQueueStatus ul li span { + display: inline-block; + vertical-align: middle; + height: 40px; + line-height: 40px; } + div.attachmentQueueStatus ul li .contentType { + font-family: 'clipperz-icons'; + -webkit-font-feature-settings: "liga" 1, "dlig" 1; + -moz-font-feature-settings: "liga" 1, "dlig" 1; + -ms-font-feature-settings: "liga" 1, "dlig" 1; + -o-font-feature-settings: "liga" 1, "dlig" 1; + font-feature-settings: "liga" 1, "dlig" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + color: white; + width: 30px; } + div.attachmentQueueStatus ul li .name { + width: 250px; + overflow: hidden; + text-overflow: ellipsis; } + div.attachmentQueueStatus ul li .status { + width: 150px; + text-align: right; } + div.attachmentQueueStatus ul li .status .statusString { + font-size: .8em; } + div.attachmentQueueStatus ul li .status .processIcon { + margin-left: 1em; } + div.attachmentQueueStatus ul li .close a { + font-family: 'clipperz-icons'; + -webkit-font-feature-settings: "liga" 1, "dlig" 1; + -moz-font-feature-settings: "liga" 1, "dlig" 1; + -ms-font-feature-settings: "liga" 1, "dlig" 1; + -o-font-feature-settings: "liga" 1, "dlig" 1; + font-feature-settings: "liga" 1, "dlig" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + display: inline-block; + width: 50px; + text-align: center; + letter-spacing: 1px; + font-size: 20px; + -moz-user-select: -moz-none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; } + div.attachmentQueueStatus ul li .close a:hover { + color: lightgray; + cursor: pointer; } + div.attachmentQueueStatus ul li .progress { + width: 50px; + height: 30px; + text-align: center; + -moz-user-select: -moz-none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; } + div.attachmentQueueStatus ul li:last-child { + border-bottom: 0; } + div.attachmentQueueStatus .radialProgressIndicator { + height: 25px; } + div.attachmentQueueStatus .radialProgressIndicator .background { + fill: white; } + div.attachmentQueueStatus .radialProgressIndicator .progress { + fill: #ff9900; } + +.narrow .attachmentQueueStatus { + width: 100%; } + .narrow .attachmentQueueStatus ul { + white-space: inherit; } + .narrow .attachmentQueueStatus ul li { + padding-top: .2em; + padding-bottom: .2em; } + .narrow .attachmentQueueStatus ul li span { + height: 25px; + line-height: 30px; } + .narrow .attachmentQueueStatus ul li .name { + width: 225px; } + .narrow .attachmentQueueStatus ul li .status { + padding-left: 30px; + text-align: left; + width: calc(100% - 100px); + line-height: 20px; + font-size: .8em; } + .narrow .attachmentQueueStatus ul li .status .processIcon { + margin-left: 0.5em; } + .narrow .attachmentQueueStatus ul li .close { + height: inherit; + line-height: inherit; + float: right; + display: block; + margin-top: -5px; } + .narrow .attachmentQueueStatus ul li .progress { + padding-left: 18px; + margin-top: -24px; } + div.cardContent { display: -webkit-box; display: -webkit-flex; @@ -1178,7 +1326,8 @@ div.cardContent { -webkit-flex-direction: column; -moz-flex-direction: column; -ms-flex-direction: column; - flex-direction: column; } + flex-direction: column; + width: 100%; } div.cardContent div.cardDetail.column .content { -webkit-box-flex: auto; -webkit-flex: auto; @@ -1201,7 +1350,8 @@ div.cardContent { -moz-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - height: 100%; } + height: 100%; + width: 100%; } #cardDetailPage > .view .content, #cardDetailPage > .editWrapper > .edit .content { -webkit-box-flex: auto; -webkit-flex: auto; @@ -1226,7 +1376,8 @@ div.cardContent { -moz-order: 1; -ms-flex-order: 1; order: 1; - -webkit-transform: translate3d(0, 0, 0); } + -webkit-transform: translate3d(0, 0, 0); + width: 100%; } .cardDetailToolbar.edit li.save { cursor: default; background-color: #55aa55; } @@ -1529,9 +1680,17 @@ div.help { flex: none; font-size: 13pt; font-weight: 100; - padding-right: 10px; + margin-right: 10px; padding-left: 1px; - line-height: 27px; } + line-height: 27px; + /* boxed style test */ + /* background-color: $clipperz-orange; + padding-left: 5px; + padding-right: 5px; + border-radius: 3px; + border:1px solid gray; + color: white; + */ } .tagEditor ul li.tag span.tagRemoveButton { font-family: 'clipperz-icons'; -webkit-font-feature-settings: "liga" 1, "dlig" 1; @@ -1541,9 +1700,15 @@ div.help { font-feature-settings: "liga" 1, "dlig" 1; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; + -moz-user-select: -moz-none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; cursor: pointer; line-height: 22px; - color: #ccc; } + color: #ccc; + /*color:white;*/ } .tagEditor ul li.tag span.tagRemoveButton:hover { color: #9b0000; } .tagEditor input { @@ -1917,6 +2082,9 @@ div.help { content: "clipperz"; } #selections ul.defaultSet li.recentCards:before { content: "recent"; } + #selections ul.defaultSet li.withAttachmentCards:before { + content: "attachment"; + font-weight: bold; } #selections ul.defaultSet li.untaggedCards { padding-left: 35px; } #selections .search form div.form { @@ -2160,14 +2328,25 @@ span.count { #selections.ALL li.allCards { color: #ff9900; } + #selections.ALL li.allCards:before { + color: white; } + +#selections.WITH_ATTACHMENTS li.withAttachmentCards { + color: #ff9900; } + #selections.WITH_ATTACHMENTS li.withAttachmentCards:before { + color: white; } #selections.RECENT li.recentCards { color: #ff9900; } + #selections.RECENT li.recentCards:before { + color: white; } #selections.UNTAGGED li.untaggedCards { color: #ff9900; } + #selections.UNTAGGED li.untaggedCards:before { + color: white; } -#selections.SEARCH div.search form div.form label { +#selections.SEARCH div.search form div.form input { color: #ff9900; } #selections.SEARCH div.search form div.form .searchClear span.count { display: block; } @@ -2176,6 +2355,8 @@ span.count { #selections.TAG ul.tagList li.selected { color: #ff9900; } + #selections.TAG ul.tagList li.selected:before { + color: white; } #extraFeaturesPanel .extraFeatureIndex { background-color: black; @@ -2293,13 +2474,13 @@ span.count { #extraFeaturesPanel .extraFeatureIndex footer { font-size: 8pt; padding: 5px 5px 5px 5px; - border-top: 1px solid #999999; } + border-top: 1px solid #999; } #extraFeaturesPanel .extraFeatureIndex footer span { - color: #999999; } + color: #999; } #extraFeaturesPanel .extraFeatureIndex footer span:after { content: ":"; } #extraFeaturesPanel .extraFeatureIndex footer a { - color: #999999; + color: #999; text-decoration: none; padding-left: 5px; font-weight: bold; } @@ -3097,7 +3278,7 @@ div.cardList ul { padding-right: 0px; box-shadow: -4px 0px 3px -1px rgba(0, 0, 0, 0.2); } div.cardList ul li.archived { - background-color: #eeeeee; + background-color: #eee; color: #999; } div.cardList ul li .favicon { width: 48px; @@ -3124,6 +3305,19 @@ div.cardList ul { padding-left: 16px; padding-right: 8px; line-height: 1.2em; } + div.cardList ul li .attachmentsCount { + font-family: 'clipperz-icons'; + -webkit-font-feature-settings: "liga" 1, "dlig" 1; + -moz-font-feature-settings: "liga" 1, "dlig" 1; + -ms-font-feature-settings: "liga" 1, "dlig" 1; + -o-font-feature-settings: "liga" 1, "dlig" 1; + font-feature-settings: "liga" 1, "dlig" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + color: #aaa; + padding-right: 8px; + padding-left: 6px; + padding-top: 18px; } div.cardList.narrow { overflow: auto; @@ -3184,7 +3378,7 @@ div.cardList.narrow { content: ""; } #cardDetailPage .view.archived, .cardDetail .view.archived { - background-color: #eeeeee; } + background-color: #eee; } #cardDetailPage .view .cardDetailToolbar, .cardDetail .view .cardDetailToolbar { background-color: #1863a1; color: white; } @@ -3256,6 +3450,9 @@ div.cardList.narrow { #cardDetailPage .edit .cardDetailToolbar, .cardDetail .edit .cardDetailToolbar { background-color: #1863a1; color: white; } + #cardDetailPage .edit .cardDetailToolbar.top, .cardDetail .edit .cardDetailToolbar.top { + display: none; + /* Issue #203 */ } #cardDetailPage .edit .cardDetailToolbar.narrow, .cardDetail .edit .cardDetailToolbar.narrow { -webkit-transition: height 2.5s ease-in; -moz-transition: height 2.5s ease-in; @@ -3294,8 +3491,8 @@ div.cardList.narrow { font-feature-settings: "liga" 1, "dlig" 1; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; - margin: 6px; - margin-top: 12px; + display: inline-block; + margin-left: 6px; cursor: pointer; color: white; width: 40px; @@ -3304,7 +3501,172 @@ div.cardList.narrow { color: #9b0000; } #cardDetailPage .edit .cardDirectLogin .directLoginLabel, .cardDetail .edit .cardDirectLogin .directLoginLabel { vertical-align: bottom; - padding-left: 17px; } + padding-left: 0px; } +#cardDetailPage .edit .cardUploadAttachments, .cardDetail .edit .cardUploadAttachments { + border: 2px dashed #ccc; + margin: 0 1em 1em 1em; + padding: 1em; + text-align: center; + margin-left: 44px; } + #cardDetailPage .edit .cardUploadAttachments p, .cardDetail .edit .cardUploadAttachments p { + margin-bottom: 1em; } + #cardDetailPage .edit .cardUploadAttachments .attachmentInput, .cardDetail .edit .cardUploadAttachments .attachmentInput { + display: none; } + #cardDetailPage .edit .cardUploadAttachments .button, .cardDetail .edit .cardUploadAttachments .button { + display: inline-block; + color: white; + background-color: #ff9900; + font-size: 14pt; + padding: 10px 14px; } + +.cardAttachmentWrapper { + border-bottom: 3px double #eee; } + +.cardAttachments { + padding-bottom: 10px; } + .cardAttachments h3 { + padding-top: 14px; + padding-bottom: 14px; + color: gray; + font-size: 12pt; } + .cardAttachments h3:before { + font-family: 'clipperz-icons'; + -webkit-font-feature-settings: "liga" 1, "dlig" 1; + -moz-font-feature-settings: "liga" 1, "dlig" 1; + -ms-font-feature-settings: "liga" 1, "dlig" 1; + -o-font-feature-settings: "liga" 1, "dlig" 1; + font-feature-settings: "liga" 1, "dlig" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + content: "attachment"; + padding-left: 13px; + padding-right: 13px; + padding-top: 0px; + padding-bottom: 0px; + font-weight: bold; + font-size: 14pt; + display: inline-block; + transform: scaleX(-1); } + .cardAttachments .skippedFiles { + margin: 1em 1em 1em 44px; + color: white; + background: #ff9900; + padding: 1em; + font-size: .8em; } + .cardAttachments .skippedFiles ul { + padding: 1em 1em 1em 0; + list-style-type: none; } + .cardAttachments .skippedFiles ul li .filename { + font-weight: bold; } + .cardAttachments .attachmentList { + margin-left: 44px; + padding-right: 8px; } + .cardAttachments .attachmentList li { + display: -webkit-box; + display: -webkit-flex; + display: -moz-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-direction: normal; + -webkit-box-orient: horizontal; + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + padding-bottom: 6px; + /*cursor: pointer;*/ } + .cardAttachments .attachmentList li.broken span { + color: #dd1111 !important; } + .cardAttachments .attachmentList li .contentType { + -webkit-box-flex: none; + -webkit-flex: none; + -moz-box-flex: none; + -moz-flex: none; + -ms-flex: none; + flex: none; + width: 30px; + font-family: 'clipperz-icons'; + -webkit-font-feature-settings: "liga" 1, "dlig" 1; + -moz-font-feature-settings: "liga" 1, "dlig" 1; + -ms-font-feature-settings: "liga" 1, "dlig" 1; + -o-font-feature-settings: "liga" 1, "dlig" 1; + font-feature-settings: "liga" 1, "dlig" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + color: gray; } + .cardAttachments .attachmentList li span { + /*border:1px solid black;*/ + line-height: 30px; + display: inline-block; } + .cardAttachments .attachmentList li .meta { + -webkit-box-flex: auto; + -webkit-flex: auto; + -moz-box-flex: auto; + -moz-flex: auto; + -ms-flex: auto; + flex: auto; + text-align: left; + font-size: 14pt; + width: 100%; + /* Hack to fix long names behaviour */ + overflow: hidden; } + .cardAttachments .attachmentList li .meta .name { + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + white-space: pre; } + .cardAttachments .attachmentList li .meta .size { + display: block; + color: #aaa; + font-size: 8pt; + line-height: 8pt; } + .cardAttachments .attachmentList li .status { + width: 100px; + text-align: right; } + .cardAttachments .attachmentList li .status .waiting { + font-size: 10pt; + color: #aaa; } + .cardAttachments .attachmentList li .actions { + -moz-user-select: -moz-none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + display: inline-block; + width: 30px; } + .cardAttachments .attachmentList li .actions a { + display: inline-block; + width: 30px; + cursor: pointer; + font-size: 20pt; + color: #aaa; } + .cardAttachments .attachmentList li .actions a.cancel, .cardAttachments .attachmentList li .actions a.remove { + font-family: 'clipperz-icons'; + -webkit-font-feature-settings: "liga" 1, "dlig" 1; + -moz-font-feature-settings: "liga" 1, "dlig" 1; + -ms-font-feature-settings: "liga" 1, "dlig" 1; + -o-font-feature-settings: "liga" 1, "dlig" 1; + font-feature-settings: "liga" 1, "dlig" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; } + .cardAttachments .attachmentList li .actions a.cancel:hover, .cardAttachments .attachmentList li .actions a.remove:hover { + color: #dd1111; } + .cardAttachments .attachmentList li .actions a.download:hover { + color: #1863a1; } + .cardAttachments .attachmentList li .progress { + width: 30px; + text-align: center; } + .cardAttachments .attachmentList li .progress .radialProgressIndicator { + width: 25px; + height: 30px; } + .cardAttachments .attachmentList li .progress .radialProgressIndicator .background { + fill: white; } + .cardAttachments .attachmentList li .progress .radialProgressIndicator .progress { + fill: black; } + .cardAttachments .attachmentList li .progress .radialProgressIndicator .border { + fill: black; } + .cardAttachments .attachmentList li .progress .radialProgressIndicator.waiting .border { + fill: #aaa; } .edit .cardDetailToolbar.commands div, .edit .cardDetailToolbar.commands ul { display: none; @@ -3341,7 +3703,36 @@ div.cardList.narrow { width: 100%; padding: 13px 20px 13px 42px; } .content .tagEditor { - padding: 10px; } + padding: 10px; + flex-wrap: wrap; + /* I considered this specific to the card View/Edit page: should it go in tagEditor.scss instead? */ } + .content .tagEditor ul { + width: calc(100% - 31px); + flex-wrap: wrap; + padding-left: 31px; } + .content .tagEditor ul:before { + margin-left: -32px; } + .content .tagEditor ul li .tagLabel { + max-width: 500px; + overflow: hidden; + text-overflow: ellipsis; + white-space: pre; } + .content .tagEditor.readOnly ul li { + display: inline-block; + max-width: 30%; } + .content .tagEditor.readOnly ul li .tagLabel { + display: inline-block; + width: 100%; } + .content .tagEditor.readWrite ul li { + /*display: inline-flex;*/ + /*width: 30%;*/ + display: inline-block; + max-width: 30%; } + .content .tagEditor.readWrite ul li .tagLabel { + width: calc(100% - 30px); + display: inline-block; } + .content .tagEditor.readWrite ul li input { + width: 100%; } .content .cardNotes { border: 0px; font-size: 10pt; @@ -3424,12 +3815,12 @@ div.cardList.narrow { width: 40px; font-size: 20pt; } .content .cardField .fieldEditAction .removeField:hover { - color: #9b0000; } + color: #dd1111; } .content .cardField .fieldEditAction .dragHandler3 { cursor: grab; cursor: -moz-grab; cursor: -webkit-grab; - background: repeating-linear-gradient(0deg, white, white 2px, #dddddd 2px, #dddddd 3px); + background: repeating-linear-gradient(0deg, white, white 2px, #ddd 2px, #ddd 3px); width: 28px; height: 20px; margin-left: 6px; @@ -3581,6 +3972,7 @@ div.cardList.narrow { height: 20px; font-size: 15pt; margin: 6px; + margin-right: 16px; cursor: default; } .content .cardField .fieldAction span.action.URL { cursor: pointer; } @@ -3613,20 +4005,40 @@ div.cardList.narrow { .content .cardField .fieldAction span.toggleLock:hover { color: #888; } .content .newCardField { - font-family: 'clipperz-icons'; - -webkit-font-feature-settings: "liga" 1, "dlig" 1; - -moz-font-feature-settings: "liga" 1, "dlig" 1; - -ms-font-feature-settings: "liga" 1, "dlig" 1; - -o-font-feature-settings: "liga" 1, "dlig" 1; - font-feature-settings: "liga" 1, "dlig" 1; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - margin: 6px; - cursor: pointer; - color: #ccc; - font-size: 20pt; } + height: 115px; + border-bottom: 3px double #eee; + cursor: pointer; } + .content .newCardField .fieldGhostShadow { + padding-top: 11px; + padding-bottom: 11px; + padding-left: 42px; + padding-right: 49px; } + .content .newCardField .fieldGhostShadow .label { + background-color: white; + height: 25px; + margin-bottom: 8px; } + .content .newCardField .fieldGhostShadow .value { + background-color: white; + height: 58px; } + .content .newCardField .addNewFieldButton { + margin-top: -90px; + width: 70px; + font-size: 50pt; + margin-left: auto; + margin-right: auto; + font-family: 'clipperz-icons'; + -webkit-font-feature-settings: "liga" 1, "dlig" 1; + -moz-font-feature-settings: "liga" 1, "dlig" 1; + -ms-font-feature-settings: "liga" 1, "dlig" 1; + -o-font-feature-settings: "liga" 1, "dlig" 1; + font-feature-settings: "liga" 1, "dlig" 1; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + color: #eee; } .content .newCardField:hover { - color: green; } + background-color: #f5f5f5; } + .content .newCardField:hover .addNewFieldButton { + color: #7c7; } .content .cardDirectLogin { font-size: 18pt; padding: 10px; @@ -3655,7 +4067,7 @@ div.cardList.narrow { min-width: 220px; width: 80%; max-width: 400px; - background-color: #333333; + background-color: #333; color: #fff; -webkit-border-radius: 6px; -moz-border-radius: 6px; @@ -3670,7 +4082,7 @@ div.cardList.narrow { margin-left: 0px; width: 0; height: 0; - border-top: 5px solid #333333; + border-top: 5px solid #333; border-left: 5px solid transparent; border-right: 5px solid transparent; } .passwordGenerator .passwordGeneratorBaloon form span { diff --git a/frontend/delta/css/clipperz.css.map b/frontend/delta/css/clipperz.css.map index 89b067c..43b5f5d 100644 --- a/frontend/delta/css/clipperz.css.map +++ b/frontend/delta/css/clipperz.css.map @@ -1,7 +1,7 @@ { "version": 3, -"mappings": ";;;;;AAOA,0eAA2e;EAC1e,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;EACV,MAAM,EAAE,CAAC;EACT,SAAS,EAAE,IAAI;EACf,IAAI,EAAE,OAAO;EACb,cAAc,EAAE,QAAQ;;;AAKzB,uFAAwF;EACvF,OAAO,EAAE,KAAK;;AAGf,IAAK;EACJ,WAAW,EAAE,CAAC;;AAGf,MAAO;EACN,UAAU,EAAE,IAAI;;AAGjB,aAAc;EACb,MAAM,EAAE,IAAI;EAEZ,sDAAmB;IAClB,OAAO,EAAE,EAAE;IACX,OAAO,EAAE,IAAI;;AAIf,KAAM;EACL,eAAe,EAAE,QAAQ;EACzB,cAAc,EAAE,CAAC;;AClClB,UAOC;EANA,WAAW,EAAE,gBAAgB;EAE7B,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,MAAM;EACnB,GAAG,EAAE,4mQAA4mQ;AAQlnQ,UAKC;EAJA,WAAW,EAAE,mBAAmB;EAChC,UAAU,EAAE,MAAM;EAClB,WAAW,EAAE,GAAG;EAChB,GAAG,EAAE,o00QAAo00Q;ACxB100Q,UAMC;EALA,WAAW,EAAE,eAAe;EAE5B,GAAG,EAAE,wzgXAAwzgX;EAC7zgX,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;AAGnB,UAMC;EALA,WAAW,EAAE,eAAe;EAE5B,GAAG,EAAE,gqtQAAgqtQ;EACrqtQ,WAAW,EAAE,IAAI;EACjB,UAAU,EAAE,MAAM;AAInB,UAMC;EALA,WAAW,EAAE,eAAe;EAE5B,GAAG,EAAE,g8/WAAg8/W;EACr8/W,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;AAGnB,UAMC;EALA,WAAW,EAAE,eAAe;EAE5B,GAAG,EAAE,o3lQAAo3lQ;EACz3lQ,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACmFlB,uBAEC;EAyBD,EAAG;IA9DH,iBAAiB,EAAE,4BAA0D;IAC1E,cAAc,EAAE,4BAA0D;IACzE,aAAa,EAAE,4BAA0D;IACxE,YAAY,EAAE,4BAA0D;IACrE,SAAS,EAAE,4BAA0D;;EA2D7E,IAAK;IA/DL,iBAAiB,EAAE,8BAA0D;IAC1E,cAAc,EAAE,8BAA0D;IACzE,aAAa,EAAE,8BAA0D;IACxE,YAAY,EAAE,8BAA0D;IACrE,SAAS,EAAE,8BAA0D;AAkC7E,oBAEC;EAsBD,EAAG;IA9DH,iBAAiB,EAAE,4BAA0D;IAC1E,cAAc,EAAE,4BAA0D;IACzE,aAAa,EAAE,4BAA0D;IACxE,YAAY,EAAE,4BAA0D;IACrE,SAAS,EAAE,4BAA0D;;EA2D7E,IAAK;IA/DL,iBAAiB,EAAE,8BAA0D;IAC1E,cAAc,EAAE,8BAA0D;IACzE,aAAa,EAAE,8BAA0D;IACxE,YAAY,EAAE,8BAA0D;IACrE,SAAS,EAAE,8BAA0D;AAqC7E,mBAEC;EAmBD,EAAG;IA9DH,iBAAiB,EAAE,4BAA0D;IAC1E,cAAc,EAAE,4BAA0D;IACzE,aAAa,EAAE,4BAA0D;IACxE,YAAY,EAAE,4BAA0D;IACrE,SAAS,EAAE,4BAA0D;;EA2D7E,IAAK;IA/DL,iBAAiB,EAAE,8BAA0D;IAC1E,cAAc,EAAE,8BAA0D;IACzE,aAAa,EAAE,8BAA0D;IACxE,YAAY,EAAE,8BAA0D;IACrE,SAAS,EAAE,8BAA0D;AAwC7E,eAEC;EAgBD,EAAG;IA9DH,iBAAiB,EAAE,4BAA0D;IAC1E,cAAc,EAAE,4BAA0D;IACzE,aAAa,EAAE,4BAA0D;IACxE,YAAY,EAAE,4BAA0D;IACrE,SAAS,EAAE,4BAA0D;;EA2D7E,IAAK;IA/DL,iBAAiB,EAAE,8BAA0D;IAC1E,cAAc,EAAE,8BAA0D;IACzE,aAAa,EAAE,8BAA0D;IACxE,YAAY,EAAE,8BAA0D;IACrE,SAAS,EAAE,8BAA0D;AChF9E,WAAY;EAWX,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EACT,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,WAAW,EAAE,MAAM;EACnB,UAAU,EAAE,MAAM;EAClB,UAAU,EAAE,kBAAe;EDpB3B,qBAAqB,ECqBE,IAAI;EDpBxB,kBAAkB,ECoBE,IAAI;EDnBnB,aAAa,ECmBE,IAAI;ED0G3B,iBAAM;IACL,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,EAAE;IACX,gBAAgB,EAAE,kBAAkB;EClIrC,iBAAM;IACL,QAAQ,EAAE,KAAK;IACf,OAAO,EAAE,EAAE;IAEX,wBAAS;MACR,OAAO,EAAE,IAAI;EAcf,kBAAO;IACN,KAAK,EAAE,IAAI;IAEX,WAAW,EAAE,IAAI;IACjB,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,QAAQ;IAClB,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,IAAI;EAGZ,iBAAM;IACL,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,YAAY;IACrB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,GAAG;IACT,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IAEjB,UAAU,EAAE,MAAM;IAClB,cAAc,EAAE,MAAM;IDvBvB,WAAW,EAAE,gBAAgB;IAT7B,6BAA6B,EAAC,kBAAM;IAEpC,0BAA0B,EAAC,kBAAM;IACjC,yBAAyB,EAAC,kBAAM;IAChC,wBAAwB,EAAC,kBAAM;IAC/B,qBAAqB,EAAC,kBAAM;IAM5B,sBAAsB,EAAE,WAAW;IACnC,cAAc,EAAC,kBAAkB;ICuBhC,SAAS,EAAE,IAAI;IACf,KAAK,EAAE,KAAK;IACZ,WAAW,EAAE,IAAI;EAGlB,4BAAmB;IDlBnB,sBAAsB,ECmBF,gBAAgB;IDlBpC,0BAA0B,ECkBY,KAAK;IDjB3C,iCAAiC,EAHwB,MAAM;IAI/D,iCAAiC,EAJiD,CAAC;IAKnF,2BAA2B,EALqE,IAAI;IAOpG,mBAAmB,ECaC,gBAAgB;IDZpC,uBAAuB,ECYe,KAAK;IDX3C,8BAA8B,EAT2B,MAAM;IAU/D,8BAA8B,EAVoD,CAAC;IAWnF,wBAAwB,EAXwE,IAAI;IAapG,kBAAkB,ECOE,gBAAgB;IDNpC,sBAAsB,ECMgB,KAAK;IDL3C,6BAA6B,EAf4B,MAAM;IAgB/D,6BAA6B,EAhBqD,CAAC;IAiBnF,uBAAuB,EAjByE,IAAI;IAmBpG,iBAAiB,ECCG,gBAAgB;IDApC,qBAAqB,ECAiB,KAAK;IDC3C,4BAA4B,EArB6B,MAAM;IAsB/D,4BAA4B,EAtBsD,CAAC;IAuBnF,sBAAsB,EAvB0E,IAAI;IAyBpG,cAAc,ECLM,gBAAgB;IDMpC,kBAAkB,ECNoB,KAAK;IDO3C,yBAAyB,EA3BgC,MAAM;IA4B/D,yBAAyB,EA5ByD,CAAC;IA6BnF,mBAAmB,EA7B6E,IAAI;ECwBpG,4BAAmB;IDvBnB,sBAAsB,ECwBF,gBAAgB;IDvBpC,0BAA0B,ECuBY,KAAK;IDtB3C,iCAAiC,ECsBY,MAAM;IDrBnD,iCAAiC,ECqBoB,CAAC;IDpBtD,2BAA2B,ECoB6B,QAAQ;IDlBhE,mBAAmB,ECkBC,gBAAgB;IDjBpC,uBAAuB,ECiBe,KAAK;IDhB3C,8BAA8B,ECgBe,MAAM;IDfnD,8BAA8B,ECeuB,CAAC;IDdtD,wBAAwB,ECcgC,QAAQ;IDZhE,kBAAkB,ECYE,gBAAgB;IDXpC,sBAAsB,ECWgB,KAAK;IDV3C,6BAA6B,ECUgB,MAAM;IDTnD,6BAA6B,ECSwB,CAAC;IDRtD,uBAAuB,ECQiC,QAAQ;IDNhE,iBAAiB,ECMG,gBAAgB;IDLpC,qBAAqB,ECKiB,KAAK;IDJ3C,4BAA4B,ECIiB,MAAM;IDHnD,4BAA4B,ECGyB,CAAC;IDFtD,sBAAsB,ECEkC,QAAQ;IDAhE,cAAc,ECAM,gBAAgB;IDCpC,kBAAkB,ECDoB,KAAK;IDE3C,yBAAyB,ECFoB,MAAM;IDGnD,yBAAyB,ECH4B,CAAC;IDItD,mBAAmB,ECJqC,QAAQ;EAIhE,uBAAY;IACX,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,KAAK;IACb,IAAI,EAAE,cAAc;IACpB,GAAG,EAAE,cAAc;IAEnB,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IAGjB,OAAO,EAAE,KAAK;IAEd,2BAAI;MACH,KAAK,EAAE,GAAG;MACV,MAAM,EAAE,GAAG;MACX,UAAU,EAAE,OAAO;MACnB,QAAQ,EAAE,QAAQ;MAClB,IAAI,EAAE,KAAK;MACX,GAAG,EAAE,GAAG;MACR,OAAO,EAAE,CAAC;MDhDZ,sBAAsB,ECiDD,YAAY;MDhDjC,0BAA0B,ECgDS,EAAE;MD/CrC,iCAAiC,EC+CM,MAAM;MD9C7C,iCAAiC,EC8Cc,QAAQ;MD7CvD,2BAA2B,EALqE,IAAI;MAOpG,mBAAmB,EC2CE,YAAY;MD1CjC,uBAAuB,EC0CY,EAAE;MDzCrC,8BAA8B,ECyCS,MAAM;MDxC7C,8BAA8B,ECwCiB,QAAQ;MDvCvD,wBAAwB,EAXwE,IAAI;MAapG,kBAAkB,ECqCG,YAAY;MDpCjC,sBAAsB,ECoCa,EAAE;MDnCrC,6BAA6B,ECmCU,MAAM;MDlC7C,6BAA6B,ECkCkB,QAAQ;MDjCvD,uBAAuB,EAjByE,IAAI;MAmBpG,iBAAiB,EC+BI,YAAY;MD9BjC,qBAAqB,EC8Bc,EAAE;MD7BrC,4BAA4B,EC6BW,MAAM;MD5B7C,4BAA4B,EC4BmB,QAAQ;MD3BvD,sBAAsB,EAvB0E,IAAI;MAyBpG,cAAc,ECyBO,YAAY;MDxBjC,kBAAkB,ECwBiB,EAAE;MDvBrC,yBAAyB,ECuBc,MAAM;MDtB7C,yBAAyB,ECsBsB,QAAQ;MDrBvD,mBAAmB,EA7B6E,IAAI;MApCpG,qBAAqB,ECuFI,IAAI;MDtF1B,kBAAkB,ECsFI,IAAI;MDrFrB,aAAa,ECqFI,IAAI;MDiB7B,kBAAkB,EAAE,0BAA8B;MAC/C,eAAe,EAAE,0BAA8B;MAC9C,cAAc,EAAE,0BAA8B;MAC7C,aAAa,EAAE,0BAA8B;MAC1C,UAAU,EAAE,0BAA8B;ICjBjD,iCAAU;MDdX,iBAAiB,EAAE,gCAA0D;MAC1E,cAAc,EAAE,gCAA0D;MACzE,aAAa,EAAE,gCAA0D;MACxE,YAAY,EAAE,gCAA0D;MACrE,SAAS,EAAE,gCAA0D;MAe7E,uBAAuB,EAAE,EAAM;MAC5B,oBAAoB,EAAE,EAAM;MAC3B,mBAAmB,EAAE,EAAM;MAC1B,kBAAkB,EAAE,EAAM;MACvB,eAAe,EAAE,EAAM;ICR9B,iCAAU;MDfX,iBAAiB,EAAE,iCAA0D;MAC1E,cAAc,EAAE,iCAA0D;MACzE,aAAa,EAAE,iCAA0D;MACxE,YAAY,EAAE,iCAA0D;MACrE,SAAS,EAAE,iCAA0D;MAe7E,uBAAuB,EAAE,QAAM;MAC5B,oBAAoB,EAAE,QAAM;MAC3B,mBAAmB,EAAE,QAAM;MAC1B,kBAAkB,EAAE,QAAM;MACvB,eAAe,EAAE,QAAM;ICP9B,iCAAU;MDhBX,iBAAiB,EAAE,iCAA0D;MAC1E,cAAc,EAAE,iCAA0D;MACzE,aAAa,EAAE,iCAA0D;MACxE,YAAY,EAAE,iCAA0D;MACrE,SAAS,EAAE,iCAA0D;MAe7E,uBAAuB,EAAE,OAAM;MAC5B,oBAAoB,EAAE,OAAM;MAC3B,mBAAmB,EAAE,OAAM;MAC1B,kBAAkB,EAAE,OAAM;MACvB,eAAe,EAAE,OAAM;ICN9B,iCAAU;MDjBX,iBAAiB,EAAE,iCAA0D;MAC1E,cAAc,EAAE,iCAA0D;MACzE,aAAa,EAAE,iCAA0D;MACxE,YAAY,EAAE,iCAA0D;MACrE,SAAS,EAAE,iCAA0D;MAe7E,uBAAuB,EAAE,MAAM;MAC5B,oBAAoB,EAAE,MAAM;MAC3B,mBAAmB,EAAE,MAAM;MAC1B,kBAAkB,EAAE,MAAM;MACvB,eAAe,EAAE,MAAM;ICL9B,iCAAU;MDlBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,OAAM;MAC5B,oBAAoB,EAAE,OAAM;MAC3B,mBAAmB,EAAE,OAAM;MAC1B,kBAAkB,EAAE,OAAM;MACvB,eAAe,EAAE,OAAM;ICJ9B,iCAAU;MDnBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,QAAM;MAC5B,oBAAoB,EAAE,QAAM;MAC3B,mBAAmB,EAAE,QAAM;MAC1B,kBAAkB,EAAE,QAAM;MACvB,eAAe,EAAE,QAAM;ICH9B,iCAAU;MDpBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,KAAM;MAC5B,oBAAoB,EAAE,KAAM;MAC3B,mBAAmB,EAAE,KAAM;MAC1B,kBAAkB,EAAE,KAAM;MACvB,eAAe,EAAE,KAAM;ICF9B,iCAAU;MDrBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,SAAM;MAC5B,oBAAoB,EAAE,SAAM;MAC3B,mBAAmB,EAAE,SAAM;MAC1B,kBAAkB,EAAE,SAAM;MACvB,eAAe,EAAE,SAAM;ICD9B,iCAAU;MDtBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,OAAM;MAC5B,oBAAoB,EAAE,OAAM;MAC3B,mBAAmB,EAAE,OAAM;MAC1B,kBAAkB,EAAE,OAAM;MACvB,eAAe,EAAE,OAAM;ICA9B,iCAAU;MDvBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,MAAM;MAC5B,oBAAoB,EAAE,MAAM;MAC3B,mBAAmB,EAAE,MAAM;MAC1B,kBAAkB,EAAE,MAAM;MACvB,eAAe,EAAE,MAAM;ICC9B,iCAAU;MDxBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,QAAM;MAC5B,oBAAoB,EAAE,QAAM;MAC3B,mBAAmB,EAAE,QAAM;MAC1B,kBAAkB,EAAE,QAAM;MACvB,eAAe,EAAE,QAAM;ICE9B,iCAAU;MDzBX,iBAAiB,EAAE,kCAA0D;MAC1E,cAAc,EAAE,kCAA0D;MACzE,aAAa,EAAE,kCAA0D;MACxE,YAAY,EAAE,kCAA0D;MACrE,SAAS,EAAE,kCAA0D;MAe7E,uBAAuB,EAAE,QAAM;MAC5B,oBAAoB,EAAE,QAAM;MAC3B,mBAAmB,EAAE,QAAM;MAC1B,kBAAkB,EAAE,QAAM;MACvB,eAAe,EAAE,QAAM;ECK/B,wBAAa;IAGZ,gBAAgB,EAAE,IAAI;IACtB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;IDhHnB,qBAAqB,ECiHG,GAAG;IDhHxB,kBAAkB,ECgHG,GAAG;ID/GnB,aAAa,EC+GG,GAAG;IAE1B,kCAAU;MACT,gBAAgB,EAAE,IAAI;MAEtB,MAAM,EAAE,GAAG;MACX,OAAO,EAAE,KAAK;MDvHhB,qBAAqB,ECwHI,GAAG;MDvHzB,kBAAkB,ECuHI,GAAG;MDtHpB,aAAa,ECsHI,GAAG;;ADR5B,+BAEC;ECcD,IAAK;IAAC,OAAO,EAAE,CAAC;;EAChB,EAAG;IAAC,OAAO,EAAE,IAAI;ADdjB,4BAEC;ECWD,IAAK;IAAC,OAAO,EAAE,CAAC;;EAChB,EAAG;IAAC,OAAO,EAAE,IAAI;ADXjB,2BAEC;ECQD,IAAK;IAAC,OAAO,EAAE,CAAC;;EAChB,EAAG;IAAC,OAAO,EAAE,IAAI;ADRjB,uBAEC;ECKD,IAAK;IAAC,OAAO,EAAE,CAAC;;EAChB,EAAG;IAAC,OAAO,EAAE,IAAI;ADjBjB,mCAEC;ECmBD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;ADnBjB,gCAEC;ECgBD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;ADhBjB,+BAEC;ECaD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;ADbjB,2BAEC;ECUD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;ADtBjB,mCAEC;ECwBD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;ADxBjB,gCAEC;ECqBD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;ADrBjB,+BAEC;ECkBD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;ADlBjB,2BAEC;ECeD,EAAG;IAAE,OAAO,EAAE,CAAC;;EACf,IAAK;IAAE,OAAO,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC1IlB,IAAK;EACJ,QAAQ,EAAE,KAAK;EACf,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAGZ,KAAM;ECFL,QAAQ,EAAE,QAAQ;EAElB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,QAAQ,EAAE,MAAM;EH0EhB,iBAAiB,EAAE,oBAA0B;EACrC,SAAS,EAAE,oBAA0B;EAI7C,2BAA2B,EGxFN,IAAI;EHyFjB,mBAAmB,EGzFN,IAAI;EAczB,UAAO;IHqEP,iBAAiB,EAAE,wBAA0B;IACrC,SAAS,EAAE,wBAA0B;EGlE7C,WAAQ;IHiER,iBAAiB,EAAE,uBAA0B;IACrC,SAAS,EAAE,uBAA0B;IGhE5C,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,IAAI;IAEb,sBAAa;MACZ,UAAU,EAAE,OAAO;MACnB,OAAO,EAAE,KAAK;;ADfjB,gBAAiB;EAChB,kBAAkB,EAAE,IAAI;;AAGzB,SAAU;EAET,MAAM,EAAE,IAAI;;AAGb,2BAA4B;ECoC3B,QAAQ,EAAE,KAAK;EACf,OAAO,EAAE,EAAE;EArBX,KAAK,EC1BgB,KAAK;ED2B1B,MAAM,EAAE,IAAI;EAEZ,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,MAAM;EACZ,UAAU,EAAE,qBAAqB;EHkHjC,QAAQ,EAAE,IAAI;EACd,0BAA0B,EAAE,KAAK;EEnIjC,gCAAO;ICgDN,IAAI,EAAE,GAAG;;AD3CX,WAAY;EGwEX,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAmCZ,qBAAqB,EAAE,MAAM;EAC7B,kBAAkB,EAAE,QAAQ;EAQ7B,sBAAsB,EHtHE,MAAM;EGuH9B,mBAAmB,EHvHK,MAAM;EGwH9B,kBAAkB,EHxHM,MAAM;EGyH9B,cAAc,EHzHU,MAAM;EAE9B,MAAM,EAAE,IAAI;EAEZ,yBAAc;IG4Qd,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;EH7QjB,mBAAQ;IGwQR,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;EHzQjB,sBAAW;IGoQX,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHvQhB,WAAW,EAAE,GAAG;IF6GjB,QAAQ,EAAE,IAAI;IACd,0BAA0B,EAAE,KAAK;EE5FjC,8BAAmB;IGgPnB,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHlPhB,MAAM,EAAE,OAAO;;AAIjB,UAAW;EAEV,IAAI,EAAE,GAAG;EAET,qBAAa;IC6Cb,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,MAAM;ID5Cb,gCAAW;MGwBZ,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;IHtBX,yCAAY;MG4Nd,gBAAgB,EARH,CAAG;MAShB,YAAY,EAAE,GAAW;MACzB,aAAa,EAVA,CAAG;MAWhB,SAAS,EAAE,GAAW;MACtB,QAAQ,EAAE,GAAW;MACrB,IAAI,EAAE,GAAW;IH3Nf,2CAAc;MGsNhB,gBAAgB,EARH,CAAG;MAShB,YAAY,EAAE,CAAW;MACzB,aAAa,EAVA,CAAG;MAWhB,SAAS,EAAE,CAAW;MACtB,QAAQ,EAAE,CAAW;MACrB,IAAI,EAAE,CAAW;MA/MjB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAmCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,QAAQ;MAQ7B,sBAAsB,EHzDK,MAAM;MG0DjC,mBAAmB,EH1DQ,MAAM;MG2DjC,kBAAkB,EH3DS,MAAM;MG4DjC,cAAc,EH5Da,MAAM;IAK/B,8CAAQ;MACP,OAAO,EAAE,IAAI;MACb,UAAU,EAAE,MAAM;IAIpB,uCAAkB;MACjB,WAAW,EAAE,GAAG;MAChB,OAAO,EAAE,CAAC;EAIZ,eAAO;IACN,UAAU,EAAE,qBAAqB;IACjC,0BAAW;MCQZ,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,MAAM;EDLd,iBAAS;IACR,UAAU,EAAE,qBAAqB;IACjC,4BAAW;MCCZ,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,MAAM;IDCb,yBAAQ;MCvHT,QAAQ,EAAE,QAAQ;MAElB,GAAG,EAAE,CAAC;MACN,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,QAAQ,EAAE,MAAM;MH0EhB,iBAAiB,EAAE,oBAA0B;MACrC,SAAS,EAAE,oBAA0B;MAI7C,2BAA2B,EGxFN,IAAI;MHyFjB,mBAAmB,EGzFN,IAAI;MAczB,8BAAO;QHqEP,iBAAiB,EAAE,wBAA0B;QACrC,SAAS,EAAE,wBAA0B;MGlE7C,+BAAQ;QHiER,iBAAiB,EAAE,uBAA0B;QACrC,SAAS,EAAE,uBAA0B;QGhE5C,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,IAAI;QAEb,0CAAa;UACZ,UAAU,EAAE,OAAO;UACnB,OAAO,EAAE,KAAK;IDqGf,mCAAkB;MACjB,WAAW,EAAE,GAAG;MAChB,OAAO,EAAE,CAAC;EAIZ,oBAAY;ICvBZ,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,EAAE;IA7BX,GAAG,EAAE,CAAC;IACN,IAAI,EC3EiB,KAAK;IJoH1B,0BAAM;MACL,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,EAAE;MACX,gBAAgB,EAAE,kBAAkB;EAPrC,2BAAM;IACL,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,EAAE;IACX,gBAAgB,EAAE,kBAAkB;;AEetC,mBAAoB;EC5FnB,QAAQ,EAAE,KAAK;EACf,OAAO,EAAE,EAAE;EAVX,KAAK,ECpCe,KAAK;EDqCzB,MAAM,EAAE,IAAI;EAEZ,GAAG,EAAE,CAAC;EACN,KAAK,EAAE,MAAM;EACb,UAAU,EAAE,sBAAsB;EEkDlC,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAgCZ,qBAAqB,EAAE,OAAO;EAC9B,kBAAkB,EAAE,UAAU;EAW/B,sBAAsB,EHmBE,WAAW;EGlBnC,mBAAmB,EHkBK,WAAW;EGjBnC,kBAAkB,EHiBM,WAAW;EGhBnC,cAAc,EHgBU,WAAW;EAlBnC,wBAAO;IC1EN,KAAK,EAAE,GAAG;ED8EX,wCAAqB;IACpB,OAAO,EAAE,IAAI;EAGd,4BAAW;IACV,KAAK,EAAE,IAAI;IAEX,iDAAqB;MG5DtB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAmCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,QAAQ;MAQ7B,sBAAsB,EHcI,MAAM;MGbhC,mBAAmB,EHaO,MAAM;MGZhC,kBAAkB,EHYQ,MAAM;MGXhC,cAAc,EHWY,MAAM;EAOhC,sCAAmB;IGqInB,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHvIhB,KAAK,EEnKc,KAAK;IFoKxB,MAAM,EAAE,IAAI;IGzEb,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAmCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,QAAQ;IAQ7B,sBAAsB,EH2BG,MAAM;IG1B/B,mBAAmB,EH0BM,MAAM;IGzB/B,kBAAkB,EHyBO,MAAM;IGxB/B,cAAc,EHwBW,MAAM;IAE9B,6CAAO;MG6HR,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;IH9HhB,4CAAQ;MGyHT,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;ML1JjB,QAAQ,EAAE,IAAI;MACd,0BAA0B,EAAE,KAAK;IEgChC,6CAAO;MGoHR,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;EHpHjB,wCAAqB;IG+GrB,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHlHhB,gBAAgB,EAAE,KAAK;IAKvB,sDAAc;MGwGf,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;ML1JjB,QAAQ,EAAE,IAAI;MACd,0BAA0B,EAAE,KAAK;MKtDjC,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAmCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,QAAQ;MAQ7B,sBAAsB,EHuDI,MAAM;MGtDhC,mBAAmB,EHsDO,MAAM;MGrDhC,kBAAkB,EHqDQ,MAAM;MGpDhC,cAAc,EHoDY,MAAM;MAC9B,8DAAQ;QGkGV,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QHrGd,OAAO,EAAE,IAAI;MAEd,+DAAS;QG8FX,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QHjGd,OAAO,EAAE,kBAAkB;QFzD9B,QAAQ,EAAE,IAAI;QACd,0BAA0B,EAAE,KAAK;;AE0EhC,gEAAmB;EAClB,KAAK,EAAE,GAAG;AAGX,kEAAqB;EACpB,KAAK,EAAE,IAAI;EAEX,yEAAO;IGmET,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHtEd,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;;AAYhB,UAAW;EACV,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;;AAGZ,iBAAkB;EACjB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EG7JZ,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAmCZ,qBAAqB,EAAE,MAAM;EAC7B,kBAAkB,EAAE,QAAQ;EAQ7B,sBAAsB,EHgHE,MAAM;EG/G9B,mBAAmB,EH+GK,MAAM;EG9G9B,kBAAkB,EH8GM,MAAM;EG7G9B,cAAc,EH6GU,MAAM;EAE9B,8BAAa;IGwCb,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;EHzCjB,8BAAa;IGoCb,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,CAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,CAAW;IACtB,QAAQ,EAAE,CAAW;IACrB,IAAI,EAAE,CAAW;IL1JjB,QAAQ,EAAE,IAAI;IACd,0BAA0B,EAAE,KAAK;;AEyHjC,sBAAO;EG/KP,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EH6KZ,MAAM,EEnRgB,IAAI;EFoR1B,WAAW,EEpRW,IAAI;EFsR1B,gBAAgB,EIvNL,OAAgB;EJwN3B,KAAK,EAAE,KAAK;EACZ,SAAS,EAAE,IAAI;EAMb,6CAAU;IF3Qb,WAAW,EAAE,gBAAgB;IAT7B,6BAA6B,EAAC,kBAAM;IAEpC,0BAA0B,EAAC,kBAAM;IACjC,yBAAyB,EAAC,kBAAM;IAChC,wBAAwB,EAAC,kBAAM;IAC/B,qBAAqB,EAAC,kBAAM;IAM5B,sBAAsB,EAAE,WAAW;IACnC,cAAc,EAAC,kBAAkB;IK+WjC,kBAAkB,EHpGM,MAAM;IGqG9B,eAAe,EHrGS,MAAM;IG2G7B,mBAAmB,EH3GI,MAAM;IG6G9B,UAAU,EH7Gc,MAAM;IGW9B,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,CAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,CAAW;IACtB,QAAQ,EAAE,CAAW;IACrB,IAAI,EAAE,CAAW;IHdb,UAAU,EAAE,MAAM;IAElB,uGAAgB;MACf,SAAS,EAAE,IAAI;EAIjB,8CAAW;IACV,OAAO,EAAE,YAAY;IACrB,YAAY,EAAE,GAAG;IACjB,SAAS,EAAE,IAAI;EAIjB,0CAAkB;IGLpB,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,CAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,CAAW;IACtB,QAAQ,EAAE,CAAW;IACrB,IAAI,EAAE,CAAW;IHGd,kDAAQ;MACP,UAAU,EAAE,IAAI;MAEhB,yDAAO;QACN,YAAY,EAAE,GAAG;EAWpB,yCAAiB;IGvBnB,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,CAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,CAAW;IACtB,QAAQ,EAAE,CAAW;IACrB,IAAI,EAAE,CAAW;IHqBd,iDAAQ;MACP,UAAU,EAAE,KAAK;MAEjB,wDAAO;QACN,aAAa,EAAE,GAAG;EAKrB,kCAAQ;IACP,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,IAAI;IF9TlB,WAAW,EAAE,gBAAgB;IAT7B,6BAA6B,EAAC,kBAAM;IAEpC,0BAA0B,EAAC,kBAAM;IACjC,yBAAyB,EAAC,kBAAM;IAChC,wBAAwB,EAAC,kBAAM;IAC/B,qBAAqB,EAAC,kBAAM;IAM5B,sBAAsB,EAAE,WAAW;IACnC,cAAc,EAAC,kBAAkB;IE6T9B,cAAc,EAAE,MAAM;;AAO1B,eAAgB;EGxPf,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAyCZ,qBAAqB,EAAE,MAAM;EAC7B,kBAAkB,EAAE,UAAU;EAE/B,sBAAsB,EH4ME,GAAG;EG3M3B,mBAAmB,EH2MK,GAAG;EG1M3B,kBAAkB,EH0MM,GAAG;EGzM3B,cAAc,EHyMU,GAAG;EAG3B,yCAA0B;IGrD1B,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,GAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,GAAW;IACtB,QAAQ,EAAE,GAAW;IACrB,IAAI,EAAE,GAAW;IA/MjB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IHiQZ,QAAQ,EAAE,MAAM;IAGhB,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,8BAA4B;IAOtC,oFAAsB;MACrB,cAAc,EAAE,KAAmB;IAKtC,sDAAa;MFjOd,QAAQ,EAAE,IAAI;MACd,0BAA0B,EAAE,KAAK;MEkO/B,KAAK,EAAE,IAAI;IAIZ,2DAAkB;MF3WnB,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;MA3BjC,qBAAqB,EAAE,IAAO;MAC3B,kBAAkB,EAAE,IAAO;MACtB,aAAa,EAAE,IAAO;MEoY5B,OAAO,EAAE,CAAC;MAGV,QAAQ,EAAE,QAAQ;MAClB,MAAM,EAAE,GAAG;MACX,SAAS,EAAE,IAAI;MAIf,KAAK,EAAE,KAAK;MACZ,gBAAgB,EIjVF,OAAO;MJkVrB,UAAU,EAAE,gCAA8B;MAE1C,KAAK,EAjBU,IAAI;MAkBnB,MAAM,EAlBS,IAAI;MAqBnB,QAAQ,EAAE,QAAQ;MAElB,WAAW,EAAE,GAAG;MAChB,aAAa,EAAE,IAAI;MAEnB,MAAM,EAAE,OAAO;MAEf,iEAAQ;QACP,gBAAgB,EAAE,OAA2B;EAKhD,qCAAsB;IGnHtB,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,CAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,CAAW;IACtB,QAAQ,EAAE,CAAW;IACrB,IAAI,EAAE,CAAW;IA/MjB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IH8TZ,qDAAgB;MGxHjB,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MA/MjB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MLoBb,2DAAM;QACL,QAAQ,EAAE,QAAQ;QAClB,GAAG,EAAE,CAAC;QACN,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,OAAO,EAAE,EAAE;QACX,gBAAgB,EAAE,kBAAkB;MEwSnC,gEAAa;QG7Hf,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QA/MjB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,IAAI;QAmCZ,qBAAqB,EAAE,MAAM;QAC7B,kBAAkB,EAAE,QAAQ;QAQ7B,sBAAsB,EH0RK,MAAM;QGzRjC,mBAAmB,EHyRQ,MAAM;QGxRjC,kBAAkB,EHwRS,MAAM;QGvRjC,cAAc,EHuRa,MAAM;QAE9B,UAAU,EAAE,oCAAiC;QAE7C,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,EAAI;QAEb,yEAAS;UAER,gBAAgB,EAAE,KAAK;UFzR3B,iBAAiB,EAAE,oBAAkB;ME8RnC,2DAAM;QAGL,gBAAgB,EAAE,kBAAkB;IAItC,gDAAmD;MGrJpD,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MA/MjB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAmCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,QAAQ;MAQ7B,sBAAsB,EHmTI,MAAM;MGlThC,mBAAmB,EHkTO,MAAM;MGjThC,kBAAkB,EHiTQ,MAAM;MGhThC,cAAc,EHgTY,MAAM;IAG/B,8CAAS;MG5JV,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;ML1JjB,QAAQ,EAAE,IAAI;MACd,0BAA0B,EAAE,KAAK;;AE2TjC,+DAAoC;EGjXpC,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAmCZ,qBAAqB,EAAE,MAAM;EAC7B,kBAAkB,EAAE,QAAQ;EAQ7B,sBAAsB,EHmUG,MAAM;EGlU/B,mBAAmB,EHkUM,MAAM;EGjU/B,kBAAkB,EHiUO,MAAM;EGhU/B,cAAc,EHgUW,MAAM;EAC9B,MAAM,EAAE,IAAI;EAEZ,iFAAS;IG5KV,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHyKf,UAAU,EAAE,MAAM;;AAKrB,kBAAmB;EGnLlB,gBAAgB,EARH,IAAG;EAShB,YAAY,EAAE,IAAW;EACzB,aAAa,EAVA,IAAG;EAWhB,SAAS,EAAE,IAAW;EACtB,QAAQ,EAAE,IAAW;EACrB,IAAI,EAAE,IAAW;EHgLjB,MAAM,EEjeiB,IAAI;EFke3B,WAAW,EEleY,IAAI;EFoe3B,uBAAO;IGhRP,yBAAyB,EAAE,CAAQ;IACnC,aAAa,EHgRG,CAAC;IG/QjB,UAAU,EH+QM,CAAC;IG9QjB,cAAc,EH8QE,CAAC;IG7QjB,KAAK,EH6QW,CAAC;IFzUjB,iBAAiB,EAAE,oBAAkB;IE6UpC,+BAAQ;MACP,MAAM,EAAE,OAAO;MACf,gBAAgB,EAAE,OAAO;IAE1B,iCAAU;MACT,gBAAgB,EAAE,OAAO;MAEzB,uCAAQ;QACP,gBAAgB,EAAE,OAAO;IAK1B,iDAAQ;MACP,MAAM,EAAE,OAAO;MACf,gBAAgB,EAAE,OAAO;MAEzB,uDAAQ;QACP,gBAAgB,EAAE,OAAO;IAI3B,mDAAU;MACT,gBAAgB,EAAE,OAAO;MAEzB,yDAAQ;QACP,gBAAgB,EAAE,OAAO;EAM7B,iCAAiB;IGvajB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAyCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,UAAU;IAE/B,sBAAsB,EHyXG,GAAG;IGxX5B,mBAAmB,EHwXM,GAAG;IGvX5B,kBAAkB,EHuXO,GAAG;IGtX5B,cAAc,EHsXW,GAAG;IAG3B,uCAAM;MGlOP,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MH+Nf,MAAM,EAAE,OAAO;IAGhB,kDAAiB;MGvOlB,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MHoOf,MAAM,EAAE,OAAO;EAgBjB,qBAAG;IGncH,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAgCZ,qBAAqB,EAAE,OAAO;IAC9B,kBAAkB,EAAE,UAAU;IAW/B,sBAAsB,EHsZG,WAAW;IGrZpC,mBAAmB,EHqZM,WAAW;IGpZpC,kBAAkB,EHoZO,WAAW;IGnZpC,cAAc,EHmZW,WAAW;IAEnC,wBAAG;MG9PJ,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MH2Pf,MAAM,EAAE,OAAO;;AASlB,OAAQ;EACP,MAAM,EAAE,OAAO;EAEf,gBAAW;IACV,MAAM,EAAE,OAAO;;AAKjB,aAAc;EG5db,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EA8QZ,iBAAiB,EH8MG,MAAM;EG7M1B,cAAc,EH6MM,MAAM;EG3M3B,mBAAmB,EH2ME,MAAM;EG1M3B,gBAAgB,EH0MK,MAAM;EGzM3B,WAAW,EHyMU,MAAM;EGjP1B,gBAAgB,EHkPQ,MAAM;EGjP9B,aAAa,EHiPW,MAAM;EG/O/B,uBAAuB,EH+OE,MAAM;EG9O/B,oBAAoB,EH8OK,MAAM;EG7O/B,eAAe,EH6OU,MAAM;EAE/B,QAAQ,EAAE,QAAQ;EAClB,IAAI,EAAE,GAAG;EACT,GAAG,EAAE,GAAG;EACR,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EF/cZ,mBAAM;IACL,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,EAAE;IACX,gBAAgB,EAAE,kBAAkB;EE0crC,mBAAM;IACL,OAAO,EAAE,EAAE;IFhbZ,iBAAiB,EAAE,oBAAkB;EEobrC,wBAAW;IGpSX,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHiShB,OAAO,EAAE,KAAK;IAKd,oCAAY;MGrfb,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAyCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,UAAU;MAE/B,sBAAsB,EHucI,GAAG;MGtc7B,mBAAmB,EHscO,GAAG;MGrc7B,kBAAkB,EHqcQ,GAAG;MGpc7B,cAAc,EHocY,GAAG;MG9Q5B,gBAAgB,EAAE,GAAG;MACrB,aAAa,EAAE,GAAG;MAQnB,uBAAuB,EHsQI,QAAQ;MGrQnC,oBAAoB,EHqQO,QAAQ;MGpQnC,eAAe,EHoQY,QAAQ;MAEjC,+CAAW;QGhTb,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QH6Sd,MAAM,EAAE,OAAO;;AASnB,QAAS;EACR,QAAQ,EAAE,QAAQ;EAClB,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,EAAE;EACX,gBAAgB,EAAE,WAAgB;;AAMlC,qEAAS;EGlhBT,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAmCZ,qBAAqB,EAAE,MAAM;EAC7B,kBAAkB,EAAE,QAAQ;EAQ7B,sBAAsB,EHoeG,MAAM;EGne/B,mBAAmB,EHmeM,MAAM;EGle/B,kBAAkB,EHkeO,MAAM;EGje/B,cAAc,EHieW,MAAM;EF/d/B,QAAQ,EAAE,IAAI;EACd,0BAA0B,EAAE,KAAK;EEiehC,MAAM,EAAE,IAAI;EAEZ,mGAAU;IG/UX,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,CAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,CAAW;IACtB,QAAQ,EAAE,CAAW;IACrB,IAAI,EAAE,CAAW;EH8UhB,0FAAO;IGnVR,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IA/MjB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IH6hBX,uIAAe;MACd,KAAK,EAAE,IAAI;EAIb,uFAAM;IG5VP,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IA/MjB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IHuiBX,8HAAa;MGjWf,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MH8Vd,WAAW,EAAE,IAAI;MACjB,YAAY,EAAE,IAAI;EAIpB,sGAAW;IGxWZ,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;EHuWhB,0FAAO;IG5WR,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IA/MjB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IA8QZ,iBAAiB,EHwSK,MAAM;IGvS5B,cAAc,EHuSQ,MAAM;IGrS7B,mBAAmB,EHqSI,MAAM;IGpS7B,gBAAgB,EHoSO,MAAM;IGnS7B,WAAW,EHmSY,MAAM;IAC3B,oIAAc;MGjXhB,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MH8Wd,KAAK,EAAE,IAAI;EAIb,0FAAO;IGvXR,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IHqXf,uIAAe;MACd,KAAK,EAAE,IAAI;;AK5qBf,UAAW;EFuGV,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAyCZ,qBAAqB,EAAE,MAAM;EAC7B,kBAAkB,EAAE,UAAU;EAE/B,sBAAsB,EErJE,GAAG;EFsJ3B,mBAAmB,EEtJK,GAAG;EFuJ3B,kBAAkB,EEvJM,GAAG;EFwJ3B,cAAc,EExJU,GAAG;EAO3B,aAAG;IFwSH,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IA/MjB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAyCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,UAAU;IAE/B,sBAAsB,EE1IG,GAAG;IF2I5B,mBAAmB,EE3IM,GAAG;IF4I5B,kBAAkB,EE5IO,GAAG;IF6I5B,cAAc,EE7IW,GAAG;IFsW3B,iBAAiB,EAAE,KAAK;IACxB,cAAc,EAAE,KAAK;IAQtB,mBAAmB,EE9WG,UAAU;IF+WhC,gBAAgB,EE/WM,UAAU;IFgXhC,WAAW,EEhXW,UAAU;IAE/B,oBAAS;MACR,OAAO,EAAE,KAAK;MPOhB,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;MOR/B,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,IAAI;MACnB,WAAW,EAtBS,IAAI;MAuBxB,KAAK,EAAE,IAAI;IAGZ,oBAAO;MFwRR,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;ME3Rf,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,GAAG;MAEhB,aAAa,EAAE,IAAI;MACnB,YAAY,EAAE,GAAG;MACjB,WAAW,EAjCS,IAAI;MA6CxB,yCAAqB;QPpBvB,WAAW,EAAE,gBAAgB;QAT7B,6BAA6B,EAAC,kBAAM;QAEpC,0BAA0B,EAAC,kBAAM;QACjC,yBAAyB,EAAC,kBAAM;QAChC,wBAAwB,EAAC,kBAAM;QAC/B,qBAAqB,EAAC,kBAAM;QAM5B,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAC,kBAAkB;QOmB9B,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,IAAI;QAEX,+CAAQ;UACP,KAAK,EAAE,OAAc;EAOzB,gBAAM;IFuPN,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IE1PhB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,GAAG;IAEhB,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,GAAG;;AC3Db,YAAa;EAEZ,gBAAgB,EF6DJ,OAAgB;EE3D5B,gBAAI;IACH,cAAc,EAAE,MAAM;IACtB,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,MAAM;IAElB,mBAAG;MACF,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,IAAI;MAEjB,KAAK,EFsDoB,KAAK;MErD9B,UAAU,EAAE,GAAG;MACf,aAAa,EAAE,GAAG;IAGnB,mBAAG;MACF,SAAS,EAAE,IAAI;MAGf,KAAK,EF6CoB,KAAK;ME5C9B,MAAM,EAAE,GAAG;;AC5Bb,yCAAS;EACR,gBAAgB,EHmEL,OAAgB;EGjE3B,qDAAM;IACL,gBAAgB,EHgEN,OAAgB;EG7D3B,uDAAO;IACN,KAAK,EHgEoB,KAAK;EGtD/B,uDAAO;IACN,KAAK,EHqDoB,KAAK;IGpD9B,gBAAgB,EHmDI,KAAK;;AG7C3B,0BAAS;EACR,gBAAgB,EH4CK,KAAK;EG1C1B,gCAAM;IACL,gBAAgB,EHyCI,KAAK;EGtC1B,iCAAO;IACN,KAAK,EHsCoB,KAAK;EG3B/B,iCAAO;IACN,KAAK,EHuBU,KAAK;IGtBpB,gBAAgB,EHqBN,OAAgB;;;;;;;;;;;;;;;;;;AGC7B,0CAA2C;EAC1C,gBAAgB,EAAE,KAAK;EAEvB,qEAAS;IACR,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGlB,0FAAO;MJ0SP,iBAAiB,EAAE,GAAG;MACtB,cAAc,EAAE,GAAG;MAKpB,mBAAmB,EI/SI,QAAQ;MJgT/B,gBAAgB,EIhTO,QAAQ;MJiT/B,WAAW,EIjTY,QAAQ;MAE7B,UAAU,EAAE,GAAG;MACf,UAAU,EAAE,IAAI;MAChB,OAAO,EAAE,IAAI;MACb,KAAK,EHVoB,KAAK;MGY9B,mGAAG;QACF,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;MAGhB,mGAAG;QACF,SAAS,EAAE,IAAI;IAIjB,uFAAM;MJqRN,iBAAiB,EAAE,KAAK;MACxB,cAAc,EAAE,KAAK;MAQtB,mBAAmB,EI5RI,UAAU;MJ6RjC,gBAAgB,EI7RO,UAAU;MJ8RjC,WAAW,EI9RY,UAAU;MAE/B,sGAAK;QACJ,QAAQ,EAAE,QAAQ;QAClB,UAAU,EH5Bc,KAAK;QG8B7B,OAAO,EAAE,IAAI;QAEb,SAAS,EAAE,KAAK;QAEhB,WAAW,EAAE,IAAI;QACjB,YAAY,EAAE,IAAI;QAElB,wHAAM;UACL,OAAO,EAAE,IAAI;QAGd,wHAAM;UACL,WAAW,EAAE,eAAe;UAC5B,OAAO,EAAE,KAAK;UACd,OAAO,EAAE,GAAG;UACZ,UAAU,EAAE,GAAG;UACf,aAAa,EAAE,IAAI;UACnB,SAAS,EAAE,IAAI;UACf,SAAS,EAAE,IAAI;UACf,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,cAAc;UACtB,aAAa,EAAE,GAAG;QAGnB,2HAAO;UACN,UAAU,EAAE,MAAM;UAIlB,6IAAM;YACL,OAAO,EAAE,IAAI;YAEb,kKAAS;cACR,OAAO,EAAE,KAAK;YAGf,sJAAG;cACF,KAAK,EHxHY,OAAO;cGyHxB,SAAS,EAAE,IAAI;cACf,WAAW,EAAE,GAAG;cAChB,MAAM,EAAE,GAAG;cACX,WAAW,EAAE,IAAI;YAElB,mJAAE;cACD,KAAK,EH3IU,OAAO;cG4ItB,SAAS,EAAE,IAAI;cACf,WAAW,EAAE,GAAG;cAChB,MAAM,EAAE,GAAG;cACX,OAAO,EAAE,OAAO;YAGjB,+JAAM;cACL,OAAO,EAAE,IAAI;YAGd,+JAAM;cACL,WAAW,EAAE,eAAe;cAC5B,OAAO,EAAE,KAAK;cACd,OAAO,EAAE,GAAG;cAEZ,aAAa,EAAE,IAAI;cACnB,SAAS,EAAE,IAAI;cACf,SAAS,EAAE,IAAI;cACf,KAAK,EAAE,IAAI;YASV,+PAAM;cACL,OAAO,EAAE,KAAK;cACd,KAAK,EAAE,IAAI;cAEX,UAAU,EAAE,IAAI;cAChB,KAAK,EAAE,IAAI;YAGZ,mPAAE;cACD,SAAS,EAAE,IAAI;cACf,WAAW,EAAE,GAAG;cAChB,OAAO,EAAE,KAAK;cACd,UAAU,EAAE,IAAI;cAChB,WAAW,EAAE,IAAI;cACjB,WAAW,EAAE,KAAK;cAClB,MAAM,EAAE,OAAO;cAEf,yPAAE;gBACD,KAAK,EHhLQ,OAAO;YGqLvB,iOAAW;cACV,UAAU,EAAE,IAAI;YAIlB,2KAAU;cACT,UAAU,EAAE,KAAK;YAGlB,8KAAW;cAEV,UAAU,EAAE,MAAM;cAClB,2NAAe;gBACd,WAAW,EAAE,GAAG;gBAChB,SAAS,EAAE,IAAI;gBACf,OAAO,EAAE,MAAM;gBACf,KAAK,EAAE,SAAS;gBAEhB,gPAAS;kBACR,KAAK,EAAE,IAAI;YAKd,wKAAS;cACR,UAAU,EAAE,MAAM;cAClB,UAAU,EAAE,IAAI;cAEhB,gMAAQ;gBACP,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,MAAM;gBAClB,cAAc,EAAE,MAAM;gBACtB,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,IAAI;gBAEX,WAAW,EAAE,GAAG;gBAChB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,IAAI;gBAEf,+MAAO;kBACN,gBAAgB,EAAE,SAAS;kBAE3B,uOAAU;oBACT,UAAU,EAAE,MAAM;gBAIpB,2NAAW;kBACV,gBAAgB,EAAE,OAAO;kBACzB,MAAM,EAAE,OAAO;gBAGhB,wNAAU;kBACT,gBAAgB,EHtLZ,OAAgB;QG6LzB,2HAAO;UACN,WAAW,EAAE,eAAe;UAC5B,UAAU,EAAE,IAAI;UAChB,SAAS,EAAE,IAAI;UAEf,KAAK,EAAE,KAAK;UACZ,SAAS,EAAE,IAAI;UACf,WAAW,EAAE,GAAG;UAChB,MAAM,EAAE,GAAG;UAEX,OAAO,EAAE,SAAS;UAElB,MAAM,EAAE,eAAe;UACvB,gBAAgB,EH1MR,OAAgB;UNC5B,kBAAkB,EAAE,wCAAqB;UACtC,eAAe,EAAE,wCAAqB;UACpC,aAAa,EAAE,wCAAqB;UACrC,cAAc,EAAE,wCAAqB;UACjC,UAAU,EAAE,wCAAqB;US2MrC,sJAAW;YACV,WAAW,EAAE,GAAG;YAChB,gBAAgB,EAAE,OAAO;YACzB,MAAM,EAAE,OAAO;MAQlB,kHAAS;;;;;;;;;;;;;QAaR,oIAAM;UACL,OAAO,EAAE,OAAO;UAChB,UAAU,EAAE,IAAI;UAChB,KAAK,EAAE,IAAI;QAGZ,gJAAU;UACT,WAAW,EAAE,iBAAiB;UT9IlC,iOAA6B;YSiJxB,WAAW,EAAE,aAAa;UThJ/B,mMAA6B;YSgJxB,WAAW,EAAE,aAAa;UT/I/B,sMAA6B;YS+IxB,WAAW,EAAE,aAAa;UT9I/B,kNAA6B;YS8IxB,WAAW,EAAE,aAAa;QAI5B,qKAAiB;UAChB,SAAS,EAAE,IAAI;UACf,KAAK,EHxPG,OAAgB;UGyPxB,eAAe,EAAE,SAAS;UAC1B,MAAM,EAAC,OAAO;MAKhB,uQAA8B;QAC7B,OAAO,EAAE,YAAY;QACrB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;QAEjB,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,IAAI;QAEf,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,GAAG;QAChB,MAAM,EAAE,GAAG;QAEX,OAAO,EAAE,SAAS;QAGlB,gBAAgB,EAAE,OAAO;QThR5B,kBAAkB,EAAE,wCAAqB;QACtC,eAAe,EAAE,wCAAqB;QACpC,aAAa,EAAE,wCAAqB;QACrC,cAAc,EAAE,wCAAqB;QACjC,UAAU,EAAE,wCAAqB;QS+QtC,MAAM,EAAE,OAAO;QAMf,6TAAW;UACV,WAAW,EAAE,GAAG;UAChB,gBAAgB,EAAE,OAAO;UACzB,MAAM,EAAE,OAAO;MAQhB,+JAAQ;QACP,gBAAgB,EAAE,KAAK;MAKxB,0IAAQ;QACP,gBAAgB,EH5SR,OAAgB;IGuT1B,gGAAE;MACD,MAAM,EAAE,OAAO;IAIf,wHAAG;MACF,OAAO,EAAE,GAAG;MACZ,cAAc,EAAE,GAAG;MACnB,iIAAG;QACF,OAAO,EAAE,YAAY;QAErB,MAAM,EAAE,OAAO;QAEf,mJAAQ;UACP,OAAO,EAAE,GAAG;UACZ,YAAY,EAAE,GAAG;UACjB,aAAa,EAAE,GAAG;UAClB,MAAM,EAAE,OAAO;QAGhB,oLAAmB;UAClB,OAAO,EAAE,EAAE;UACX,YAAY,EAAE,GAAG;UACjB,aAAa,EAAE,GAAG;IAOvB,0FAAO;MACN,UAAU,EAAE,IAAI;MAEhB,sJAAoB;QACnB,OAAO,EAAE,GAAG;QACZ,SAAS,EAAE,GAAG;QAMb,uLAAQ;UACP,OAAO,EAAE,GAAG;QAId,4JAAE;UAED,KAAK,EAAE,OAAO;UACd,eAAe,EAAE,IAAI;UACrB,YAAY,EAAE,GAAG;UACjB,WAAW,EAAE,IAAI;;AC/atB,WAAY;EACX,gBAAgB,EJuEM,KAAK;EItE3B,KAAK,EJuEsB,KAAK;EItEhC,SAAS,EAAE,IAAI;EAOf,yBAAc;IAEb,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IAEpB,4BAAG;MLyFJ,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAyCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,UAAU;MAE/B,sBAAsB,EKvII,GAAG;MLwI7B,mBAAmB,EKxIO,GAAG;MLyI7B,kBAAkB,EKzIQ,GAAG;ML0I7B,cAAc,EK1IY,GAAG;MAE3B,uCAAW;QL+Rb,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;MKhSf,uCAAW;QL2Rb,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QAoFjB,kBAAkB,EKlXK,QAAQ;QLmX/B,eAAe,EKnXQ,QAAQ;QLuX9B,mBAAmB,EAAE,GAAG;QAIzB,UAAU,EK3Xa,QAAQ;MAG7B,4CAAkB;QACjB,OAAO,EAAE,UAAU;MAGpB,+CAAqB;QACpB,OAAO,EAAE,QAAQ;MAGlB,0CAAgB;QACf,YAAY,EAAE,IAAI;EAOnB,iCAAS;IL4DX,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAyCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,UAAU;IAE/B,sBAAsB,EK1GK,GAAG;IL2G9B,mBAAmB,EK3GQ,GAAG;IL4G9B,kBAAkB,EK5GS,GAAG;IL6G9B,cAAc,EK7Ga,GAAG;IL4U7B,iBAAiB,EK3UM,OAAO;IL4U9B,cAAc,EK5US,OAAO;IL8U/B,mBAAmB,EK9UK,OAAO;IL+U/B,gBAAgB,EK/UQ,OAAO;ILgV/B,WAAW,EKhVa,OAAO;IAE5B,2CAAU;MLiQb,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MA7FjB,yBAAyB,EAAE,CAAQ;MACnC,aAAa,EKxKM,CAAC;MLyKpB,UAAU,EKzKS,CAAC;ML0KpB,cAAc,EK1KK,CAAC;ML2KpB,KAAK,EK3Kc,CAAC;MAEhB,iDAAM;QACL,OAAO,EAAE,KAAK;QV7BnB,WAAW,EAAE,gBAAgB;QAT7B,6BAA6B,EAAC,kBAAM;QAEpC,0BAA0B,EAAC,kBAAM;QACjC,yBAAyB,EAAC,kBAAM;QAChC,wBAAwB,EAAC,kBAAM;QAC/B,qBAAqB,EAAC,kBAAM;QAM5B,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAC,kBAAkB;QU4B5B,WAAW,EAAE,MAAM;QACnB,OAAO,EAAE,eAAe;QACxB,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,QAAQ;IAI1B,2CAAU;MLmPb,gBAAgB,EARH,CAAG;MAShB,YAAY,EAAE,CAAW;MACzB,aAAa,EAVA,CAAG;MAWhB,SAAS,EAAE,CAAW;MACtB,QAAQ,EAAE,CAAW;MACrB,IAAI,EAAE,CAAW;MA7FjB,yBAAyB,EAAE,CAAQ;MACnC,aAAa,EK1JM,CAAC;ML2JpB,UAAU,EK3JS,CAAC;ML4JpB,cAAc,EK5JK,CAAC;ML6JpB,KAAK,EK7Jc,CAAC;MAChB,QAAQ,EAAE,MAAM;MAEhB,iDAAM;QACL,WAAW,EAAE,eAAe;QAC5B,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,KAAK;QACvB,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,cAAc;QAC7B,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QVyFjB,4EAA6B;UUtFvB,UAAU,EAAE,MAAM;UAClB,KAAK,EAAE,IAAI;QVsFjB,kEAA6B;UUvFvB,UAAU,EAAE,MAAM;UAClB,KAAK,EAAE,IAAI;QVuFjB,mEAA6B;UUxFvB,UAAU,EAAE,MAAM;UAClB,KAAK,EAAE,IAAI;QVwFjB,uEAA6B;UUzFvB,UAAU,EAAE,MAAM;UAClB,KAAK,EAAE,IAAI;IAKd,8CAAa;ML4NhB,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MA7FjB,yBAAyB,EAAE,CAAQ;MACnC,aAAa,EKnIM,CAAC;MLoIpB,UAAU,EKpIS,CAAC;MLqIpB,cAAc,EKrIK,CAAC;MLsIpB,KAAK,EKtIc,CAAC;MLmTpB,kBAAkB,EKlTM,QAAQ;MLmThC,eAAe,EKnTS,QAAQ;MLuT/B,mBAAmB,EAAE,GAAG;MAIzB,UAAU,EK3Tc,QAAQ;MAC5B,cAAc,EAAE,GAAG;MAEnB,mDAAK;QACJ,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,OAAO;QACf,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK;QAEd,yDAAQ;UACP,OAAO,EAAE,IAAI;QAEd,yDAAQ;UV5Eb,WAAW,EAAE,gBAAgB;UAT7B,6BAA6B,EAAC,kBAAM;UAEpC,0BAA0B,EAAC,kBAAM;UACjC,yBAAyB,EAAC,kBAAM;UAChC,wBAAwB,EAAC,kBAAM;UAC/B,qBAAqB,EAAC,kBAAM;UAM5B,sBAAsB,EAAE,WAAW;UACnC,cAAc,EAAC,kBAAkB;UU2E3B,OAAO,EAAE,IAAI;UVtGnB,qBAAqB,EUwGQ,GAAG;UVvG7B,kBAAkB,EUuGQ,GAAG;UVtGxB,aAAa,EUsGQ,GAAG;UAC1B,KAAK,EAAE,KAAK;UACZ,gBAAgB,EAAE,IAAI;UACtB,SAAS,EAAE,IAAI;UACf,YAAY,EAAE,IAAI;MAKnB,2DAAO;QACN,OAAO,EAAE,IAAI;MAEd,2DAAO;QACN,gBAAgB,EAAE,IAAI;QACtB,OAAO,EAAE,KAAK;EAOnB,qCAAkB;IACjB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,IAAI;IAEb,2CAAM;MACL,aAAa,EAAE,GAAG;EAKrB,sBAAW;IACV,WAAW,EAAE,IAAI;IAEjB,yBAAG;MLpCJ,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAyCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,UAAU;MAE/B,sBAAsB,EKVI,GAAG;MLW7B,mBAAmB,EKXO,GAAG;MLY7B,kBAAkB,EKZQ,GAAG;MLa7B,cAAc,EKbY,GAAG;MAE3B,gCAAS;QACR,OAAO,EAAE,KAAK;MAGf,oCAAW;QACV,SAAS,EAAE,IAAI;QL6JlB,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;MK9Jf,oCAAW;QLyJb,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QAoFjB,kBAAkB,EKhPK,QAAQ;QLiP/B,eAAe,EKjPQ,QAAQ;QLqP9B,mBAAmB,EAAE,GAAG;QAIzB,UAAU,EKzPa,QAAQ;EAW/B,cAAG;IAIF,WAAW,EAAE,GAAG;IAChB,cAAc,EAAE,GAAG;IAEnB,MAAM,EAAE,OAAO;IAEf,qBAAS;MVtJV,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;MUqJ/B,WAAW,EAAE,MAAM;MACnB,YAAY,EAAE,GAAG;MACjB,aAAa,EAAE,GAAG;MAClB,SAAS,EAAE,IAAI;MACf,cAAc,EAAE,QAAQ;EAI1B,8BAAmB;ILjFnB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAyCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,UAAU;IAE/B,sBAAsB,EKmCG,GAAG;ILlC5B,mBAAmB,EKkCM,GAAG;ILjC5B,kBAAkB,EKiCO,GAAG;ILhC5B,cAAc,EKgCW,GAAG;IAC3B,UAAU,EAAE,eAAe;IAE3B,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,IAAI;IAEf,oCAAM;MLiHP,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;IKlHhB,qCAAO;ML6GR,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MKhHf,YAAY,EAAE,GAAG;MAGjB,WAAW,EAAE,OAAO;IAGrB,qCAAO;MLqGR,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MAoFjB,kBAAkB,EK5LI,QAAQ;ML6L9B,eAAe,EK7LO,QAAQ;MLiM7B,mBAAmB,EAAE,GAAG;MAIzB,UAAU,EKrMY,QAAQ;MAC5B,YAAY,EAAE,GAAG;;AAKpB,UAAW;EACV,gBAAgB,EAAE,IAAI;EACtB,SAAS,EAAE,IAAI;EACf,YAAY,EAAE,IAAI;EAClB,OAAO,EAAE,OAAO;EVxNhB,qBAAqB,EUyNE,GAAG;EVxNvB,kBAAkB,EUwNE,GAAG;EVvNlB,aAAa,EUuNE,GAAG;EAE1B,KAAK,EAAE,KAAK;EACZ,WAAW,EAAE,GAAG;EAChB,cAAc,EAAE,MAAM;;AAQtB,2BAAY;EACX,KAAK,EAJU,OAAgB;;AAShC,iCAAe;EACd,KAAK,EAVU,OAAgB;;AAehC,qCAAiB;EAChB,KAAK,EAhBU,OAAgB;;AA6B7B,iDAAM;EACL,KAAK,EA9BO,OAAgB;AAiC5B,mEAAW;EACV,OAAO,EAAE,KAAK;AAId,qEAAO;EACN,OAAO,EAAE,IAAI;;AAWlB,sCAAY;EACX,KAAK,EAnDS,OAAgB;;AClOhC,sCAAmB;EAClB,gBAAgB,ELsEK,KAAK;EKrE1B,KAAK,ELsEqB,KAAK;EKpE/B,6CAAO;IACN,UAAU,EAAE,KAAK;IACjB,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;IAEf,qDAAQ;MXeV,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;MWf9B,4DAAO;QACN,WAAW,EAAE,GAAG;QAChB,aAAa,EAAE,GAAG;EAKrB,4CAAQ;IACP,UAAU,EAAE,eAAe;IAE3B,sDAAY;MAGX,aAAa,EAAE,eAAe;MAE9B,2DAAO;QACN,aAAa,EAAE,GAAG;QAClB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO;MAGhB,2DAAO;QACN,MAAM,EAAE,OAAO;QACf,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;MAOd,iEAAa;QAEZ,aAAa,EAAE,GAAG;MAGnB,kEAAc;QACb,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,MAAM;MAIlB,sEAAS;QACR,OAAO,EAAE,IAAI;IAQd,4DAAY;MACX,OAAO,EAAE,IAAI;MACb,YAAY,EAAE,IAAI;MAClB,aAAa,EAAE,GAAG;MAClB,MAAM,EAAE,OAAO;MAEf,qEAAW;QACV,gBAAgB,EAAE,IAAI;MAIvB,kEAAQ;QACP,OAAO,EAAE,GAAG;MAGb,wEAAc;QACb,MAAM,EAAE,OAAO;IAkBjB,qDAAG;MAEF,WAAW,EAAE,GAAG;MAChB,SAAS,EAAE,IAAI;IAGhB,qDAAG;MACF,SAAS,EAAE,IAAI;IAGhB,oDAAE;MACD,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,GAAG;MAChB,cAAc,EAAE,GAAG;MACnB,WAAW,EAAE,KAAK;IAGnB,2DAAS;MACR,cAAc,EAAE,IAAI;MAEpB,gEAAK;QACJ,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,KAAK;IAIpB,2DAAS;MX7Hb,qBAAqB,EW8HO,CAAC;MX7H1B,kBAAkB,EW6HO,CAAC;MX5HrB,aAAa,EW4HO,CAAC;MACxB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,gBAAgB,EAAE,KAAK;MACvB,KAAK,EAAE,SAAS;MAEhB,iEAAQ;QACP,KAAK,EAAE,KAAK;MAGb,oEAAW;QACV,gBAAgB,EAAE,IAAI;QAEtB,0EAAQ;UACP,KAAK,EAAE,KAAK;IAOZ,gEAAQ;MX3Hf,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;MW0H1B,OAAO,EAAE,KAAK;MACd,YAAY,EAAE,GAAG;MACjB,KAAK,EAAE,IAAI;IAMb,iEAAG;MACF,OAAO,EAAE,IAAI;MACb,SAAS,EAAE,IAAI;MACf,MAAM,EAAE,OAAO;MAEf,uEAAQ;QX1Id,WAAW,EAAE,gBAAgB;QAT7B,6BAA6B,EAAC,kBAAM;QAEpC,0BAA0B,EAAC,kBAAM;QACjC,yBAAyB,EAAC,kBAAM;QAChC,wBAAwB,EAAC,kBAAM;QAC/B,qBAAqB,EAAC,kBAAM;QAM5B,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAC,kBAAkB;QWyI1B,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,IAAI;MAIlB,6EAAQ;QACP,KAAK,EAAE,KAAK;MAKb,4EAAQ;QACP,OAAO,EAAE,MAAM;MAIhB,8EAAQ;QACP,OAAO,EAAE,QAAQ;EASxB,6CAAO;IAEN,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,iBAAkC;IAE9C,kDAAK;MACJ,KAAK,EANoB,OAAI;MAO7B,wDAAQ;QACP,OAAO,EAAE,GAAG;IAGd,+CAAE;MACD,KAAK,EAZoB,OAAI;MAa7B,eAAe,EAAE,IAAI;MACrB,YAAY,EAAE,GAAG;MACjB,WAAW,EAAE,IAAI;AAKpB,wCAAqB;EACpB,YAAY,EAAE,cAAc;EAC5B,KAAK,EAAE,KAAK;EAEZ,+CAAO;IACN,OAAO,EAAE,IAAI;EAMZ,iEAAG;IACF,SAAS,EAAE,IAAI;EAGhB,gEAAE;IACD,OAAO,EAAE,QAAQ;EAGlB,qEAAO;IACN,WAAW,EAAE,IAAI;EAMlB,iEAAM;IACL,OAAO,EAAE,IAAI;EAGd,iEAAM;IAGL,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,aAAa,EAAE,GAAG;IAClB,OAAO,EAAE,QAA0C;IACnD,MAAM,EAAE,eAAwB;IAChC,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IAEZ,yEAAU;MACT,MAAM,EAAE,iBAAmC;MAC3C,KAAK,EAAE,IAAI;EAIb,6DAAE;IN3JL,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAyCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,UAAU;IAE/B,sBAAsB,EM6GM,GAAG;IN5G/B,mBAAmB,EM4GS,GAAG;IN3G/B,kBAAkB,EM2GU,GAAG;IN1G/B,cAAc,EM0Gc,GAAG;IAC3B,WAAW,EAAE,GAAG;IAEhB,mEAAM;MACL,KAAK,EAAE,IAAI;MNyChB,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;IM1Cb,oFAAuB;MACtB,SAAS,EAAE,CAAC;IAGb,mEAAM;MNiCV,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MMpCZ,SAAS,EAAE,IAAI;MACf,OAAO,EAAE,KAAK;MACd,MAAM,EAAE,OAAO;MACf,WAAW,EAAE,KAAK;EAIpB,kEAAO;IACN,WAAW,EAAE,eAAe;IAE5B,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IACf,MAAM,EAAE,GAAG;IAEX,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,QAAQ;IAEjB,MAAM,EAAE,eAAe;IACvB,gBAAgB,EDlEJ,OAAgB;IV7JhC,kBAAkB,EAAE,wCAAqB;IACtC,eAAe,EAAE,wCAAqB;IACpC,aAAa,EAAE,wCAAqB;IACrC,cAAc,EAAE,wCAAqB;IACjC,UAAU,EAAE,wCAAqB;IWiOrC,2EAAW;MACV,WAAW,EAAE,GAAG;MAChB,gBAAgB,EAAE,OAAO;MACzB,MAAM,EAAE,OAAO;EAWlB,yDAAG;IACF,KAAK,EAAE,KAAK;IAEZ,4DAAG;MACF,cAAc,EAAE,IAAI;EAItB,yDAAG;IACF,SAAS,EAAE,IAAI;EAGhB,mEAAa;IAEZ,OAAO,EAAE,iBAAiB;IAG1B,qEAAE;MACD,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,GAAG;MAClB,WAAW,EAAE,KAAK;MAClB,KAAK,EAAC,IAAI;MAEV,wEAAG;QACF,eAAe,EAAE,SAAS;MAG3B,6EAAU;QACT,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,KAAK;EAKf,8DAAQ;IACP,OAAO,EAAE,YAAY;IAErB,KAAK,EAAE,KAAK;IACZ,gBAAgB,ED5HH,OAAgB;IC8H7B,SAAS,EAAE,IAAI;IAEf,MAAM,EAAE,eAAe;IACvB,OAAO,EAAE,SAAS;IAKlB,uEAAW;MACV,gBAAgB,EAAE,OAAO;MACzB,MAAM,EAAE,OAAO;EASjB,wDAAG;IACF,aAAa,EAAE,eAAe;EAG/B,kJAAuC;IACtC,MAAM,EAAE,OAAO;EAGhB,wEAAmB;IAElB,SAAS,EAAE,IAAI;IAEf,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,GAAG;IAEX,KAAK,EAAE,KAAK;IACZ,gBAAgB,EAAE,KAAK;IACvB,aAAa,EAAE,cAAc;EAI9B,4DAAO;IACN,SAAS,EAAE,IAAI;EAGhB,0DAAK;IAEJ,WAAW,EAAE,GAAG;IAEhB,8DAAM;MACL,YAAY,EAJM,IAAI;IAOvB,8DAAM;MN7ST,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAyCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,UAAU;MAE/B,sBAAsB,EM+PM,GAAG;MN9P/B,mBAAmB,EM8PS,GAAG;MN7P/B,kBAAkB,EM6PU,GAAG;MN5P/B,cAAc,EM4Pc,GAAG;MAE3B,uEAAS;QNvGb,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QMoGZ,KAAK,EAbY,IAAI;MAgBtB,uEAAS;QN5Gb,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;IM6Gb,+JAAM;MACL,WAAW,EAAE,IAAI;MACjB,YAAY,EAAE,IAAI;MAClB,OAAO,EAAE,KAAK;IAKf,gFAAU;MACT,KAAK,EA3DY,IAAI;MA4DrB,sFAAM;QACL,KAAK,EA7DW,IAAI;QA8DpB,cAAc,EAAC,IAAI;IAKrB,gFAAU;MACT,YAAY,EAAE,GAAG;MACjB,sFAAQ;QACP,OAAO,EAAE,EAAE;IAOZ,uKAAQ;MACP,KAAK,EA/EQ,IAAI;MAgFjB,OAAO,EAAE,IAAI;IAGf,6JAAM;MACL,KAAK,EAAE,IAAI;MACX,UAAU,EAAE,KAAK;IAGlB,qKAAU;MACT,YAAY,EAAE,GAAG;MACjB,iLAAQ;QACP,OAAO,EAAE,EAAE;IAMb,6EAAE;MACD,cAAc,EAAE,GAAG;MAEnB,mFAAQ;QACP,KAAK,EArGQ,IAAI;QAsGjB,OAAO,EAAE,GAAG;IAKb,iFAAG;MACF,cAAc,EAAE,GAAG;MACnB,YAAY,EAAE,IAAI;MAClB,WAAW,EAAE,GAAG;MAEhB,sFAAK;QACJ,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,IAAI;QAEX,4FAAQ;UACP,KAAK,EArHM,IAAI;UAsHf,OAAO,EAAE,GAAG;EAQlB,0DAAK;IACJ,cAAc,EAAE,MAAM;EAEvB,2DAAM;IACL,cAAc,EAAE,MAAM;EAMtB,kEAAa;IACZ,cAAc,EAAE,GAAG;IAEnB,oEAAE;MACD,aAAa,EAAE,GAAG;MAClB,cAAc,EAAE,GAAG;EAKtB,sDAAS;IACR,YAAY,EAAE,GAAG;IACjB,WAAW,EAAE,GAAG;IAEhB,wDAAE;MX9eL,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;MW6e7B,MAAM,EAAE,OAAO;MACf,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,KAAK;MAElB,8DAAQ;QACP,KAAK,EAAE,KAAK;EAKf,yDAAY;IACX,UAAU,EAAE,GAAG;IAEf,4DAAG;MACF,OAAO,EAAE,YAAY;MACrB,YAAY,EAAE,GAAG;MACjB,OAAO,EAAC,KAAK;EASf,sDAAS;IACR,WAAW,EAAE,IAAI;IAEjB,iEAAW;MN7bd,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAyCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,UAAU;MAE/B,sBAAsB,EMmZM,GAAG;MNlZ/B,mBAAmB,EMkZS,GAAG;MNjZ/B,kBAAkB,EMiZU,GAAG;MNhZ/B,cAAc,EMgZc,GAAG;MAE3B,MAAM,EAAE,cAAc;MX5iB1B,qBAAqB,EW6iBM,GAAG;MX5iB3B,kBAAkB,EW4iBM,GAAG;MX3iBtB,aAAa,EW2iBM,GAAG;MAE1B,OAAO,EAAE,KAAgB;MACzB,MAAM,EAAE,KAAe;MAEvB,4EAAW;QNjQf,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QM+PZ,KAAK,EAAE,IAAI;QAIX,8EAAE;UXjiBP,WAAW,EAAE,gBAAgB;UAT7B,6BAA6B,EAAC,kBAAM;UAEpC,0BAA0B,EAAC,kBAAM;UACjC,yBAAyB,EAAC,kBAAM;UAChC,wBAAwB,EAAC,kBAAM;UAC/B,qBAAqB,EAAC,kBAAM;UAM5B,sBAAsB,EAAE,WAAW;UACnC,cAAc,EAAC,kBAAkB;UWgiB3B,MAAM,EAAE,OAAO;UACf,SAAS,EAAE,IAAI;UACf,WAAW,EAAE,KAAK;UAClB,OAAO,EAAE,YAAY;UACrB,YAAY,EAAE,GAAG;UACjB,KAAK,EAAE,OAAO;UAEd,oFAAQ;YACP,KAAK,EAAE,GAAG;MAKb,0EAAS;QNvRb,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QMqRZ,uFAAa;UACZ,SAAS,EAAE,IAAI;UACf,WAAW,EAAE,KAAK;UX3bxB,mBAAmB,EW4bQ,IAAI;;UX3b/B,gBAAgB,EW2bW,IAAI;;UX1b/B,eAAe,EW0bY,IAAI;;;UXvb/B,cAAc,EWuba,IAAI;UXtb/B,WAAW,EWsbgB,IAAI;QAG1B,oFAAU;UN1ef,OAAO,EAAE,WAAW;UACpB,OAAO,EAAE,YAAY;UACrB,OAAO,EAAE,SAAS;UAClB,OAAO,EAAE,WAAW;UACpB,OAAO,EAAE,IAAI;UAyCZ,qBAAqB,EAAE,MAAM;UAC7B,kBAAkB,EAAE,UAAU;UAE/B,sBAAsB,EM4bQ,GAAG;UN3bjC,mBAAmB,EM2bW,GAAG;UN1bjC,kBAAkB,EM0bY,GAAG;UNzbjC,cAAc,EMybgB,GAAG;UAC3B,YAAY,EAAE,GAAG;UAEjB,2FAAS;YNrSf,gBAAgB,EARH,IAAG;YAShB,YAAY,EAAE,IAAW;YACzB,aAAa,EAVA,IAAG;YAWhB,SAAS,EAAE,IAAW;YACtB,QAAQ,EAAE,IAAW;YACrB,IAAI,EAAE,IAAW;YMkSV,OAAO,EAAE,OAAO;YXhkBvB,WAAW,EAAE,gBAAgB;YAT7B,6BAA6B,EAAC,kBAAM;YAEpC,0BAA0B,EAAC,kBAAM;YACjC,yBAAyB,EAAC,kBAAM;YAChC,wBAAwB,EAAC,kBAAM;YAC/B,qBAAqB,EAAC,kBAAM;YAM5B,sBAAsB,EAAE,WAAW;YACnC,cAAc,EAAC,kBAAkB;YW+jB1B,UAAU,EAAE,MAAM;YAClB,aAAa,EAAE,GAAG;YAClB,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,IAAI;UAIlB,yFAAK;YNhTX,gBAAgB,EARH,IAAG;YAShB,YAAY,EAAE,IAAW;YACzB,aAAa,EAVA,IAAG;YAWhB,SAAS,EAAE,IAAW;YACtB,QAAQ,EAAE,IAAW;YACrB,IAAI,EAAE,IAAW;YM6SV,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,eAAe;YACxB,WAAW,EAAE,KAAK;YAClB,MAAM,EAAC,OAAO;YAEd,UAAU,EAAE,MAAM;YAElB,qGAAc;cACb,KAAK,EAAE,IAAI;cACX,UAAU,EAAE,MAAM;UAKpB,0FAAM;YNjUZ,gBAAgB,EARH,IAAG;YAShB,YAAY,EAAE,IAAW;YACzB,aAAa,EAVA,IAAG;YAWhB,SAAS,EAAE,IAAW;YACtB,QAAQ,EAAE,IAAW;YACrB,IAAI,EAAE,IAAW;YM8TV,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,GAAG;YACZ,YAAY,EAAE,GAAG;YACjB,MAAM,EAAE,GAAG;YACX,aAAa,EAAE,GAAG;YAClB,gBAAgB,EAAE,IAAI;YXvd7B,qHAA6B;cW0drB,UAAU,EAAE,MAAM;cAClB,KAAK,EAAE,IAAI;YX1dnB,2GAA6B;cWydrB,UAAU,EAAE,MAAM;cAClB,KAAK,EAAE,IAAI;YXzdnB,4GAA6B;cWwdrB,UAAU,EAAE,MAAM;cAClB,KAAK,EAAE,IAAI;YXxdnB,gHAA6B;cWudrB,UAAU,EAAE,MAAM;cAClB,KAAK,EAAE,IAAI;QAUd,yFAAe;UACd,SAAS,EAAE,GAAG;UACd,KAAK,EAAE,IAAI;UAEX,8FAAK;YACJ,aAAa,EAAE,IAAI;MAKtB,mJAAoB;QACnB,gBAAgB,EAAE,IAAI;EAgBtB,2DAAE;IACD,SAAS,EAAE,KAAK;IAChB,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,SAAS;IAC1B,MAAM,EAAE,OAAO;EAQnB,6DAAU;IACT,OAAO,EAAE,KAAK;IACd,KAAK,EAAE,GAAG;IACV,YAAY,EAAE,GAAG;IACjB,UAAU,EAAC,GAAG;EAGf,4DAAS;IACR,MAAM,EAAC,iBAA0B;EAGlC,4DAAS;IN3YX,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;EM6Yf,6DAAS;IACR,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,IAAI;IN9lBf,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAmCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,QAAQ;IAQ7B,sBAAsB,EMgjBK,MAAM;IN/iBjC,mBAAmB,EM+iBQ,MAAM;IN9iBjC,kBAAkB,EM8iBS,MAAM;IN7iBjC,cAAc,EM6iBa,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAE9B,2EAAc;MNxZjB,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MMqZb,WAAW,EAAE,GAAG;MAChB,cAAc,EAAE,GAAG;MACnB,UAAU,EAAE,MAAM;MAClB,SAAS,EAAE,IAAI;MAEf,iFAAQ;QACP,OAAO,EAAE,IAAI;MAGd,8EAAG;QACF,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,GAAG;QACZ,aAAa,EAAE,IAAI;QAGnB,uFAAW;UACV,KAAK,EAAE,IAAI;IASd,mEAAM;MNnbT,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;ML1JjB,QAAQ,EAAE,IAAI;MACd,0BAA0B,EAAE,KAAK;MW+kB3B,wFAAE;QACD,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC;MAKV,wFAAU;QACT,KAAK,EAAE,gBAAgB;QACvB,UAAU,EAAE,MAAM;QAClB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,GAAG;QAChB,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,IAAI;QAEnB,MAAM,EAAE,gBAAgB;QACxB,UAAU,EAAE,KAAK;QAEjB,gGAAQ;UACP,MAAM,EAAE,MAAM;UACd,OAAO,EAAE,QAAQ;UAEjB,SAAS,EAAE,IAAI;MAIjB,gFAAE;QACD,MAAM,EAAE,QAAQ;QAEhB,sFAAQ;UACP,KAAK,EAAE,GAAG;UACV,SAAS,EAAE,IAAI;UACf,UAAU,EAAE,MAAM;UAClB,MAAM,EAAE,gBAAgB;MAK1B,uFAAS;QACR,KAAK,EAAC,IAAI;QACV,UAAU,EAAC,KAAK;QAChB,OAAO,EAAE,KAAK;QACd,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,CAAC;MAKZ,2EAAU;QNrrBd,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,WAAW;QACpB,OAAO,EAAE,IAAI;QAmCZ,qBAAqB,EAAE,MAAM;QAC7B,kBAAkB,EAAE,QAAQ;QAQ7B,sBAAsB,EMwoBO,MAAM;QNvoBnC,mBAAmB,EMuoBU,MAAM;QNtoBnC,kBAAkB,EMsoBW,MAAM;QNroBnC,cAAc,EMqoBe,MAAM;QAE9B,uFAAY;UNhfjB,gBAAgB,EARH,IAAG;UAShB,YAAY,EAAE,IAAW;UACzB,aAAa,EAVA,IAAG;UAWhB,SAAS,EAAE,IAAW;UACtB,QAAQ,EAAE,IAAW;UACrB,IAAI,EAAE,IAAW;UA/MjB,OAAO,EAAE,WAAW;UACpB,OAAO,EAAE,YAAY;UACrB,OAAO,EAAE,SAAS;UAClB,OAAO,EAAE,WAAW;UACpB,OAAO,EAAE,IAAI;UAmCZ,qBAAqB,EAAE,MAAM;UAC7B,kBAAkB,EAAE,QAAQ;UAQ7B,sBAAsB,EM6oBQ,MAAM;UN5oBpC,mBAAmB,EM4oBW,MAAM;UN3oBpC,kBAAkB,EM2oBY,MAAM;UN1oBpC,cAAc,EM0oBgB,MAAM;UAE9B,yGAAkB;YNrfxB,gBAAgB,EARH,IAAG;YAShB,YAAY,EAAE,IAAW;YACzB,aAAa,EAVA,IAAG;YAWhB,SAAS,EAAE,IAAW;YACtB,QAAQ,EAAE,IAAW;YACrB,IAAI,EAAE,IAAW;YMkfV,KAAK,EAAE,IAAI;YAEX,8GAAK;cACJ,aAAa,EAAE,IAAI;YAGpB,2GAAE;cACD,MAAM,EAAE,OAAO;cAEf,KAAK,EAAE,KAAK;cACZ,WAAW,EAAE,IAAI;cAEjB,iHAAQ;gBACP,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,KAAK;cAGf,4HAAmB;gBAClB,OAAO,EAAE,EAAE;UAKd,sGAAe;YN/gBrB,gBAAgB,EARH,IAAG;YAShB,YAAY,EAAE,IAAW;YACzB,aAAa,EAVA,IAAG;YAWhB,SAAS,EAAE,IAAW;YACtB,QAAQ,EAAE,IAAW;YACrB,IAAI,EAAE,IAAW;YM4gBV,KAAK,EAAE,IAAI;YAEX,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,GAAG;YACnB,aAAa,EAAE,cAAc;YAE7B,4GAAM;cACL,MAAM,EAAE,OAAO;cACf,WAAW,EAAE,KAAK;YAGnB,4GAAM;cACL,WAAW,EAAE,eAAe;cAC5B,SAAS,EAAE,IAAI;cACf,KAAK,EAAE,KAAK;cACZ,gBAAgB,EAAE,KAAK;cACvB,MAAM,EAAE,GAAG;cACX,aAAa,EAAE,cAAc;cAC7B,OAAO,EAAE,IAAI;cACb,WAAW,EAAE,GAAG;UAIlB,0FAAG;YNxiBT,gBAAgB,EARH,IAAG;YAShB,YAAY,EAAE,IAAW;YACzB,aAAa,EAVA,IAAG;YAWhB,SAAS,EAAE,IAAW;YACtB,QAAQ,EAAE,IAAW;YACrB,IAAI,EAAE,IAAW;YL1JjB,QAAQ,EAAE,IAAI;YACd,0BAA0B,EAAE,KAAK;YWgsB1B,kGAAQ;cNtvBf,OAAO,EAAE,WAAW;cACpB,OAAO,EAAE,YAAY;cACrB,OAAO,EAAE,SAAS;cAClB,OAAO,EAAE,WAAW;cACpB,OAAO,EAAE,IAAI;cAyCZ,qBAAqB,EAAE,MAAM;cAC7B,kBAAkB,EAAE,UAAU;cAE/B,sBAAsB,EMwsBU,GAAG;cNvsBnC,mBAAmB,EMusBa,GAAG;cNtsBnC,kBAAkB,EMssBc,GAAG;cNrsBnC,cAAc,EMqsBkB,GAAG;cAC3B,WAAW,EAAE,IAAI;cACjB,cAAc,EAAE,GAAG;cACnB,aAAa,EAAE,cAAc;cAE7B,2GAAW;gBACV,gBAAgB,EAAE,IAAI;cAGvB,wGAAM;gBACL,KAAK,EAAE,IAAI;gBACX,UAAU,EAAE,GAAG;gBNzjBxB,gBAAgB,EARH,IAAG;gBAShB,YAAY,EAAE,IAAW;gBACzB,aAAa,EAVA,IAAG;gBAWhB,SAAS,EAAE,IAAW;gBACtB,QAAQ,EAAE,IAAW;gBACrB,IAAI,EAAE,IAAW;cMwjBT,kHAAgB;gBN7jBxB,gBAAgB,EARH,IAAG;gBAShB,YAAY,EAAE,IAAW;gBACzB,aAAa,EAVA,IAAG;gBAWhB,SAAS,EAAE,IAAW;gBACtB,QAAQ,EAAE,IAAW;gBACrB,IAAI,EAAE,IAAW;gBA/MjB,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,YAAY;gBACrB,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,WAAW;gBACpB,OAAO,EAAE,IAAI;gBAmCZ,qBAAqB,EAAE,MAAM;gBAC7B,kBAAkB,EAAE,QAAQ;gBAQ7B,sBAAsB,EM0tBW,MAAM;gBNztBvC,mBAAmB,EMytBc,MAAM;gBNxtBvC,kBAAkB,EMwtBe,MAAM;gBNvtBvC,cAAc,EMutBmB,MAAM;gBAC9B,MAAM,EAAE,IAAI;gBAEZ,qHAAG;kBACF,SAAS,EAAE,IAAI;kBACf,cAAc,EAAE,GAAG;gBAInB,gIAAG;kBACF,OAAO,EAAE,YAAY;kBACrB,aAAa,EAAE,IAAI;kBACnB,cAAc,EAAE,GAAG;kBAEnB,uIAAS;oBACR,OAAO,EAAE,KAAK;oBXx2B1B,WAAW,EAAE,gBAAgB;oBAT7B,6BAA6B,EAAC,kBAAM;oBAEpC,0BAA0B,EAAC,kBAAM;oBACjC,yBAAyB,EAAC,kBAAM;oBAChC,wBAAwB,EAAC,kBAAM;oBAC/B,qBAAqB,EAAC,kBAAM;oBAM5B,sBAAsB,EAAE,WAAW;oBACnC,cAAc,EAAC,kBAAkB;oBWu2BrB,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE,GAAG;oBAClB,WAAW,EAAE,IAAI;oBACjB,KAAK,EAAE,IAAI;gBAMb,wHAAG;kBACF,SAAS,EAAE,IAAI;kBACf,KAAK,EAAE,IAAI;kBACX,WAAW,EAAE,IAAI;gBAGlB,wHAAG;kBACF,SAAS,EAAE,IAAI;kBACf,KAAK,EAAE,KAAK;kBACZ,WAAW,EAAE,IAAI;kBACjB,cAAc,EAAE,GAAG;kBAEnB,iIAAW;oBACV,WAAW,EAAE,iBAAiB;gBAKjC,oHAAE;kBACD,SAAS,EAAE,IAAI;kBACf,WAAW,EAAE,IAAI;kBACjB,cAAc,EAAE,IAAI;MAUzB,6EAAG;QACF,cAAc,EAAE,IAAI;MAGtB,kFAAe;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,KAAK;QACZ,eAAe,EAAE,QAAQ;QAEzB,wFAAM;UACL,gBAAgB,EAAE,IAAI;UAEtB,2FAAG;YACF,KAAK,EAAE,IAAI;QAKZ,2FAAG;UACF,KAAK,EAAE,KAAK;QAId,4KAAO;UACN,MAAM,EAAE,cAAc;UACtB,OAAO,EAAE,MAAM;UAEf,8LAAW;YACV,WAAW,EAAE,iBAAiB;YAC9B,SAAS,EAAE,MAAM;YACjB,WAAW,EAAE,IAAI;QAInB,qFAAG;UACF,gBAAgB,EAAE,IAAI;UAEtB,2FAAQ;YACP,gBAAgB,EAAE,IAAI;UAGvB,2FAAQ;YACP,gBAAgB,EAAE,IAAI;UAGvB,2FAAM;YACL,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,OAAO;IAO7B,sEAAS;MNnrBZ,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MMgrBb,UAAU,EAAE,MAAM;MAClB,WAAW,EAAE,IAAI;MAGhB,yFAAa;QACZ,UAAU,EAAE,MAAM;MAKnB,0FAAa;QACZ,UAAU,EAAE,MAAM;MAIpB,8EAAQ;QAEP,MAAM,EAAE,OAAO;QACf,mFAAK;UACJ,OAAO,EAAE,IAAI;QAGd,mFAAO;UACN,gBAAgB,EAAE,OAAO;UACzB,0FAAS;YACR,OAAO,EAAE,IAAI;QAMd,4FAAW;UACV,gBAAgB,EAAE,OAAO;QAG1B,yFAAQ;UACP,OAAO,EAAE,IAAI;EA0ClB,0SAAmH;IAClH,UAAU,EAAE,MAAM;;AAUnB,gEAAO;EACN,aAAa,EAAG,eAAe;EAE/B,wEAAQ;IX1iCX,WAAW,EAAE,gBAAgB;IAT7B,6BAA6B,EAAC,kBAAM;IAEpC,0BAA0B,EAAC,kBAAM;IACjC,yBAAyB,EAAC,kBAAM;IAChC,wBAAwB,EAAC,kBAAM;IAC/B,qBAAqB,EAAC,kBAAM;IAM5B,sBAAsB,EAAE,WAAW;IACnC,cAAc,EAAC,kBAAkB;IWyiC7B,MAAM,EAAE,OAAO;IACf,KAAK,EAAE,KAAK;IAEZ,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;;ACzkCtB,oBAAW;EACV,aAAa,EAAE,eAAe;EAC9B,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,MAAM;EAElB,iCAAe;IACd,OAAO,EAAC,KAAK;IACb,UAAU,EAAE,OAAO;IAEnB,gBAAgB,ENsDF,OAAO;IMrDrB,KAAK,EAAE,KAAK;IAEZ,OAAO,EAAE,iBAAiB;IAC1B,SAAS,EAAE,GAAG;IAGb,2EAAwB;MACvB,OAAO,EAAE,GAAG;IAId,gDAAe;MACd,YAAY,EAAE,IAAI;AAKrB,wBAAe;EACd,aAAa,EAAE,eAAe;EAC9B,gBAAgB,EAAE,KAAK;EACvB,OAAO,EAAE,GAAG;EACZ,SAAS,EAAE,IAAI;EAEf,kCAAY;IACX,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,MAAM;EAGnB,6BAAO;IACN,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,MAAM;IAElB,wCAAa;MACZ,OAAO,EAAE,KAAK;MACd,UAAU,EAAE,OAAO;MAEnB,gBAAgB,EAAE,MAAM;EAI1B,8BAAQ;IACP,gBAAgB,EAAE,MAAM;IAExB,yCAAa;MACZ,gBAAgB,EAAE,GAAG;EAIvB,gCAAU;IACT,gBAAgB,EAAE,GAAG;;ACxCtB,oCAAY;EACX,gBAAgB,EAAE,IAAI;EACtB,aAAa,EAAE,cAAc;AAI/B,eAAG;EACF,gBAAgB,EAfW,OAAc;EAiBzC,kBAAG;IACF,MAAM,EAAE,OAAO;IAEf,aAAa,EAAE,cAAc;IAC7B,gBAAgB,EAAE,KAAK;IACvB,UAAU,EAAE,4DAA4D;IAGxE,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,UAAU;IRkEvB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,IAAI;IAyCZ,qBAAqB,EAAE,MAAM;IAC7B,kBAAkB,EAAE,UAAU;IAE/B,sBAAsB,EQ/GI,GAAG;IRgH7B,mBAAmB,EQhHO,GAAG;IRiH7B,kBAAkB,EQjHQ,GAAG;IRkH7B,cAAc,EQlHY,GAAG;IAE3B,2BAAW;MAKV,WAAW,EAAE,IAAI;MACjB,aAAa,EAAE,GAAG;MAClB,UAAU,EAAE,oCAAoC;IAGjD,2BAAW;MAEV,gBAAgB,EA7CA,OAAI;MA8CpB,KAAK,EAAE,IAAI;IAIZ,2BAAS;MACR,KAAK,EAtDQ,IAAI;MR2SpB,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MQvPd,+BAAI;QACH,KAAK,EAzDI,IAAI;QA0Db,MAAM,EA1DG,IAAI;QA2Db,OAAO,EA1DD,GAAmC;IA8D3C,yBAAO;MR2OT,gBAAgB,EARH,IAAG;MAShB,YAAY,EAAE,IAAW;MACzB,aAAa,EAVA,IAAG;MAWhB,SAAS,EAAE,IAAW;MACtB,QAAQ,EAAE,IAAW;MACrB,IAAI,EAAE,IAAW;MQ7Od,SAAS,EAAE,IAAI;MAGf,WAAW,EAAE,IAAI;MAEjB,cAAc,EAAE,IAAI;MACpB,YAAY,EAAE,IAAY;MAC1B,aAAa,EAxEN,GAAmC;MAyE1C,WAAW,EAAE,KAAK;;AAQtB,mBAAoB;EbmEnB,QAAQ,EAAE,IAAI;EACd,0BAA0B,EAAE,KAAK;Ea7D/B,iDAAQ;IACP,KAAK,EAAE,KAAK;IACZ,YAAY,EAAE,IAAI;IAClB,OAAO,EAAE,SAAS;Ib9DrB,sBAAsB,Ea+DA,IAAI;Ib9D1B,0BAA0B,Ea8DE,EAAE;Ib7D9B,iCAAiC,Ea6DD,MAAM;Ib5DtC,iCAAiC,Ea4DO,QAAQ;Ib3DhD,2BAA2B,EALqE,IAAI;IAOpG,mBAAmB,EayDG,IAAI;IbxD1B,uBAAuB,EawDK,EAAE;IbvD9B,8BAA8B,EauDE,MAAM;IbtDtC,8BAA8B,EasDU,QAAQ;IbrDhD,wBAAwB,EAXwE,IAAI;IAapG,kBAAkB,EamDI,IAAI;IblD1B,sBAAsB,EakDM,EAAE;IbjD9B,6BAA6B,EaiDG,MAAM;IbhDtC,6BAA6B,EagDW,QAAQ;Ib/ChD,uBAAuB,EAjByE,IAAI;IAmBpG,iBAAiB,Ea6CK,IAAI;Ib5C1B,qBAAqB,Ea4CO,EAAE;Ib3C9B,4BAA4B,Ea2CI,MAAM;Ib1CtC,4BAA4B,Ea0CY,QAAQ;IbzChD,sBAAsB,EAvB0E,IAAI;IAyBpG,cAAc,EauCQ,IAAI;IbtC1B,kBAAkB,EasCU,EAAE;IbrC9B,yBAAyB,EaqCO,MAAM;IbpCtC,yBAAyB,EaoCe,QAAQ;IbnChD,mBAAmB,EA7B6E,IAAI;EayElG,+BAAQ;IACP,OAAO,EAAE,aAAa;IRmMzB,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IL9RjB,WAAW,EAAE,gBAAgB;IAT7B,6BAA6B,EAAC,kBAAM;IAEpC,0BAA0B,EAAC,kBAAM;IACjC,yBAAyB,EAAC,kBAAM;IAChC,wBAAwB,EAAC,kBAAM;IAC/B,qBAAqB,EAAC,kBAAM;IAM5B,sBAAsB,EAAE,WAAW;IACnC,cAAc,EAAC,kBAAkB;IasF9B,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE,IAAI;IAClB,KAAK,EAAE,IAAI;EAKX,qCAAQ;IACP,KAAK,EAhHmB,OAAc;EAyHvC,uCAAQ;IACP,OAAO,EAAE,EAAE;;AAkBd,0DAAW;EAEV,gBAAgB,EAhJC,OAAI;AAmJtB,8EAAmB;EAClB,gBAAgB,EAlJU,OAAc;EAmJxC,KAAK,EAAE,KAAK;EAEZ,4FAAS;IACR,SAAS,EAAE,IAAI;IAEf,wGAAM;Mb3IT,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;Ia4I9B,8HAAiB;Mb/IpB,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;Ma8I7B,UAAU,EAAE,KAAK;MACjB,SAAS,EAAE,IAAI;MACf,aAAa,EAAE,IAAI;IAMnB,wJAAiB;MAChB,OAAO,EAAE,IAAI;IAGd,gJAAa;MACZ,OAAO,EAAE,IAAI;IAKb,kKAAiB;MAChB,OAAO,EAAE,KAAK;MACd,QAAQ,EAAE,QAAQ;MAClB,GAAG,EAAE,CAAC;MACN,IAAI,EAAE,CAAC;MACP,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,gBAAgB,EAAE,WAAgB;IAGnC,0JAAa;MACZ,OAAO,EAAE,KAAK;MACd,KAAK,EAAE,KAAK;MACZ,QAAQ,EAAE,QAAQ;MAClB,SAAS,EAAE,KAAK;MAChB,GAAG,EAAE,IAAI;MACT,KAAK,EAAE,GAAG;MACV,KAAK,EAAE,KAAK;MACZ,gBAAgB,EAAE,KAAK;MbrG7B,kBAAkB,EAAE,kCAA8B;MAC/C,eAAe,EAAE,kCAA8B;MAC9C,cAAc,EAAE,kCAA8B;MAC7C,aAAa,EAAE,kCAA8B;MAC1C,UAAU,EAAE,kCAA8B;MaoG5C,gKAAG;QRlER,qBAAqB,EAAE,MAAM;QAC7B,kBAAkB,EAAE,QAAQ;QAQ7B,sBAAsB,EQ0DS,MAAM;QRzDrC,mBAAmB,EQyDY,MAAM;QRxDrC,kBAAkB,EQwDa,MAAM;QRvDrC,cAAc,EQuDiB,MAAM;QAE9B,sKAAG;UACF,UAAU,EAAE,IAAI;UAChB,SAAS,EAAE,IAAI;UACf,OAAO,EAAE,QAAQ;UACjB,aAAa,EAAE,eAAe;UAE9B,wLAAW;YACV,KAAK,EAAE,IAAI;AAYlB,sGAAoB;EAGnB,OAAO,EAAE,IAAI;AAQf,8EAAmB;EAClB,gBAAgB,EAvOU,OAAc;EAwOxC,KAAK,EAAE,KAAK;EAEZ,4FAAS;IbhLX,kBAAkB,EAAE,mBAAqB;IACtC,eAAe,EAAE,mBAAqB;IACpC,aAAa,EAAE,mBAAqB;IACrC,cAAc,EAAE,mBAAqB;IACjC,UAAU,EAAE,mBAAqB;Ia+KtC,8GAAW;MACV,MAAM,EAAE,IAAI;MAEZ,sHAAI;QACH,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,MAAM;AAMtB,8DAAW;EACV,UAAU,EAAE,cAAc;EAE1B,oFAAa;IACZ,aAAa,EAAE,cAAc;EAG9B,0EAAQ;IACP,gBAAgB,EAAE,IAAI;AbtGzB,4NAA6B;Ea4G1B,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,IAAI;Ab5Gd,oLAA6B;Ea2G1B,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,IAAI;Ab3Gd,wLAA6B;Ea0G1B,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,IAAI;Ab1Gd,wMAA6B;EayG1B,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,IAAI;AAMZ,gHAAmB;EbhQrB,WAAW,EAAE,gBAAgB;EAT7B,6BAA6B,EAAC,kBAAM;EAEpC,0BAA0B,EAAC,kBAAM;EACjC,yBAAyB,EAAC,kBAAM;EAChC,wBAAwB,EAAC,kBAAM;EAC/B,qBAAqB,EAAC,kBAAM;EAM5B,sBAAsB,EAAE,WAAW;EACnC,cAAc,EAAC,kBAAkB;EagQ9B,MAAM,EA/QG,GAAG;EAgRZ,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,OAAO;EACf,KAAK,EAAE,KAAK;EACZ,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EAEf,4HAAQ;IACP,KAAK,EAAE,OAAc;AAIvB,8GAAkB;EACjB,cAAc,EAAE,MAAM;EACtB,YAAY,EAAE,IAAI;;AAWnB,2EAAQ;EACP,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,MAAM;;AAQpB,0BAAG;EACF,WAAW,EAAE,GAAG;EAGhB,gCAAQ;IACP,KAAK,EAAE,KAAK;AAQb,4CAAG;EAEF,WAAW,EAAE,GAAG;AASlB,wBAAG;EACF,UAAU,EAAE,MAAM;EAElB,iCAAW;IACV,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,OAAO;AAMjB,0CAAiB;EAChB,YAAY,EAAE,GAAG;;AAQnB,mBAAW;EbxNX,mBAAmB,EayNG,IAAI;;EbxN1B,gBAAgB,EawNM,IAAI;;EbvN1B,eAAe,EauNO,IAAI;;;EbpN1B,cAAc,EaoNQ,IAAI;EbnN1B,WAAW,EamNW,IAAI;EAEzB,SAAS,EAAE,IAAI;EAGf,OAAO,EAAE,mBAAmB;EAG5B,MAAM,EAAE,GAAG;AAGZ,wBAAgB;EACf,KAAK,EAAE,IAAI;EAEX,OAAO,EAAE,mBAAmB;AAI7B,mBAAW;EACV,OAAO,EAlPa,IAAI;AAsPzB,mBAAW;EAEV,MAAM,EAAE,GAAG;EAEX,SAAS,EAAE,IAAI;EAGf,OAAO,EAAE,mBAAmB;EAG5B,uBAAI;Ib1PL,mBAAmB,Ea2PI,IAAI;;Ib1P3B,gBAAgB,Ea0PO,IAAI;;IbzP3B,eAAe,EayPQ,IAAI;;;IbtP3B,cAAc,EasPS,IAAI;IbrP3B,WAAW,EaqPY,IAAI;IACzB,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,QAAQ;EAItB,4BAAS;IACR,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,UAAU;IACrB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,GAAG;AAIb,kBAAU;EAET,gBAAgB,EAAE,IAAI;EACtB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;AAGb,mBAAW;ER3TX,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,YAAY;EACrB,OAAO,EAAE,SAAS;EAClB,OAAO,EAAE,WAAW;EACpB,OAAO,EAAE,IAAI;EAyCZ,qBAAqB,EAAE,MAAM;EAC7B,kBAAkB,EAAE,UAAU;EAE/B,sBAAsB,EQ6QG,GAAG;ER5Q5B,mBAAmB,EQ4QM,GAAG;ER3Q5B,kBAAkB,EQ2QO,GAAG;ER1Q5B,cAAc,EQ0QW,GAAG;EAO3B,2BAAU;IAET,OAAO,EAAE,IAAI;EAGd,gCAAe;IACd,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI;IACX,gBAAgB,EAAE,KAAK;IACvB,OAAO,EAAE,EAAE;EAGZ,oCAAiB;IbrSlB,mBAAmB,EasSI,IAAI;;IbrS3B,gBAAgB,EaqSO,IAAI;;IbpS3B,eAAe,EaoSQ,IAAI;;;IbjS3B,cAAc,EaiSS,IAAI;IbhS3B,WAAW,EagSY,IAAI;IRvI3B,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IQoIf,KAAK,EAAE,IAAI;IAMX,iDAAa;MRtDf,kBAAkB,EQuDK,UAAU;MRtDjC,eAAe,EQsDQ,UAAU;MRpDhC,mBAAmB,EAAE,KAAK;MAM3B,UAAU,EQ8Ca,UAAU;MbzajC,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;Maya9B,OAAO,EAAE,KAAK;MACd,MAAM,EAzbG,GAAG;MA0bZ,UAAU,EAAE,IAAI;MAChB,MAAM,EAAE,OAAO;MACf,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,IAAI;MACX,SAAS,EAAE,IAAI;MAEf,uDAAQ;QACP,KAAK,EAAE,OAAc;IAMvB,kDAAc;MbvShB,MAAM,EAAE,IAAI;MACZ,MAAM,EAAE,SAAS;MACjB,MAAM,EAAE,YAAY;MaySjB,UAAU,EAAE,2EAMX;MAED,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,WAAW,EAAE,GAAG;MAChB,OAAO,EAAE,KAAK;MAEd,yDAAS;QblTZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,gBAAgB;IawTtB,0DAAsB;MACrB,KAAK,EAAE,IAAI;MACX,MAAM,EAAE,IAAI;MACZ,OAAO,EAAE,KAAK;MAEd,uEAAa;QACZ,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,UAAU;QACtB,KAAK,EAVY,GAAG;QAWpB,MAAM,EAZY,IAAI;QActB,WAAW,EAAE,IAAI;QACjB,MAAM,EAAC,iBAAiB;QAExB,UAAU,EAAC,CAAC;QACZ,aAAa,EAAC,CAAC;Qb/UnB,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,YAAY;QagVhB,8EAAS;Ub5Ub,MAAM,EAAE,QAAQ;UAChB,MAAM,EAAE,aAAa;UACrB,MAAM,EAAE,gBAAgB;Qa8UpB,8EAAS;UACR,OAAO,EAAE,KAAK;UACd,UAAU,EAAE,UAAU;UACtB,OAAO,EAAC,EAAE;UACV,QAAQ,EAAE,QAAQ;UAClB,IAAI,EAAC,IAAI;UAET,MAAM,EAAE,IAAI;UACZ,KAAK,EAhCW,GAAG;UAiCnB,MAAM,EAAC,eAAe;UAEtB,UAAU,EAAC,CAAC;UACZ,aAAa,EAAC,CAAC;UACf,OAAO,EAAC,CAAC;QAEV,6EAAQ;UACP,OAAO,EAAE,KAAK;UACd,UAAU,EAAE,UAAU;UACtB,OAAO,EAAC,EAAE;UACV,QAAQ,EAAE,QAAQ;UAClB,GAAG,EAAE,KAAmB;UACxB,IAAI,EAAC,GAAG;UACR,KAAK,EAAC,GAAG;UACT,MAAM,EAAC,IAAI;UACX,MAAM,EAAC,cAAc;UAErB,UAAU,EAAC,CAAC;UACZ,aAAa,EAAC,CAAC;EAUnB,gCAAa;IRtPd,gBAAgB,EARH,CAAG;IAShB,YAAY,EAAE,CAAW;IACzB,aAAa,EAVA,CAAG;IAWhB,SAAS,EAAE,CAAW;IACtB,QAAQ,EAAE,CAAW;IACrB,IAAI,EAAE,CAAW;IQmPf,OAAO,EA7ZY,IAAI;IA+ZvB,4CAAY;MbzZd,mBAAmB,Ea0ZK,IAAI;;MbzZ5B,gBAAgB,EayZQ,IAAI;;MbxZ5B,eAAe,EawZS,IAAI;;;MbrZ5B,cAAc,EaqZU,IAAI;MbpZ5B,WAAW,EaoZa,IAAI;MACzB,KAAK,EAhiBI,IAAI;MAkiBb,cAAc,EAAE,GAAG;MACnB,aAAa,EAAE,GAAG;Mb9ZrB,mBAAmB,Ea+ZK,IAAI;;Mb9Z5B,gBAAgB,Ea8ZQ,IAAI;;Mb7Z5B,eAAe,Ea6ZS,IAAI;;;Mb1Z5B,cAAc,Ea0ZU,IAAI;MbzZ5B,WAAW,EayZa,IAAI;MAEzB,kDAAM;QACL,SAAS,EAAE,IAAI;QACf,KAAK,EAxiBG,IAAI;QAyiBZ,MAAM,EAAE,GAAG;QACX,KAAK,EAAE,IAAI;IAIb,4CAAY;MACX,SAAS,EAAE,IAAI;MACf,WAAW,EAAE,KAAK;MAClB,WAAW,EAAE,IAAI;Mb5apB,mBAAmB,Ea+aK,IAAI;;Mb9a5B,gBAAgB,Ea8aQ,IAAI;;Mb7a5B,eAAe,Ea6aS,IAAI;;;Mb1a5B,cAAc,Ea0aU,IAAI;Mbza5B,WAAW,Eayaa,IAAI;MAEzB,MAAM,EAAE,IAAI;MACZ,WAAW,EAAE,QAAQ;MACrB,SAAS,EAAE,UAAU;MAErB,MAAM,EAAE,GAAG;MACX,KAAK,EAAE,IAAI;MAEX,mDAAS;QACR,WAAW,EAAE,iBAAiB;QAC9B,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,IAAI;QAEhB,2DAAU;UACT,WAAW,EAAE,eAAe;UAC5B,SAAS,EAAE,IAAI;UACf,WAAW,EAAE,IAAI;UACjB,UAAU,EAAE,GAAG;EAOnB,gCAAa;IR1Sd,gBAAgB,EARH,IAAG;IAShB,YAAY,EAAE,IAAW;IACzB,aAAa,EAVA,IAAG;IAWhB,SAAS,EAAE,IAAW;IACtB,QAAQ,EAAE,IAAW;IACrB,IAAI,EAAE,IAAW;IAoFjB,kBAAkB,EQoNI,UAAU;IRnNhC,eAAe,EQmNO,UAAU;IRjN/B,mBAAmB,EAAE,KAAK;IAM3B,UAAU,EQ2MY,UAAU;Ib5chC,mBAAmB,Ea6cI,IAAI;;Ib5c3B,gBAAgB,Ea4cO,IAAI;;Ib3c3B,eAAe,Ea2cQ,IAAI;;;Ibxc3B,cAAc,EawcS,IAAI;Ibvc3B,WAAW,EaucY,IAAI;IAEzB,qCAAK;MACJ,OAAO,EAAE,KAAK;MAEd,4CAAS;Qb5kBZ,WAAW,EAAE,gBAAgB;QAT7B,6BAA6B,EAAC,kBAAM;QAEpC,0BAA0B,EAAC,kBAAM;QACjC,yBAAyB,EAAC,kBAAM;QAChC,wBAAwB,EAAC,kBAAM;QAC/B,qBAAqB,EAAC,kBAAM;QAM5B,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAC,kBAAkB;Qa2kB7B,KAAK,EAAE,IAAI;QAEX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,MAAM,EA/lBE,GAAG;QAimBX,MAAM,EAAE,OAAO;QAEf,gDAAM;UACL,MAAM,EAAE,OAAO;QAGhB,qDAAW;UACV,MAAM,EAAE,OAAO;UAEf,2DAAQ;YACP,KAAK,EAAE,IAAI;UAGZ,4DAAS;YACR,KAAK,EAAE,IAAI;MAKd,gDAAa;QRtPhB,kBAAkB,EQuPM,QAAQ;QRtPhC,eAAe,EQsPS,QAAQ;QRlP/B,mBAAmB,EAAE,GAAG;QAIzB,UAAU,EQ8Oc,QAAQ;QbzmBhC,WAAW,EAAE,gBAAgB;QAT7B,6BAA6B,EAAC,kBAAM;QAEpC,0BAA0B,EAAC,kBAAM;QACjC,yBAAyB,EAAC,kBAAM;QAChC,wBAAwB,EAAC,kBAAM;QAC/B,qBAAqB,EAAC,kBAAM;QAM5B,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAC,kBAAkB;QaymB7B,OAAO,EAAE,KAAK;QACd,MAAM,EAznBE,GAAG;QA0nBX,WAAW,EAAE,GAAG;QAChB,WAAW,EAAE,IAAI;QACjB,MAAM,EAAE,OAAO;QACf,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,IAAI;QAEf,sDAAQ;UACP,KAAK,EAAE,IAAI;AAUhB,sBAAc;Eb/nBd,WAAW,EAAE,gBAAgB;EAT7B,6BAA6B,EAAC,kBAAM;EAEpC,0BAA0B,EAAC,kBAAM;EACjC,yBAAyB,EAAC,kBAAM;EAChC,wBAAwB,EAAC,kBAAM;EAC/B,qBAAqB,EAAC,kBAAM;EAM5B,sBAAsB,EAAE,WAAW;EACnC,cAAc,EAAC,kBAAkB;Ea8nBhC,MAAM,EA7oBK,GAAG;EA8oBd,MAAM,EAAE,OAAO;EACf,KAAK,EAAE,IAAI;EACX,SAAS,EAAE,IAAI;EAEf,4BAAQ;IACP,KAAK,EAAE,KAAK;AAId,yBAAiB;EAChB,SAAS,EAAE,IAAI;EACf,OAAO,EAzhBa,IAAI;EA0hBxB,YAAY,EAAE,GAAG;EAEjB,gBAAgB,EHtcD,OAAgB;EGuc/B,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,OAAO;EAEf,2CAAkB;IACjB,YAAY,EAAE,IAAI;;AAQpB,yCAAuB;EACtB,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,GAAG;EACR,IAAI,EAAE,GAAG;EACT,MAAM,EAAE,IAAI;EACZ,KAAK,EAAE,IAAI;EACX,gBAAgB,EAAE,WAAgB;EAClC,OAAO,EAAE,GAAG;AAIb,2CAAyB;EACxB,QAAQ,EAAE,QAAQ;EAIlB,OAAO,EAAE,GAAG;EAEZ,gDAAK;IACJ,QAAQ,EAAE,QAAQ;IAElB,MAAM,EAAE,GAAG;IACX,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,KAAK;IAChB,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,KAAK;IAEhB,gBAAgB,EAdK,OAAI;IAezB,KAAK,EAAE,IAAI;IbjtBb,qBAAqB,EaosBL,GAAG;IbnsBhB,kBAAkB,EamsBL,GAAG;IblsBX,aAAa,EaksBL,GAAG;IAejB,UAAU,EAAE,8BAA6B;IACzC,SAAS,EAAE,GAAG;IAGd,sDAAQ;MACP,OAAO,EAAC,EAAE;MACV,QAAQ,EAAC,QAAQ;MACjB,GAAG,EAAC,IAAI;MACR,IAAI,EAAC,GAAG;MACR,WAAW,EAAE,GAAG;MAChB,KAAK,EAAC,CAAC;MACP,MAAM,EAAC,CAAC;MACR,UAAU,EAAC,iBAAqC;MAChD,WAAW,EAAC,qBAA4B;MACxC,YAAY,EAAC,qBAA4B;IAG1C,qDAAK;MACJ,SAAS,EAAE,GAAG;MACd,KAAK,EAAE,IAAI;IAGZ,yDAAS;MACR,MAAM,EAAE,IAAI;MACZ,WAAW,EAAE,QAAQ;MACrB,SAAS,EAAE,UAAU;MACrB,KAAK,EAAE,IAAI;IAIX,uEAAO;MACN,MAAM,EAAE,IAAI;MACZ,aAAa,EAAE,cAAc;MAE7B,2EAAI;QACH,OAAO,EAAE,SAAS;Qb9tBvB,WAAW,EAAE,gBAAgB;QAT7B,6BAA6B,EAAC,kBAAM;QAEpC,0BAA0B,EAAC,kBAAM;QACjC,yBAAyB,EAAC,kBAAM;QAChC,wBAAwB,EAAC,kBAAM;QAC/B,qBAAqB,EAAC,kBAAM;QAM5B,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAC,kBAAkB;Qa8tB5B,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,IAAI;QACjB,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,GAAG;QAEjB,iFAAQ;UACP,KAAK,EAAE,KAAK;IAKf,yEAAS;MAER,gBAAgB,EAAE,IAAI;MACtB,YAAY,EApEQ,IAAI;MAqExB,aAAa,EArEO,IAAI;MAsExB,cAAc,EAAE,GAAG;MACnB,aAAa,EAAE,cAAc;MAG7B,gFAAS;QACR,MAAM,EAAE,GAAG;QACX,cAAc,EAAE,GAAG;QACnB,aAAa,EAAE,GAAG;QAElB,oFAAI;UACH,UAAU,EAAE,MAAM;MAIpB,iFAAQ;QACP,WAAW,EAAE,GAAG;QAEhB,sFAAK;UACJ,YAAY,EAAE,GAAG;UAEjB,4FAAQ;YACP,OAAO,EAAE,GAAG;QAId,uFAAM;UAIL,WAAW,EAAE,IAAI;UACjB,SAAS,EAAE,IAAI;UAEf,UAAU,EAAE,KAAK;UACjB,SAAS,EAAE,IAAI;UAEf,kHAA6B;YAC5B,OAAO,EAAE,CAAC;MAKb,mFAAU;QACT,WAAW,EAAE,GAAG;QAEhB,wFAAK;UACJ,OAAO,EAAE,YAAY;UACrB,WAAW,EAAE,IAAI;UAEjB,8FAAQ;YACP,OAAO,EAAE,GAAG;QAId,gGAAa;UACZ,OAAO,EAAE,YAAY;UACrB,KAAK,EAAE,KAAK;UAEZ,sGAAM;YAUL,aAAa,EAAE,GAAG;YAClB,MAAM,EAAE,OAAO;YAVf,2GAAK;cACJ,SAAS,EAAE,IAAI;cACf,KAAK,EAAE,IAAI;cAEX,iHAAQ;gBACP,OAAO,EAAE,EAAE;QASf,4FAAS;UACR,KAAK,EAAE,IAAI;UACX,UAAU,EAAE,IAAI;UAEhB,kGAAQ;YACP,OAAO,EAAE,CAAC;IAOf,+DAAe;MRtvBjB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,YAAY;MACrB,OAAO,EAAE,SAAS;MAClB,OAAO,EAAE,WAAW;MACpB,OAAO,EAAE,IAAI;MAyCZ,qBAAqB,EAAE,MAAM;MAC7B,kBAAkB,EAAE,UAAU;MAE/B,sBAAsB,EQwsBK,GAAG;MRvsB9B,mBAAmB,EQusBQ,GAAG;MRtsB9B,kBAAkB,EQssBS,GAAG;MRrsB9B,cAAc,EQqsBa,GAAG;MRzb9B,qBAAqB,EQ0bK,OAAO;MRzbjC,kBAAkB,EQybQ,OAAO;MRnbhC,kBAAkB,EQmbO,OAAO;MRjbjC,aAAa,EQiba,OAAO;MAE9B,OAAO,EA/Jc,IAAI;MAgKzB,WAAW,EAAE,GAAG;MAChB,aAAa,EAAE,GAAG;MAElB,gFAAiB;QRrjBpB,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QQmjBb,yFAAS;UACR,SAAS,EAAE,IAAI;UACf,WAAW,EAAE,IAAI;UACjB,MAAM,EAAE,GAAG;UAEX,+FAAQ;YACP,OAAO,EAAE,CAAC;QAIZ,gGAAgB;UACf,KAAK,EAAE,IAAI;UACX,MAAM,EAAE,GAAG;UAEX,yGAAS;YACR,MAAM,EAAE,IAAI;YACZ,gBAAgB,EAAE,KAAK;YACvB,KAAK,EAAE,KAAK;MAKf,uEAAQ;QR9kBX,gBAAgB,EARH,IAAG;QAShB,YAAY,EAAE,IAAW;QACzB,aAAa,EAVA,IAAG;QAWhB,SAAS,EAAE,IAAW;QACtB,QAAQ,EAAE,IAAW;QACrB,IAAI,EAAE,IAAW;QL9RjB,WAAW,EAAE,gBAAgB;QAT7B,6BAA6B,EAAC,kBAAM;QAEpC,0BAA0B,EAAC,kBAAM;QACjC,yBAAyB,EAAC,kBAAM;QAChC,wBAAwB,EAAC,kBAAM;QAC/B,qBAAqB,EAAC,kBAAM;QAM5B,sBAAsB,EAAE,WAAW;QACnC,cAAc,EAAC,kBAAkB;Qau2B7B,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,IAAI;QACjB,UAAU,EAAE,MAAM;QAClB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,OAAO;QAEf,wFAAmB;UAClB,gBAAgB,EAAE,OAAiC;QAGpD,6EAAQ;UACP,KAAK,EAAE,KAAK;;AC/4BlB,UAAW;EdyGV,kBAAkB,EAAE,kCAA8B;EAC/C,eAAe,EAAE,kCAA8B;EAC9C,cAAc,EAAE,kCAA8B;EAC7C,aAAa,EAAE,kCAA8B;EAC1C,UAAU,EAAE,kCAA8B;EA5GlD,qBAAqB,EcCE,GAAG;EdAvB,kBAAkB,EcAE,GAAG;EdClB,aAAa,EcDE,GAAG;EAE1B,SAAS,EAAE,GAAG;EACd,gBAAgB,EAAE,KAAK;EACvB,OAAO,EAAE,IAAI;EACb,UAAU,EAAE,kCAAgC;EAE5C,qBAAW;IACV,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,IAAI;IACpB,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,UAAU;EAKrB,iCAAW;IdlBZ,qBAAqB,EcmBI,CAAC;IdlBvB,kBAAkB,EckBI,CAAC;IdjBlB,aAAa,EciBI,CAAC;IAExB,WAAW,EAAE,IAAI;IACjB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,IAAI;IAEtB,2CAAY;MACX,WAAW,EAAE,IAAI;MACjB,KAAK,EAAE,KAAK;MACZ,gBAAgB,EAAE,IAAI;;AC9B1B,QAAS;EACR,KAAK,EAAE,KAAK;EAEZ,MAAM,EAAE,IAAI;EACZ,OAAO,EAAE,IAAI;EfHb,qBAAqB,EeIE,IAAI;EfHxB,kBAAkB,EeGE,IAAI;EfFnB,aAAa,EeEE,IAAI;EAC3B,gBAAgB,EAAE,mBAAmB;EAErC,eAAO;IACN,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,GAAG;IAEnB,kBAAG;MACF,OAAO,EAAE,YAAY;IAGtB,sBAAO;MACN,KAAK,EAAE,KAAK;MfQd,WAAW,EAAE,gBAAgB;MAT7B,6BAA6B,EAAC,kBAAM;MAEpC,0BAA0B,EAAC,kBAAM;MACjC,yBAAyB,EAAC,kBAAM;MAChC,wBAAwB,EAAC,kBAAM;MAC/B,qBAAqB,EAAC,kBAAM;MAM5B,sBAAsB,EAAE,WAAW;MACnC,cAAc,EAAC,kBAAkB;EeNjC,qBAAa;IACZ,WAAW,EAAE,GAAG;IAGhB,gCAAW;MACV,WAAW,EAAE,GAAG;MAEhB,mCAAG;QAEF,WAAW,EANG,KAAK;QAOnB,KAAK,EAAE,MAAM;QACb,cAAc,EAAE,GAAG;MAInB,sCAAG;QACF,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,KAAK,EAfQ,KAAK;QAiBlB,UAAU,EAAE,KAAK;QACjB,aAAa,EAAE,GAAG;QAElB,4CAAQ;UAEP,OAAO,EAAE,GAAG;QAGb,2CAAK;UAEJ,cAAc,EAAE,MAAM;UACtB,oDAAW;YAEV,YAAY,EAAE,GAAG;YACjB,aAAa,EAAE,GAAG;UAEnB,+CAAM;YACL,KAAK,EAAE,MAAM;MAKhB,sCAAG;QACF,WAAW,EAxCE,KAAK;QA0ClB,cAAc,EAAE,GAAG;;AAYpB,2CAAG;EACF,SAAS,EAAE,GAAG;AAEf,2CAAG;EACF,SAAS,EAAE,GAAG;EAMZ,4DAAW;IACV,SAAS,EAAE,GAAG;;AAoBlB,yCAAG;EACF,SAAS,EAAE,IAAI;AAEhB,yCAAG;EACF,SAAS,EAAE,GAAG;EAMZ,0DAAW;IACV,SAAS,EAAE,GAAG;;AAgBrB,oBAAS;EACR,WAAW,EAAE,GAAG;EAId,+CAAG;IACF,SAAS,EAAE,IAAI;EAEhB,+CAAG;IACF,SAAS,EAAE,GAAG;IAMZ,gEAAW;MACV,SAAS,EAAE,GAAG;;ACjItB,IAAK;EACJ,WAAW,EAAE,eAAe;EAC5B,MAAM,EAAE,CAAC;EACT,OAAO,EAAE,CAAC;;AAGX,UAAW;EACV,OAAO,EAAE,IAAI;;AAGd,KAAM;EACL,WAAW,EAAE,eAAe;;AAG7B,QAAS;EACR,WAAW,EAAE,eAAe;;;;;;;;;;;;;;;;;ACvB7B,yCAA0C;EACzC,IAAK;IACJ,WAAW,EAAE,QAAQ;;EAEtB,UAAW;IACV,OAAO,EAAE,QAAQ;AAInB,yCAA0C;EACzC,IAAK;IACJ,WAAW,EAAE,MAAM;;EAEpB,UAAW;IACV,OAAO,EAAE,MAAM;AAIjB,0CAA2C;EAC1C,IAAK;IACJ,WAAW,EAAE,YAAY;;EAE1B,UAAW;IACV,OAAO,EAAE,YAAY", -"sources": ["../scss/core/reset.scss","../scss/core/fonts.scss","../scss/core/clipperz-font/dejavu.scss","../scss/core/mixin.scss","../scss/core/overlay.scss","../scss/core/layout.scss","../scss/core/behavior.scss","../scss/core/parameters.scss","../scss/core/flex.scss","../scss/core/palette.scss","../scss/core/tagEditor.scss","../scss/style/loadingPage.scss","../scss/style/loginPage.scss","../scss/style/selectionPanel.scss","../scss/style/settingsPanel.scss","../scss/style/accountStatus.scss","../scss/style/card.scss","../scss/style/dialogBox.scss","../scss/style/help.scss","../scss/clipperz.scss","../scss/core/sizes.scss"], +"mappings": "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", +"sources": ["file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/reset.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/fonts.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/clipperz-font/dejavu.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/mixin.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/overlay.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/layout.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/behavior.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/parameters.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/flex.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/palette.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/tagEditor.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/loadingPage.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/loginPage.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/selectionPanel.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/settingsPanel.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/accountStatus.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/card.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/dialogBox.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/style/help.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/clipperz.scss","file:///home/dario/clipperz/codice/bitbucket-dario/frontend/delta/scss/core/sizes.scss"], "names": [], "file": "clipperz.css" -} +} \ No newline at end of file diff --git a/frontend/delta/fonts/IcoMoon/Clipperz Icon font.json b/frontend/delta/fonts/IcoMoon/Clipperz Icon font.json index aa97ea2..b9c5759 100755 --- a/frontend/delta/fonts/IcoMoon/Clipperz Icon font.json +++ b/frontend/delta/fonts/IcoMoon/Clipperz Icon font.json @@ -59,6 +59,31 @@ "setId": 0, "iconIdx": 4 }, + { + "icon": { + "paths": [ + "M254.003 1024c-68.403 0-132.454-28.979-178.739-75.315-89.6-89.6-114.637-246.067 11.008-371.712 73.677-73.574 368.589-368.486 515.789-515.686 52.275-52.275 118.733-72.448 182.426-55.347 62.515 16.691 113.818 67.942 130.56 130.509 17.050 63.693-3.174 130.202-55.398 182.426l-493.158 493.21c-28.16 28.16-59.955 44.851-91.955 48.179-31.642 3.328-61.85-6.861-83.046-28.006-38.4-38.349-43.827-110.541 19.968-174.285l346.368-346.47c14.234-14.182 37.325-14.182 51.558 0 14.234 14.234 14.234 37.325 0 51.558l-346.419 346.419c-29.952 29.952-32.717 58.573-19.968 71.322 5.581 5.53 14.080 8.090 23.859 7.066 15.002-1.587 32.102-11.315 48.077-27.29l493.158-493.158c33.843-33.843 46.797-73.626 36.506-112.077-10.138-37.837-41.165-68.864-79.002-79.002-38.451-10.291-78.234 2.714-112.077 36.506-147.149 147.2-442.061 442.112-515.686 515.686-96.051 96.051-73.062 206.592-11.059 268.646 62.054 62.003 172.595 85.043 268.698-11.059l515.738-515.686c14.182-14.234 37.325-14.234 51.507 0 14.234 14.234 14.234 37.325 0 51.507l-515.738 515.738c-60.774 60.826-128.768 86.323-192.973 86.323z" + ], + "tags": [ + "paperclip", + "attachment" + ], + "grid": 20, + "attrs": [] + }, + "attrs": [], + "properties": { + "id": 8, + "order": 41, + "prevSize": 24, + "code": 59392, + "name": "paperclip", + "ligatures": "attachment" + }, + "setIdx": 8, + "setId": 0, + "iconIdx": 8 + }, { "icon": { "paths": [ @@ -304,6 +329,206 @@ "setId": 8, "iconIdx": 64 }, + { + "icon": { + "paths": [ + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "file-empty", + "file", + "document", + "paper", + "page", + "new", + "empty", + "blank" + ], + "defaultCode": 57485, + "grid": 16 + }, + "attrs": [], + "properties": { + "order": 39, + "id": 1598, + "prevSize": 32, + "code": 59684, + "ligatures": "other file", + "name": "file-empty" + }, + "setIdx": 3, + "setId": 7, + "iconIdx": 36 + }, + { + "icon": { + "paths": [ + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z", + "M736 832h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", + "M736 704h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z", + "M736 576h-448c-17.672 0-32-14.326-32-32s14.328-32 32-32h448c17.674 0 32 14.326 32 32s-14.326 32-32 32z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "file-text", + "file", + "document", + "list", + "paper", + "page" + ], + "defaultCode": 57478, + "grid": 16 + }, + "attrs": [], + "properties": { + "id": 193, + "order": 36, + "prevSize": 32, + "code": 59686, + "ligatures": "text file", + "name": "file-text2" + }, + "setIdx": 3, + "setId": 7, + "iconIdx": 38 + }, + { + "icon": { + "paths": [ + "M832 896h-640v-128l192-320 263 320 185-128v256z", + "M832 480c0 53.020-42.98 96-96 96-53.022 0-96-42.98-96-96s42.978-96 96-96c53.020 0 96 42.98 96 96z", + "M917.806 229.076c-22.212-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.888 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.984 17.78 50.678 41.878 81.374 72.572zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.326 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "file-picture", + "file", + "document", + "file-image" + ], + "defaultCode": 59823, + "grid": 16 + }, + "attrs": [], + "properties": { + "order": 38, + "id": 1603, + "prevSize": 32, + "code": 59687, + "ligatures": "image file", + "name": "file-picture" + }, + "setIdx": 3, + "setId": 7, + "iconIdx": 39 + }, + { + "icon": { + "paths": [ + "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z", + "M756.288 391.252c-7.414-6.080-17.164-8.514-26.562-6.632l-320 64c-14.958 2.994-25.726 16.126-25.726 31.38v236.876c-18.832-8.174-40.678-12.876-64-12.876-70.692 0-128 42.98-128 96s57.308 96 128 96 128-42.98 128-96v-229.766l256-51.202v133.842c-18.832-8.174-40.678-12.876-64-12.876-70.692 0-128 42.98-128 96s57.308 96 128 96 128-42.98 128-96v-319.998c0-9.586-4.298-18.668-11.712-24.748z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "file-music", + "file", + "document", + "file-song", + "file-audio" + ], + "defaultCode": 59825, + "grid": 16 + }, + "attrs": [], + "properties": { + "order": 35, + "id": 1604, + "prevSize": 32, + "code": 59688, + "ligatures": "audio file", + "name": "file-music" + }, + "setIdx": 3, + "setId": 7, + "iconIdx": 40 + }, + { + "icon": { + "paths": [ + "M917.806 229.076c-22.208-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.594-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.882 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0 0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.98 17.78 50.678 41.878 81.374 72.572v0 0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.32 32 32 32h224v624z", + "M256 512h320v320h-320v-320z", + "M576 640l192-128v320l-192-128z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "file-video", + "file", + "document", + "file-camera" + ], + "defaultCode": 59829, + "grid": 16 + }, + "attrs": [], + "properties": { + "order": 37, + "id": 1611, + "prevSize": 32, + "code": 59690, + "ligatures": "video file", + "name": "file-video" + }, + "setIdx": 3, + "setId": 7, + "iconIdx": 42 + }, + { + "icon": { + "paths": [ + "M917.806 229.076c-22.208-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.884 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0 0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.98 17.78 50.678 41.878 81.374 72.572v0 0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.322 32 32 32h224v624z", + "M256 64h128v64h-128v-64z", + "M384 128h128v64h-128v-64z", + "M256 192h128v64h-128v-64z", + "M384 256h128v64h-128v-64z", + "M256 320h128v64h-128v-64z", + "M384 384h128v64h-128v-64z", + "M256 448h128v64h-128v-64z", + "M384 512h128v64h-128v-64z", + "M256 848c0 26.4 21.6 48 48 48h160c26.4 0 48-21.6 48-48v-160c0-26.4-21.6-48-48-48h-80v-64h-128v272zM448 768v64h-128v-64h128z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "file-zip", + "file", + "document", + "file-compressed", + "file-type", + "file-format" + ], + "defaultCode": 58598, + "grid": 16 + }, + "attrs": [], + "properties": { + "id": 1380, + "order": 40, + "prevSize": 32, + "code": 59691, + "ligatures": "archive file", + "name": "file-zip" + }, + "setIdx": 3, + "setId": 7, + "iconIdx": 43 + }, { "icon": { "paths": [ @@ -425,6 +650,35 @@ "setId": 7, "iconIdx": 310 }, + { + "icon": { + "paths": [ + "M842.012 589.48c-13.648-13.446-43.914-20.566-89.972-21.172-31.178-0.344-68.702 2.402-108.17 7.928-17.674-10.198-35.892-21.294-50.188-34.658-38.462-35.916-70.568-85.772-90.576-140.594 1.304-5.12 2.414-9.62 3.448-14.212 0 0 21.666-123.060 15.932-164.666-0.792-5.706-1.276-7.362-2.808-11.796l-1.882-4.834c-5.894-13.592-17.448-27.994-35.564-27.208l-10.916-0.344c-20.202 0-36.664 10.332-40.986 25.774-13.138 48.434 0.418 120.892 24.98 214.738l-6.288 15.286c-17.588 42.876-39.63 86.060-59.078 124.158l-2.528 4.954c-20.46 40.040-39.026 74.028-55.856 102.822l-17.376 9.188c-1.264 0.668-31.044 16.418-38.028 20.644-59.256 35.38-98.524 75.542-105.038 107.416-2.072 10.17-0.53 23.186 10.014 29.212l16.806 8.458c7.292 3.652 14.978 5.502 22.854 5.502 42.206 0 91.202-52.572 158.698-170.366 77.93-25.37 166.652-46.458 244.412-58.090 59.258 33.368 132.142 56.544 178.142 56.544 8.168 0 15.212-0.78 20.932-2.294 8.822-2.336 16.258-7.368 20.792-14.194 8.926-13.432 10.734-31.932 8.312-50.876-0.72-5.622-5.21-12.574-10.068-17.32zM211.646 814.048c7.698-21.042 38.16-62.644 83.206-99.556 2.832-2.296 9.808-8.832 16.194-14.902-47.104 75.124-78.648 105.066-99.4 114.458zM478.434 199.686c13.566 0 21.284 34.194 21.924 66.254s-6.858 54.56-16.158 71.208c-7.702-24.648-11.426-63.5-11.426-88.904 0 0-0.566-48.558 5.66-48.558v0zM398.852 637.494c9.45-16.916 19.282-34.756 29.33-53.678 24.492-46.316 39.958-82.556 51.478-112.346 22.91 41.684 51.444 77.12 84.984 105.512 4.186 3.542 8.62 7.102 13.276 10.65-68.21 13.496-127.164 29.91-179.068 49.862v0zM828.902 633.652c-4.152 2.598-16.052 4.1-23.708 4.1-24.708 0-55.272-11.294-98.126-29.666 16.468-1.218 31.562-1.838 45.102-1.838 24.782 0 32.12-0.108 56.35 6.072 24.228 6.18 24.538 18.734 20.382 21.332v0z", + "M917.806 229.076c-22.21-30.292-53.174-65.7-87.178-99.704s-69.412-64.964-99.704-87.178c-51.574-37.82-76.592-42.194-90.924-42.194h-496c-44.112 0-80 35.888-80 80v864c0 44.112 35.886 80 80 80h736c44.112 0 80-35.888 80-80v-624c0-14.332-4.372-39.35-42.194-90.924v0zM785.374 174.626c30.7 30.7 54.8 58.398 72.58 81.374h-153.954v-153.946c22.982 17.78 50.678 41.878 81.374 72.572v0zM896 944c0 8.672-7.328 16-16 16h-736c-8.672 0-16-7.328-16-16v-864c0-8.672 7.328-16 16-16 0 0 495.956-0.002 496 0v224c0 17.672 14.324 32 32 32h224v624z" + ], + "attrs": [], + "isMulticolor": false, + "tags": [ + "file-pdf", + "file", + "file-format" + ], + "defaultCode": 58594, + "grid": 16 + }, + "attrs": [], + "properties": { + "id": 1376, + "order": 34, + "prevSize": 32, + "code": 60122, + "ligatures": "pdf file", + "name": "file-pdf" + }, + "setIdx": 3, + "setId": 7, + "iconIdx": 474 + }, { "icon": { "paths": [ diff --git a/frontend/delta/js/Clipperz/Async.js b/frontend/delta/js/Clipperz/Async.js index eb50f0e..ecb791b 100644 --- a/frontend/delta/js/Clipperz/Async.js +++ b/frontend/delta/js/Clipperz/Async.js @@ -703,6 +703,91 @@ MochiKit.Base.update(Clipperz.Async, { 'clearResult': function () {}, + //========================================================================= + + 'doXHR': function (url, opts) { + // ALMOST COPYCAT OF MochiKit version + /* + Work around a Firefox bug by dealing with XHR during + the next event loop iteration. Maybe it's this one: + https://bugzilla.mozilla.org/show_bug.cgi?id=249843 + */ + return MochiKit.Async.callLater(0, Clipperz.Async._doXHR, url, opts); + }, + + _doXHR: function (url, opts) { + // ALMOST COPYCAT OF MochiKit version + var m = MochiKit.Base; + opts = m.update({ + method: 'GET', + sendContent: '' + /* + queryString: undefined, + username: undefined, + password: undefined, + headers: undefined, + mimeType: undefined, + responseType: undefined, + withCredentials: undefined + */ + }, opts); + + var self = MochiKit.Async; + var req = self.getXMLHttpRequest(); + + // Extra options not handled by MochiKit + if (req.upload && opts.uploadProgress) { + req.upload.onprogress = opts.uploadProgress; + } + if (opts.downloadProgress) { + req.onprogress = opts.downloadProgress; + } + + if (opts.queryString) { + var qs = m.queryString(opts.queryString); + if (qs) { + url += "?" + qs; + } + } + + // Safari will send undefined:undefined, so we have to check. + // We can't use apply, since the function is native. + if ('username' in opts) { + req.open(opts.method, url, true, opts.username, opts.password); + } else { + req.open(opts.method, url, true); + } + + if (req.overrideMimeType && opts.mimeType) { + req.overrideMimeType(opts.mimeType); + } + + req.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + if (opts.headers) { + var headers = opts.headers; + if (!m.isArrayLike(headers)) { + headers = m.items(headers); + } + + for (var i = 0; i < headers.length; i++) { + var header = headers[i]; + var name = header[0]; + var value = header[1]; + req.setRequestHeader(name, value); + } + } + + if ("responseType" in opts && "responseType" in req) { + req.responseType = opts.responseType; + } + + if (opts.withCredentials) { + req.withCredentials = 'true'; + } + + return self.sendXMLHttpRequest(req, opts.sendContent); + }, + //========================================================================= __syntaxFix__: "syntax fix" }); diff --git a/frontend/delta/js/Clipperz/Crypto/AES_2.js b/frontend/delta/js/Clipperz/Crypto/AES_2.js index c361af2..760b8cb 100644 --- a/frontend/delta/js/Clipperz/Crypto/AES_2.js +++ b/frontend/delta/js/Clipperz/Crypto/AES_2.js @@ -36,6 +36,44 @@ if (typeof(Clipperz.Crypto.AES_2) == 'undefined') { Clipperz.Crypto.AES_2 = {}; //############################################################################# +Clipperz.Crypto.AES_2.EncryptionStreamingExecutionContext = function(args) { + args = args || {}; + + this._key = args.key || Clipperz.Base.exception.raise('MandatoryParameter'); + this._nonce = args.nonce || Clipperz.Base.exception.raise('MandatoryParameter'); + + return this; +} + +Clipperz.Crypto.AES_2.EncryptionStreamingExecutionContext.prototype = MochiKit.Base.update(null, { + key: function () { + return this._key; + }, + + nonce: function () { + return this._nonce; + }, + + deferredProcessBlock: function (someData) { + var deferredResult + var executionContext; + + executionContext = new Clipperz.Crypto.AES_2.DeferredExecutionContext({key:this.key(), message:someData, nonce:this.nonce()}); + + deferredResult = new Clipperz.Async.Deferred("AES.deferredDecrypt", {trace:false}); + deferredResult.addCallback(Clipperz.Crypto.AES_2.deferredEncryptBlocks); + deferredResult.addCallback(MochiKit.Base.bind(function (anExecutionContext) { + this._nonce = new Clipperz.ByteArray(anExecutionContext.nonceArray()); + return anExecutionContext.result(); + }, this)); + deferredResult.callback(executionContext); + + return deferredResult; + }, +}); + +//############################################################################# + Clipperz.Crypto.AES_2.DeferredExecutionContext = function(args) { args = args || {}; @@ -110,8 +148,9 @@ Clipperz.Crypto.AES_2.DeferredExecutionContext.prototype = MochiKit.Base.update( //var originalChunks = this._elaborationChunks; if (anElapsedTime > 0) { this._elaborationChunks = Math.round(this._elaborationChunks * ((anElapsedTime + 1000)/(anElapsedTime * 2))); +//console.log("tuneExecutionParameter", this._elaborationChunks); } -//Clipperz.log("tuneExecutionParameters - elapsedTime: " + anElapsedTime + /*originalChunks,*/ " chunks # " + this._elaborationChunks + " [" + this._executionStep + " / " + this._messageLength + "]"); +//console.log("tuneExecutionParameters - elapsedTime: " + anElapsedTime + /*originalChunks,*/ " chunks # " + this._elaborationChunks + " [" + this._executionStep + " / " + this._messageLength + "]"); }, 'pause': function(aValue) { @@ -718,7 +757,8 @@ MochiKit.Base.update(Clipperz.Crypto.AES_2, { self = Clipperz.Crypto.AES_2; startTime = new Date(); blockSize = 128/8; - messageLength = anExecutionContext.messageArray().length; +// messageLength = anExecutionContext.messageArray().length; + messageLength = anExecutionContext.messageLength(); nonce = anExecutionContext.nonceArray(); result = anExecutionContext.resultArray(); diff --git a/frontend/delta/js/Clipperz/PM/Connection.js b/frontend/delta/js/Clipperz/PM/Connection.js index 9dade4a..e8384fa 100644 --- a/frontend/delta/js/Clipperz/PM/Connection.js +++ b/frontend/delta/js/Clipperz/PM/Connection.js @@ -21,6 +21,8 @@ refer to http://www.clipperz.com. */ +"use strict"; + if (typeof(Clipperz) == 'undefined') { Clipperz = {}; } if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; } @@ -126,6 +128,16 @@ Clipperz.PM.Connection.prototype = MochiKit.Base.update(null, { throw Clipperz.Base.exception.AbstractMethod; }, + //------------------------------------------------------------------------- + + 'uploadAttachment': function(someArguments, aProgressCallback) { + throw Clipperz.Base.exception.AbstractMethod; + }, + + 'downloadAttachment': function(someArguments, aProgressCallback) { + throw Clipperz.Base.exception.AbstractMethod; + }, + //========================================================================= 'sharedSecret': function () { @@ -433,7 +445,7 @@ Clipperz.PM.Connection.SRP['1.0'].prototype = MochiKit.Base.update(new Clipperz. //========================================================================= - 'message': function(aMessageName, someParameters) { + 'message': function(aMessageName, someParameters, someOptionalParameters) { var args; var parameters; @@ -449,16 +461,16 @@ Clipperz.PM.Connection.SRP['1.0'].prototype = MochiKit.Base.update(new Clipperz. parameters: parameters } - return this.sendMessage(args); + return this.sendMessage(args, someOptionalParameters); }, //------------------------------------------------------------------------- - 'sendMessage': function(someArguments) { + 'sendMessage': function(someArguments, someOptionalParameters) { var deferredResult; - + deferredResult = new Clipperz.Async.Deferred("Connection.sendMessage", {trace:false}); - deferredResult.addMethod(this.proxy(), 'message', someArguments); + deferredResult.addMethod(this.proxy(), 'message', someArguments, someOptionalParameters); deferredResult.addCallback(MochiKit.Base.bind(function(res) { if (typeof(res['lock']) != 'undefined') { this.setServerLockValue(res['lock']); @@ -498,6 +510,30 @@ Clipperz.log("<<< Connection.messageExceptionHandler") //========================================================================= + // 'uploadAttachment': function(someArguments, aProgressCallback) { + // return this.message('uploadAttachment', someArguments, {'uploadProgressCallback': aProgressCallback}); + // }, + + 'uploadAttachment': function(someArguments, aProgressCallback) { + return Clipperz.Async.callbacks("Connction.uploadAttachment", [ + MochiKit.Base.method(this, 'message', 'knock', {'requestType':'MESSAGE'}), + MochiKit.Base.method(this.proxy(), 'uploadAttachment', someArguments, aProgressCallback, this.sharedSecret()), + ], {trace:false}); + + // return this.proxy().uploadAttachment(someArguments, aProgressCallback, this.sharedSecret()); + }, + + 'downloadAttachment': function(someArguments, aProgressCallback) { + return Clipperz.Async.callbacks("Connction.uploadAttachment", [ + MochiKit.Base.method(this, 'message', 'knock', {'requestType':'MESSAGE'}), + MochiKit.Base.method(this.proxy(), 'downloadAttachment', someArguments, aProgressCallback, this.sharedSecret()), + ], {trace:false}); + + // return this.proxy().downloadAttachment(someArguments, aProgressCallback, this.sharedSecret()); + }, + + //========================================================================= + 'reestablishConnection': function(anOriginalMessageArguments) { var deferredResult; diff --git a/frontend/delta/js/Clipperz/PM/Crypto.js b/frontend/delta/js/Clipperz/PM/Crypto.js index a61f9a6..b18842d 100644 --- a/frontend/delta/js/Clipperz/PM/Crypto.js +++ b/frontend/delta/js/Clipperz/PM/Crypto.js @@ -434,7 +434,7 @@ MochiKit.Base.update(Clipperz.PM.Crypto, { deferredResult.addErrback(function(anError) { Clipperz.logError("Error while decrypting data [4]"); throw Clipperz.Crypto.Base.exception.CorruptedMessage; - }) + }); } else { deferredResult.addCallback(function() { return null; diff --git a/frontend/delta/js/Clipperz/PM/DataModel/Attachment.js b/frontend/delta/js/Clipperz/PM/DataModel/Attachment.js new file mode 100644 index 0000000..12c379f --- /dev/null +++ b/frontend/delta/js/Clipperz/PM/DataModel/Attachment.js @@ -0,0 +1,374 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +Clipperz.Base.module('Clipperz.PM.DataModel'); + +Clipperz.PM.DataModel.Attachment = function(args) { + args = args || {}; + + Clipperz.PM.DataModel.Attachment.superclass.constructor.apply(this, arguments); + + this._reference = args.reference + || Clipperz.PM.Crypto.randomKey(); + this._record = args.record + || Clipperz.Base.exception.raise('MandatoryParameter'); + +// this._retrieveIndexDataFunction = args.retrieveIndexDataFunction +// || this.record().retrieveAttachmentIndexDataFunction() +// || Clipperz.Base.exception.raise('MandatoryParameter'); +// this._setIndexDataFunction = args.setIndexDataFunction +// || this.record().setAttachmentIndexDataFunction() +// || Clipperz.Base.exception.raise('MandatoryParameter'); +// this._removeIndexDataFunction = args.removeIndexDataFunction +// || this.record().removeAttachmentIndexDataFunction() +// || Clipperz.Base.exception.raise('MandatoryParameter'); + + // this.setFile(args.file); + + this._transientState = null; + + this._isBrandNew = MochiKit.Base.isUndefinedOrNull(args.reference); + + this.record().bindAttachment(this); + + if (this._isBrandNew) { + this.setKey(Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(256/8)); + this.setNonce(Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(128/8)); + } + + return this; +} + +Clipperz.Base.extend(Clipperz.PM.DataModel.Attachment, Object, { + + 'toString': function() { + return "Attachment (" + this.reference() + ")"; + }, + + //========================================================================= + + 'reference': function () { + return this._reference; + }, + + //------------------------------------------------------------------------- + + 'record': function () { + return this._record; + }, + + //========================================================================= + + 'isBrandNew': function () { + return this._isBrandNew; + }, + + //========================================================================= + + 'removeIndexDataFunction': function () { + return this._removeIndexDataFunction; + }, + + 'remove': function () { + return Clipperz.Async.callbacks("DirectLogin.remove", [ + MochiKit.Base.partial(this.removeIndexDataFunction(), this.reference()), + MochiKit.Base.method(this.record(), 'removeAttachment', this) + ], {trace:false}); + }, + + //========================================================================= + + 'file': function () { +// return this.getValue('name'); + return MochiKit.Async.succeed(this._file); + }, + + 'setFile': function (aFile) { + this._file = aFile || null; + + /* These ones will disappear when the application is closed */ + this._name = aFile ? aFile['name'] : null; + this._contentType = aFile ? aFile['type'] : null; + this._size = aFile ? aFile['size'] : null; + + /* These ones will be saved in the Record */ + return Clipperz.Async.callbacks("Attachment.setFile", [ + MochiKit.Base.method(this, 'setValue', 'name', aFile['name']), + MochiKit.Base.method(this, 'setValue', 'contentType', aFile['type']), + MochiKit.Base.method(this, 'setValue', 'size', aFile['size']), + + MochiKit.Base.partial(MochiKit.Async.succeed, this), + ], {trace:false}); + }, + + //------------------------------------------------------------------------- + + 'name': function () { + return this.getValue('name'); + }, + + 'contentType': function () { + return this.getValue('contentType'); + }, + + 'size': function () { + return this.getValue('size'); + }, + + 'metadata': function () { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("Attachment.metadata [collect results]", {trace:false}); + deferredResult.collectResults({ + 'name': MochiKit.Base.method(this, 'name'), + 'type': MochiKit.Base.method(this, 'contentType'), + 'size': MochiKit.Base.method(this, 'size'), + }, {trace:false}); + deferredResult.callback(); + + return deferredResult; + +// return { +// 'name': this._name, +// 'type': this._type, +// 'size': this._size, +// } + }, + + //------------------------------------------------------------------------- + + 'key': function () { + var byteArray; + + byteArray = new Clipperz.ByteArray(); + + return Clipperz.Async.callbacks("Attachment.key", [ + MochiKit.Base.method(this, 'getValue', 'key'), + MochiKit.Base.method(byteArray, 'appendBase64String'), + function(aByteArray) { return new Uint8Array(aByteArray.arrayValues()); } + ], {trace:false}); + }, + + // 'key': function () { + // var result; + + // result = new Clipperz.ByteArray(); + + // return Clipperz.Async.callbacks("Attachment.key", [ + // MochiKit.Base.method(this, 'getValue', 'key'), + // MochiKit.Base.method(result, 'appendBase64String'), + // function(aByteArray) { return new Clipperz.Crypto.AES.Key({key: aByteArray}); } + // ], {trace:false}); + // }, + + 'nonce': function () { + var byteArray; + + byteArray = new Clipperz.ByteArray(); + + return Clipperz.Async.callbacks("Attachment.nonce", [ + MochiKit.Base.method(this, 'getValue', 'nonce'), + MochiKit.Base.method(byteArray, 'appendBase64String'), + function(aByteArray) { return new Uint8Array(aByteArray.arrayValues()); } + ], {trace:false}); + }, + + // 'nonce': function () { + // var result; + + // result = new Clipperz.ByteArray(); + + // return Clipperz.Async.callbacks("Attachment.nonce", [ + // MochiKit.Base.method(this, 'getValue', 'nonce'), + // MochiKit.Base.method(result, 'appendBase64String') + // ], {trace:false}); + // }, + + 'setKey': function (aByteArray) { + this.setValue('key', aByteArray.toBase64String()); + }, + + // 'setKey': function (aKey) { + // var byteArray = aKey.key(); + // var serializedData = byteArray.toBase64String(); + + // this.setValue('key', serializedData); + // }, + + 'setNonce': function (aByteArray) { + this.setValue('nonce', aByteArray.toBase64String()); + }, + + //========================================================================= + + 'serializedData': function () { + return Clipperz.Async.collectResults("Attachment.serializedData", { + 'name': MochiKit.Base.method(this, 'name'), + 'contentType': MochiKit.Base.method(this, 'contentType'), + 'size': MochiKit.Base.method(this, 'size'), + }, {trace:false})() + }, + + //========================================================================= + + 'hasPendingChanges': function () { + var result; +// var deferredResult; + + result = false; + result = result || this.isBrandNew(); + + return MochiKit.Async.succeed(result); + }, + + //------------------------------------------------------------------------- + + 'revertChanges': function () { + return MochiKit.Async.succeed(); + }, + + + //========================================================================= + + 'transientState': function () { + if (this._transientState == null) { + this._transientState = {} + } + + return this._transientState; + }, + + 'resetTransientState': function (isCommitting) { + this._transientState = null; + }, + + 'commitTransientState': function (isCommitting) { + this._transientState = null; + this._isBrandNew = false; + }, + + //========================================================================= + + 'actualKey': function (aValueKey) { + var actualKey; + + actualKey = 'attachments' + '.' + this.reference(); + if (aValueKey != '') { + actualKey = actualKey + '.' + aValueKey; + } + + return actualKey; + }, + + //------------------------------------------------------------------------- + + 'getValue': function (aValueKey) { + return this.record().getValue(this.actualKey(aValueKey)); + }, + + 'setValue': function (aValueKey, aValue) { + return Clipperz.Async.callbacks("Attachment.setValue", [ + // MochiKit.Base.method(this, 'getValue', ''), + // MochiKit.Base.bind(function (aValue) { + // if (this.originalConfiguration() == null) { + // this.setOriginalConfiguration(aValue); + // } + // }, this), + MochiKit.Base.method(this.record(), 'setValue', this.actualKey(aValueKey), aValue) + ], {trace:false}); + }, + + 'removeValue': function (aValueKey) { + return this.record().removeValue(this.actualKey(aValueKey)); + }, + + //========================================================================= + + 'content': function () { +// return this.serializedData(); +// return MochiKit.Async.succeed(this); + + var deferredResult; + var fieldValues; + + fieldValues = {}; + deferredResult = new Clipperz.Async.Deferred("Attachment.content", {trace:false}); + deferredResult.addMethod(this, 'reference'); + deferredResult.addCallback(function (aValue) { fieldValues['reference'] = aValue; }); + deferredResult.callback(); + + return deferredResult; + }, + + //========================================================================= + + 'deleteAllCleanTextData': function () { + this._name = null; + this._contentType = null; + this._size = null; + + this.resetTransientState(); + }, + + //------------------------------------------------------------------------- + + 'hasAnyCleanTextData': function () { + var result; + + result = false; + + result = result || (this._name != null); + result = result || (this._contentType != null); + result = result || (this._size != null); + result = result || (MochiKit.Base.keys(this.transientState()).length != 0); + + return MochiKit.Async.succeed(result); + }, + + //========================================================================= + __syntaxFix__: "syntax fix" +}); + +Clipperz.PM.DataModel.Attachment.MAX_ATTACHMENT_SIZE = 50*1024*1024; + +Clipperz.PM.DataModel.Attachment.contentTypeIcon = function (aContentType) { + var result; + + result = 'other file'; + + if (aContentType == "application/pdf") { + result = 'pdf file'; + } else if (aContentType.indexOf('image/') == 0) { + result = 'image file'; + } else if (aContentType.indexOf('model/') == 0) { + result = 'other file'; + } else if (aContentType.indexOf('audio/') == 0) { + result = 'audio file'; + } else if (aContentType.indexOf('text/') == 0) { + result = 'text file'; + } else if (aContentType.indexOf('video/') == 0) { + result = 'video file'; + } + + return result; +}; diff --git a/frontend/delta/js/Clipperz/PM/DataModel/DirectLogin.js b/frontend/delta/js/Clipperz/PM/DataModel/DirectLogin.js index d4430a2..51044fb 100644 --- a/frontend/delta/js/Clipperz/PM/DataModel/DirectLogin.js +++ b/frontend/delta/js/Clipperz/PM/DataModel/DirectLogin.js @@ -55,7 +55,7 @@ Clipperz.PM.DataModel.DirectLogin = function(args) { this._isBrandNew = MochiKit.Base.isUndefinedOrNull(args.reference); - this.record().addDirectLogin(this); + this.record().bindDirectLogin(this); return this; } @@ -1018,7 +1018,7 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.DirectLogin, Object, { 'removeValue': function (aValueKey) { // return this.record().removeValue(this.actualKey(aValueKey)); - return Clipperz.Async.callbacks("DirectLogin.setValue", [ + return Clipperz.Async.callbacks("DirectLogin.removeValue", [ MochiKit.Base.method(this, 'originalConfiguration'), Clipperz.Async.deferredIf("originalConfiguration has been set", [ ], [ diff --git a/frontend/delta/js/Clipperz/PM/DataModel/EncryptedRemoteObject.js b/frontend/delta/js/Clipperz/PM/DataModel/EncryptedRemoteObject.js index 71b6fa4..48c1628 100644 --- a/frontend/delta/js/Clipperz/PM/DataModel/EncryptedRemoteObject.js +++ b/frontend/delta/js/Clipperz/PM/DataModel/EncryptedRemoteObject.js @@ -192,7 +192,7 @@ Clipperz.PM.DataModel.EncryptedRemoteObject.prototype = MochiKit.Base.update(nul innerDeferredResult = MochiKit.Async.succeed(this._remoteData); } else { innerDeferredResult = Clipperz.Async.callbacks("EncryptedRemoteObjects.getRemoteData ", [ - MochiKit.Base.partial(this.retrieveRemoteDataFunction(), this.reference()), + MochiKit.Base.partial(this.retrieveRemoteDataFunction(), this), MochiKit.Base.method(this, 'setRemoteData'), ], {trace:false}); } @@ -542,3 +542,19 @@ Clipperz.PM.DataModel.EncryptedRemoteObject.prototype = MochiKit.Base.update(nul //------------------------------------------------------------------------- __syntaxFix__: "syntax fix" }); + +/* +Clipperz.PM.DataModel.EncryptedRemoteObject.emptyObjectWithKey = function (aKey) { + var key = "clipperz"; + var value = new Clipperz.ByteArray(); + var version = Clipperz.PM.Crypto.encryptingFunctions.currentVersion; +// var remoteData = Clipperz.PM.Crypto.encrypt({'key':key, 'value':value, 'version':version}); + var remoteData = Clipperz.PM.Crypto.encryptingFunctions.versions[version].encrypt(key, value); + + return new Clipperz.PM.DataModel.EncryptedRemoteObject({ + 'reference': Clipperz.PM.Crypto.randomKey(), + 'remoteData': remoteData, + 'retrieveKeyFunction': function () { return key; }, + }); +}; +*/ \ No newline at end of file diff --git a/frontend/delta/js/Clipperz/PM/DataModel/Record.js b/frontend/delta/js/Clipperz/PM/DataModel/Record.js index a617096..e68a48a 100644 --- a/frontend/delta/js/Clipperz/PM/DataModel/Record.js +++ b/frontend/delta/js/Clipperz/PM/DataModel/Record.js @@ -41,11 +41,18 @@ Clipperz.PM.DataModel.Record = function(args) { this._retrieveDirectLoginIndexDataFunction = args.retrieveDirectLoginIndexDataFunction || null; this._setDirectLoginIndexDataFunction = args.setDirectLoginIndexDataFunction || null; this._removeDirectLoginIndexDataFunction = args.removeDirectLoginIndexDataFunction || null; - this._createNewDirectLoginFunction = args.createNewDirectLoginFunction || null; + + this._retrieveAttachmentIndexDataFunction = args.retrieveAttachmentIndexDataFunction || null; + this._setAttachmentIndexDataFunction = args.setAttachmentIndexDataFunction || null; + this._removeAttachmentIndexDataFunction = args.removeAttachmentIndexDataFunction || null; + this._createNewAttachmentFunction = args.createNewAttachmentFunction || null; + this._attachmentServerStatus = {}; + this._tags = []; this._directLogins = {}; + this._attachments = {}; this._versions = {}; this._currentRecordVersion = null; @@ -132,6 +139,16 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt return deferredResult; }, + //---------------------------------------------------------------------------- + + setAttachmentServerStatus: function(anObject) { + this._attachmentServerStatus = anObject; + }, + + getAttachmentServerStatus: function() { + return this._attachmentServerStatus; + }, + //============================================================================ /* 'key': function () { @@ -283,6 +300,12 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt return MochiKit.Async.succeed(this._accessDate); }, + //========================================================================= + + attachmentsCount: function() { + return MochiKit.Base.keys(this.attachments()).length; + }, + //========================================================================= 'favicon': function () { @@ -374,6 +397,13 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt deferredResult.addCallback(MochiKit.Base.map, function (aValue) { result['directLogins'].push(aValue); }); deferredResult.addCallback(function () { return result; }); + deferredResult.addMethod(this, 'attachments'); + deferredResult.addCallback(MochiKit.Base.values); + deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.methodcaller('content')); + deferredResult.addCallback(Clipperz.Async.collectAll); + deferredResult.addCallback(MochiKit.Base.map, function (aValue) { result['directLogins'].push(aValue); }); + deferredResult.addCallback(function () { return result; }); + deferredResult.callback(); return deferredResult; @@ -385,7 +415,7 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt return this._directLogins; }, - 'addDirectLogin': function (aDirectLogin) { + 'bindDirectLogin': function (aDirectLogin) { this._directLogins[aDirectLogin.reference()] = aDirectLogin; }, @@ -400,12 +430,13 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt 'saveOriginalDirectLoginStatusToTransientState': function () { if (this.transientState().getValue('directLogins') == null) { // this.transientState().setValue('directLogins', this._directLogins) + this.transientState().setValue('directLogins', {}); MochiKit.Iter.forEach(MochiKit.Base.keys(this._directLogins), MochiKit.Base.bind(function(aKey) { this.transientState().setValue('directLogins' + '.' + aKey, this._directLogins[aKey]) }, this)) } }, - + 'createNewDirectLogin': function () { this.saveOriginalDirectLoginStatusToTransientState(); @@ -453,6 +484,81 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.Record, Clipperz.PM.DataModel.Encrypt return result; }, + //========================================================================= + // TODO: !!!! + 'attachments': function () { + return this._attachments; + }, + + 'bindAttachment': function (anAttachment) { + this._attachments[anAttachment.reference()] = anAttachment; + }, + + 'attachmentWithReference': function (anAttachmentReference) { + return this._attachments[anAttachmentReference]; + }, + + 'createNewAttachmentFunction': function () { + return this._createNewAttachmentFunction; + }, + + 'saveOriginalAttachmentStatusToTransientState': function () { + if (this.transientState().getValue('attachments') == null) { +// console.log("saving attachments to transient state: ts:", this.transientState()); + this.transientState().setValue('attachments', {}); + MochiKit.Iter.forEach(MochiKit.Base.keys(this._attachments), MochiKit.Base.bind(function(aKey) { +// console.log("saving attachment to transient state:", this._attachments[aKey]); + this.transientState().setValue('attachments' + '.' + aKey, this._attachments[aKey]) + }, this)) + } + }, + + 'createNewAttachment': function () { + this.saveOriginalAttachmentStatusToTransientState(); + return this.createNewAttachmentFunction()(this); + }, + + 'removeAttachment': function(anAttachment) { + this.saveOriginalAttachmentStatusToTransientState(); + return Clipperz.Async.callbacks("Record.removeAttachment", [ + MochiKit.Base.method(this, 'removeValue', 'attachments' + '.' + anAttachment.reference()), + MochiKit.Base.bind(function () { + this._removeAttachmentIndexDataFunction(anAttachment.reference()); + delete this._attachments[anAttachment.reference()] + }, this) + ], {trace:false}); + + }, + + 'attachmentReferences': function () { + var result; + + result = Clipperz.Async.callbacks("Record.attachmentReferences", [ + MochiKit.Base.method(this, 'attachments'), + MochiKit.Base.values, + function (someAttachments) { + var result; + var i,c; + + result = []; + c = someAttachments.length; + for (i=0; i SETUP WITH RECORD: DirectLogin Values", aValue); return aValue; }, // TODO: possibly broken implementation of direct login cloning - MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'addDirectLogin')), + MochiKit.Base.partial(MochiKit.Base.map, MochiKit.Base.method(this, 'bindDirectLogin')), //function (aValue) { console.log("-> DirectLogin Values", aValue); return aValue; }, // Clipperz.Async.collectAll, + // TODO: attachments + MochiKit.Base.bind(function () { return this; }, this) ], {trace:false}); }, @@ -1230,7 +1331,8 @@ Clipperz.PM.DataModel.Record.defaultCardInfo = { '_isArchived': MochiKit.Base.methodcaller('isArchived'), '_isBrandNew': MochiKit.Base.methodcaller('isBrandNew'), 'label': MochiKit.Base.methodcaller('label'), - 'favicon': MochiKit.Base.methodcaller('favicon') + 'favicon': MochiKit.Base.methodcaller('favicon'), + 'attachmentsCount': MochiKit.Base.methodcaller('attachmentsCount'), }; Clipperz.PM.DataModel.Record.defaultSearchField = '_searchableContent'; diff --git a/frontend/delta/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js b/frontend/delta/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js index bc5f787..8d42d40 100644 --- a/frontend/delta/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js +++ b/frontend/delta/js/Clipperz/PM/DataModel/User.Header.RecordIndex.js @@ -23,7 +23,7 @@ refer to http://www.clipperz.com. try { if (typeof(Clipperz.PM.DataModel.User) == 'undefined') { throw ""; }} catch (e) { throw "Clipperz.PM.DataModel.User.Header.RecordIndex depends on Clipperz.PM.DataModel.User!"; -} +} if (typeof(Clipperz.PM.DataModel.User.Header) == 'undefined') { Clipperz.PM.DataModel.User.Header = {}; } @@ -49,13 +49,25 @@ Clipperz.PM.DataModel.User.Header.RecordIndex = function(args) { } }); +//console.log("RECORD INDEX args", args); + this._attachmentsData = new Clipperz.PM.DataModel.EncryptedRemoteObject({ + 'name': 'attachmentsData', + 'retrieveKeyFunction': args.retrieveKeyFunction, + 'remoteData': { + 'data': args.attachmentsData['data'], + 'version': args.encryptedDataVersion, + } + }); + this._tagsData = this._lock = new MochiKit.Async.DeferredLock(); this._transientState = null; this._retrieveRecordDetailFunction = args.retrieveRecordDetailFunction || Clipperz.Base.exception.raise('MandatoryParameter'); + this._recordsIndex = args.recordsData['index'] || Clipperz.Base.exception.raise('MandatoryParameter'); this._directLoginsIndex = args.directLoginsData['index'] || Clipperz.Base.exception.raise('MandatoryParameter'); + this._attachmentsIndex = args.attachmentsData['index'] || Clipperz.Base.exception.raise('MandatoryParameter'); this._records = null; @@ -97,6 +109,16 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { //------------------------------------------------------------------------- + 'attachmentsIndex': function () { + return this._attachmentsIndex; + }, + + 'attachmentsData': function () { + return this._attachmentsData; + }, + + //------------------------------------------------------------------------- + 'lock': function () { return this._lock; }, @@ -164,6 +186,28 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { //------------------------------------------------------------------------- + 'getAttachmentIndexData': function (anAttachmentReference) { + // TODO: + return this.attachmentsData().getValue(this.attachmentsIndex()[anAttachmentReference]); + }, + + 'setAttachmentIndexData': function (anAttachmentReference, aKey, aValue) { + // TODO: + return this.attachmentsData().setValue(this.attachmentsIndex()[anAttachmentReference] + '.' + aKey, aValue); + }, + + 'addAttachmentIndexData': function (anAttachmentReference) { + // TODO: + return this.attachmentsData().setValue(this.attachmentsIndex()[anAttachmentReference], {}); + }, + + 'removeAttachmentIndexData': function (anAttachmentReference) { + // TODO: + return this.attachmentsData().removeValue(this.attachmentsIndex()[anAttachmentReference]) + }, + + //------------------------------------------------------------------------- + 'records': function () { var deferredResult; @@ -184,6 +228,9 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { ], 'directLogins': [ MochiKit.Base.method(this.directLoginsData(), 'values') + ], + 'attachments': [ + MochiKit.Base.method(this.attachmentsData(), 'values') ] }) innerDeferredResult.addCallback(MochiKit.Base.bind(function (someData) { @@ -193,6 +240,7 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { recordsInvertedIndex = Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(this.recordsIndex()); directLoginsInvertedIndex = Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(this.directLoginsIndex()); + attachmentsInvertedIndex = Clipperz.PM.DataModel.User.Header.RecordIndex.invertIndex(this.attachmentsIndex()); this._records = {}; @@ -201,13 +249,15 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { var reference; var updateDate; var accessDate; + var attachmentsCount; reference = recordsInvertedIndex[indexReference]; if (typeof(someData['recordsStats'][reference]) != 'undefined') { updateDate = someData['recordsStats'][reference]['updateDate']; accessDate = someData['recordsStats'][reference]['accessDate']; - +// attachmentsCount = (someData['attachmentsCount'][reference]) ? someData['attachmentsCount'][reference] : 0; + record = new Clipperz.PM.DataModel.Record({ 'reference': reference, 'retrieveKeyFunction': MochiKit.Base.method(this, 'getRecordKey'), @@ -221,8 +271,12 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User.Header.RecordIndex, Object, { 'retrieveDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'getDirectLoginIndexData'), 'setDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'setDirectLoginIndexData'), 'removeDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'removeDirectLoginIndexData'), - - 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin') + 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin'), + + 'retrieveAttachmentIndexDataFunction': MochiKit.Base.method(this, 'getAttachmentIndexData'), + 'setAttachmentIndexDataFunction': MochiKit.Base.method(this, 'setAttachmentIndexData'), + 'removeAttachmentIndexDataFunction': MochiKit.Base.method(this, 'removeAttachmentIndexData'), + 'createNewAttachmentFunction': MochiKit.Base.method(this, 'createNewAttachment'), }); this._records[reference] = record; @@ -248,6 +302,24 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated } } +//console.log("RecordIndex.Records: attachments data:", someData['attachments']); + for (indexReference in someData['attachments']) { + var reference; + var record; + + reference = attachmentsInvertedIndex[indexReference]; + record = this._records[recordsInvertedIndex[someData['attachments'][indexReference]['record']]]; + + if (record != null) { + new Clipperz.PM.DataModel.Attachment({ + 'reference': reference, + 'record': record + }); + } else { + Clipperz.logWarning("WARNING: Attachment without a matching RECORD!!"); + } + } + return this._records; }, this)); innerDeferredResult.callback(); @@ -295,8 +367,12 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated 'retrieveDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'getDirectLoginIndexData'), 'setDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'setDirectLoginIndexData'), 'removeDirectLoginIndexDataFunction': MochiKit.Base.method(this, 'removeDirectLoginIndexData'), + 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin'), - 'createNewDirectLoginFunction': MochiKit.Base.method(this, 'createNewDirectLogin') + 'retrieveAttachmentIndexDataFunction': MochiKit.Base.method(this, 'getAttachmentIndexData'), + 'setAttachmentIndexDataFunction': MochiKit.Base.method(this, 'setAttachmentIndexData'), + 'removeAttachmentIndexDataFunction': MochiKit.Base.method(this, 'removeAttachmentIndexData'), + 'createNewAttachmentFunction': MochiKit.Base.method(this, 'createNewAttachment'), }); this.transientState().setValue('newRecordsReferences' + '.' + newRecord.reference(), newRecord); @@ -372,6 +448,40 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated //========================================================================= + 'removeAttachment': function (anAttachment) { + // TODO: +// this.directLoginsData().removeValue(this.directLoginsIndex()[aDirectLogin.reference()]); + }, + + //------------------------------------------------------------------------- + + 'createNewAttachment': function (aRecord) { + // TODO: + +// var newDirectLogin; + var newAttachment; +// var newDirectLoginIndexValue; + var newAttachmentIndexValue; + +// newDirectLogin = new Clipperz.PM.DataModel.DirectLogin({record:aRecord}); + newAttachment = new Clipperz.PM.DataModel.Attachment({'record':aRecord}); +// newDirectLoginIndexValue = MochiKit.Base.listMax(MochiKit.Base.map(function (aValue) { return aValue * 1; }, MochiKit.Base.values(this.directLoginsIndex()))) + 1; + newAttachmentIndexValue = MochiKit.Base.listMax(MochiKit.Base.map(function (aValue) { return aValue * 1; }, MochiKit.Base.values(this.attachmentsIndex()))) + 1; + +// this.transientState().setValue('newDirectLoginReferences' + '.' + newDirectLogin.reference(), newDirectLogin); + this.transientState().setValue('newAttachmentReferences' + '.' + newAttachment.reference(), newAttachment); + +// this.directLoginsIndex()[newDirectLogin.reference()] = newDirectLoginIndexValue; + this.attachmentsIndex()[newAttachment.reference()] = newAttachmentIndexValue; +// this.directLoginsData().setValue(this.directLoginsIndex()[newDirectLogin.reference()], {'record': this.recordsIndex()[aRecord.reference()]}); + this.attachmentsData().setValue(this.attachmentsIndex()[newAttachment.reference()], {'record': this.recordsIndex()[aRecord.reference()]}); + +// return newDirectLogin; + return newAttachment; + }, + + //========================================================================= + 'deleteAllCleanTextData': function () { return Clipperz.Async.callbacks("User.Header.RecordIndex.deleteAllCleanTextData", [ MochiKit.Base.method(this, 'recordsData'), @@ -396,6 +506,10 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated MochiKit.Base.method(this, 'directLoginsData'), MochiKit.Base.methodcaller('hasAnyCleanTextData') ], + 'attachmentsData': [ + MochiKit.Base.method(this, 'attachmentsData'), + MochiKit.Base.methodcaller('hasAnyCleanTextData') + ], }); deferredResult.addCallback(Clipperz.Async.or); @@ -418,8 +532,13 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated 'directLoginsData': [ MochiKit.Base.method(this, 'directLoginsData'), MochiKit.Base.methodcaller('hasPendingChanges') + ], + 'attachments': [ + MochiKit.Base.method(this, 'attachmentsData'), + MochiKit.Base.methodcaller('hasPendingChanges') ] }); +//deferredResult.addCallback(function (aValue) { console.log("HAS PENDING CHANGES", aValue); return aValue; }); deferredResult.addCallback(Clipperz.Async.or); deferredResult.callback(); @@ -437,6 +556,9 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated MochiKit.Base.method(this, 'directLoginsData'), MochiKit.Base.methodcaller('commitTransientState'), + + MochiKit.Base.method(this, 'attachmentsData'), + MochiKit.Base.methodcaller('commitTransientState'), MochiKit.Base.method(this, 'resetTransientState', true) ], {trace:false}); @@ -474,9 +596,21 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated } }, this), + MochiKit.Base.bind(function () { + // TODO: + var attachmentReference; + + for (attachmentReference in this.transientState().getValue('newAttachmentReferences')) { + delete this.attachmentsIndex()[attachmentReference]; + } + }, this), + MochiKit.Base.method(this, 'directLoginsData'), MochiKit.Base.methodcaller('revertChanges'), + MochiKit.Base.method(this, 'attachmentsData'), + MochiKit.Base.methodcaller('revertChanges'), + MochiKit.Base.method(this, 'resetTransientState', false) ], {trace:false}); }, @@ -528,6 +662,15 @@ Clipperz.log("SKIPPING record " + reference + " as there are no stats associated ] }); deferredResult.addCallback(Clipperz.Async.setItem, result, 'directLogins'); + + deferredResult.collectResults({ + 'index': MochiKit.Base.partial(MochiKit.Async.succeed, this.attachmentsIndex()), + 'data': [ + MochiKit.Base.method(this.attachmentsData(), 'prepareRemoteDataWithKey', aKey), + MochiKit.Base.itemgetter('data') + ] + }); + deferredResult.addCallback(Clipperz.Async.setItem, result, 'attachments'); deferredResult.addCallback(MochiKit.Async.succeed, result); diff --git a/frontend/delta/js/Clipperz/PM/DataModel/User.js b/frontend/delta/js/Clipperz/PM/DataModel/User.js index f87d356..2784f92 100644 --- a/frontend/delta/js/Clipperz/PM/DataModel/User.js +++ b/frontend/delta/js/Clipperz/PM/DataModel/User.js @@ -254,6 +254,7 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User, Object, { 'recordsData': {'data':null, 'index':{}}, 'recordsStats': null, 'directLoginsData': {'data':null, 'index':{}}, + 'attachmentsData': {'data':null, 'index':{}}, 'encryptedDataVersion': Clipperz.PM.Crypto.encryptingFunctions.currentVersion, 'retrieveRecordDetailFunction': MochiKit.Base.method(this, 'getRecordDetail') }), @@ -465,13 +466,16 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User, Object, { case '0.1': var headerData; +//console.log("Server data", someServerData); headerData = Clipperz.Base.evalJSON(someServerData['header']); +//console.log("headerData", headerData); recordsIndex = new Clipperz.PM.DataModel.User.Header.RecordIndex({ 'retrieveKeyFunction': MochiKit.Base.method(this, 'getPassphrase'), 'recordsData': headerData['records'], 'recordsStats': someServerData['recordsStats'], 'directLoginsData': headerData['directLogins'], + 'attachmentsData': headerData['attachments'] || {'data': null, 'index':{}}, 'encryptedDataVersion': someServerData['version'], 'retrieveRecordDetailFunction': MochiKit.Base.method(this, 'getRecordDetail') }); @@ -695,7 +699,7 @@ Clipperz.Base.extend(Clipperz.PM.DataModel.User, Object, { result = someFilteredResults[0]; break; default: -Clipperz.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more than one result: " + someFilteredResults.length); +//console.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more than one result: " + someFilteredResults.length); result = someFilteredResults[0]; break; } @@ -723,8 +727,13 @@ Clipperz.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more //------------------------------------------------------------------------- - 'getRecordDetail': function (aRecordReference) { - return this.connection().message('getRecordDetail', {reference: aRecordReference}); + 'getRecordDetail': function (aRecord) { + // return this.connection().message('getRecordDetail', {reference: aRecordReference}); + + return Clipperz.Async.callbacks("User.getRecordDetail", [ + MochiKit.Base.method(this.connection(), 'message', 'getRecordDetail', {reference: aRecord.reference()}), + function(someInfo) { aRecord.setAttachmentServerStatus(someInfo['attachmentStatus']); return someInfo;}, // Couldn't find a better way... + ], {trace:false}); }, //------------------------------------------------------------------------- @@ -750,6 +759,7 @@ Clipperz.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more 'createNewRecordFromJSON': function(someJSON) { var deferredResult; + // TODO: how do we handle attachments? deferredResult = new Clipperz.Async.Deferred("User.createNewRecordFromJSON", {trace:false}); deferredResult.collectResults({ 'recordIndex': MochiKit.Base.method(this, 'getHeaderIndex', 'recordsIndex'), @@ -770,6 +780,7 @@ Clipperz.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more }); return Clipperz.Async.callbacks("User.createNewRecordFromJSON__inner", [ + // TODO: check if we should invoke the create new direct login methon on Record instead of calling it directly on the index MochiKit.Base.method(recordIndex, 'createNewDirectLogin', record), MochiKit.Base.methodcaller('setLabel', aDirectLogin['label']), MochiKit.Base.methodcaller('setBookmarkletConfiguration', configuration), @@ -937,6 +948,22 @@ Clipperz.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more ], {trace:false}); }, + + //------------------------------------------------------------------------- +/* + 'addNewAttachment': function(anAttachment) { + console.log("Adding attachment", anAttachment); + }, +*/ + 'uploadAttachment': function(aRecordReference, anAttachmentReference, someData) { + // TODO: pass a callback to handle onProgress events (and modify Connection accordingly) + this.connection().message('uploadAttachment', { + 'recordReference': aRecordReference, + 'attachmentReference': anAttachmentReference, + 'data': someData + }); + }, + //========================================================================= 'hasPendingChanges': function () { @@ -1035,6 +1062,7 @@ Clipperz.log("Warning: User.recordWithLabel('" + aLabel + "') is returning more header = {}; header['records'] = someHeaderPackedData['recordIndex']['records']; header['directLogins'] = someHeaderPackedData['recordIndex']['directLogins']; + header['attachments'] = someHeaderPackedData['recordIndex']['attachments']; header['preferences'] = {'data': someHeaderPackedData['preferences']['data']}; header['oneTimePasswords'] = {'data': someHeaderPackedData['oneTimePasswords']['data']}; header['version'] = '0.1'; diff --git a/frontend/delta/js/Clipperz/PM/Proxy.js b/frontend/delta/js/Clipperz/PM/Proxy.js index 2145d61..8f70470 100644 --- a/frontend/delta/js/Clipperz/PM/Proxy.js +++ b/frontend/delta/js/Clipperz/PM/Proxy.js @@ -95,6 +95,27 @@ Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { return deferredResult; }, + 'justPayToll': function(aRequestType) { + var deferredResult; + + if (this.shouldPayTolls()) { + deferredResult = new Clipperz.Async.Deferred("Proxy.justPayToll", {trace:false}); + + if (this.tolls()[aRequestType].length == 0) { + deferredResult.addMethod(this, 'sendMessage', 'knock', {requestType:aRequestType}); + deferredResult.addMethod(this, 'setTollCallback'); + } + deferredResult.addMethod(this.tolls()[aRequestType], 'pop'); + deferredResult.addCallback(MochiKit.Base.methodcaller('deferredPay')); + + deferredResult.callback(); + } else { + deferredResult = MochiKit.Async.succeed(null); + } + + return deferredResult; + }, + //------------------------------------------------------------------------- 'addToll': function(aToll) { @@ -108,7 +129,7 @@ Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { this.addToll(new Clipperz.PM.Toll(someParameters['toll'])); } - return someParameters['result']; + return someParameters['result']; // <- This is what will be returned by the message call }, //========================================================================= @@ -121,8 +142,8 @@ Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { return this.processMessage('handshake', someParameters, 'CONNECT'); }, - 'message': function (someParameters) { - return this.processMessage('message', someParameters, 'MESSAGE'); + 'message': function (someParameters, someOptionalParameters) { + return this.processMessage('message', someParameters, 'MESSAGE', someOptionalParameters); }, 'logout': function (someParameters) { @@ -145,33 +166,65 @@ Clipperz.PM.Proxy.prototype = MochiKit.Base.update(null, { //========================================================================= - 'processMessage': function (aFunctionName, someParameters, aRequestType) { + 'processMessage': function (aFunctionName, someParameters, aRequestType, someOptionalParameters) { var deferredResult; deferredResult = new Clipperz.Async.Deferred("Proxy.processMessage", {trace:false}); deferredResult.addMethod(this, 'payToll', aRequestType); - deferredResult.addMethod(this, 'sendMessage', aFunctionName); + // deferredResult.addMethod(this, 'sendMessage', aFunctionName); + deferredResult.addCallback(MochiKit.Base.bind(function(aResult){ + return this.sendMessage(aFunctionName, aResult, someOptionalParameters); + }, this)); deferredResult.addMethod(this, 'setTollCallback'); deferredResult.callback(someParameters); return deferredResult; }, + 'processAttachmentMessage': function(aMessageCallback) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("Proxy.uploadAttachment", {trace:false}); + deferredResult.addMethod(this, 'justPayToll', 'MESSAGE'); + deferredResult.addCallback(aMessageCallback); + deferredResult.addErrback(MochiKit.Base.method(this, 'handleError')); + deferredResult.addMethod(this, 'setTollCallback'); + deferredResult.callback(); + + return deferredResult; + }, + + 'uploadAttachment': function(someArguments, aProgressCallback, aSharedSecret) { + var messageCallback = MochiKit.Base.method(this, '_uploadAttachment', someArguments, aProgressCallback, aSharedSecret); + + return this.processAttachmentMessage(messageCallback); + }, + + 'downloadAttachment': function(someArguments, aProgressCallback, aSharedSecret) { + var messageCallback = MochiKit.Base.method(this, '_downloadAttachment', someArguments, aProgressCallback, aSharedSecret); + + return this.processAttachmentMessage(messageCallback); + }, + //========================================================================= - '_sendMessage': function (aFunctionName, aVersion, someParameters) { + '_uploadAttachment': function (someArguments, aProgressCallback, aSharedSecret) { throw Clipperz.Base.exception.AbstractMethod; }, - 'sendMessage': function (aFunctionName, someParameters) { + '_sendMessage': function (aFunctionName, aVersion, someParameters, someOptionalParameters) { + throw Clipperz.Base.exception.AbstractMethod; + }, + + 'sendMessage': function (aFunctionName, someParameters, someOptionalParameters) { var deferredResult; //console.log("PROXY.sendMessage", aFunctionName, someParameters); // TODO: read actual application version for a property set at build time deferredResult = new Clipperz.Async.Deferred("Proxy.sendMessage", {trace:false}); - deferredResult.addMethod(this, '_sendMessage', aFunctionName, 'fake-app-version'); + deferredResult.addMethod(this, '_sendMessage', aFunctionName, 'fake-app-version', someParameters, someOptionalParameters); deferredResult.addErrback(MochiKit.Base.method(this, 'handleError')); - deferredResult.callback(someParameters); + deferredResult.callback(); return deferredResult; }, diff --git a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.JSON.js b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.JSON.js index b1393cb..1b3fd1c 100755 --- a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.JSON.js +++ b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.JSON.js @@ -62,7 +62,7 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.JSON, Clipperz.PM.Proxy, { //========================================================================= - '_sendMessage': function(aFunctionName, aVersion, someParameters) { + '_sendMessage': function(aFunctionName, aVersion, someParameters, someOptionalParameters) { var deferredResult; var parameters; @@ -71,13 +71,19 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.JSON, Clipperz.PM.Proxy, { version: aVersion, parameters: Clipperz.Base.serializeJSON(someParameters) }; + + someOptionalParameters = someOptionalParameters || {}; + //console.log("PROXY.JSON._sendMessage", parameters); deferredResult = new Clipperz.Async.Deferred("Proxy.JSON._sendMessage", {trace:false}); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'remoteRequestSent'); - deferredResult.addCallback(MochiKit.Async.doXHR, this.url(), { + deferredResult.addCallback(Clipperz.Async.doXHR, this.url(), { +// deferredResult.addCallback(MochiKit.Async.doXHR, this.url(), { method:'POST', sendContent:MochiKit.Base.queryString(parameters), - headers:{"Content-Type":"application/x-www-form-urlencoded"} + headers:{"Content-Type":"application/x-www-form-urlencoded"}, + // downloadProgress:someOptionalParameters['downloadProgressCallback'] || null, + // uploadProgress:someOptionalParameters['uploadProgressCallback'] || null, }); deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'remoteRequestReceived'); deferredResult.addCallback(MochiKit.Base.itemgetter('responseText')); @@ -94,6 +100,114 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.JSON, Clipperz.PM.Proxy, { return deferredResult; }, + //------------------------------------------------------------------------- + + // TODO: test + '_uploadAttachment': function(someArguments, aProgressCallback, aSharedSecret, aToll) { + var formData; + var deferredResult; + + var parameters = { + 'toll': aToll, + 'parameters': { + 'message': 'uploadAttachment', + 'srpSharedSecret': aSharedSecret, + 'parameters': { + 'attachmentReference': someArguments['attachmentReference'], + 'recordReference': someArguments['recordReference'], + 'version': someArguments['version'] + } + } + } + + var blob = new Blob([someArguments['arrayBufferData']]); + + formData = new FormData(); + formData.append('method', 'message'); + formData.append('version', 'fake-app-version'); // Not implemented anywhere yet + formData.append('parameters', JSON.stringify(parameters)); + formData.append('data', blob); + + deferredResult = new Clipperz.Async.Deferred("Proxy.JSON._sendMessage", {trace:false}); +//deferredResult.addCallback(function(){console.log("About to send request");}); + deferredResult.addCallback(Clipperz.Async.doXHR, this.url(), { + method:'POST', + sendContent:formData, + // headers:{"Content-Type":"application/x-www-form-urlencoded"}, + uploadProgress: aProgressCallback || null, + }); +//deferredResult.addCallback(function(something){console.log("Done sending request"); return something;}); + deferredResult.addCallback(function (someValues) { + if (someValues['result'] == 'EXCEPTION') { + throw someValues['message']; + } + + // TODO: check return value with actual request. Expected: ArrayBuffer + return someValues; + }); + + deferredResult.callback(); + + return deferredResult; + }, + + // TODO: test + '_downloadAttachment': function(someArguments, aProgressCallback, aSharedSecret, aToll) { + var deferredResult; + var parameters; + + var innerParameters = { + 'toll': aToll, + 'parameters': { + 'message': 'downloadAttachment', + 'srpSharedSecret': aSharedSecret, + 'parameters': { + 'reference': someArguments['reference'] + } + } + } + + parameters = { + method: 'message', + version: 'fake-app-version', + parameters: Clipperz.Base.serializeJSON(innerParameters) + }; + + deferredResult = new Clipperz.Async.Deferred("Proxy.JSON._downloadAttachment", {trace:false}); + deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'remoteRequestSent'); +//deferredResult.addCallback(function(){console.log("About to send request");}); + deferredResult.addCallback(Clipperz.Async.doXHR, this.url(), { + method:'POST', + responseType:'arraybuffer', + sendContent:MochiKit.Base.queryString(parameters), + headers:{"Content-Type":"application/x-www-form-urlencoded"}, + downloadProgress:aProgressCallback || null, + }); +deferredResult.addCallback( + function(something){ + // console.log("Done sending request", something); + return something; +}); + deferredResult.addCallbackPass(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'remoteRequestReceived'); + deferredResult.addCallback(MochiKit.Base.itemgetter('response')); + deferredResult.addCallback(function (anArrayBuffer) { + var result = (anArrayBuffer.byteLength > 0) ? anArrayBuffer : false; + +var DEBUG = 'PUT_A_BREAKPOINT_HERE'; + + return { + result: anArrayBuffer, + }; + }) + // deferredResult.addErrback(function(something) { + // return something; + // }); + deferredResult.callback(); + + return deferredResult; + }, + + //========================================================================= __syntaxFix__: "syntax fix" diff --git a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js index 00469c0..1908b01 100644 --- a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js +++ b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.DataStore.js @@ -37,6 +37,8 @@ Clipperz.PM.Proxy.Offline.DataStore = function(args) { this._tolls = {}; this._currentStaticConnection = null; + this.NETWORK_SIMULATED_SPEED = 100*1024; + return this; } @@ -233,9 +235,9 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { //========================================================================= - 'processMessage': function (aFunctionName, someParameters) { + 'processMessage': function (aFunctionName, someParameters, someOptionalParameters) { var deferredResult; - + try { var result; var connection; @@ -266,7 +268,7 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { this.storeConnectionForRequestWithConnectionAndResponse(aFunctionName, someParameters, connection, result); - deferredResult = MochiKit.Async.succeed(result); + deferredResult = MochiKit.Async.succeed(result) } catch (exception) { deferredResult = MochiKit.Async.fail(exception); } @@ -274,6 +276,69 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { return deferredResult; }, + //------------------------------------------------------------------------- + + uploadAttachment: function(someArguments, aProgressCallback, aSharedSecret, aToll) { + var connection = this.currentStaticConnection(); + var attachmentReference = someArguments['attachmentReference']; + + if (this.isReadOnly() == false) { + connection['userData']['attachments'][attachmentReference] = { + 'record': someArguments['recordReference'], + 'status': 'AVAILABLE', + 'data': someArguments['arrayBufferData'], + 'version': someArguments['version'], + }; + + return this.simulateNetworkDelayResponse(someArguments['arrayBufferData'].length, aProgressCallback, { + result: {}, + toll: this.getTollForRequestType('MESSAGE') + }); + } else { + throw Clipperz.PM.Proxy.Offline.DataStore.exception.ReadOnly; + } + }, + + downloadAttachment: function(someArguments, aProgressCallback, aSharedSecret, aToll) { + var connection = this.currentStaticConnection(); + var reference = someArguments['reference']; + var result = connection['userData']['attachments'][reference]['data']; + + return this.simulateNetworkDelayResponse(result.length, aProgressCallback, { + result: result, + // toll: this.getTollForRequestType('MESSAGE') + }); + }, + + simulateNetworkDelayResponse: function(payloadSize, progressCallback, aResponse) { + var deferredResult; + var i; + + deferredResult = new Clipperz.Async.Deferred("Proxy.Offline.DataStore.simulateNetworkDelay", {trace:false}); + + for (i = 0; i < payloadSize/this.NETWORK_SIMULATED_SPEED; i++) { + var loaded = i*this.NETWORK_SIMULATED_SPEED; + deferredResult.addCallback(MochiKit.Async.wait, 1); + deferredResult.addMethod(this, 'runProgressCallback', progressCallback, loaded, payloadSize); + } + + deferredResult.addCallback(MochiKit.Async.succeed, aResponse); + + deferredResult.callback(); + + return deferredResult; + }, + + runProgressCallback: function(aCallback, aLoadedValue, aTotalValue) { + var fakeProgressEvent = { + 'lengthComputable': true, + 'loaded': aLoadedValue, + 'total': aTotalValue, + } + + return aCallback(fakeProgressEvent); + }, + //========================================================================= '_knock': function(aConnection, someParameters) { @@ -340,7 +405,9 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { userData = this.data()['users'][someParameters.parameters.C]; otpsData = this.data()['onetimePasswords']; -//console.log("Proxy.Offline.DataStore._handshake: otpsData:", otpsData); + if (! userData['attachments']) { + userData['attachments'] = {}; + } userOTPs = {}; MochiKit.Base.map(function(aOTP) { @@ -349,9 +416,6 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { } },MochiKit.Base.values(otpsData)); -//console.log("Proxy.Offline.DataStore._handshake: userOTPs:", userOTPs); -//console.log("Proxy.Offline.DataStore._handshake(): userOTPs:",userOTPs); - if ((typeof(userData) != 'undefined') && (userData['version'] == someParameters.version)) { aConnection['userData'] = userData; aConnection['userOTPs'] = userOTPs; @@ -455,7 +519,7 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { //------------------------------------------------------------------------- - '_message': function(aConnection, someParameters) { + '_message': function(aConnection, someParameters, someOptionalParameters) { var result; if (MochiKit.Base.keys(aConnection).length==0) { @@ -499,8 +563,14 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { //===================================================================== } else if (someParameters.message == 'getRecordDetail') { - MochiKit.Base.update(result, aConnection['userData']['records'][someParameters['parameters']['reference']]); - result['reference'] = someParameters['parameters']['reference']; + var reference = someParameters['parameters']['reference']; + + MochiKit.Base.update(result, aConnection['userData']['records'][reference]); + result['reference'] = reference; + + result['attachmentStatus'] = this.attachmentStatus(aConnection, reference); + +//console.log('Proxy.getRecordDetail', result); } else if (someParameters.message == 'getAllRecordDetails') { MochiKit.Base.update(result, aConnection['userData']['records']); } else if (someParameters.message == 'getOneTimePasswordsDetails') { @@ -613,7 +683,9 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { */ //===================================================================== } else if (someParameters.message == 'saveChanges') { if (this.isReadOnly() == false) { - var i, c; +//console.log("Proxy.Offline.DataStore.saveChanges: parameters:", someParameters); +//console.log("Proxy.Offline.DataStore.saveChanges: attachments:", aConnection['userData']['attachments']); + var i, c, j, d; if (aConnection['userData']['lock'] != someParameters['parameters']['user']['lock']) { throw "the lock attribute is not processed correctly" @@ -664,8 +736,12 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline.DataStore, Object, { 'accessDate': Clipperz.PM.Date.formatDateWithUTCFormat(new Date()) } } + + this.pruneAttachments(aConnection, currentRecordData['record']['reference'], currentRecordData['attachments']); } +//console.log("Proxy.Offline.DataStore.saveChanges: attachments:", aConnection['userData']['attachments']); + c = someParameters['parameters']['records']['deleted'].length; for (i=0; i comparison: serverRecordReference, aRecordReference", aConnection['userData']['attachments'][reference]['record'], aRecordReference); + if (aConnection['userData']['attachments'][reference]['record'] == aRecordReference) { + result[reference] = aConnection['userData']['attachments'][reference]['status']; + } + } + } + +//console.log("Proxy.attachmentStatus: result:", result); + + return result; + }, + + /** Removes all the stored attachments whose reference is not in the given list */ + 'pruneAttachments': function(aConnection, aRecordReference, someAttachmentReferences) { + if (aConnection['userData']['attachments']) { + var reference; + for (reference in aConnection['userData']['attachments']) { + var attachment = aConnection['userData']['attachments'][reference]; + if ( (attachment['record'] == aRecordReference) && + (someAttachmentReferences.indexOf(reference) < 0) + ) { + delete aConnection['userData']['attachments'][reference]; + } + } + } + }, + /* 'userSerializedEncryptedData': function(someData) { var deferredResult; diff --git a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.js b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.js index c2f1aec..9209c64 100644 --- a/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.js +++ b/frontend/delta/js/Clipperz/PM/Proxy/Proxy.Offline.js @@ -53,10 +53,19 @@ Clipperz.Base.extend(Clipperz.PM.Proxy.Offline, Clipperz.PM.Proxy, { //------------------------------------------------------------------------- - '_sendMessage': function(aFunctionName, aVersion, someParameters) { - return this.dataStore().processMessage(aFunctionName, someParameters); + '_sendMessage': function(aFunctionName, aVersion, someParameters, someOptionalParameters) { + return this.dataStore().processMessage(aFunctionName, someParameters, someOptionalParameters); }, + '_uploadAttachment': function(someArguments, aProgressCallback, aSharedSecret, aToll) { + return this.dataStore().uploadAttachment(someArguments, aProgressCallback, aSharedSecret, aToll); + }, + + '_downloadAttachment': function(someArguments, aProgressCallback, aSharedSecret, aToll) { + return this.dataStore().downloadAttachment(someArguments, aProgressCallback, aSharedSecret, aToll); + }, + + //------------------------------------------------------------------------- 'isReadOnly': function () { diff --git a/frontend/delta/js/Clipperz/PM/UI/AttachmentController.js b/frontend/delta/js/Clipperz/PM/UI/AttachmentController.js new file mode 100644 index 0000000..a2a15d8 --- /dev/null +++ b/frontend/delta/js/Clipperz/PM/UI/AttachmentController.js @@ -0,0 +1,550 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +"use strict"; +Clipperz.Base.module('Clipperz.PM.UI'); + +Clipperz.PM.UI.AttachmentController = function(someParameters) { + this.MAX_SIMULTANEOUS_READ = 1; + this.MAX_SIMULTANEOUS_UPLOAD = 1; + this.MAX_SIMULTANEOUS_DOWNLOAD = 1; + this.MAX_SIMULTANEOUS_ENCRYPT = 1; + this.MAX_SIMULTANEOUS_DECRYPT = 1; + + this.LATEST_ENCRYPTION_VERSION = '1.0'; // Versions aren't handled completely yet! + + this.fileQueue = []; + this.notifications = []; + this.operationsCount = null; + + this.encryptedDocument = null; + + this.uploadMessageCallback = someParameters['uploadMessageCallback']; + this.downloadMessageCallback = someParameters['downloadMessageCallback']; + this.reloadServerStatusCallback = someParameters['reloadServerStatusCallback']; + + return this; + } + +MochiKit.Base.update(Clipperz.PM.UI.AttachmentController.prototype, { + + toString: function () { + return "Clipperz.PM.UI.AttachmentController"; + }, + + //------------------------------------------------------------------------- + + notifyUpdate: function() { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'updateAttachmentQueueInfo', this.getQueueInfo(), this.getNotificationsInfo()); + }, + + getQueueInfo: function() { + return this.fileQueue; + }, + + getNotificationsInfo: function() { + return this.notifications; + }, + + //========================================================================= + // Entry points + //========================================================================= + + addAttachment: function (anAttachment) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.UI.AttachmentController.uploadAttachment", {trace:false}); + deferredResult.collectResults({ + '_attachment': MochiKit.Base.partial(MochiKit.Async.succeed, anAttachment), + '_record': MochiKit.Base.method(anAttachment, 'record'), + 'reference': MochiKit.Base.method(anAttachment, 'reference'), + 'meta': MochiKit.Base.method(anAttachment, 'metadata'), + 'key': MochiKit.Base.method(anAttachment, 'key'), + 'nonce': MochiKit.Base.method(anAttachment, 'nonce'), + 'status': MochiKit.Base.partial(MochiKit.Async.succeed, 'WAITING_READ'), + 'file': MochiKit.Base.method(anAttachment, 'file'), + 'recordReference': MochiKit.Base.method(anAttachment.record(), 'reference'), + 'process': MochiKit.Base.partial(MochiKit.Async.succeed, 'UPLOAD'), // Used only to differentiate notifications + }, {trace: false}); + deferredResult.addMethod(this, 'addFileToQueue'); + deferredResult.callback(); + + return deferredResult; + }, + + getAttachment: function(anAttachment, aMessageCallback) { + if (this.getQueuePosition(anAttachment.reference()) >= 0) { + this.removeFileFromQueue(anAttachment.reference()); + } + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.UI.AttachmentController.downloadAttachment", {trace:false}); + deferredResult.collectResults({ + '_attachment': MochiKit.Base.partial(MochiKit.Async.succeed, anAttachment), + '_record': MochiKit.Base.method(anAttachment, 'record'), + 'reference': MochiKit.Base.method(anAttachment, 'reference'), + 'meta': MochiKit.Base.method(anAttachment, 'metadata'), + 'key': MochiKit.Base.method(anAttachment, 'key'), + 'nonce': MochiKit.Base.method(anAttachment, 'nonce'), + 'status': MochiKit.Base.partial(MochiKit.Async.succeed, 'WAITING_DOWNLOAD'), + 'messageCallback': MochiKit.Async.succeed(aMessageCallback), + 'process': MochiKit.Base.partial(MochiKit.Async.succeed, 'DOWNLOAD'), // Used only to differentiate notifications + }, {trace: false}); + deferredResult.addCallback(function(aResult){ + MochiKit.Base.update(aResult, {'messageCallback': aMessageCallback}); + return aResult; + }); + deferredResult.addMethod(this, 'addFileToQueue'); + deferredResult.callback(); + + return deferredResult; + }, + + cancelAttachment: function(anAttachment) { + var deferredResult; + + var reference = anAttachment.reference() + var queueElement = this.getQueueElement(reference); + + if (queueElement) { + deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.UI.AttachmentController.cancelAttachment", {trace:false}); + deferredResult.addMethod(this, 'updateFileInQueue', reference, {'status': 'CANCELED'}); + if (queueElement['deferredRequest']) { + deferredResult.addMethod(queueElement['deferredRequest'], 'cancel'); + } + + + deferredResult.callback(); + // TODO: We may also want do delete stuff in the queue element + } else { + deferredResult = MochiKit.Async.succeed(); + } + + return deferredResult; + }, + + //========================================================================= + // Queue management + //========================================================================= + + dispatchQueueOperations: function() { + var currentElement; + var processNextElements; + + var count = this.updateOperationsCount(); + + this.notifyUpdate(); + + processNextElements = true; + for (i in this.fileQueue) { + if(processNextElements) { + currentElement = this.fileQueue[i]; + switch (currentElement['status']) { + case 'WAITING_READ': + if ((count['READING']) < this.MAX_SIMULTANEOUS_READ) { + this.readFile(currentElement['reference'], currentElement['file']); + processNextElements = false; + } + break; + + case 'WAITING_ENCRYPT': + if (count['ENCRYPTING'] < this.MAX_SIMULTANEOUS_ENCRYPT) { + this.encryptFile(currentElement['reference'], currentElement['originalArray'], currentElement['key'], currentElement['nonce']); + processNextElements = false; + } + break; + + case 'WAITING_UPLOAD': + if (count['UPLOADING'] < this.MAX_SIMULTANEOUS_UPLOAD) { + this.uploadFile(currentElement['reference'], currentElement['encryptedArray']); + processNextElements = false; + } + break; + + case 'WAITING_DOWNLOAD': + if (count['DOWNLOADING'] < this.MAX_SIMULTANEOUS_DOWNLOAD) { + this.downloadFile(currentElement['reference'], currentElement['messageCallback']); + processNextElements = false; + } + break; + + case 'WAITING_DECRYPT': + if (count['DECRYPTING'] < this.MAX_SIMULTANEOUS_DECRYPT) { + this.decryptFile(currentElement['reference'], currentElement['encryptedArray'], currentElement['key'], currentElement['nonce']); + processNextElements = false; + } + break; + + case 'WAITING_SAVE': + this.saveFile(currentElement['reference'], currentElement['decryptedArray'], currentElement['meta']['name'], currentElement['meta']['type']); + processNextElements = false; + Clipperz.Sound.beep(); + break; + } + } + } + }, + + updateOperationsCount: function() { + var count; + + count = { + 'WAITING_READ': 0, + 'READING': 0, + 'WAITING_ENCRYPT': 0, + 'ENCRYPTING': 0, + 'WAITING_UPLOAD': 0, + 'UPLOADING': 0, + 'WAITING_DOWNLOAD': 0, + 'DOWNLOADING': 0, + 'WAITING_DECRYPT': 0, + 'DECRYPTING': 0, + 'WAITING_SAVE': 0, + 'DONE': 0, + 'CANCELED': 0, + 'FAILED': 0, + }; + + for (var i in this.fileQueue) { + count[this.fileQueue[i]['status']]++; + } + + this.operationsCount = count; + + return this.operationsCount; + }, + + addFileToQueue: function(someParameters) { + this.fileQueue.push(someParameters); + this.addNotification(someParameters); + + this.dispatchQueueOperations(); + }, + + removeFileFromQueue: function(aFileReference) { + this.fileQueue.splice(this.getQueuePosition(aFileReference), 1); + + this.dispatchQueueOperations(); + }, + + getQueueElement: function(aFileReference) { + var i = this.getQueuePosition(aFileReference); + return this.fileQueue[i]; + }, + + updateFileInQueue: function(aFileReference, someParameters) { + var queuePosition = this.getQueuePosition(aFileReference); + + MochiKit.Base.update(this.fileQueue[queuePosition], someParameters); + + this.dispatchQueueOperations(); + }, + + appendResult: function(aFileReference, anArray) { + var queueElement = this.getQueueElement(aFileReference); + queueElement['result'].set(anArray, queueElement['currentByte']); + }, + + getQueuePosition: function(aFileReference) { + var result; + + result = -1; + for (var i in this.fileQueue) { + if (this.fileQueue[i].reference == aFileReference) { + result = i; + } + } + + return result; + }, + + //========================================================================= + // Queue Processing + //========================================================================= + + addNotification: function(aQueueElement) { + this.notifications.push({ + 'id': this.randomId(), + 'queueElement': aQueueElement + }) + }, + + removeNotification: function(aNotificationId) { + var i, position; + + position = -1; + for (i in this.notifications) { + if (this.notifications[i]['id'] == aNotificationId) { + position = i; + } + } + + if (position >= 0) { + this.notifications.splice(position, 1); + } + + this.notifyUpdate(); + }, + + randomId: function() { + return Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(32).toHexString().substring(2); + }, + + + //========================================================================= + // Queue Processing: READ + //========================================================================= + + readFile: function(aFileReference, aFile) { + var reader = new FileReader(); + + this.updateFileInQueue(aFileReference, { + 'status': 'READING', + }); + + reader.onload = MochiKit.Base.method(this, 'readFileOnload', aFileReference); + reader.readAsArrayBuffer(aFile); + }, + + readFileOnload: function(aFileReference, anEvent) { + this.updateFileInQueue(aFileReference, { + 'status': 'WAITING_ENCRYPT', + 'originalArray': new Uint8Array(anEvent.target.result), + }) + }, + + + //========================================================================= + // Queue Processing: ENCRYPT + //========================================================================= + + encryptFile: function(aFileReference, anArrayBuffer, aKey, aNonce) { + this.updateFileInQueue(aFileReference, { + 'status': 'ENCRYPTING', + }); + + window.crypto.subtle.importKey( + "raw", + aKey, //this is an example jwk key, "raw" would be an ArrayBuffer + { name: "AES-CBC" }, //this is the algorithm options + false, //whether the key is extractable (i.e. can be used in exportKey) + ["encrypt"] //can be "encrypt", "decrypt", "wrapKey", or "unwrapKey" + ) + // .then(MochiKit.Base.method(this, 'doEncrypt', aFileReference, anArrayBuffer, aNonce)) + .then(this.doEncrypt.bind(this,aFileReference, anArrayBuffer, aNonce)) + .catch(MochiKit.Base.method(this, 'handleException', aFileReference, 'encryptFile(): encryption failed')); + }, + + doEncrypt: function(aFileReference, anArrayBuffer, anIV, aWebcryptoKey) { + window.crypto.subtle.encrypt( + { + name: "AES-CBC", + iv: anIV, + }, + aWebcryptoKey, + anArrayBuffer + ) + .then(MochiKit.Base.method(this, 'doneEncrypt', aFileReference)) + .catch(MochiKit.Base.method(this, 'handleException', aFileReference, 'doEncrypt(): encryption failed')); + }, + + doneEncrypt: function(aFileReference, anArrayBuffer) { + this.updateFileInQueue(aFileReference, { + 'status': 'WAITING_UPLOAD', + 'encryptedArray': new Uint8Array(anArrayBuffer), + }); + }, + + + //========================================================================= + // Queue Processing: UPLOAD + //========================================================================= + + uploadFile: function(aFileReference, anEncryptedArray) { + this.updateFileInQueue(aFileReference, { + 'status': 'UPLOADING', + 'deferredRequest': this.uploadFileRequest(aFileReference, anEncryptedArray), + 'requestProgress': 0, + }); + }, + + uploadFileRequest: function(aFileReference, anEncryptedArray) { + var deferredResult; + var queueElement = this.getQueueElement(aFileReference); + + deferredResult = new Clipperz.Async.Deferred("Clipperz.PM.UI.AttachmentController.uploadFileRequest", {trace:false}); + deferredResult.addCallback(this.uploadMessageCallback, { + 'attachmentReference': queueElement['_attachment'].reference(), + 'recordReference': queueElement['_attachment'].record().reference(), + 'arrayBufferData': anEncryptedArray, + 'version': this.LATEST_ENCRYPTION_VERSION, + }, MochiKit.Base.method(this, 'uploadFileProgress', aFileReference)); + deferredResult.addMethod(this, 'uploadFileDone', aFileReference); + deferredResult.addErrback(MochiKit.Base.method(this, 'handleException', aFileReference, 'uploadFileRequest(): request failed or canceled')); + deferredResult.callback(); + + return deferredResult; + }, + + uploadFileDone: function(aFileReference, aResult){ + var record = this.getQueueElement(aFileReference)['_record']; + + return Clipperz.Async.callbacks("AttachmentController.uploadFileDone", [ + MochiKit.Base.partial(this.reloadServerStatusCallback, record), + MochiKit.Base.method(this, 'updateFileInQueue', aFileReference, { + 'status': 'DONE', + 'requestProgress': 1, + }), + ], {trace:false}); + }, + + uploadFileProgress: function(aFileReference, anEvent) { + var newProgress = (anEvent.lengthComputable) ? (anEvent.loaded / anEvent.total) : -1; + this.updateFileInQueue(aFileReference, { + 'requestProgress': newProgress, + }); + }, + + + //========================================================================= + // Queue Processing: DOWNLOAD + //========================================================================= + + downloadFile: function(aFileReference) { + var deferredRequest; + var queueElement = this.getQueueElement(aFileReference); + + deferredRequest = new Clipperz.Async.Deferred("Clipperz.PM.UI.AttachmentController.downloadFile", {trace:false}); + deferredRequest.addCallback(this.downloadMessageCallback, queueElement['_attachment'], MochiKit.Base.method(this, 'downloadFileProgress', aFileReference)); + deferredRequest.addMethod(this, 'downloadFileDone', aFileReference); + deferredRequest.addErrback(MochiKit.Base.method(this, 'handleException', aFileReference, 'downloadFile(): download filed or canceled')); + deferredRequest.callback(); + + this.updateFileInQueue(aFileReference, { + 'status': 'DOWNLOADING', + 'deferredRequest': deferredRequest, + 'requestProgress': 0, + }); + }, + + downloadFileDone: function(aFileReference, aResult){ + var queueElement = this.getQueueElement(aFileReference); + var encryptedArray = new Uint8Array(aResult); + + this.updateFileInQueue(aFileReference, { + 'status': 'WAITING_DECRYPT', + 'key': queueElement['key'], + 'nonce': queueElement['nonce'], + 'encryptedArray': encryptedArray, + 'requestProgress': 1, + }); + + }, + + downloadFileProgress: function(aFileReference, anEvent) { + var newProgress = (anEvent.lengthComputable) ? (anEvent.loaded / anEvent.total) : -1; + + this.updateFileInQueue(aFileReference, { + 'requestProgress': newProgress, + }); + }, + + + //========================================================================= + // Queue Processing: DECRYPT + //========================================================================= + + decryptFile: function(aFileReference, anArrayBuffer, aKey, aNonce) { + this.updateFileInQueue(aFileReference, { + 'status': 'DECRYPTING', + }); + + window.crypto.subtle.importKey( + "raw", + aKey, //this is an example jwk key, "raw" would be an ArrayBuffer + {name: "AES-CBC"}, //this is the algorithm options + false, //whether the key is extractable (i.e. can be used in exportKey) + ["decrypt"] //can be "encrypt", "decrypt", "wrapKey", or "unwrapKey" + ) + .then(MochiKit.Base.method(this, 'doDecrypt', aFileReference, anArrayBuffer, aNonce)) + .catch(MochiKit.Base.method(this, 'handleException', aFileReference, 'decryptFile(): decryption failed')); + }, + + doDecrypt: function(aFileReference, anArrayBuffer, anIV, aWebcryptoKey) { + window.crypto.subtle.decrypt( + {name: "AES-CBC", iv: anIV}, + aWebcryptoKey, + anArrayBuffer + ) + .then(MochiKit.Base.method(this, 'doneDecrypt', aFileReference)) + .catch(MochiKit.Base.method(this, 'handleException', aFileReference, 'doDecrypt(): decryption failed')); + }, + + doneDecrypt: function(aFileReference, anArrayBuffer) { + this.updateFileInQueue(aFileReference, { + 'status': 'WAITING_SAVE', + 'decryptedArray': new Uint8Array(anArrayBuffer), + }); + }, + + + //========================================================================= + // Queue Processing: SAVE + //========================================================================= + + saveFile: function(aFileReference, anArray, aFileName, aFileType) { + var blob = new Blob([anArray], {type: aFileType}); + saveAs(blob, aFileName); + + this.updateFileInQueue(aFileReference, { + 'status': 'DONE', + }); + }, + + + //========================================================================= + // Exceptions + //========================================================================= + + /** Handles exceptions for upload/download and encrypt/decrypt. Note that + * an exception is thrown also when the user manually cancels the file + * processing. In this case the status remains 'CANCELED'. + */ + handleException: function(aFileReference, aMessage) { + var queueElement = this.getQueueElement(aFileReference); + + if (queueElement['status'] != 'CANCELED') { + this.updateFileInQueue(aFileReference, { + 'status': 'FAILED', + }); + } + + if (aMessage) { + console.log("AttachmentController: caught exception (" + aMessage + ")"); + } + }, + + //========================================================================= + + __syntaxFix__: "syntax fix" +}); \ No newline at end of file diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/AttachmentQueueBox.js b/frontend/delta/js/Clipperz/PM/UI/Components/AttachmentQueueBox.js new file mode 100644 index 0000000..e329111 --- /dev/null +++ b/frontend/delta/js/Clipperz/PM/UI/Components/AttachmentQueueBox.js @@ -0,0 +1,119 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +"use strict"; +Clipperz.Base.module('Clipperz.PM.UI.Components'); + +Clipperz.PM.UI.Components.AttachmentQueueBoxClass = React.createClass({ + + propTypes: { + 'attachmentQueueInfo': React.PropTypes.object.isRequired, + 'attachmentQueueBoxStatus': React.PropTypes.string.isRequired, + }, + + getInitialState: function() { + return { + 'unreadNotifications': [], + }; + }, + + //========================================================================= + // Actions + //========================================================================= + + handleClose: function(aNotificationElement) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'closeAttachmentNotification', aNotificationElement['id']); + }, + + //========================================================================= + // Render Methods + //========================================================================= + + renderNotificationElement: function(aNotificationElement) { + var processIcon, status, closeButton, progressIndicator; + + var queueElement = aNotificationElement['queueElement']; + + processIcon = (queueElement['process'] == 'UPLOAD') ? "\u2b06" : "\u2b07"; + status = "waiting"; + closeButton = null; + progressIndicator = null; + if (queueElement['status'] == 'DOWNLOADING' || queueElement['status'] == 'UPLOADING') { + status = Math.floor(queueElement['requestProgress']*100) + '%'; + progressIndicator = React.DOM.span({'className': 'progress'}, Clipperz.PM.UI.Components.RadialProgressIndicator({'progress': queueElement['requestProgress']})); + } + + if (queueElement['status'] == 'DONE' || queueElement['status'] == 'CANCELED' || queueElement['status'] == 'FAILED') { + status = (queueElement['status'] == 'DONE') ? 'completed' : (queueElement['status'] == 'FAILED') ? "failed" : "canceled"; + + closeButton = React.DOM.span({'className': 'close'}, React.DOM.a({ + 'className': 'close', + 'onClick': MochiKit.Base.method(this, 'handleClose', aNotificationElement), + }, "remove field")); + } + + return React.DOM.li({},[ + React.DOM.span({'className': 'contentType'}, Clipperz.PM.DataModel.Attachment.contentTypeIcon(queueElement['meta']['type'])), + React.DOM.span({'className': 'name'}, queueElement['meta']['name']), + // React.DOM.span({'className': 'size'}, queueElement['meta']['size']), + React.DOM.span({'className': 'status'}, [ + React.DOM.span({'className': 'statusString'}, status), + React.DOM.span({'className': 'processIcon'}, processIcon), + ]), + progressIndicator, + closeButton, + ]); + }, + + renderNotifications: function(someNotifications) { + var result; + + if (someNotifications.length == 0) { + result = React.DOM.p({}, "No attachments in queue"); + } else { + result = MochiKit.Base.map(MochiKit.Base.method(this, 'renderNotificationElement'), someNotifications); + } + + return result; + }, + + // renderNotifications: function(someNotifications) { + // console.log('AttachmentQueueBox.renderNotifications:', someNotifications); + // }, + + render: function () { + //test + this.renderNotifications(this.props['attachmentQueueInfo']['notifications']); + + return React.DOM.div({ + 'className': 'attachmentQueueStatus '+this.props['attachmentQueueBoxStatus'], + }, [ + React.DOM.div({'className': 'arrow'}), + React.DOM.ul({}, this.renderNotifications(this.props['attachmentQueueInfo']['notifications'])), + ]); + } + + //========================================================================= +}); + +Clipperz.PM.UI.Components.AttachmentQueueBox = React.createFactory(Clipperz.PM.UI.Components.AttachmentQueueBoxClass); diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Button.js b/frontend/delta/js/Clipperz/PM/UI/Components/Button.js index 3641fc2..508c815 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Button.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Button.js @@ -30,22 +30,40 @@ Clipperz.PM.UI.Components.ButtonClass = React.createClass({ 'eventName': React.PropTypes.string.isRequired, 'label': React.PropTypes.string.isRequired, 'handler': React.PropTypes.func.isRequired, - 'className': React.PropTypes.string + 'className': React.PropTypes.string, + 'badgeTopContent': React.PropTypes.string, + 'badgeBottomContent': React.PropTypes.string, }, //========================================================================= render: function () { + var badgeTop; + var badgeBottom; + var classes = { 'button': true }; if (typeof(this.props['className']) != 'undefined') { classes[this.props['className']] = true; }; + + badgeTop = null; + if (this.props['badgeTopContent']) { + badgeTop = React.DOM.span({'className': 'badge top'}, this.props['badgeTopContent']); + }; + + badgeBottom = null; + if (this.props['badgeBottomContent']) { + badgeBottom = React.DOM.span({'className': 'badge bottom'}, this.props['badgeBottomContent']); + }; + return React.DOM.div({className:Clipperz.PM.UI.Components.classNames(classes), onClick:this.props['handler']}, [ React.DOM.div({className:this.props['eventName']}, [ - React.DOM.h3({className:'label'}, this.props['label']) + React.DOM.h3({className:'label'}, this.props['label']), + badgeTop, + badgeBottom, ]) ]); } diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/CardToolbar.js b/frontend/delta/js/Clipperz/PM/UI/Components/CardToolbar.js index dc59f3b..5b505c4 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/CardToolbar.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/CardToolbar.js @@ -32,7 +32,8 @@ Clipperz.PM.UI.Components.CardToolbarClass = React.createClass({ 'accountInfo': React.PropTypes.object.isRequired, 'proxyInfo': React.PropTypes.object.isRequired, 'messageBox': React.PropTypes.object.isRequired, - 'filter': React.PropTypes.object /*.isRequired */ + 'filter': React.PropTypes.object /*.isRequired */, + 'attachmentQueueInfo': React.PropTypes.object.isRequired, }, //---------------------------------------------------------------------------- @@ -48,15 +49,31 @@ Clipperz.PM.UI.Components.CardToolbarClass = React.createClass({ MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'toggleSettingsPanel'); }, + attachmentQueueToggleHandler: function(anEvent) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'toggleAttachmentQueueBox'); + }, + //============================================================================ renderWithSidePanels: function () { + var attachmentDownloadNotificationNumber = MochiKit.Base.filter(function(anElement) { + return anElement['queueElement']['process'] == 'DOWNLOAD'; + }, this.props['attachmentQueueInfo']['notifications']).length; + + var attachmentUploadNotificationNumber = this.props['attachmentQueueInfo']['notifications'].length - attachmentDownloadNotificationNumber; + return [ React.DOM.div({className:'selectionToggle'}, [ Clipperz.PM.UI.Components.Button({eventName:'selectionToggleButton', label:"tags", handler:this.selectionToggleHandler}) ]), this.renderWithoutSidePanels(), + // React.DOM.div({className:'attachmentToggle'}, [ + // Clipperz.PM.UI.Components.Button({eventName:'attachmentQueueToggleButton', label:"clipperz", handler:this.attachmentQueueToggleHandler}) + // ]), + + // TODO: validate and adjust names React.DOM.div({className:'settingsToggle'}, [ + Clipperz.PM.UI.Components.Button({eventName:'attachmentQueueToggleButton', label:"\u2191\u2193", handler:this.attachmentQueueToggleHandler, badgeTopContent: attachmentDownloadNotificationNumber, badgeBottomContent: attachmentUploadNotificationNumber}), Clipperz.PM.UI.Components.Button({eventName:'settingsToggleButton', label:"menu", handler:this.settingsToggleHandler}) ]) ]; @@ -70,6 +87,8 @@ Clipperz.PM.UI.Components.CardToolbarClass = React.createClass({ if (this.props['filter']['type'] == 'RECENT') { result = [React.DOM.div({className:'clipperz'}, [React.DOM.span({className:'logo recent'}, "recent")])]; + } else if (this.props['filter']['type'] == 'WITH_ATTACHMENTS') { + result = [React.DOM.div({className:'clipperz'}, [React.DOM.span({className:'logo withAttachments'}, "attachment")])]; } else if (this.props['filter']['type'] == 'TAG') { result = [React.DOM.div({className:'clipperz'}, [ React.DOM.span({className:'logo tag'}, "tag"), diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/CommandToolbar.js b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/CommandToolbar.js index 874c429..86a70d3 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/CommandToolbar.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/CommandToolbar.js @@ -136,6 +136,7 @@ Clipperz.PM.UI.Components.Cards.CommandToolbarClass = React.createClass({ var classes = { 'cardDetailToolbar': true, 'commands': true, + 'top': true, }; classes[style] = true; diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Detail.js b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Detail.js index 1f1440e..515efdc 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Detail.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Detail.js @@ -40,6 +40,7 @@ Clipperz.PM.UI.Components.Cards.DetailClass = React.createClass({ result['showGlobalMask'] = this.props['showGlobalMask']; result['allTags'] = this.props['allTags']; result['preferences'] = this.props['preferences']; + result['attachmentQueueInfo'] = this.props['attachmentQueueInfo']; } return result; diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Edit.js b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Edit.js index 9e2431c..06e93e6 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Edit.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/Edit.js @@ -41,6 +41,8 @@ Clipperz.PM.UI.Components.Cards.EditClass = React.createClass({ 'fromFieldPosition': -1, 'toFieldPosition': -1, 'dropPosition': -1, + + 'skippedFiles': [], }; }, @@ -581,7 +583,14 @@ console.log("DROP"); //, anEvent); }, renderAddNewField: function () { - return React.DOM.div({'className':'newCardField', 'onClick':this.addNewField}, "add new field"); +// return React.DOM.div({'className':'newCardField', 'onClick':this.addNewField}, "add new field"); + return React.DOM.div({'className':'newCardField', 'onClick':this.addNewField}, [ + React.DOM.div({'className':'fieldGhostShadow'}, [ + React.DOM.div({'className':'label'}, ""), + React.DOM.div({'className':'value'}, ""), + ]), + React.DOM.div({'className':'addNewFieldButton'}, "add new field"), + ]); }, //............................................................................ @@ -603,6 +612,210 @@ console.log("DROP"); //, anEvent); //............................................................................ + handleRemoveAttachment: function(anAttachment) { + // MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'cancelAttachment', anAttachment); + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'removeAttachment', this.record(), anAttachment); + }, + + //............................................................................ + + uploadFiles: function(someFiles) { + var i; + + var newSkippedFiles = []; + + for (i = 0; i < someFiles.length; i++) { + var file = someFiles[i]; + + if (file.size <= Clipperz.PM.DataModel.Attachment.MAX_ATTACHMENT_SIZE) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'addAttachment', this.record(), file); + } else { + newSkippedFiles.push(file); + this.setState({'skippedFiles': newSkippedFiles}); + } + } + + // TODO: check compatibility with all browsers + this.refs['attachmentInput'].getDOMNode().value = null; + }, + + //............................................................................ + + handleFileSelect: function(anEvent) { + this.uploadFiles(anEvent.target.files); + }, + + //............................................................................ + + handleOnDrop: function (anEvent) { + anEvent.preventDefault(); + + this.uploadFiles(anEvent.dataTransfer.files); + }, + + handleOnDragOver: function (anEvent) { + // Somehow necessary: + // http://enome.github.io/javascript/2014/03/24/drag-and-drop-with-react-js.html + // https://code.google.com/p/chromium/issues/detail?id=168387 + // http://www.quirksmode.org/blog/archives/2009/09/the_html5_drag.html + anEvent.preventDefault(); + }, + + //............................................................................ + + renderSkippedFiles: function() { + var result; + + result = null; + if (this.state['skippedFiles'].length > 0) { + result = React.DOM.div({'className': 'skippedFiles'},[ + React.DOM.p({}, "The following files exceed the size limit of " + filesize(Clipperz.PM.DataModel.Attachment.MAX_ATTACHMENT_SIZE)), + React.DOM.ul({}, + MochiKit.Base.map(function(aFile) { + return React.DOM.li({}, [ + React.DOM.span({'className': 'filename'}, aFile.name), + React.DOM.span({}, " (" + filesize(aFile.size) + ")"), + ]); + }, this.state['skippedFiles']) + ), + ]); + } + + return result; + }, + + renderAttachmentProgress: function(aStatus, aServerStatus, aProgress) { + var result; + + var broken = (! aServerStatus && (! aStatus || aStatus == 'CANCELED' || aStatus == 'FAILED' || aStatus == 'DONE')); + + result = null; + if (aStatus == 'UPLOADING' || aStatus == 'DOWNLOADING') { + result = Clipperz.PM.UI.Components.RadialProgressIndicator({ + 'progress': aProgress, + 'border': 1 + }); + } else if (! broken && aStatus != 'DONE' && aStatus != 'FAILED' && aServerStatus != 'AVAILABLE') { + result = Clipperz.PM.UI.Components.RadialProgressIndicator({ + 'progress': 0, + 'border': 1, + 'additionalClasses': ['waiting'], + }); + } + + return result; + }, + + renderAttachmentStatus: function(aStatus, aServerStatus, aProgress) { + var result; + + var status = aStatus ? aStatus : false; + + result = null; + + if (status == 'FAILED') { + result = React.DOM.span({'className': 'failed'}, "failed"); + } else if (status == 'UPLOADING' || status == 'DOWNLOADING') { + var actionSymbol = (status == 'UPLOADING') ? "\u2b06" : "\u2b07"; + result = React.DOM.span({'className': 'progressStatus'}, actionSymbol + Math.floor(aProgress*100) + '%'); + } else if (aServerStatus != 'AVAILABLE') { + switch(status) { + case 'CANCELED': + result = React.DOM.span({'className': 'broken'}, "canceled"); + break; + case 'DONE': + result = React.DOM.span({'className': 'broken'}, "failed"); + break; + case false: + result = React.DOM.span({'className': 'broken'}, "failed"); + break; + default: + result = React.DOM.span({'className': 'waiting'}, "waiting"); + } + } + + return result; + }, + + renderAttachmentActions: function(aStatus, aServerStatus, anAttachment) { + var result; + + result = null; + if (aStatus != 'DOWNLOADING') { + result = React.DOM.a({ + 'className': 'remove', + 'onClick': MochiKit.Base.method(this, 'handleRemoveAttachment', anAttachment), + }, "remove field"); + } + + return result; + }, + + renderAttachment: function(anAttachment) { + var queueInfo = this.props['attachmentQueueInfo'].elementFetchCallback(anAttachment._reference) || []; + var queueStatus = queueInfo['status']; + var serverStatus = this.props['attachmentServerStatus'][anAttachment._reference]; + var broken = (! serverStatus && (! queueStatus || queueStatus == 'CANCELED' || queueStatus == 'FAILED' || queueStatus == 'DONE')); + +// console.log(anAttachment['name'], queueStatus) + + var status = this.renderAttachmentStatus(queueStatus, serverStatus, queueInfo['requestProgress']); + var actions = this.renderAttachmentActions(queueStatus, serverStatus, anAttachment['_attachment']); + var progressIndicator = this.renderAttachmentProgress(queueStatus, serverStatus, queueInfo['requestProgress']);; + + return React.DOM.li({ + 'className': (broken) ? 'broken' : '', + 'key': anAttachment._reference + }, [ + React.DOM.span({'className': 'contentType'}, Clipperz.PM.DataModel.Attachment.contentTypeIcon(anAttachment.contentType)), + React.DOM.span({'className': 'meta'}, [ + React.DOM.span({'className': 'name'}, anAttachment.name), + React.DOM.span({'className': 'size'}, filesize(anAttachment.size)), + ]), + React.DOM.span({'className': 'status'}, status), + React.DOM.span({'className': 'progress'}, progressIndicator), + React.DOM.span({'className': 'actions'}, actions), + ]) + }, + + renderAttachments: function(someAttachments) { + return React.DOM.div({'className':'cardAttachmentWrapper'}, [ + React.DOM.div({'className': 'cardAttachments'}, [ + React.DOM.h3({'className': 'summaryText'}, "Attachments"), +// React.DOM.p({'className': 'summaryText'}, someAttachments.length + ' files attached'), + this.renderSkippedFiles(), + React.DOM.ul({'className': 'attachmentList'}, + MochiKit.Base.map(MochiKit.Base.method(this, 'renderAttachment'), someAttachments) + ) + ]), + React.DOM.div({ + 'className': 'cardUploadAttachments', + 'onClick': MochiKit.Base.bind(function() { this.refs['attachmentInput'].getDOMNode().click() }, this), + 'onDragOver': this.handleOnDragOver, + 'onDrop': this.handleOnDrop, + },[ + React.DOM.p({}, "Drag and drop your files here"), + React.DOM.p({}, "or"), + React.DOM.input({ + 'type': 'file', + 'id': 'attachmentInput', + 'className': 'attachmentInput', + 'name': 'attachmentInput', + 'ref': 'attachmentInput', + 'onChange': this.handleFileSelect, + 'multiple': true + }), + React.DOM.a({ + 'className': 'button', + 'onDragOver': this.handleOnDragOver, + 'onDrop': this.handleOnDrop, + }, "select files"), + ]) + ]) + }, + + //............................................................................ + render: function () { var classes = { 'edit': true @@ -618,8 +831,9 @@ console.log("DROP"); //, anEvent); this.renderTags(this.props['tags']), this.renderFields(this.fields()), this.renderAddNewField(), + this.renderAttachments(MochiKit.Base.values(this.props['attachments'])), this.renderNotes(this.props['notes']), - this.renderDirectLogins(this.props['directLogins']) + this.renderDirectLogins(this.props['directLogins']), ]) ]), this.props['ask'] ? Clipperz.PM.UI.Components.DialogBox(this.props['ask']) : null diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/List.js b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/List.js index d873fe3..dc04880 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/List.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/List.js @@ -63,6 +63,7 @@ Clipperz.PM.UI.Components.Cards.ListClass = React.createClass({ result = React.DOM.li({'className':Clipperz.PM.UI.Components.classNames(classes), 'onClick': this.handleClick, 'key':anItem['_reference'], 'data-reference':anItem['_reference'], 'data-label':anItem['label']}, [ // React.DOM.span({'className':'favicon'}, Clipperz.PM.UI.Components.Cards.FavIcon({'src':anItem['favicon']})), React.DOM.span({'className':'label'}, anItem['label']), + React.DOM.span({'className':'attachmentsCount'}, anItem['attachmentsCount'] ? 'attachment' : ''), ]); } diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TagEditor.js b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TagEditor.js index 7746446..eb3dcdc 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TagEditor.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TagEditor.js @@ -130,7 +130,7 @@ Clipperz.PM.UI.Components.Cards.TagEditorClass = React.createClass({ renderEditField: function () { return [ - React.DOM.input({'type':'text', 'list':'tagListData', 'onKeyDown':this.handleKeyDown, 'onBlur':this.handleBlur, 'placeholder': "tag"}), + // React.DOM.input({'type':'text', 'list':'tagListData', 'onKeyDown':this.handleKeyDown, 'onBlur':this.handleBlur, 'placeholder': "tag"}), React.DOM.datalist({'id':'tagListData'}, MochiKit.Base.map(function (aTag) { return React.DOM.option({}, aTag); }, this.listOfTagsNotUsedYet())) ]; }, @@ -145,6 +145,7 @@ Clipperz.PM.UI.Components.Cards.TagEditorClass = React.createClass({ return React.DOM.div({'className':Clipperz.PM.UI.Components.classNames(classes)}, [ React.DOM.ul({},[ MochiKit.Base.map(this.renderTag, this.props['selectedTags']), + this.isReadOnly() ? null : React.DOM.li({}, React.DOM.input({'type':'text', 'list':'tagListData', 'onKeyDown':this.handleKeyDown, 'onBlur':this.handleBlur, 'placeholder': "tag"})), ]), this.isReadOnly() ? null : this.renderEditField() ]); diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TextArea.js b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TextArea.js index 31dcea1..1ac52db 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TextArea.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/TextArea.js @@ -63,6 +63,7 @@ Clipperz.PM.UI.Components.Cards.TextAreaClass = React.createClass({ handleKeyDown: function (anEvent) { switch (anEvent.keyCode) { case 27: // escape +// console.log("ESCAPE"); Mousetrap.trigger('esc'); break; } @@ -78,7 +79,7 @@ Clipperz.PM.UI.Components.Cards.TextAreaClass = React.createClass({ recalculateSize_1: function () { var node = this.getDOMNode(); - node.style.height = 'auto'; + node.style.height = '33px'; node.style.height = node.scrollHeight + 'px'; window.scrollTo(window.scrollLeft, (node.scrollTop + node.scrollHeight)); }, diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/View.js b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/View.js index a231556..461b032 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Cards/View.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Cards/View.js @@ -116,6 +116,17 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({ return result; }, + //---------------------------------------------------------------------------- + + handleGetAttachment: function (anAttachment) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'getAttachment', anAttachment); + }, + + handleCancelDownload: function (anAttachment) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'cancelAttachment', anAttachment); + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'closeAttachment', anAttachment); + }, + //---------------------------------------------------------------------------- renderEmpty: function () { @@ -251,6 +262,132 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({ //............................................................................ + renderAttachmentProgress: function(aStatus, aServerStatus, aProgress) { + var result; + + var broken = (! aServerStatus && (! aStatus || aStatus == 'CANCELED' || aStatus == 'FAILED' || aStatus == 'DONE')); + + result = null; + if (aStatus == 'UPLOADING' || aStatus == 'DOWNLOADING') { + result = Clipperz.PM.UI.Components.RadialProgressIndicator({ + 'progress': aProgress, + 'border': 1 + }); + } else if (! broken && aStatus != 'DONE' && aServerStatus != 'AVAILABLE') { + result = Clipperz.PM.UI.Components.RadialProgressIndicator({ + 'progress': 0, + 'border': 1, + 'additionalClasses': ['waiting'], + }); + } + + return result; + }, + + renderAttachmentStatus: function(aStatus, aServerStatus, aProgress) { + var result; + + var status = aStatus ? aStatus : false; + + result = null; + + if (status == 'FAILED') { + result = React.DOM.span({'className': 'failed'}, "failed"); + } else if (status == 'UPLOADING' || status == 'DOWNLOADING') { + var actionSymbol = (status == 'UPLOADING') ? "\u2b06" : "\u2b07"; + result = React.DOM.span({'className': 'progressStatus'}, actionSymbol + Math.floor(aProgress*100) + '%'); + } else if (aServerStatus != 'AVAILABLE') { + switch(status) { + case 'CANCELED': + result = React.DOM.span({'className': 'broken'}, "canceled"); + break; + case 'DONE': + result = React.DOM.span({'className': 'broken'}, "failed"); + break; + case false: + result = React.DOM.span({'className': 'broken'}, "failed"); + break; + default: + result = React.DOM.span({'className': 'waiting'}, "waiting"); + } + } + + return result; + }, + + renderAttachmentActions: function(aStatus, aServerStatus, anAttachment) { + var result; + + result = null; + if (aStatus == 'DOWNLOADING') { + result = React.DOM.a({ + 'className': 'cancel', + 'onClick': MochiKit.Base.method(this, 'handleCancelDownload', anAttachment) + }, "remove field"); + } else if (aServerStatus == 'AVAILABLE') { + result = React.DOM.a({ + 'className': 'download', + 'onClick': MochiKit.Base.method(this, 'handleGetAttachment', anAttachment), + }, "\u2b07"); + } + + return result; + }, + + renderAttachment: function (anAttachment) { + var result; + + if (this.props['attachmentQueueInfo'].elementFetchCallback != null) { + var queueInfo = this.props['attachmentQueueInfo'].elementFetchCallback(anAttachment._reference) || []; + var queueStatus = queueInfo['status']; + var serverStatus = this.props['attachmentServerStatus'][anAttachment._reference]; + var broken = (! serverStatus && (! queueStatus || queueStatus == 'CANCELED')); + + var status = this.renderAttachmentStatus(queueStatus, serverStatus, queueInfo['requestProgress']); + var actions = this.renderAttachmentActions(queueStatus, serverStatus, anAttachment['_attachment']); + var progressIndicator = this.renderAttachmentProgress(queueStatus, serverStatus, queueInfo['requestProgress']); + + result = React.DOM.li({ + 'className': (broken) ? 'broken' : '', + 'key': anAttachment._reference + }, [ + React.DOM.span({'className': 'contentType'}, Clipperz.PM.DataModel.Attachment.contentTypeIcon(anAttachment.contentType)), + React.DOM.span({'className': 'meta'}, [ + React.DOM.span({'className': 'name'}, anAttachment.name), + React.DOM.span({'className': 'size'}, filesize(anAttachment.size)), + ]), + React.DOM.span({'className': 'status'}, status), + React.DOM.span({'className': 'progress'}, progressIndicator), + React.DOM.span({'className': 'actions'}, actions), + ]) + } else { + result = null; + } + + return result; + }, + + renderAttachments: function(someAttachments) { + var result; + +//console.log("View props:", this.props, someAttachments); + if (someAttachments.length > 0) { + result = React.DOM.div({'className': 'cardAttachments'}, [ + React.DOM.h3({'className': 'summaryText'}, "Attachments"), +// React.DOM.p({'className': 'summaryText'}, someAttachments.length + ' files attached'), + React.DOM.ul({'className': 'attachmentList'}, + MochiKit.Base.map(MochiKit.Base.method(this, 'renderAttachment'), someAttachments) + ) + ]); + } else { + result = []; + } + + return result; + }, + + //............................................................................ + renderCard: function () { var classes = { 'view': true, @@ -263,8 +400,9 @@ Clipperz.PM.UI.Components.Cards.ViewClass = React.createClass({ this.renderLabel(this.props['label']), this.renderTags(this.props['tags']), this.renderFields(this.props['fields']), + this.renderAttachments(MochiKit.Base.values(this.props['attachments'])), this.renderNotes(this.props['notes']), - this.renderDirectLogins(this.props['directLogins']) + this.renderDirectLogins(this.props['directLogins']), ]), this.props['ask'] ? Clipperz.PM.UI.Components.DialogBox(this.props['ask']) : null ]); diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/DocumentEncryptionSandbox.js b/frontend/delta/js/Clipperz/PM/UI/Components/DocumentEncryptionSandbox.js new file mode 100644 index 0000000..4c5f7d3 --- /dev/null +++ b/frontend/delta/js/Clipperz/PM/UI/Components/DocumentEncryptionSandbox.js @@ -0,0 +1,139 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +"use strict"; +Clipperz.Base.module('Clipperz.PM.UI.Components'); + +Clipperz.PM.UI.Components.DocumentEncryptionSandboxClass = React.createClass({ + + getInitialState: function() { + return { + 'documentMeta': null, + 'encryptedDocument': null, + }; + }, + + //========================================================================= + // Event Handlers + //========================================================================= + + handleFileSelect: function(anEvent) { +// console.log("handleFileSelect: files:", anEvent.target.files); + + var fileToRead = anEvent.target.files[0]; + +// console.log(fileToRead); +// return; + + if (fileToRead) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'uploadNewFile', null, fileToRead); + } + }, + + //========================================================================= + // File Handling Methods + //========================================================================= + // handleEncryptionSynchronously: function(aKey, aByteArray) { + // var encryptedDocument; + // var startTime, endTime; + + // console.log("Encrypting..."); + // startTime = Date.now() + // encryptedDocument = Clipperz.Crypto.AES.encrypt(aKey, aByteArray); + // endTime = Date.now(); + // console.log("Finished! Encryption took", (endTime-startTime)/1000, "seconds."); + + // this.setState({ + // 'encryptedDocument': encryptedDocument, + // }); + // }, + + downloadFile: function(aFileReference) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'downloadFile', aFileReference); + }, + + //========================================================================= + // Render Methods + //========================================================================= + + renderUploadButton: function() { + var result; + + if (window.File && window.FileReader && window.FileList && window.Blob) { + result = React.DOM.input({ + 'type': 'file', + 'id': 'files', + 'name': 'files', + 'onChange': this.handleFileSelect, + 'multiple': false + }) + } else { + result = React.DOM.p({}, "Browser doesn't support the FileReader API"); + } + + return result; + }, + + renderQueue: function() { + return MochiKit.Base.map(MochiKit.Base.bind(function(anElement) { + return React.DOM.li({},[ + React.DOM.ul({}, [ + React.DOM.li({}, anElement['meta']['name']), + React.DOM.li({}, anElement['meta']['size']), + React.DOM.li({}, anElement['status']), + React.DOM.li({}, Math.floor((anElement['currentByte']/anElement['meta']['size'])*100)+'%'), + React.DOM.li({}, React.DOM.button({ + 'disabled': ! anElement.isDataReady, + 'onClick': MochiKit.Base.method(this, 'downloadFile', anElement['reference']), + }, "Download File")), + ]) + + ]); + }, this), this.props['attachmentQueueInfo']); + }, + + render: function () { + return React.DOM.div({ + 'style': { + 'position': 'fixed', + 'width': '80%', + 'height': '80%', + 'background': 'white', + 'color': 'black', + 'top': '10%', + 'left': '10%', + 'border': '2px solid black', + 'zIndex': '10' + } + }, [ + React.DOM.p({}, "This is the doc encryption proof of concept."), + React.DOM.p({}, "*Status*: working streaming encryption and decryption! Current size limit is 250MB"), + this.renderUploadButton(), + React.DOM.ul({},this.renderQueue()), + ]); + } + + //========================================================================= +}); + +Clipperz.PM.UI.Components.DocumentEncryptionSandbox = React.createFactory(Clipperz.PM.UI.Components.DocumentEncryptionSandboxClass); diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/ExtraFeatures/OTP.js b/frontend/delta/js/Clipperz/PM/UI/Components/ExtraFeatures/OTP.js index 96e9516..497f71c 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/ExtraFeatures/OTP.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/ExtraFeatures/OTP.js @@ -135,10 +135,10 @@ Clipperz.PM.UI.Components.ExtraFeatures.OTPClass = React.createClass({ '' ); - newWindow.document.close(); - newWindow.focus(); - newWindow.print(); - newWindow.close(); + // newWindow.document.close(); + // newWindow.focus(); + // newWindow.print(); + // newWindow.close(); }, //========================================================================= diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Pages/MainPage.js b/frontend/delta/js/Clipperz/PM/UI/Components/Pages/MainPage.js index 8f15961..77373b1 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Pages/MainPage.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Pages/MainPage.js @@ -34,17 +34,18 @@ Clipperz.PM.UI.Components.Pages.MainPageClass = React.createClass({ }, propTypes: { - 'tags': React.PropTypes.object, - 'allTags': React.PropTypes.array, - 'messageBox': React.PropTypes.object.isRequired, - 'featureSet': React.PropTypes.oneOf(['FULL', 'EXPIRED', 'TRIAL']).isRequired, - 'features': React.PropTypes.array.isRequired, - 'userInfo': React.PropTypes.object.isRequired, - 'accountInfo': React.PropTypes.object.isRequired, - 'style': React.PropTypes.oneOf(Clipperz_PM_UI_availableStyles).isRequired, - 'locked': React.PropTypes.bool, -// 'mediaQueryStyle': React.PropTypes.oneOf(['extra-short', 'narrow', 'wide', 'extra-wide']).isRequired, -// 'cards': React.PropTypes.deferred.isRequired + 'tags': React.PropTypes.object, + 'allTags': React.PropTypes.array, + 'messageBox': React.PropTypes.object.isRequired, + 'featureSet': React.PropTypes.oneOf(['FULL', 'EXPIRED', 'TRIAL']).isRequired, + 'features': React.PropTypes.array.isRequired, + 'userInfo': React.PropTypes.object.isRequired, + 'accountInfo': React.PropTypes.object.isRequired, + 'style': React.PropTypes.oneOf(Clipperz_PM_UI_availableStyles).isRequired, + 'locked': React.PropTypes.bool, + 'attachmentQueueInfo': React.PropTypes.object.isRequired, +// 'mediaQueryStyle': React.PropTypes.oneOf(['extra-short', 'narrow', 'wide', 'extra-wide']).isRequired, +// 'cards': React.PropTypes.deferred.isRequired }, getInitialState: function () { @@ -67,10 +68,11 @@ Clipperz.PM.UI.Components.Pages.MainPageClass = React.createClass({ classes[this.props['style']] = true; result = React.DOM.div({'key':'mainPage', 'className':Clipperz.PM.UI.Components.classNames(classes)}, [ + Clipperz.PM.UI.Components.AttachmentQueueBox(this.props), this.props['style'] != 'extra-wide' ? Clipperz.PM.UI.Components.Panels.SelectionPanel(this.props) : null, Clipperz.PM.UI.Components.Panels.MainPanel(this.props), Clipperz.PM.UI.Components.Panels.ExtraFeaturesPanel(this.props), - this.props['ask'] ? Clipperz.PM.UI.Components.DialogBox(this.props['ask']) : null + this.props['ask'] ? Clipperz.PM.UI.Components.DialogBox(this.props['ask']) : null, ]); } diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Panels/MainPanel.js b/frontend/delta/js/Clipperz/PM/UI/Components/Panels/MainPanel.js index b3c8140..2de3c28 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Panels/MainPanel.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Panels/MainPanel.js @@ -29,11 +29,12 @@ Clipperz.PM.UI.Components.Panels.MainPanelClass = React.createClass({ //========================================================================= propTypes: { - 'allTags': React.PropTypes.array, - 'messageBox': React.PropTypes.object.isRequired, - 'featureSet': React.PropTypes.oneOf(['FULL', 'EXPIRED', 'TRIAL']).isRequired, - 'features': React.PropTypes.array.isRequired, - 'style': React.PropTypes.oneOf(Clipperz_PM_UI_availableStyles).isRequired, + 'allTags': React.PropTypes.array, + 'messageBox': React.PropTypes.object.isRequired, + 'featureSet': React.PropTypes.oneOf(['FULL', 'EXPIRED', 'TRIAL']).isRequired, + 'features': React.PropTypes.array.isRequired, + 'style': React.PropTypes.oneOf(Clipperz_PM_UI_availableStyles).isRequired, + 'attachmentQueueInfo': React.PropTypes.object.isRequired, }, style: function () { diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/RadialProgressIndicator.js b/frontend/delta/js/Clipperz/PM/UI/Components/RadialProgressIndicator.js new file mode 100644 index 0000000..9ef84d0 --- /dev/null +++ b/frontend/delta/js/Clipperz/PM/UI/Components/RadialProgressIndicator.js @@ -0,0 +1,117 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +"use strict"; +Clipperz.Base.module('Clipperz.PM.UI.Components'); + +Clipperz.PM.UI.Components.RadialProgressIndicatorClass = React.createClass({ + + propTypes: { + 'progress': React.PropTypes.number.isRequired, + }, + + getInitialState: function() { + return {}; + }, + + //========================================================================= + + getPathDefinition: function(aRadius, aProgress) { + aProgress = (aProgress <= 1) ? aProgress : 1; + aProgress = (aProgress >= 0) ? aProgress : 0; + + var pi = Math.PI; + var radiantAngle = 2 * pi * aProgress; + + var x = Math.sin( radiantAngle ) * aRadius; + var y = Math.cos( radiantAngle ) * - aRadius; + var mid = (aProgress > 0.5) ? 1 : 0; + + return 'M 0 0 ' + // Start from origin + 'v ' + (-aRadius) +' ' + // Straight vertical up + 'A ' + aRadius + ' ' + aRadius + ' 1 ' + // Arc, vertical radius, horizontal radius, xAxisRotate (?)... + mid + ' 1 ' + // ...lrge arc flag, + x + ' ' + // ...destination x + y + ' z'; // ...destination y, close path + + //[x,y].forEach(function( d ){ + // d = Math.round( d * 1e3 ) / 1e3; + //}); + }, + + //========================================================================= + + getAdditionalClassesString(aList) { + var result; + + aList = aList || []; + result = aList.join(' '); + + return ' '+result; + }, + + render: function () { + var border; + + var additionalClasses = this.getAdditionalClassesString(this.props['additionalClasses']); + + var radius = Clipperz.PM.UI.Components.DEFAULT_RADIUS; + var borderSize = (this.props['border']) ? this.props['border'] : 0; + var boxSize = 2 * (radius + borderSize) + 2; + var center = boxSize/2; + + border = null; + if (this.props['border']) { + border = React.DOM.circle({ + 'className': 'border', + 'cx': center, + 'cy': center, + 'r': radius+this.props['border'], + }); + } + + return React.DOM.svg({ + 'className': 'radialProgressIndicator' + additionalClasses, + 'viewBox': '0 0 ' + boxSize + ' ' + boxSize, + }, [ + border, + React.DOM.circle({ + 'className': 'background', + 'cx': center, + 'cy': center, + 'r': radius, + }), + React.DOM.path({ + 'className': 'progress', + 'transform': 'translate(' + (center) + ', ' + (center) + ')', + 'd': this.getPathDefinition(radius, this.props['progress']) + }) + ]) + } + + //========================================================================= +}); + +Clipperz.PM.UI.Components.RadialProgressIndicator = React.createFactory(Clipperz.PM.UI.Components.RadialProgressIndicatorClass); + +Clipperz.PM.UI.Components.DEFAULT_RADIUS = 10; // You can resize the SVG object with CSS anyway \ No newline at end of file diff --git a/frontend/delta/js/Clipperz/PM/UI/Components/Selections.js b/frontend/delta/js/Clipperz/PM/UI/Components/Selections.js index 1f95787..4ed6e15 100644 --- a/frontend/delta/js/Clipperz/PM/UI/Components/Selections.js +++ b/frontend/delta/js/Clipperz/PM/UI/Components/Selections.js @@ -36,6 +36,10 @@ Clipperz.PM.UI.Components.SelectionsClass = React.createClass({ MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectRecentCards'); }, + selectWithAttachments: function (anEvent) { + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectCardsWithAttachments'); + }, + selectUntaggedCards: function (anEvent) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectUntaggedCards'); }, @@ -76,6 +80,7 @@ Clipperz.PM.UI.Components.SelectionsClass = React.createClass({ var filterValue; //console.log("SELECTIONS PROPS", this.props); +//console.log("withAttachmentCardsCount", this.props['withAttachmentCardsCount']); tagInfo = this.props['tags'] ? this.props['tags'] : {}; tags = MochiKit.Base.filter(Clipperz.PM.DataModel.Record.isRegularTag, MochiKit.Base.keys(tagInfo)).sort(Clipperz.Base.caseInsensitiveCompare); archivedCardsCount = this.props['archivedCardsCount']; @@ -94,7 +99,10 @@ Clipperz.PM.UI.Components.SelectionsClass = React.createClass({ React.DOM.span({'className':'label'}, "Recent"), React.DOM.span({'className':'count'}, this.props['allCardsCount'] ? '10' : '-') ]), -// React.DOM.li({'className':'untaggedCards', 'onClick': this.selectUntaggedCards}, "Untagged - " + this.props['untaggedCardsCount']) + React.DOM.li({'className':'withAttachmentCards', 'onClick': this.selectWithAttachments}, [ + React.DOM.span({'className':'label'}, "With attachments"), + React.DOM.span({'className':'count'}, this.props['withAttachmentCardsCount'] ? this.props['withAttachmentCardsCount'] : '-') + ]), React.DOM.li({'className':'untaggedCards', 'onClick': this.selectUntaggedCards}, [ React.DOM.span({'className':'label'}, "Untagged"), React.DOM.span({'className':'count'}, this.props['untaggedCardsCount'] ? this.props['untaggedCardsCount'] : '-') diff --git a/frontend/delta/js/Clipperz/PM/UI/MainController.js b/frontend/delta/js/Clipperz/PM/UI/MainController.js index 0e732bb..e8f3dc4 100644 --- a/frontend/delta/js/Clipperz/PM/UI/MainController.js +++ b/frontend/delta/js/Clipperz/PM/UI/MainController.js @@ -35,6 +35,7 @@ Clipperz.PM.UI.MainController = function() { this._isSelectionPanelOpen = false; this._isSettingsPanelOpen = false; + this._isAttachmentQueueBoxOpen = false; this._pageStack = ['loadingPage']; this._overlay = new Clipperz.PM.UI.Components.Overlay(); @@ -75,9 +76,9 @@ Clipperz.PM.UI.MainController = function() { 'importCards', 'downloadExport', 'updateProgress', - 'toggleSelectionPanel', 'hideSelectionPanel', 'toggleSettingsPanel', + 'toggleSelectionPanel', 'hideSelectionPanel', 'toggleSettingsPanel', 'toggleAttachmentQueueBox', 'matchMediaQuery', 'unmatchMediaQuery', - 'selectAllCards', 'selectRecentCards', 'search', 'tagSelected', 'selectUntaggedCards', + 'selectAllCards', 'selectRecentCards', 'selectCardsWithAttachments', 'selectUntaggedCards', 'tagSelected', 'search', 'refreshCardEditDetail', 'saveCardEdits', 'cancelCardEdits', 'selectCard', @@ -90,9 +91,16 @@ Clipperz.PM.UI.MainController = function() { 'closeHelp', 'downloadOfflineCopy', 'runDirectLogin', 'removeDirectLogin', - 'exitSearch' + 'exitSearch', + 'updateAttachmentQueueInfo', 'addAttachment', 'removeAttachment', 'getAttachment', 'cancelAttachment', 'closeAttachmentNotification', ]); + this._attachmentController = new Clipperz.PM.UI.AttachmentController({ + 'uploadMessageCallback': MochiKit.Base.method(this, 'uploadMessageCallback'), + 'downloadMessageCallback': MochiKit.Base.method(this, 'downloadMessageCallback'), + 'reloadServerStatusCallback': MochiKit.Base.method(this, 'reloadAttachmentServerStatusCallback') + }); + Mousetrap.bind(['/'], MochiKit.Base.method(this, 'focusOnSearch')); Mousetrap.bind(['left', 'h', 'esc'], MochiKit.Base.method(this, 'exitCurrentSelection')); @@ -205,7 +213,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); renderPages: function (pages) { var self = this; MochiKit.Iter.forEach(pages, function (aPageName) { -//console.log("RENDERING", aPageName); self._pages[aPageName] = React.render( Clipperz.PM.UI.Components.Pages[self.capitaliseFirstLetter(aPageName)](self.pageProperties(aPageName)), MochiKit.DOM.getElement(aPageName) @@ -437,7 +444,7 @@ Clipperz.log("THE BROWSER IS OFFLINE"); getPassphraseDelegate = MochiKit.Base.partial(MochiKit.Async.succeed, passphrase); user = new Clipperz.PM.DataModel.User({'username':oldUser.username(), 'getPassphraseFunction':getPassphraseDelegate}); - deferredResult = new Clipperz.Async.Deferred('MainController.unlock_handler', {trace:true}); + deferredResult = new Clipperz.Async.Deferred('MainController.unlock_handler', {trace:false}); deferredResult.addMethod(unlockPage, 'setProps', {'disabled': true}); @@ -539,7 +546,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); }, setUser: function (aUser) { -//console.log("SET USER", aUser); this._user = aUser; return this._user; }, @@ -604,11 +610,30 @@ Clipperz.log("THE BROWSER IS OFFLINE"); return deferredResult; }, + + collectAttachmentInfo: function(anAttachment) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred('MainController.collectAttachmentInfo', {trace:false}); + deferredResult.setValue('_attachment'); // The object itself, maybe this should be the only value being passed + deferredResult.addMethod(anAttachment, 'reference'); + deferredResult.setValue('_reference'); + deferredResult.addMethod(anAttachment, 'name'); + deferredResult.setValue('name'); + deferredResult.addMethod(anAttachment, 'contentType'); + deferredResult.setValue('contentType'); + deferredResult.addMethod(anAttachment, 'size'); + deferredResult.setValue('size'); + deferredResult.values(); + + deferredResult.callback(anAttachment); + + return deferredResult; + }, collectRecordInfo: function (aRecord) { var deferredResult; -//console.log("collectRecordInfo"); deferredResult = new Clipperz.Async.Deferred('MainController.collectRecordInfo', {trace:false}); deferredResult.setValue('_record'); deferredResult.addMethod(aRecord, 'reference'); @@ -631,12 +656,21 @@ Clipperz.log("THE BROWSER IS OFFLINE"); deferredResult.addCallback(Clipperz.Async.collectAll); deferredResult.setValue('fields'); + deferredResult.addMethod(aRecord, 'attachments'); + deferredResult.addCallback(MochiKit.Base.values); + deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'collectAttachmentInfo')); + deferredResult.addCallback(Clipperz.Async.collectAll); + deferredResult.setValue('attachments'); + deferredResult.addMethod(aRecord, 'directLogins'); deferredResult.addCallback(MochiKit.Base.values); deferredResult.addCallback(MochiKit.Base.map, MochiKit.Base.method(this, 'collectDirectLoginInfo')); deferredResult.addCallback(Clipperz.Async.collectAll); deferredResult.setValue('directLogins'); + deferredResult.addMethod(aRecord, 'getAttachmentServerStatus'); + deferredResult.setValue('attachmentServerStatus'); + deferredResult.values(); deferredResult.callback(aRecord); @@ -668,8 +702,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); deferredResult = new Clipperz.Async.Deferred('MainController.updateSelectedCard', {trace:false}); deferredResult.addMethod(this.user(), 'getRecord', someInfo['reference']); -// deferredResult.addMethod(this, function(d) {console.log(d); return d;}); - deferredResult.addMethod(this, 'collectRecordInfo'); deferredResult.addMethod(this, 'setPageProperties', 'mainPage', 'selectedCard'); if ((this.mediaQueryStyle() == 'narrow') && shouldShowCardDetail) { @@ -774,6 +806,10 @@ Clipperz.log("THE BROWSER IS OFFLINE"); filterCriteria = MochiKit.Base.operator.truth; sortCriteria = Clipperz.Base.reverseComparator(MochiKit.Base.keyComparator('_accessDate')); rangeFilter = function (someCards) { return someCards.slice(0, 10)}; + } else if (aFilter['type'] == 'WITH_ATTACHMENTS') { + filterCriteria = function (aRecordInfo) { return aRecordInfo.attachmentsCount > 0; }; + sortCriteria = Clipperz.Base.caseInsensitiveKeyComparator('label'); + rangeFilter = MochiKit.Base.operator.identity; } else if (aFilter['type'] == 'SEARCH') { filterCriteria = this.regExpFilterGenerator(Clipperz.PM.DataModel.Record.regExpForSearch(aFilter['value'])); sortCriteria = Clipperz.Base.caseInsensitiveKeyComparator('label'); @@ -879,7 +915,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); MochiKit.Base.method(this.user(), 'getPreference', 'lock'), MochiKit.Base.bind(function (someLockInfo) { if (this._lockTimeout) { -// console.log("clearing previous lock timer"); clearTimeout(this._lockTimeout); } @@ -902,7 +937,7 @@ Clipperz.log("THE BROWSER IS OFFLINE"); ? MochiKit.Async.succeed : MochiKit.Base.partial(MochiKit.Base.filter, function (someRecordInfo) { return ! someRecordInfo['_isArchived']; }); - return Clipperz.Async.callbacks("MainController.getUntaggedCardsCount", [ + return Clipperz.Async.callbacks("MainController.getAllCardsCount", [ MochiKit.Base.method(this.user(), 'getRecords'), MochiKit.Base.partial(MochiKit.Base.map, Clipperz.Async.collectResults("collectResults", {'_fullLabel':MochiKit.Base.methodcaller('fullLabel'), '_isArchived':MochiKit.Base.methodcaller('isArchived')}, {trace:false})), Clipperz.Async.collectAll, @@ -910,7 +945,23 @@ Clipperz.log("THE BROWSER IS OFFLINE"); function (someCards) { return someCards.length; }, ], {trace:false}); }, - + + getCardsWithAttachmentsCount: function () { + var archivedCardsFilter = this.shouldIncludeArchivedCards() + ? MochiKit.Async.succeed + : MochiKit.Base.partial(MochiKit.Base.filter, function (someRecordInfo) { return ! someRecordInfo['_isArchived']; }); + + return Clipperz.Async.callbacks("MainController.getCardsWithAttachmentsCount", [ + MochiKit.Base.method(this.user(), 'getRecords'), + MochiKit.Base.partial(MochiKit.Base.map, Clipperz.Async.collectResults("collectResults", {'attachmentsCount':MochiKit.Base.methodcaller('attachmentsCount'), '_isArchived':MochiKit.Base.methodcaller('isArchived')}, {trace:false})), + Clipperz.Async.collectAll, + archivedCardsFilter, + function (aResult) { + return MochiKit.Base.filter(function (aRecordInfo) { return aRecordInfo['attachmentsCount'] > 0; }, aResult).length; + } + ], {trace:false}); + }, + getArchivedCardsCount: function () { return Clipperz.Async.callbacks("MainController.getArchivedCardsCount", [ MochiKit.Base.method(this.user(), 'getRecords'), @@ -961,6 +1012,8 @@ Clipperz.log("THE BROWSER IS OFFLINE"); MochiKit.Base.method(this, 'setPageProperties', 'mainPage', 'allTags'), MochiKit.Base.method(this, 'getAllCardsCount'), MochiKit.Base.method(this, 'setPageProperties', 'mainPage', 'allCardsCount'), + MochiKit.Base.method(this, 'getCardsWithAttachmentsCount'), + MochiKit.Base.method(this, 'setPageProperties', 'mainPage', 'withAttachmentCardsCount'), MochiKit.Base.method(this, 'getArchivedCardsCount'), MochiKit.Base.method(this, 'setPageProperties', 'mainPage', 'archivedCardsCount'), MochiKit.Base.method(this, 'getUntaggedCardsCount'), @@ -979,9 +1032,12 @@ Clipperz.log("THE BROWSER IS OFFLINE"); //========================================================================= runApplication: function (anUser) { + window.history.replaceState({selectedCardInfo: null}, "", window.location.toString()); + window.history.pushState({selectedCardInfo: null}, "", window.location.toString()); // Hack to support filters undo with no other actions this.moveInPage(this.currentPage(), 'mainPage'); MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'enableLock'); this.resetLockTimeout(); + this.registerHistoryHandler(); return this.renderAccountData(); }, @@ -1129,11 +1185,13 @@ Clipperz.log("THE BROWSER IS OFFLINE"); this.slidePage(MochiKit.DOM.getElement(fromPage), MochiKit.DOM.getElement(toPage), 'LEFT'); this.setCurrentPage(toPage); - if (shouldAddItemToHistory) { - window.history.pushState({'fromPage': fromPage, 'toPage': toPage}, ""); - } else { + // Skipping push on page change: history needs to be more granular + // New states are pushed on user actions (view card, back to main page, ...) + // if (shouldAddItemToHistory) { + // window.history.pushState({'fromPage': fromPage, 'toPage': toPage}, ""); + // } else { //console.log("Skip HISTORY"); - } + // } } else { //console.log("No need to move in the same page"); } @@ -1202,6 +1260,32 @@ Clipperz.log("THE BROWSER IS OFFLINE"); } }, + attachmentController: function () { + return this._attachmentController; + }, + + attachmentQueueInfo: function() { + var queue; + var notifications; + var elementFetchCallback; + + if (this._attachmentController) { + queue = this._attachmentController.getQueueInfo(); + notifications = this._attachmentController.getNotificationsInfo(); + elementFetchCallback = MochiKit.Base.method(this._attachmentController, 'getQueueElement'); + } else { + queue = []; + notifications = []; + elementFetchCallback = null; + } + + return { + 'queue': queue, + 'notifications': notifications, + 'elementFetchCallback': elementFetchCallback, + } + }, + //------------------------------------------------------------------------- messageBoxContent: function () { @@ -1211,7 +1295,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); message = ""; level = 'HIDE'; -//console.log("messageBox - this.user()", this.user()); if (this.featureSet() == 'EXPIRED') { message = "Expired subscription"; level = 'ERROR'; @@ -1261,12 +1344,14 @@ Clipperz.log("THE BROWSER IS OFFLINE"); 'messageBox': this.messageBoxContent(), 'userInfo': this.userInfo(), 'accountInfo': this.userAccountInfo(), - 'selectionPanelStatus': this.isSelectionPanelOpen() ? 'OPEN' : 'CLOSED', - 'settingsPanelStatus': this.isSettingsPanelOpen() ? 'OPEN' : 'CLOSED', + 'selectionPanelStatus': this.isSelectionPanelOpen() ? 'OPEN' : 'CLOSED', + 'settingsPanelStatus': this.isSettingsPanelOpen() ? 'OPEN' : 'CLOSED', + 'attachmentQueueBoxStatus': this.isAttachmentQueueBoxOpen() ? 'OPEN' : 'CLOSED', 'featureSet': this.featureSet(), 'features': this.features(), 'proxyInfo': this.proxyInfo(), - 'locked': false + 'locked': false, + 'attachmentQueueInfo': this.attachmentQueueInfo(), // 'shouldIncludeArchivedCards': this.shouldIncludeArchivedCards(), // 'cards': …, // 'tags': …, @@ -1274,6 +1359,7 @@ Clipperz.log("THE BROWSER IS OFFLINE"); }; } else if (aPageName == 'cardDetailPage') { extraProperties = { + 'attachmentQueueInfo': this.attachmentQueueInfo(), }; } else if (aPageName == 'errorPage') { extraProperties = { @@ -1367,6 +1453,15 @@ Clipperz.log("THE BROWSER IS OFFLINE"); this.refreshCurrentPage(); }, + isAttachmentQueueBoxOpen: function() { + return this._isAttachmentQueueBoxOpen; + }, + + toggleAttachmentQueueBox_handler: function (anEvent) { + this._isAttachmentQueueBoxOpen = !this._isAttachmentQueueBoxOpen; + this.refreshCurrentPage(); + }, + //---------------------------------------------------------------------------- selectedCardInfo: function () { @@ -1487,6 +1582,8 @@ Clipperz.log("THE BROWSER IS OFFLINE"); selectCard_handler: function (someInfo, shouldUpdateCardDetail) { this.selectCard(someInfo, shouldUpdateCardDetail); + window.history.pushState({selectedCardInfo: someInfo}, "", window.location.toString()); + // console.log("pushing state"); }, refreshCardEditDetail_handler: function (aRecordReference) { @@ -1689,6 +1786,10 @@ Clipperz.log("THE BROWSER IS OFFLINE"); }, cancelCardEdits_handler: function (aRecordReference) { + return this.cancelCardEdits(aRecordReference); + }, + + cancelCardEdits: function (aRecordReference) { var currentPage = this.pages()[this.currentPage()]; var self = this; var wasBrandNew; @@ -1699,7 +1800,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); function (aValue) { wasBrandNew = aValue }, MochiKit.Base.method(this.user(), 'hasPendingChanges'), -//function (aValue) { console.log("2- USER.hasPendingChanges()", aValue); return aValue; }, Clipperz.Async.deferredIf('HasPendingChanges',[ MochiKit.Base.method(self, 'ask', { 'question': "There are pending changes to your card. Ignore changes?", @@ -1808,7 +1908,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); cloneCard_handler: function (anEvent) { var cardInfo; -//console.log("CLONE CARD", anEvent['reference']); return Clipperz.Async.callbacks("MainController.cloneCard_handler", [ MochiKit.Base.method(this.user(), 'getRecord', anEvent['reference']), MochiKit.Base.method(this.user(), 'cloneRecord'), @@ -1827,6 +1926,11 @@ Clipperz.log("THE BROWSER IS OFFLINE"); MochiKit.Base.method(this, 'refreshUI'), ], {trace:false}); }, + + isPageInEditMode: function() { + var currentPage = this.pages()[this.currentPage()]; + return currentPage.props['mode'] == 'edit'; + }, enterEditMode: function () { var currentPage = this.pages()[this.currentPage()]; @@ -1844,8 +1948,6 @@ Clipperz.log("THE BROWSER IS OFFLINE"); }, editCard_handler: function (anEvent) { -//console.log("EDIT CARD", anEvent['reference']); -// this.pages()[this.currentPage()].setProps({'mode': 'edit'}); this.enterEditMode(); }, @@ -1881,11 +1983,16 @@ Clipperz.log("THE BROWSER IS OFFLINE"); goBackToMainPage_handler: function (anEvent) { this.goBackToMainPage(anEvent); + window.history.pushState({selectedCardInfo: null}, "", window.location.toString()); }, //============================================================================ selectAllCards_handler: function () { + this.selectAllCards(); + }, + + selectAllCards: function () { this.setPageProperties('mainPage', 'searchTerm', ''); this.resetSelectedCard(); this.setFilter('ALL'); @@ -1900,6 +2007,13 @@ Clipperz.log("THE BROWSER IS OFFLINE"); return this.refreshSelectedCards(); }, + selectCardsWithAttachments_handler: function () { + this.resetSelectedCard(); + this.setFilter('WITH_ATTACHMENTS'); + MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'hideSelectionPanel'); + return this.refreshSelectedCards(); + }, + search_handler: function (aValue) { this.resetSelectedCard(); @@ -2044,7 +2158,7 @@ Clipperz.log("THE BROWSER IS OFFLINE"); prevCardInfo = this.previousCardInfo(); shouldUpdateCardDetail = this.shouldShowCardDetailWhenMovingBetweenCardsUsingKeys(); -//console.log("PREV CARD INFO", prevCardInfo); + if (prevCardInfo != null) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectCard', prevCardInfo, shouldUpdateCardDetail); } @@ -2056,7 +2170,7 @@ Clipperz.log("THE BROWSER IS OFFLINE"); nextCardInfo = this.nextCardInfo(); shouldUpdateCardDetail = this.shouldShowCardDetailWhenMovingBetweenCardsUsingKeys(); -//console.log("NEXT CARD INFO", shouldUpdateCardDetail); + if (nextCardInfo != null) { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'selectCard', nextCardInfo, shouldUpdateCardDetail); } @@ -2086,6 +2200,128 @@ Clipperz.log("THE BROWSER IS OFFLINE"); }, //============================================================================ + + updateAttachmentQueueInfo_handler: function(someProperties) { + this.setPageProperties(this.currentPage(), 'attachmentQueueInfo', this.attachmentQueueInfo()); + }, + + addAttachment_handler: function(aRecord, aFile) { // aReference, someMetadata, aKey, aNonce + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("MainController.addCardAttachment_handler", {'trace':false}); + + deferredResult.addMethod(aRecord, 'createNewAttachment'); + deferredResult.addCallback(MochiKit.Base.methodcaller('setFile', aFile)); + deferredResult.addMethod(this.attachmentController(), 'addAttachment'); + deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'refreshCardEditDetail', aRecord.reference()); + deferredResult.callback(); + + return deferredResult; + }, + + uploadMessageCallback: function(someArguments, aProgressCallback) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("MainController.uploadMessageCallback", {'trace':false}); + deferredResult.addMethod(this.user().connection(), 'uploadAttachment', someArguments, aProgressCallback); + deferredResult.callback(); + + return deferredResult; + }, + + //---------------------------------------------------------------------------- + + removeAttachment_handler: function(aRecord, anAttachment) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("MainController.removeAttachment_handler", {trace: false}); + deferredResult.addCallback(MochiKit.Base.method(this, 'ask', { + 'question': "Do you really want to delete this attachment?", + 'possibleAnswers':{ + 'cancel': {'label':"No", 'isDefault':true, 'answer':MochiKit.Base.methodcaller('cancel', new MochiKit.Async.CancelledError())}, + 'revert': {'label':"Yes", 'isDefault':false, 'answer':MochiKit.Base.methodcaller('callback')} + } + })), + deferredResult.addMethod(this, 'cancelAttachment_handler', anAttachment); + deferredResult.addMethod(aRecord, 'removeAttachment', anAttachment); + deferredResult.addCallback(MochiKit.Signal.signal, Clipperz.Signal.NotificationCenter, 'refreshCardEditDetail', aRecord.reference()); + + deferredResult.callback(); + + return deferredResult; + }, + + //---------------------------------------------------------------------------- + + getAttachment_handler: function(anAttachment) { + this.attachmentController().getAttachment(anAttachment); + }, + + downloadMessageCallback: function(anAttachment, aProgressCallback) { + var deferredResult; + + deferredResult = new Clipperz.Async.Deferred("MainController.downloadAttachment_handler", {'trace':false}); + deferredResult.addMethod(this.user().connection(), 'downloadAttachment', { + 'reference': anAttachment.reference() + }, aProgressCallback); + deferredResult.callback(); + + return deferredResult; + }, + + //---------------------------------------------------------------------------- + + cancelAttachment_handler: function(anAttachment) { + return this.attachmentController().cancelAttachment(anAttachment); + }, + + closeAttachmentNotification_handler: function(aNotificationId) { + return this.attachmentController().removeNotification(aNotificationId); + }, + + //---------------------------------------------------------------------------- + + reloadAttachmentServerStatusCallback: function(aRecord) { + return Clipperz.Async.callbacks("MainController.reloadAttachmentServerStatus_handler", [ + MochiKit.Base.method(this.user(), 'getRecordDetail', aRecord), + MochiKit.Base.bind(function () { + if (this._selectedCardInfo && this._selectedCardInfo['reference']) { + return this.refreshUI(this._selectedCardInfo['reference']); + } + }, this), + ], {trace:false}); + }, + + //============================================================================ + + registerHistoryHandler: function() { + window.onpopstate = MochiKit.Base.method(this, 'handleOnpopstate'); + }, + + handleOnpopstate: function (anEvent) { + if (this.filter().type != 'ALL') { + this.selectAllCards(); + window.history.pushState(window.history.state, "", window.location.toString()); + } else if(anEvent.state) { + if (this.isPageInEditMode()) { + window.history.pushState({selectedCardInfo: this.selectedCardInfo()}, "", window.location.toString()); + this.cancelCardEdits(this.selectedCardReference()); + } else { + if (anEvent.state['selectedCardInfo']) { + this.selectCard(anEvent.state['selectedCardInfo'], true); + } else { + this.selectCard(null, true); + this.goBackToMainPage(); + } + } + } + + // console.log('History changed', anEvent.state); + }, + + //============================================================================ + + /* wrongAppVersion: function (anError) { // this.pages()['errorPage'].setProps({message:anError.message}); diff --git a/frontend/delta/js/Clipperz/Sound.js b/frontend/delta/js/Clipperz/Sound.js new file mode 100644 index 0000000..665c035 --- /dev/null +++ b/frontend/delta/js/Clipperz/Sound.js @@ -0,0 +1,30 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +"use strict"; +Clipperz.Base.module('Clipperz.Sound'); + +Clipperz.Sound.beep = function() { + var snd = new Audio("data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU="); + snd.play(); +}; diff --git a/frontend/delta/js/Filesize/filesize.es6.js b/frontend/delta/js/Filesize/filesize.es6.js new file mode 100644 index 0000000..868f352 --- /dev/null +++ b/frontend/delta/js/Filesize/filesize.es6.js @@ -0,0 +1,171 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +/** + * filesize + * + * @author Jason Mulligan + * @copyright 2015 Jason Mulligan + * @license BSD-3-Clause + * @link http://filesizejs.com + * @module filesize + * @version 3.1.3 + */ +( global ) => { +const bit = /b$/; +const si = { + bits: [ "B", "kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb" ], + bytes: [ "B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" ] +}; + +/** + * filesize + * + * @method filesize + * @param {Mixed} arg String, Int or Float to transform + * @param {Object} descriptor [Optional] Flags + * @return {String} Readable file size String + */ +let filesize = ( arg, descriptor={} ) => { + let result = []; + let skip = false; + let val = 0; + let e, base, bits, ceil, neg, num, output, round, unix, spacer, suffixes; + + if ( isNaN( arg ) ) { + throw new Error( "Invalid arguments" ); + } + + bits = ( descriptor.bits === true ); + unix = ( descriptor.unix === true ); + base = descriptor.base !== undefined ? descriptor.base : 2; + round = descriptor.round !== undefined ? descriptor.round : unix ? 1 : 2; + spacer = descriptor.spacer !== undefined ? descriptor.spacer : unix ? "" : " "; + suffixes = descriptor.suffixes !== undefined ? descriptor.suffixes : {}; + output = descriptor.output !== undefined ? descriptor.output : "string"; + e = descriptor.exponent !== undefined ? descriptor.exponent : -1; + num = Number( arg ); + neg = ( num < 0 ); + ceil = base > 2 ? 1000 : 1024; + + // Flipping a negative number to determine the size + if ( neg ) { + num = -num; + } + + // Zero is now a special case because bytes divide by 1 + if ( num === 0 ) { + result[ 0 ] = 0; + + if ( unix ) { + result[ 1 ] = ""; + } + else { + result[ 1 ] = "B"; + } + } + else { + // Determining the exponent + if ( e === -1 || isNaN( e ) ) { + e = Math.floor( Math.log( num ) / Math.log( ceil ) ); + } + + // Exceeding supported length, time to reduce & multiply + if ( e > 8 ) { + val = val * ( 1000 * ( e - 8 ) ); + e = 8; + } + + if ( base === 2 ) { + val = num / Math.pow( 2, ( e * 10 ) ); + } + else { + val = num / Math.pow( 1000, e ); + } + + if ( bits ) { + val = ( val * 8 ); + + if ( val > ceil ) { + val = val / ceil; + e++; + } + } + + result[ 0 ] = Number( val.toFixed( e > 0 ? round : 0 ) ); + result[ 1 ] = si[ bits ? "bits" : "bytes" ][ e ]; + + if ( !skip && unix ) { + if ( bits && bit.test( result[ 1 ] ) ) { + result[ 1 ] = result[ 1 ].toLowerCase(); + } + + result[ 1 ] = result[ 1 ].charAt( 0 ); + + if ( result[ 1 ] === "B" ) { + result[ 0 ] = Math.floor( result[ 0 ] ); + result[ 1 ] = ""; + } + else if ( !bits && result[ 1 ] === "k" ) { + result[ 1 ] = "K"; + } + } + } + + // Decorating a 'diff' + if ( neg ) { + result[ 0 ] = -result[ 0 ]; + } + + // Applying custom suffix + result[ 1 ] = suffixes[ result[ 1 ] ] || result[ 1 ]; + + // Returning Array, Object, or String (default) + if ( output === "array" ) { + return result; + } + + if ( output === "exponent" ) { + return e; + } + + if ( output === "object" ) { + return { value: result[ 0 ], suffix: result[ 1 ] }; + } + + return result.join( spacer ); +} + +// CommonJS, AMD, script tag +if ( typeof exports !== "undefined" ) { + module.exports = filesize; +} +else if ( typeof define === "function" ) { + define( () => { + return filesize; + } ); +} +else { + global.filesize = filesize; +} +}( typeof global !== "undefined" ? global : window ); diff --git a/frontend/delta/js/Filesize/filesize.js b/frontend/delta/js/Filesize/filesize.js new file mode 100644 index 0000000..0d25b7b --- /dev/null +++ b/frontend/delta/js/Filesize/filesize.js @@ -0,0 +1,179 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +"use strict"; + +/** + * filesize + * + * @author Jason Mulligan + * @copyright 2015 Jason Mulligan + * @license BSD-3-Clause + * @link http://filesizejs.com + * @module filesize + * @version 3.1.3 + */ +(function (global) { + var bit = /b$/; + var si = { + bits: ["B", "kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb"], + bytes: ["B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"] + }; + + /** + * filesize + * + * @method filesize + * @param {Mixed} arg String, Int or Float to transform + * @param {Object} descriptor [Optional] Flags + * @return {String} Readable file size String + */ + var filesize = function (arg) { + var descriptor = arguments[1] === undefined ? {} : arguments[1]; + + var result = []; + var skip = false; + var val = 0; + var e = undefined, + base = undefined, + bits = undefined, + ceil = undefined, + neg = undefined, + num = undefined, + output = undefined, + round = undefined, + unix = undefined, + spacer = undefined, + suffixes = undefined; + + if (isNaN(arg)) { + throw new Error("Invalid arguments"); + } + + bits = descriptor.bits === true; + unix = descriptor.unix === true; + base = descriptor.base !== undefined ? descriptor.base : 2; + round = descriptor.round !== undefined ? descriptor.round : unix ? 1 : 2; + spacer = descriptor.spacer !== undefined ? descriptor.spacer : unix ? "" : " "; + suffixes = descriptor.suffixes !== undefined ? descriptor.suffixes : {}; + output = descriptor.output !== undefined ? descriptor.output : "string"; + e = descriptor.exponent !== undefined ? descriptor.exponent : -1; + num = Number(arg); + neg = num < 0; + ceil = base > 2 ? 1000 : 1024; + + // Flipping a negative number to determine the size + if (neg) { + num = -num; + } + + // Zero is now a special case because bytes divide by 1 + if (num === 0) { + result[0] = 0; + + if (unix) { + result[1] = ""; + } else { + result[1] = "B"; + } + } else { + // Determining the exponent + if (e === -1 || isNaN(e)) { + e = Math.floor(Math.log(num) / Math.log(ceil)); + } + + // Exceeding supported length, time to reduce & multiply + if (e > 8) { + val = val * (1000 * (e - 8)); + e = 8; + } + + if (base === 2) { + val = num / Math.pow(2, e * 10); + } else { + val = num / Math.pow(1000, e); + } + + if (bits) { + val = val * 8; + + if (val > ceil) { + val = val / ceil; + e++; + } + } + + result[0] = Number(val.toFixed(e > 0 ? round : 0)); + result[1] = si[bits ? "bits" : "bytes"][e]; + + if (!skip && unix) { + if (bits && bit.test(result[1])) { + result[1] = result[1].toLowerCase(); + } + + result[1] = result[1].charAt(0); + + if (result[1] === "B") { + result[0] = Math.floor(result[0]); + result[1] = ""; + } else if (!bits && result[1] === "k") { + result[1] = "K"; + } + } + } + + // Decorating a 'diff' + if (neg) { + result[0] = -result[0]; + } + + // Applying custom suffix + result[1] = suffixes[result[1]] || result[1]; + + // Returning Array, Object, or String (default) + if (output === "array") { + return result; + } + + if (output === "exponent") { + return e; + } + + if (output === "object") { + return { value: result[0], suffix: result[1] }; + } + + return result.join(spacer); + }; + + // CommonJS, AMD, script tag + if (typeof exports !== "undefined") { + module.exports = filesize; + } else if (typeof define === "function") { + define(function () { + return filesize; + }); + } else { + global.filesize = filesize; + } +})(typeof global !== "undefined" ? global : window); \ No newline at end of file diff --git a/frontend/delta/js/Filesize/filesize.min.js b/frontend/delta/js/Filesize/filesize.min.js new file mode 100644 index 0000000..8d2b860 --- /dev/null +++ b/frontend/delta/js/Filesize/filesize.min.js @@ -0,0 +1,29 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +/* + 2015 + @version 3.1.3 + */ +"use strict";!function(a){var b=/b$/,c={bits:["B","kb","Mb","Gb","Tb","Pb","Eb","Zb","Yb"],bytes:["B","kB","MB","GB","TB","PB","EB","ZB","YB"]},d=function(a){var d=void 0===arguments[1]?{}:arguments[1],e=[],f=!1,g=0,h=void 0,i=void 0,j=void 0,k=void 0,l=void 0,m=void 0,n=void 0,o=void 0,p=void 0,q=void 0,r=void 0;if(isNaN(a))throw new Error("Invalid arguments");return j=d.bits===!0,p=d.unix===!0,i=void 0!==d.base?d.base:2,o=void 0!==d.round?d.round:p?1:2,q=void 0!==d.spacer?d.spacer:p?"":" ",r=void 0!==d.suffixes?d.suffixes:{},n=void 0!==d.output?d.output:"string",h=void 0!==d.exponent?d.exponent:-1,m=Number(a),l=0>m,k=i>2?1e3:1024,l&&(m=-m),0===m?(e[0]=0,e[1]=p?"":"B"):((-1===h||isNaN(h))&&(h=Math.floor(Math.log(m)/Math.log(k))),h>8&&(g=1e3*g*(h-8),h=8),g=2===i?m/Math.pow(2,10*h):m/Math.pow(1e3,h),j&&(g=8*g,g>k&&(g/=k,h++)),e[0]=Number(g.toFixed(h>0?o:0)),e[1]=c[j?"bits":"bytes"][h],!f&&p&&(j&&b.test(e[1])&&(e[1]=e[1].toLowerCase()),e[1]=e[1].charAt(0),"B"===e[1]?(e[0]=Math.floor(e[0]),e[1]=""):j||"k"!==e[1]||(e[1]="K"))),l&&(e[0]=-e[0]),e[1]=r[e[1]]||e[1],"array"===n?e:"exponent"===n?h:"object"===n?{value:e[0],suffix:e[1]}:e.join(q)};"undefined"!=typeof exports?module.exports=d:"function"==typeof define?define(function(){return d}):a.filesize=d}("undefined"!=typeof global?global:window); +//# sourceMappingURL=filesize.min.js.map \ No newline at end of file diff --git a/frontend/delta/js/Filesize/filesize.min.js.map b/frontend/delta/js/Filesize/filesize.min.js.map new file mode 100644 index 0000000..fe190a9 --- /dev/null +++ b/frontend/delta/js/Filesize/filesize.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"filesize.min.js","sources":["filesize.js"],"names":["global","bit","si","bits","bytes","filesize","arg","descriptor","undefined","arguments","result","skip","val","e","base","ceil","neg","num","output","round","unix","spacer","suffixes","isNaN","Error","exponent","Number","Math","floor","log","pow","toFixed","test","toLowerCase","charAt","value","suffix","join","exports","module","define","window"],"mappings":";;;;AAAA,cAYA,SAAWA,GACV,GAAIC,GAAM,KACNC,GACHC,MAAO,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACtDC,OAAQ,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,OAWpDC,EAAW,SAAUC,GACxB,GAAIC,GAA8BC,SAAjBC,UAAU,MAAwBA,UAAU,GAEzDC,KACAC,GAAO,EACPC,EAAM,EACNC,EAAIL,OACJM,EAAON,OACPL,EAAOK,OACPO,EAAOP,OACPQ,EAAMR,OACNS,EAAMT,OACNU,EAASV,OACTW,EAAQX,OACRY,EAAOZ,OACPa,EAASb,OACTc,EAAWd,MAEf,IAAIe,MAAMjB,GACT,KAAM,IAAIkB,OAAM,oBAoFjB,OAjFArB,GAAOI,EAAWJ,QAAS,EAC3BiB,EAAOb,EAAWa,QAAS,EAC3BN,EAA2BN,SAApBD,EAAWO,KAAqBP,EAAWO,KAAO,EACzDK,EAA6BX,SAArBD,EAAWY,MAAsBZ,EAAWY,MAAQC,EAAO,EAAI,EACvEC,EAA+Bb,SAAtBD,EAAWc,OAAuBd,EAAWc,OAASD,EAAO,GAAK,IAC3EE,EAAmCd,SAAxBD,EAAWe,SAAyBf,EAAWe,YAC1DJ,EAA+BV,SAAtBD,EAAWW,OAAuBX,EAAWW,OAAS,SAC/DL,EAA4BL,SAAxBD,EAAWkB,SAAyBlB,EAAWkB,SAAW,GAC9DR,EAAMS,OAAOpB,GACbU,EAAY,EAANC,EACNF,EAAOD,EAAO,EAAI,IAAO,KAGrBE,IACHC,GAAOA,GAII,IAARA,GACHP,EAAO,GAAK,EAGXA,EAAO,GADJU,EACS,GAEA,OAIH,KAANP,GAAYU,MAAMV,MACrBA,EAAIc,KAAKC,MAAMD,KAAKE,IAAIZ,GAAOU,KAAKE,IAAId,KAIrCF,EAAI,IACPD,EAAa,IAAPA,GAAeC,EAAI,GACzBA,EAAI,GAIJD,EADY,IAATE,EACGG,EAAMU,KAAKG,IAAI,EAAO,GAAJjB,GAElBI,EAAMU,KAAKG,IAAI,IAAMjB,GAGxBV,IACHS,EAAY,EAANA,EAEFA,EAAMG,IACTH,GAAYG,EACZF,MAIFH,EAAO,GAAKgB,OAAOd,EAAImB,QAAQlB,EAAI,EAAIM,EAAQ,IAC/CT,EAAO,GAAKR,EAAGC,EAAO,OAAS,SAASU,IAEnCF,GAAQS,IACRjB,GAAQF,EAAI+B,KAAKtB,EAAO,MAC3BA,EAAO,GAAKA,EAAO,GAAGuB,eAGvBvB,EAAO,GAAKA,EAAO,GAAGwB,OAAO,GAEX,MAAdxB,EAAO,IACVA,EAAO,GAAKiB,KAAKC,MAAMlB,EAAO,IAC9BA,EAAO,GAAK,IACDP,GAAsB,MAAdO,EAAO,KAC1BA,EAAO,GAAK,OAMXM,IACHN,EAAO,IAAMA,EAAO,IAIrBA,EAAO,GAAKY,EAASZ,EAAO,KAAOA,EAAO,GAG3B,UAAXQ,EACIR,EAGO,aAAXQ,EACIL,EAGO,WAAXK,GACMiB,MAAOzB,EAAO,GAAI0B,OAAQ1B,EAAO,IAGpCA,EAAO2B,KAAKhB,GAIG,oBAAZiB,SACVC,OAAOD,QAAUjC,EACW,kBAAXmC,QACjBA,OAAO,WACN,MAAOnC,KAGRL,EAAOK,SAAWA,GAEC,mBAAXL,QAAyBA,OAASyC","sourcesContent":["\"use strict\";\n\n/**\n * filesize\n *\n * @author Jason Mulligan \n * @copyright 2015 Jason Mulligan \n * @license BSD-3-Clause\n * @link http://filesizejs.com\n * @module filesize\n * @version 3.1.3\n */\n(function (global) {\n\tvar bit = /b$/;\n\tvar si = {\n\t\tbits: [\"B\", \"kb\", \"Mb\", \"Gb\", \"Tb\", \"Pb\", \"Eb\", \"Zb\", \"Yb\"],\n\t\tbytes: [\"B\", \"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"]\n\t};\n\n\t/**\n * filesize\n *\n * @method filesize\n * @param {Mixed} arg String, Int or Float to transform\n * @param {Object} descriptor [Optional] Flags\n * @return {String} Readable file size String\n */\n\tvar filesize = function (arg) {\n\t\tvar descriptor = arguments[1] === undefined ? {} : arguments[1];\n\n\t\tvar result = [];\n\t\tvar skip = false;\n\t\tvar val = 0;\n\t\tvar e = undefined,\n\t\t base = undefined,\n\t\t bits = undefined,\n\t\t ceil = undefined,\n\t\t neg = undefined,\n\t\t num = undefined,\n\t\t output = undefined,\n\t\t round = undefined,\n\t\t unix = undefined,\n\t\t spacer = undefined,\n\t\t suffixes = undefined;\n\n\t\tif (isNaN(arg)) {\n\t\t\tthrow new Error(\"Invalid arguments\");\n\t\t}\n\n\t\tbits = descriptor.bits === true;\n\t\tunix = descriptor.unix === true;\n\t\tbase = descriptor.base !== undefined ? descriptor.base : 2;\n\t\tround = descriptor.round !== undefined ? descriptor.round : unix ? 1 : 2;\n\t\tspacer = descriptor.spacer !== undefined ? descriptor.spacer : unix ? \"\" : \" \";\n\t\tsuffixes = descriptor.suffixes !== undefined ? descriptor.suffixes : {};\n\t\toutput = descriptor.output !== undefined ? descriptor.output : \"string\";\n\t\te = descriptor.exponent !== undefined ? descriptor.exponent : -1;\n\t\tnum = Number(arg);\n\t\tneg = num < 0;\n\t\tceil = base > 2 ? 1000 : 1024;\n\n\t\t// Flipping a negative number to determine the size\n\t\tif (neg) {\n\t\t\tnum = -num;\n\t\t}\n\n\t\t// Zero is now a special case because bytes divide by 1\n\t\tif (num === 0) {\n\t\t\tresult[0] = 0;\n\n\t\t\tif (unix) {\n\t\t\t\tresult[1] = \"\";\n\t\t\t} else {\n\t\t\t\tresult[1] = \"B\";\n\t\t\t}\n\t\t} else {\n\t\t\t// Determining the exponent\n\t\t\tif (e === -1 || isNaN(e)) {\n\t\t\t\te = Math.floor(Math.log(num) / Math.log(ceil));\n\t\t\t}\n\n\t\t\t// Exceeding supported length, time to reduce & multiply\n\t\t\tif (e > 8) {\n\t\t\t\tval = val * (1000 * (e - 8));\n\t\t\t\te = 8;\n\t\t\t}\n\n\t\t\tif (base === 2) {\n\t\t\t\tval = num / Math.pow(2, e * 10);\n\t\t\t} else {\n\t\t\t\tval = num / Math.pow(1000, e);\n\t\t\t}\n\n\t\t\tif (bits) {\n\t\t\t\tval = val * 8;\n\n\t\t\t\tif (val > ceil) {\n\t\t\t\t\tval = val / ceil;\n\t\t\t\t\te++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tresult[0] = Number(val.toFixed(e > 0 ? round : 0));\n\t\t\tresult[1] = si[bits ? \"bits\" : \"bytes\"][e];\n\n\t\t\tif (!skip && unix) {\n\t\t\t\tif (bits && bit.test(result[1])) {\n\t\t\t\t\tresult[1] = result[1].toLowerCase();\n\t\t\t\t}\n\n\t\t\t\tresult[1] = result[1].charAt(0);\n\n\t\t\t\tif (result[1] === \"B\") {\n\t\t\t\t\tresult[0] = Math.floor(result[0]);\n\t\t\t\t\tresult[1] = \"\";\n\t\t\t\t} else if (!bits && result[1] === \"k\") {\n\t\t\t\t\tresult[1] = \"K\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Decorating a 'diff'\n\t\tif (neg) {\n\t\t\tresult[0] = -result[0];\n\t\t}\n\n\t\t// Applying custom suffix\n\t\tresult[1] = suffixes[result[1]] || result[1];\n\n\t\t// Returning Array, Object, or String (default)\n\t\tif (output === \"array\") {\n\t\t\treturn result;\n\t\t}\n\n\t\tif (output === \"exponent\") {\n\t\t\treturn e;\n\t\t}\n\n\t\tif (output === \"object\") {\n\t\t\treturn { value: result[0], suffix: result[1] };\n\t\t}\n\n\t\treturn result.join(spacer);\n\t};\n\n\t// CommonJS, AMD, script tag\n\tif (typeof exports !== \"undefined\") {\n\t\tmodule.exports = filesize;\n\t} else if (typeof define === \"function\") {\n\t\tdefine(function () {\n\t\t\treturn filesize;\n\t\t});\n\t} else {\n\t\tglobal.filesize = filesize;\n\t}\n})(typeof global !== \"undefined\" ? global : window);"]} \ No newline at end of file diff --git a/frontend/delta/js/TestData/User.data.js b/frontend/delta/js/TestData/User.data.js index fe8820b..9dcb189 100644 --- a/frontend/delta/js/TestData/User.data.js +++ b/frontend/delta/js/TestData/User.data.js @@ -1197,7 +1197,18 @@ testData = { "version": "0.2", "userDetails": "{\"records\":{\"index\":{\"062af892bcfba49ffcff05c56d99b7af2d508358e39c058c2e1fc83531436f80\":\"0\",\"d5f700b9c3367c39551ea49e00a9ab20dae09dd79d46047b983fc7c4bfaa050d\":\"1\",\"de13c0d036234c44214062bc0a89e5f127470c464333493a485729f43cdc26e4\":\"2\",\"d620764a656bfd4e1d3758500d5db72e460a0cf729d56ed1a7755b5725c50045\":\"3\",\"f215d89bf4583c12f5ed4f4330f488dad3fffa448f4dc784f15ef135dda2c732\":\"4\",\"6d45c2fec275b7482d41c76b20507100cfb6ab49922b876f9dd3040d361f4a18\":\"5\",\"9dcd2a8a0fcb7e57d234dc4fea347f020a6a01793e40cf56a0d22379e590e291\":\"6\",\"6c25be8e145efb26a1abd59590522f73fb2e3dbc139af2217074d9e2ba92c16a\":\"7\",\"6026370f3db3860d2c46a08e389a7e906dc14f98c8444b21be9a7e9f405a2728\":\"8\",\"f13d3614512f35960896be45bec72fb177209b05cb846741454d10befdc96e0b\":\"9\",\"e5ecff72df3a57862c1aec4084c90a458a04b63d4ede8c6c02cd6c73f1afb0ce\":\"10\",\"2631d52448aa008a918adfa9ac7d092b68ca65d2a8b052501a21a952ea9d158d\":\"11\",\"26f564ac38b07878222831815f4ad2ac3652ad2aa85e463c0d72c245ccb55500\":\"12\",\"bbd1a005b14cd128187a3d8247168d19136c5c3c887b22040a21347b7926a9b6\":\"13\",\"54afc19bc21acb29739395aec2b89f5cb1db05b6066b9bfd4f989ba12ccef1b9\":\"14\",\"e0dba99d2973c63d5231459337603e0c483fe6ec586b4f10d78baa53314d7f02\":\"15\",\"405cf90598df199675bc47a6b86967d3b0fd48a4c23bd1e142e2b7f50b2136fd\":\"16\",\"03e80a849bdcef055859870f6a8789b3c5b9bee22b610eeb0aae1a5c7893a827\":\"17\",\"a519f4a285a8954e47a7ba220986ad3f1e048bd301ade71c32f8d7278bb84b08\":\"18\",\"6b2467a411278edb2415eb37da08b3c570b05d229f5435cc3f8e1ec03cef4858\":\"19\",\"c45fad0ba337cf90493780dafc3ceb6fa29410dca5e1bdf77f3b5e6d1a755128\":\"20\",\"b1015a5ac47a9f3d0b2787c95f871022f39431674825d27759ce8f881705b6a2\":\"21\",\"c4aa834d9059f854c4dd8de275192747e8ff54ac2932ba6b7b57ca13754a2950\":\"22\",\"3bdc93056c8c2c9116380435715d9afc016cd0057e754bb3b919a086f3ce3dac\":\"23\",\"2f68ed41765b3f49c06fc5aa18f56e0f0bd6a0e5024f5af987e6476b47cf7009\":\"24\",\"2aa1871b3dab60d7a0aab1cd4cc3df813fdc35bb3c60d99d7c8e7b46b6cf6484\":\"25\",\"b56413ce2384696e76261660790d452997ff59f3d9feaa90b1dc3ad121d3558d\":\"26\",\"c549f7d97ed162fecba1eaefbf456ca12f0631efeaec9f5394b20674bef93bef\":\"27\",\"d7c2425ad5bd8d36cc7432de28a67d1fe989f48fdfa89249a0b57ff394145673\":\"28\",\"5dfebd797126b11db899509bbd367d22e7985b726aa12e23b3d62419f5db11ad\":\"29\",\"2634a70250cd3cedc08313e642baeae38720a1fa50aaed56fd36556332846206\":\"30\",\"5ebf59d32dd40342d97a7e7a1a1f1faaed1997762680795f8eb7e661b528d702\":\"31\",\"8aaa83ede958b2621bf941e68e801b32e7ddd5d686551392d4d533eaecf58098\":\"32\"},\"data\":\"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\"},\"directLogins\":{\"index\":{\"61e87fdc4f1d9112e3b30c1f6812d095dcdb24f014c83319091eb6c9899ec348\":\"0\",\"dba0db679802f0e6aa6d0b7a6aaf42350aabc5f057409edd99a268a92ebb6496\":\"1\",\"aa18149164302d5dbe7e2d3724565b9550e00887b49978559783b2e38c625584\":\"2\",\"6f7bbc4e42ea462b5246e6f51c3f86056bec50601ce2de6067c8c1d26f21c07f\":\"3\",\"f22dc41ffabef4b3bc8f7af804fec975bd50718098322a673cbe4aaff9464ae1\":\"4\",\"a7b32e72502804bf2946a2a8856139cbbb759c5777e6b3e673db1fdf7e3bd06e\":\"5\",\"f4cc4604c1db808cfab53354260b01ae1f2826c621ac4a3cc499f132ac30f02b\":\"6\",\"aad35cd020e3d78ba03681682096d1ab0303073c971c0282d0bf31d56843fd9f\":\"7\",\"8d7bf22dbce3e7d5eb873fa437c3b27168afa8bd28d06fec76026f9e9dd8c26c\":\"8\",\"cb5a31797a00ac70952c1e8f30679eb101353ea98313543f33caec13624b15e4\":\"9\",\"53baf661f0c41b41026cd8e8cc4dd1855956461b9201286cb98486e4afb8254b\":\"10\",\"5859b5eb97e6a342de219e49bce04c29f9c6aeea77658a699ef27ec2f943e18d\":\"11\",\"69f76440f9c5fa0c66bf4d0b2742c8211f30dcf562d3aaac28e56216d53c2f27\":\"12\",\"aebadbfcc69bf029b2ae47cfb4e3bc2b8b71ae4a90f786538dcb44be6b5fc1f9\":\"13\",\"af97323febc46a095403cf77e9b16b0351556354aeaa4da37b17ab148d917a4a\":\"14\",\"9613ee2be520c7de0af9f67cc5048ebb649fb4a472717bbdb6822b299a4c7f55\":\"15\",\"632f40721cf56606f5c8227020e4a574585feb522cd410872e741ccde348adf3\":\"16\",\"a8818157b59693c573fdff99b3932ee95c8b228670ecd8a2944479edbb91249f\":\"17\",\"9a8e6cc57266b8364547f450e71d98596efd9210df8f5f1a9dc755df0b23f0db\":\"18\",\"e2231d46181622754c6326044448750caa9a9496a290a9661996e47cd5d51e3a\":\"19\",\"f0d93bf3e52bc4f4e8d34c4759f5f566c1bcf220bcf5edd28af71ee8ef0da8dd\":\"20\",\"c50495ba204a69758ef50a95851c7481845e4f9af342341b5bcd8023bc00226e\":\"21\",\"65f93ac9c0f0787dc5d149a44e574140df26cde715372a534189e41658c7f828\":\"22\",\"33a73db6f9626dd260e9d33ca2e6000518b6eea8b7a3e5e55fc4fd4add4d43ab\":\"23\",\"34e2981a6cf30b15b774ba76a7de32b83795c95f4ea04b49e34ba7d85e77c7f2\":\"24\"},\"data\":\"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\"},\"preferences\":{\"data\":\"y3WB0m/1Pr8yr5JfXffbLrcnwkhwU0qOj6r2F9ZHzm3aIzh0esucZ6PKW8mIe3Dg\"},\"oneTimePasswords\":{\"data\":\"ZtJ7qTQp1O8tc+VC0OLl4M2QCNGEMXVQXU1WDpT20e/PuJouRuNEnZ+qrNVJdq3GfwlUfnjIUnWxfEn2YBVbhKhwD8ERHwn1ZaJLjf18YAgl1CWGfcK4MtfCOXSoH7WFZ+Vq0gj43V7m0efAUU400cGcMUE5ETThNFGe/Fvu19diH1XhlMgQGk7d4tnAJOSpFj39wKzNK3Vm5ii0\"},\"version\":\"0.1\"}", "maxNumberOfRecords": 100, - "statistics": "77hYFQnArAQV8a46SszqAIjH" + "statistics": "77hYFQnArAQV8a46SszqAIjH", + 'attachments': { + // // Just a fake attachment for Joe: it's not in any record's data so it won't be displayed + // 'd799007a02896ab97665e1783f3a2f6b35a6ffbaaaec1b7ec8d872d6f33e6f0b' : { + // "reference": "d799007a02896ab97665e1783f3a2f6b35a6ffbaaaec1b7ec8d872d6f33e6f0b", + // "data": "irgna+/uEypFTkFPYldc15FmkMgXwpep9exT2zGxkcGLz8IllqZt6U17zTVP16UpQw4Pk0dRU2CcRpM42y3TXkLnxSgKC7R03nGBvpjG5Xegl/mlg/V9cxdJCiQ6J4P3G6UzMP5hMqcs9jfS1HyBekYkmwtngauelMjg6DTe5YDMfFiYiTjgEiN23FBETNlneZ6CRV4SBWSk5RHqjqAX5IHPgmoUytbj+uEI7Byi3C9TIdqPDuT0K0PEJMS2sASW/FZX8rz39Zsq6L8WheKk/C9KhZrmUOKHeZocdZMjTwZ8HeyRHOjlkwBoAfw9hmJyVz6Ngj7mWR5p6XKwNYSX9cEquV3YmEpH+8bLUoHnkBJiSbqMO4vpvaKq/Q/w4hrApOIk5FI+pp+yNeYeJG5QFbAbbwiC6MH4mIdIJVDCicEH2aoCsW7uTyC/GRQv9/fJEip4mCWbSPKlmHXdw6w9dTZRNOoq0BAo5EAISQ3WKhhq90FyGwW3d+CsKnJwNmLm/McgRLj19kT8x/eMFcik3fbWDL8a3icziCOxdq7sde6R5ShtMRFeR8DKV8yx0ZD4Ep/t2Nfo9WxWpeNi22DwUFme6niLZmUHhxwgJacgJc2HWhEVbcaEe5Upc6mwREvk+D4AuDjt7EtmEYl+NGGjTBRTv+uZEsh2mn/jmGeyhHMsgh8AtjwRHIfj1mbapxFAkpFA23aAUmB8Xij44El8Y1oRndiljWuTGBCTEqU=", + // "version": "1.0", + // // "user": "f527cdd90d0d47f8524b4e165398ad1455eba515d04abd101d1e93b3c6ae0674", + // "record": "3bdc93056c8c2c9116380435715d9afc016cd0057e754bb3b919a086f3ce3dac", + // "status": "AVAILABLE", + // } + } }, // username: 'tag', passphrase: 'tag' "38d2354c878a06fbdcccc493a23fc6d9be06eebb4f66952bbc1b736824b123f9": { @@ -1797,5 +1808,5 @@ testData = { "request_date":"4001-01-01 09:00:00", "usage_date":"4001-01-01 09:00:00" } - } + }, } diff --git a/frontend/delta/properties/delta.properties.json b/frontend/delta/properties/delta.properties.json index 7b6e5ab..b4a5d45 100644 --- a/frontend/delta/properties/delta.properties.json +++ b/frontend/delta/properties/delta.properties.json @@ -30,7 +30,11 @@ "xDate.repository": "https://github.com/arshaw/xdate", "xDate.version": "0.8", - "xDate.commit": "f83cd8d63fab8cfe6f00ccba9041d2591daedb74" + "xDate.commit": "f83cd8d63fab8cfe6f00ccba9041d2591daedb74", + + "filesize.repository": "https://github.com/avoidwork/filesize.js.git", + "filesize.version": "3.1.3", + "filesize.commit": "20b4ac454f9c6236b6611ddd1b9cbe97d0efbbd2" }, "html.template": "index_template.html", @@ -73,6 +77,9 @@ "-- PapaParse/papaparse.min.js", "xDate/xdate.js", + + "-- Filesize/filesize.js", + "Filesize/filesize.min.js", "-- IT WOULD BE NICE TO BE ABLE TO GET RID OF THESE IMPORTS", "Clipperz/YUI/Utils.js", @@ -92,6 +99,7 @@ "-- Clipperz/Set.js", "-- Clipperz/Profile.js", "Clipperz/KeyValueObjectStore.js", + "Clipperz/Sound.js", "Clipperz/Crypto/SHA.js", "Clipperz/Crypto/AES.js", @@ -147,6 +155,7 @@ "Clipperz/PM/DataModel/Record.js", "Clipperz/PM/DataModel/Record.Version.js", "Clipperz/PM/DataModel/Record.Version.Field.js", + "Clipperz/PM/DataModel/Attachment.js", "Clipperz/PM/DataModel/DirectLogin.js", "Clipperz/PM/DataModel/DirectLoginInput.js", "Clipperz/PM/DataModel/DirectLoginBinding.js", @@ -173,6 +182,8 @@ "Clipperz/PM/UI/Components/Selections.js", "Clipperz/PM/UI/Components/TagIndexItem.js", "Clipperz/PM/UI/Components/Help.js", + "Clipperz/PM/UI/Components/AttachmentQueueBox.js", + "Clipperz/PM/UI/Components/RadialProgressIndicator.js", "Clipperz/PM/UI/Components/ExpiredPanel.js", @@ -222,6 +233,7 @@ "-- Clipperz/PM/UI/MainDesktopController.js", "Clipperz/PM/UI/DirectLoginController.js", "Clipperz/PM/UI/ExportController.js", + "Clipperz/PM/UI/AttachmentController.js", "Clipperz/PM/UI/ImportContext.js", "main.js" ], diff --git a/frontend/delta/scss/core/fonts.scss b/frontend/delta/scss/core/fonts.scss index d43c8f6..95deff5 100644 --- a/frontend/delta/scss/core/fonts.scss +++ b/frontend/delta/scss/core/fonts.scss @@ -33,7 +33,7 @@ refer to http://www.clipperz.com. // generator: IcoMoon font-style: normal; font-weight: normal; - src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABgcAAwAAAAAF8wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABHAAAA4wAAAOM98f5K09TLzIAAASoAAAAYAAAAGAIYwbQY21hcAAABQgAAAC8AAAAvKjvnoJnYXNwAAAFxAAAAAgAAAAIAAAAEGdseWYAAAXMAAAOgAAADoAOtoyEaGVhZAAAFEwAAAA2AAAANgUXq5VoaGVhAAAUhAAAACQAAAAkA/kCOmhtdHgAABSoAAAA5AAAAOQ3igNTbG9jYQAAFYwAAAB0AAAAdEG6RPxtYXhwAAAWAAAAACAAAAAgAEIAfG5hbWUAABYgAAAB2gAAAdo7wz5qcG9zdAAAF/wAAAAgAAAAIAADAAAAAQAAAAoAHgAsAAFsYXRuAAgABAAAAAAAAAABAAAAAWxpZ2EACAAAAAEAAAABAAQABAAAAAEACgAAAAEAKAARAE4AggCQAQYBQAFQAXQBnAHqAfgCFAI+ApwC8AMIAygDSAABABEABwAIAAkACgALAAwADQARABIAFAAVABYAFwAYABkAGgA4AAIABgAiAC4ADQAKAAoAAwATAAsAGwADAAwADwALABEACgAnAAgACgAKAAMACQAHABYACgABAAQAKwAEAAcACQAQAAYADgAsAD4ASgBcAGgALgAOABYACwAHABgACwADABMACwAbAAMABAAGAAUAMgAIABQAEgASAAcAEwAKABcAIQAFABEAFAAXAAsAIwAIABEADwAVABUACwAWABwAIQAFABEACwAHABYAIQAGAAcAEwAJAAsAEQADAAgAEgAsACIABAAUABMACwApAAwADwAWAAsACQAYAAMAEQAUAA0ADwATACEABgALABEACwAYAAsAAQAEAC0ABQASAAcADwARAAIABgAWACEABwAHAA8AEQAZABYACwAhAAYABwAPABEACwAKAAEABAA1ABEACwATAAsAFgAHABgACwADABUABwAXABcAGwAUABYACgAFAAwAGgAoADIAQgAoAAYAFAANABQAGQAYAC8ABgAUAAkAEAALAAoAHQAEABQACQAQACoABwAUAAcACgAPABMADQAeAAUABwAIAAsAEQABAAQAIAAEAAsAEwAZAAIABgAWADcABwAVABgADwAUABMAFwAiAAIAEAABAAQAMwASAAcAFwAXABsAFAAWAAoAAwAN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) format('woff'); + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAACIoAAwAAAAAIdgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABHAAABFAAAARQ/jUEQE9TLzIAAAVsAAAAYAAAAGAIYwbVY21hcAAABcwAAADkAAAA5Ip/TMpnYXNwAAAGsAAAAAgAAAAIAAAAEGdseWYAAAa4AAAXaAAAF2iz8c/0aGVhZAAAHiAAAAA2AAAANgXWF1JoaGVhAAAeWAAAACQAAAAkA/kCQ2htdHgAAB58AAABCAAAAQhHigRZbG9jYQAAH4QAAACGAAAAhnNibdxtYXhwAAAgDAAAACAAAAAgAFAAxG5hbWUAACAsAAAB2gAAAdo7wz5qcG9zdAAAIggAAAAgAAAAIAADAAAAAQAAAAoAHgAsAAFsYXRuAAgABAAAAAAAAAABAAAAAWxpZ2EACAAAAAEAAAABAAQABAAAAAEACgAAAAEAKgASAFIA0gDgAVYBkAGgAcQB7AIGAlQCYgKWAtQDMgOGA7QD1AQMAAEAEgAHAAgACQAKAAsADAANAA8AEQASABQAFQAWABcAGAAZABoAQQAFAAwAIgA4AFIAbgA4AAoAGQAKAA8AFAADAAwADwARAAsANAAKABgAGAAHAAkADgASAAsAEwAYADoADAAWAAkADgAPABoACwADAAwADwARAAsALwANAAoACgADABMACwAbAAMADAAPAAsAEQAKACgACAAKAAoAAwAJAAcAFgAKAAEABAAsAAQABwAJABAABgAOACwAPgBKAFwAaAAvAA4AFgALAAcAGAALAAMAEwALABsAAwAEAAYABQAzAAgAFAASABIABwATAAoAFwAiAAUAEQAUABcACwAkAAgAEQAPABUAFQALABYAHQAiAAUAEQALAAcAFgAiAAYABwATAAkACwARAAMACAASACwAIwAEABQAEwALACoADAAPABYACwAJABgAAwARABQADQAPABMAIgAGAAsAEQALABgACwABAAQALgAFABIABwAPABEAAgAGABYAIgAHAAcADwARABkAFgALACIABgAHAA8AEQALAAoAAQAEAD0AEQALABMACwAWAAcAGAALAAMAFQAHABcAFwAbABQAFgAKAAEABAA3AAoAEgAHAA0ACwADAAwADwARAAsABQAMABoAKAAyAEIAKQAGABQADQAUABkAGAAwAAYAFAAJABAACwAKAB4ABAAUAAkAEAArAAcAFAAHAAoADwATAA0AHwAFAAcACAALABEAAQAEACEABAALABMAGQADAAgAHgAuADUACgAYAA4ACwAWAAMADAAPABEACwBAAAcAFQAYAA8AFAATABcAIwACABAAAgAGABgAPwAIAAoADAADAAwADwARAAsAOwASAAcAFwAXABsAFAAWAAoAAwANAAsAEwALABYABwAYABQAFgAEAAoAIAA6AFAAMgAKAAsAEgAUABoACwADABgABwANADIADAALABIAFAAaAAsAAwAMAA8ACwARAAoAMgAKAAsAEgAUABoACwADAAQABgAFACcABgALAAkACwATABgABAAKACIAPABKAC0ACwAOABQAGwADAAoACwAYAAcADwARAD4ADAALABgAAwAVAAcAFwAXABsAFAAWAAoAJgAGAAsABwAWAAkADgAjAAQABwAaAAsAAwAIABwAJgA2AAkACwAcABgAAwAMAA8AEQALACAABAAHAA0AFwAlAAMABwANAAIABgAOACoAAwAWABEAMQAIABMAEQAUAAkAEAALAAoAAgAGACIAPAANAA8ACwAbAAMAFQAHABcAFwAbABQAFgAKADkACgAPAAoACwAUAAMADAAPABEACwABAAQAQAACAEEAAwHvAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADwMAHg/+AAIAHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAyAAAAC4AIAAEAA4AAQAgAFAAVABpAHAAeAB64SXipuYT6ADpJOko6SvpjenO6i7qNura8DD//f//AAAAAAAgAE8AVABhAGsAcgB64SXipuYA6ADpJOkm6SrpjenO6i7qNura8C///f//AAH/4/+1/7L/pv+l/6T/ox75HXkaIBg0FxEXEBcPFq4WbhYPFggVZRARAAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAA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) format('woff'); // src: url(data:application/font-woff;charset=utf-8;base64,) format('woff'); } diff --git a/frontend/delta/scss/core/layout.scss b/frontend/delta/scss/core/layout.scss index 47f908c..d545dc1 100644 --- a/frontend/delta/scss/core/layout.scss +++ b/frontend/delta/scss/core/layout.scss @@ -323,6 +323,10 @@ div.cardToolbar { &.tag, &.search { font-size: 14pt; } + + &.withAttachments { + font-weight: bold; + } } span.value { @@ -334,30 +338,64 @@ div.cardToolbar { &.selectionToggle { @include flex(1); + text-align: left; .button { - text-align: left; + display: inline-block; .label { padding-left: 8px; + padding-right: 8px; } } } -// &.logo { -// @include align-self(center); -// @include flex(4); -// text-align: center; -// } - &.settingsToggle { @include flex(1); + text-align: right; .button { - text-align: right; + display: inline-block; .label { padding-right: 8px; + padding-left: 8px; + } + + .attachmentQueueToggleButton { + font-family: "clipperz-font"; + margin-right: 10px; + + h3 { + font-weight: bold; + font-size: 33pt; + + letter-spacing: -10px; + } + + .badge { + position: absolute; + margin-left: -12px; + width: auto; + height: 16px; + line-height: 17px; + background-color: #1863a1; + color: white; + text-align: center; + font-size: 8pt; + font-weight: bold; + border-radius: 8px; + padding: 0px 4px; + + &.top { + top: 11px; + } + + &.bottom { + top: 25px; + margin-left: -42px; + } + } } } } @@ -372,6 +410,183 @@ div.cardToolbar { } } +$arrow-size: 8px; +div.attachmentQueueStatus { + position: fixed; + top: calc(48px - #{$arrow-size}); + right: 0; + padding: 0; + color: white; + z-index: 10; + + height: calc(100% - 48px); + pointer-events: none; + + .arrow { + width: 0; + height: 0; + border-style: solid; + border-width: 0 $arrow-size $arrow-size $arrow-size; + border-color: transparent transparent black transparent; + position: fixed; + right: 70px; + top: calc(49px - #{$arrow-size}); + } + + &.closed { + display: none; + visibility: hidden; + } + + p { + padding: 1em; + } + + ul { + pointer-events: all; + + max-height: 100%; + overflow-y: auto; + overflow-x: hidden; + white-space: nowrap; + + background: black; + margin-top: $arrow-size; + padding: 0; + box-shadow: 0px 2px 5px #888888; + + li { + padding: 0 0 0 1em;; + border-bottom: 1px solid white; + + span { + display: inline-block; + vertical-align: middle; + height: 40px; + line-height: 40px; + } + + .contentType { + @include icon-font(); + color: white; + width: 30px; + } + + .name { + width: 250px; + overflow: hidden; + text-overflow: ellipsis; + } + + .status { + width: 150px; + text-align: right; + + .statusString { + font-size: .8em; + } + + .processIcon { + margin-left: 1em; + } + } + + .close { + a { + @include icon-font(); + display: inline-block; + + width: 50px; + text-align: center; + letter-spacing: 1px; + font-size: 20px; + + @include userSelectNone(); + } + + a:hover { + color: lightgray; + cursor: pointer; + } + } + + .progress { + width: 50px; + height: 30px; + text-align: center; + + @include userSelectNone(); + } + + &:last-child { + border-bottom: 0; + } + } + } + + .radialProgressIndicator { + height: 25px; + + .background { + fill: white; + } + + .progress { + fill: $clipperz-orange; + } + } +} + + +.narrow { + .attachmentQueueStatus { + width:100%; + + ul { + white-space: inherit; + + li { + padding-top: .2em; + padding-bottom: .2em; + + span { + height: 25px; + line-height: 30px; + } + + .name { + width: 225px; + } + + .status { + padding-left: 30px; + text-align: left; + width: calc(100% - 100px); + line-height: 20px; + font-size: .8em; + + .processIcon { + margin-left: 0.5em; + } + } + + .close { + height: inherit; + line-height: inherit; + float: right; + display: block; + margin-top: -5px; + } + + .progress { + padding-left: 18px; + margin-top: -24px; + } + } + } + } +} + div.cardContent { // @include flex(flex-grow); // ??? @@ -481,6 +696,8 @@ div.cardContent { @include flexbox(); @include flex-direction(column); + + width:100%; } .content { @@ -498,6 +715,7 @@ div.cardContent { @include flexbox(); @include flex-direction(column); height: 100%; + width: 100%; .content { @include flex(auto); @@ -516,6 +734,8 @@ div.cardContent { @include chromeFix(); + width:100%; + li.save { cursor: default; background-color: #55aa55; diff --git a/frontend/delta/scss/core/mixin.scss b/frontend/delta/scss/core/mixin.scss index 2bcb889..36088ae 100644 --- a/frontend/delta/scss/core/mixin.scss +++ b/frontend/delta/scss/core/mixin.scss @@ -248,3 +248,11 @@ refer to http://www.clipperz.com. } */ } + +@mixin userSelectNone () { + -moz-user-select: -moz-none; + -khtml-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; +} diff --git a/frontend/delta/scss/core/tagEditor.scss b/frontend/delta/scss/core/tagEditor.scss index fdd4681..b3f228f 100644 --- a/frontend/delta/scss/core/tagEditor.scss +++ b/frontend/delta/scss/core/tagEditor.scss @@ -52,10 +52,19 @@ $tagEditor_lineHeight: 27px; font-size: 13pt; font-weight: 100; - padding-right: 10px; + margin-right: 10px; padding-left: 1px; line-height: $tagEditor_lineHeight; + /* boxed style test */ +/* background-color: $clipperz-orange; + padding-left: 5px; + padding-right: 5px; + border-radius: 3px; + border:1px solid gray; + color: white; +*/ + // &:last-child:after { // content: ''; // } @@ -68,9 +77,12 @@ $tagEditor_lineHeight: 27px; span.tagRemoveButton { @include icon-font(); + @include userSelectNone(); + cursor: pointer; line-height: 22px; color: #ccc; + /*color:white;*/ &:hover { color: rgb(155, 0, 0); diff --git a/frontend/delta/scss/style/card.scss b/frontend/delta/scss/style/card.scss index be8cef3..44359d5 100644 --- a/frontend/delta/scss/style/card.scss +++ b/frontend/delta/scss/style/card.scss @@ -36,6 +36,8 @@ $cardArchivedColor: #eee; $cardToolbarBackgroundColor: $clipperz-blue; $iconMargin: 6px; $labelColor: gray; +$lightRed: #dd1111; +$darkRed: #aa2222; div.cardList { // background-color: $yellow; @@ -106,6 +108,14 @@ div.cardList { line-height: 1.2em; } + .attachmentsCount { + @include icon-font(); + color: #aaa; + padding-right: 8px; + padding-left: 6px; + padding-top: 18px; + } + } } @@ -267,6 +277,10 @@ $cardViewBasePadding: 10px; background-color: $cardToolbarBackgroundColor; color: white; + &.top { + display: none; /* Issue #203 */ + } + &.narrow { @include transition(height, 2.5s, ease-in); @@ -305,8 +319,9 @@ $cardViewBasePadding: 10px; .removeDirectLogin { @include icon-font(); - margin: $iconMargin; - margin-top: 12px; + display: inline-block; + margin-left: $iconMargin; +// margin-top: 12px; cursor: pointer; color: white; width: 40px; @@ -319,13 +334,206 @@ $cardViewBasePadding: 10px; .directLoginLabel { vertical-align: bottom; - padding-left: 17px; +// padding-left: 17px; + padding-left: 0px; + } + } + + .cardUploadAttachments { + border: 2px dashed #ccc; + margin: 0 1em 1em 1em; + padding: 1em; + text-align: center; + margin-left: 44px; + + p { + margin-bottom: 1em; + } + + .attachmentInput { + display: none; + } + + .button { + display: inline-block; + color: white; + background-color: #ff9900; + font-size: 14pt; + padding: 10px 14px; } } } } +.cardAttachmentWrapper { + border-bottom: 3px double #eee; +} +.cardAttachments { + + padding-bottom: 10px; + + h3 { + padding-top: 14px; + padding-bottom: 14px; + color: gray; + font-size: 12pt; + + &:before { + @include icon-font(); + content: "attachment"; + padding-left: 13px; + padding-right: 13px; + padding-top: 0px; + padding-bottom: 0px; + font-weight: bold; + font-size: 14pt; + display: inline-block; + + transform: scaleX(-1); + }; + } + + .skippedFiles { + margin: 1em 1em 1em 44px; + color: white; + background: $clipperz-orange; + padding: 1em; + font-size: .8em; + + ul { + padding: 1em 1em 1em 0; + list-style-type: none; + + li { + .filename { + font-weight: bold; + } + } + } + } + + .attachmentList { + margin-left: 44px; + padding-right: 8px; + + li { + @include flexbox(); + @include flex-direction(row); + padding-bottom: 6px; + + &.broken { + span { + color: $lightRed !important; + } + } + + /*cursor: pointer;*/ + + .contentType { + @include flex(none); + width: 30px; + @include icon-font(); + color: gray; + } + + span { + /*border:1px solid black;*/ + line-height: 30px; + display: inline-block; + } + + .meta { + @include flex(auto); + text-align: left; + font-size: 14pt; + + width: 100%; /* Hack to fix long names behaviour */ + overflow: hidden; + + .name { + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + white-space: pre; + } + + .size { + display: block; + color: #aaa; + font-size: 8pt; + line-height: 8pt; + } + } + + .status { + width: 100px; + text-align: right; + + .waiting { + font-size: 10pt; + color: #aaa; + } + } + + .actions { + @include userSelectNone(); + + display: inline-block; + width:30px; + + a { + display: inline-block; + width: 30px; + cursor:pointer; + font-size: 20pt; + color: #aaa; + + &.cancel, &.remove { + @include icon-font(); + &:hover { + color: $lightRed; + }; + } + + &.download { + &:hover { + color: $clipperz-blue; + }; + } + } + } + + .progress { + width: 30px; + text-align: center; + + .radialProgressIndicator { + width: 25px; + height: 30px; + + .background { + fill: white; + } + + .progress { + fill: black; + } + + .border { + fill: black; + } + + &.waiting { + .border { + fill: #aaa; + } + } + } + } + } + } +} .edit { .cardDetailToolbar { @@ -406,6 +614,64 @@ $cardViewBasePadding: 10px; .tagEditor { padding: $cardViewBasePadding; // background-color: cyan; + flex-wrap: wrap; + + /* I considered this specific to the card View/Edit page: should it go in tagEditor.scss instead? */ + ul { + width: calc(100% - 31px); + flex-wrap: wrap; + padding-left: 31px; + + &:before { + margin-left: -32px; + } + + li { + .tagLabel { + max-width: 500px; // Hack: length computation breaks when the content is very long + overflow: hidden; + text-overflow: ellipsis; + white-space: pre; + } + } + } + + &.readOnly { + ul { + li { + display: inline-block; + max-width: 30%; + + .tagLabel { + display: inline-block; + width: 100%; + } + } + } + } + + &.readWrite { + ul { + li { + // Uniform size + /*display: inline-flex;*/ + /*width: 30%;*/ + + // Variable size + display: inline-block; + max-width: 30%; + + .tagLabel { + width: calc(100% - 30px); + display: inline-block; + } + + input { + width: 100%; + } + } + } + } } .cardNotes { @@ -483,7 +749,7 @@ $cardViewBasePadding: 10px; font-size: 20pt; &:hover { - color: rgb(155, 0, 0); + color: $lightRed; }; } @@ -643,6 +909,8 @@ $cardViewBasePadding: 10px; font-size: 15pt; margin: $iconMargin; + margin-right: 16px; + cursor: default; &.URL { @@ -686,15 +954,60 @@ $cardViewBasePadding: 10px; } .newCardField { - @include icon-font(); - margin: $iconMargin; + height: 115px; + border-bottom: 3px double #eee; cursor: pointer; - color: #ccc; - font-size: 20pt; + + .fieldGhostShadow { +// width: 100%; + + padding-top: 11px; + padding-bottom: 11px; + padding-left: 42px; + padding-right: 49px; + +// float: left; +// clear: both; + + .label { + background-color: white; + height: 25px; + margin-bottom: 8px; + } + + .value { + background-color: white; + height: 58px; + } + } + + .addNewFieldButton { + margin-top: -90px; + + width: 70px; + font-size: 50pt; + + margin-left: auto; + margin-right: auto; + + @include icon-font(); +// margin: $iconMargin; + color: #eee; +// border-radius: 30px; + + } &:hover { - color: green; + background-color: #f5f5f5; + + .fieldGhostShadow { + } + + .addNewFieldButton { + color: #7c7; + } }; + } .cardDirectLogin { diff --git a/frontend/delta/scss/style/selectionPanel.scss b/frontend/delta/scss/style/selectionPanel.scss index 800b17e..15ec672 100644 --- a/frontend/delta/scss/style/selectionPanel.scss +++ b/frontend/delta/scss/style/selectionPanel.scss @@ -56,7 +56,13 @@ refer to http://www.clipperz.com. &.recentCards:before { content: "recent"; } - + + &.withAttachmentCards:before { +// transform: scaleX(-1); + content: "attachment"; + font-weight: bold; + } + &.untaggedCards { padding-left: 35px; } @@ -253,18 +259,40 @@ $selectionColor: $clipperz-orange; #selections.ALL { li.allCards { color: $selectionColor; + + &:before { + color: white; + } + } +} + +#selections.WITH_ATTACHMENTS { + li.withAttachmentCards { + color: $selectionColor; + + &:before { + color: white; + } } } #selections.RECENT { li.recentCards { color: $selectionColor; + + &:before { + color: white; + } } } #selections.UNTAGGED { li.untaggedCards { color: $selectionColor; + + &:before { + color: white; + } } } @@ -278,8 +306,13 @@ $selectionColor: $clipperz-orange; form { div.form { label { +// color: $selectionColor; + } + + input { color: $selectionColor; } + .searchClear { span.count { display: block; @@ -300,6 +333,10 @@ $selectionColor: $clipperz-orange; ul.tagList { li.selected { color: $selectionColor; + + &:before { + color: white; + } } } } diff --git a/frontend/delta/tests/tests/Clipperz/Crypto/AES_2.html b/frontend/delta/tests/tests/Clipperz/Crypto/AES_2.html new file mode 100644 index 0000000..8d4e035 --- /dev/null +++ b/frontend/delta/tests/tests/Clipperz/Crypto/AES_2.html @@ -0,0 +1,55 @@ + + + + + Clipperz.Crypto.AES_2 - tests + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + diff --git a/frontend/delta/tests/tests/Clipperz/Crypto/AES_2.test.js b/frontend/delta/tests/tests/Clipperz/Crypto/AES_2.test.js new file mode 100644 index 0000000..9e52f28 --- /dev/null +++ b/frontend/delta/tests/tests/Clipperz/Crypto/AES_2.test.js @@ -0,0 +1,167 @@ +/* + +Copyright 2008-2015 Clipperz Srl + +This file is part of Clipperz, the online password manager. +For further information about its features and functionalities please +refer to http://www.clipperz.com. + +* Clipperz is free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + +* Clipperz is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Affero General Public License for more details. + +* You should have received a copy of the GNU Affero General Public + License along with Clipperz. If not, see http://www.gnu.org/licenses/. + +*/ + +"use strict"; + +function testEncryptedData (tool, keyValue, encryptedText, expectedCleanText, someTestArgs) { + var key = Clipperz.Crypto.SHA.sha_d256(new Clipperz.ByteArray(keyValue)); + var value = new Clipperz.ByteArray().appendBase64String(encryptedText); + + var deferredResult = new Clipperz.Async.Deferred("pythonCompatibility_test", someTestArgs); + deferredResult.addCallback(Clipperz.Crypto.AES_2.deferredDecrypt, key, value); + deferredResult.addCallback(function(aResult) { + return aResult.asString(); + }); + deferredResult.addTest(expectedCleanText, tool); + deferredResult.callback(); + + return deferredResult; +} + +//============================================================================= + +var tests = { + + 'incrementNonce_test': function (someTestArgs) { + var nonce; + + nonce = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + Clipperz.Crypto.AES_2.incrementNonce(nonce) + SimpleTest.eq(nonce, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], "increment 0 based nonce"); + + nonce = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] + Clipperz.Crypto.AES_2.incrementNonce(nonce) + SimpleTest.eq(nonce, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2], "increment '1' nonce"); + + nonce = [58,231,19,199,48,86,154,169,188,141,46,196,83,34,37,89] + Clipperz.Crypto.AES_2.incrementNonce(nonce) + SimpleTest.eq(nonce, [58,231,19,199,48,86,154,169,188,141,46,196,83,34,37,90], "increment '1' nonce"); + return + }, + + 'pythonCompatibility_test': function (someTestArgs) { + var keyValue = "clipperz" + var cleanText = "Lorem īpsum dōlōr siÞ ǽmēt, stet voluptatum ei eum, quō pērfecto lobortis eā, vel ċu deserūisse comprehēƿsam. Eu sed cībō veniam effīciendi, Þe legere ðominġ est, ðuō ċu saperet inermis pērfeċto. Vim ei essent consetētūr, quo etīam saepē æpeirian in, et atqūi velīÞ sǣepe his? Æn porrō putanÞ sinġulis mei, ēx sonet noster mea, tē alterum praesent percipitur qūo. ViÞaē neċessitatibus ne vim, per ex communē sentēntiǣe! Qui stet ǽdhūċ uÞ." + +// def testEncrypt (keyValue, cleanText): +// key = keyDerivation(keyValue) +// iv = random.getrandbits(128) +// ctr = Crypto.Util.Counter.new(128, initial_value=iv) +// cipher = AES.new(key, Crypto.Cipher.AES.MODE_CTR, counter=ctr) +// encryptedValue = cipher.encrypt(cleanText.encode('utf-8')) +// data = base64.b64encode(base64.b16decode(hex(iv).upper()[2:-1]) + encryptedValue) +// +// return data + + var pythonEncryptedData = "9AFIXRO2nY0mkLJI6Xd4bd+Ov1g+kYUh73nICEVUM8OGt5FnfV/w2BfmTvdMGZjs+rF8w0ksrS9Ny8j2+2zPUUrKnVRXO6eGVPSN5VfuYFSHucV98msINH0FpOZHftuKCuJkB/orjQhoIbj9SXT0yUwB3b4R2bk48Br7R8G2bhxqrHRmnYQn22AQVA83UstNvCOdXT7ArfwJZbVSSMkdmvcziZ8ObMvaH+FXD/K8i7dzS1yP03MMBtIkYN8PnyUMS2uAHKiR11jGuha9QfXjLJlWUQWZgNB9NKyOKf7tN+OgtAoWmHmKlpTshfwbfFD8wBPR0kkhR0cC+7queIjpCDnBJ+Nod78zWgPDR8g64sph7OB686HkP03cO66aH/LNuAt03gxaVyE8ufvoStRjlIthOuys5xYWP+hTFYDC7OhCOLKvhZoY4Tr/FP+TjporX3ivCJUEEvwvXeftAxFVRl4JDin0ys0iPTQ7QlbtVa+iep2n9FUG1NOn5boD9y+iw64UJAcex4MqEIdpCHne9LjpiqshcwLmfEeLlFab28LHnvYPGkXDrSRjCujx8ZmmTw96sAIDqER8p1AqaSojwvONYBGrq+f5/f4xjzZJAknMmxYEN14Phbxc8WEhpe5omWdB80C1Kv6CLsoQnGAIshURSZryToXL" + return testEncryptedData("python", keyValue, pythonEncryptedData, cleanText, someTestArgs) + }, + + //------------------------------------------------------------------------- + + 'streamEncrypt': function (someTestArgs) { + // var key = new Clipperz.Crypto.AES.Key({key: Clipperz.Crypto.SHA.deriveKey("super secure passphrase")}); + var key = new Clipperz.Crypto.AES.Key({key: Clipperz.PM.Crypto.deriveKey("super secure passphrase")}); + var nonce = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(128/8); + + var message = new Clipperz.ByteArray("THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG"); + + var context = new Clipperz.Crypto.AES_2.EncryptionStreamingExecutionContext({ + nonce: nonce, + key: key + }); + + var originalNonce = context.nonce().clone(); + + var deferredResult; + deferredResult = new Clipperz.Async.Deferred("AES_test.streamEncrypt", {trace:false}); + deferredResult.addMethod(context, 'deferredProcessBlock', message); + deferredResult.addCallback(function () { + console.log("originalNonce", originalNonce.toHexString()); + console.log("currentNonce", context.nonce().toHexString()); + }); + deferredResult.callback(); + + return deferredResult; + }, + + 'blockStreamEncrypt': function(someTestArgs) { + var lastNonce; + + var initialKey = Clipperz.PM.Crypto.deriveKey("super secure passphrase"); + var key = new Clipperz.Crypto.AES.Key({key: Clipperz.PM.Crypto.deriveKey("super secure passphrase")}); + var nonce = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(128/8); + + var message = new Clipperz.ByteArray("PRANZO D'ACQUA FA VOLTI SGHEMBI."); + var encryptedMessage = Clipperz.Crypto.AES_2.encrypt(initialKey, message, nonce); + + var chunk1 = new Clipperz.ByteArray("PRANZO D'ACQUA F"); + var chunk2 = new Clipperz.ByteArray("A VOLTI SGHEMBI."); + var encryptedChunk1; + var encryptedChunk2; + + var context = new Clipperz.Crypto.AES_2.EncryptionStreamingExecutionContext({ + nonce: nonce, + key: key + }); + + var deferredResult; + deferredResult = new Clipperz.Async.Deferred("AES_test.blockStreamEncrypt", {trace:false}); + deferredResult.addMethod(context, 'deferredProcessBlock', chunk1); + deferredResult.addCallback(function (aResult) { + encryptedChunk1 = aResult; + lastNonce = context.nonce().clone(); + }); + deferredResult.addMethod(context, 'deferredProcessBlock', chunk2); + deferredResult.addCallback(function (aResult) { + encryptedChunk2 = aResult; + + var compositeEncryptedMessage = new Clipperz.ByteArray(); + // compositeEncryptedMessage.appendBytes(context.nonce().arrayValues()); + compositeEncryptedMessage.appendBytes(lastNonce.arrayValues()); + compositeEncryptedMessage.appendBytes(encryptedChunk1.arrayValues()); + compositeEncryptedMessage.appendBytes(encryptedChunk2.arrayValues()); + + console.log('encrypted message', encryptedMessage.toHexString()); + console.log('composite message', compositeEncryptedMessage.toHexString()); + + console.log('encrypted message', encryptedMessage.toBase64String()); + console.log('composite message', compositeEncryptedMessage.toBase64String()); + + console.log('encrypted message', encryptedMessage.arrayValues()); + console.log('composite message', compositeEncryptedMessage.arrayValues()); + }); + deferredResult.callback(); + + return deferredResult; + }, + + //------------------------------------------------------------------------- + 'syntaxFix': MochiKit.Base.noop +} + +//============================================================================= + +Clipperz.Crypto.PRNG.defaultRandomGenerator().fastEntropyAccumulationForTestingPurpose(); +SimpleTest.runDeferredTests("Clipperz.Crypto.AES_2", tests, {trace:false}); +