def pre_process(self):
        '''
        Pre-processing method
        
        Inputs:
            -
            
        Output:
            None
        '''
              
        # --- Definitions
        nid = self.inputs.getvalue('note')
        pos = self.inputs.getvalue('position')
        
        # --- Database
        note = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid))

        # Get page id
        tmp = note.single('SELECT * FROM Pages WHERE position=?', pos)
        pid = tmp['id']

        # Delete page
        note.delete('Pages', 'id=?', pid)

        # Update following pages position
        note.update('Pages', 'position', 'position-1', 'position>=?', pos, encode=False)
        
        # Delete page elements
        note.delete('Elements', 'page=?', pid)
Beispiel #2
0
 def pre_process(self):
     '''
     Pre-processing method
     
     Inputs:
         -
         
     Output:
         None
     '''
           
     # --- Definitions
     nid = self.inputs.getvalue('note')
     pid = self.inputs.getvalue('id')
     pos = self.inputs.getvalue('position')
     
     # --- Database
     note = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid))
     
     # Update following pages position
     note.update('Pages', 'position', 'position+1', 'position>=?', pos, encode=False)
     
     # Insert element
     note.insert('Pages', id=pid, position=pos)
     
Beispiel #3
0
 def pre_process(self):
     '''
     Pre-processing method
     
     Inputs:
         -
         
     Output:
         None
     '''
    
     # --- Definitions
     pid = self.inputs.getvalue('page')
     eid = self.inputs.getvalue('elm')
     tid = self.inputs.getvalue('target')
    
     # --- Update Note
     
     # Access DB
     db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], self.inputs.getvalue('note')))
     
     # Get source and target positions
     tmp = db.single('SELECT position as pos FROM Elements WHERE id=?', eid)
     src = int(tmp['pos'])        
     
     if tid is '0':
         tmp = db.single('SELECT MAX(position) as pos FROM Elements WHERE page=?', pid)
         pos = int(tmp['pos'])+1
     else:
         tmp = db.single('SELECT position as pos FROM Elements WHERE id=?', tid)
         pos = int(tmp['pos'])
        
     # Store source element
     db.update('Elements', 'position', 0, 'id=?', eid)
         
     # Update in-between elements
     if src<pos:
         
         # Update in-between elements
         db.update('Elements', 'position', 'position-1', 'position>? AND position<?', src, pos, encode=False)
     
         # Restore element
         db.update('Elements', 'position', pos-1, 'id=?', eid)
         
     else:
         
         # Update in-between elements
         db.update('Elements', 'position', 'position+1', 'position>=? AND position<?', pos, src, encode=False)
         
         # Restore element
         db.update('Elements', 'position', pos, 'id=?', eid)
Beispiel #4
0
 def pre_process(self):
     '''
     Pre-processing method
     
     Inputs:
         -
         
     Output:
         None
     '''
    
     # --- Definitions
     pid = self.inputs.getvalue('page')
     eid = self.inputs.getvalue('elm')
     type_elm = self.inputs.getvalue('type')
    
     # --- Update Note
     
     # Access DB
     db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], self.inputs.getvalue('note')))
     
     # Get inserting position
     if eid is '0':
         
         tmp = db.single('SELECT MAX(position) as mp FROM Elements WHERE page=?', pid)
         if tmp['mp'] is None:
             pos = 1
         else:
             pos = int(tmp['mp']) + 1 
         
     else:
         
         elm = db.single('SELECT * FROM Elements WHERE id=?', eid)
         pos = int(elm['position'])
         
     # Update remaining elements
     db.update('Elements', 'position', 'position+1', 'position>=?', pos, encode=False)
     
     # Insert element
     db.insert('Elements', page=pid, position=pos, type=type_elm)
     newid = db.lastid('Elements')
     
     if type_elm in ('header', 'text', 'equation'):
         db.insert(type_elm, id=newid, text='')            
     
     if type_elm in ('media'):
         db.insert(type_elm, id=newid)
     
     print('OK {{"newid": {0}}}'.format(newid))
 def pre_process(self):
     '''
     Pre-processing method
     
     Inputs:
         -
         
     Output:
         None
     '''
    
     # --- Definitions
     eid = self.inputs.getvalue('elm')
    
     # --- Update Note
     db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], self.inputs.getvalue('note')))
     db.update('Elements', 'highlight', 'NOT highlight', 'id=?', eid, encode=False)
Beispiel #6
0
 def pre_process(self):
     '''
     Pre-processing method
     
     Inputs:
         -
         
     Output:
         None
     '''
    
     # --- Definitions
     nid = self.inputs.getvalue('note')
     eid = self.inputs.getvalue('elm')
    
     # --- Update Note
     
     # Access DB
     db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid))
     
     # Get element
     elm = db.single('SELECT * FROM Elements WHERE id=?', eid)
     
     # Remove equation (if any)
     if elm['type'] in ('equation'):
         path = '../Notes/{0}/{1}/Medias/{2}.svg'.format(self.session.user['id'], nid, eid)
         if os.path.isfile(path):
             os.remove(path)
     
     # Remove media file (if any)
     if elm['type'] in ('media'):
         frow = db.single('SELECT ext FROM media WHERE id=?', eid);
         path = '../Notes/{0}/{1}/Medias/{2}.{3}'.format(self.session.user['id'], nid, eid, frow['ext'])
         if os.path.isfile(path):
             os.remove(path)
     
     # Delete element
     db.delete('Elements', 'id=?', eid)
     db.delete(elm['type'], 'id=?', eid)
     
     # Update remaining elements
     db.update('Elements', 'position', 'position-1', 'position>?', elm['position'], encode=False)
     
     
Beispiel #7
0
 def pre_process(self):
     '''
     Pre-processing method
     
     Inputs:
         -
         
     Output:
         None
     '''
           
     # --- Definitions
     typ = self.inputs.getvalue('type')
     val = self.inputs.getvalue('value')
     
     # ---------------------------------------
     #   RENAME
     # ---------------------------------------
     
     if typ == 'page':
     
         nid = self.inputs.getvalue('note')
         pid = self.inputs.getvalue('page')
     
         # --- Update page name
         note = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid))
         note.update('Pages', 'name', val, 'id=?', pid)
         
     if typ == 'note':
     
         nid = self.inputs.getvalue('note')
         
         # --- Update note name
         note = DB('../Notes/{0}/Tree.db'.format(self.session.user['id']))
         note.update('Elements', 'name', val, 'id=?', nid)
         
     if typ == 'group':
     
         gid = self.inputs.getvalue('group')
         
         # --- Update note name
         note = DB('../Notes/{0}/Tree.db'.format(self.session.user['id']))
         note.update('Elements', 'name', val, 'id=?', gid)
Beispiel #8
0
    def pre_process(self):
        '''
        Pre-processing method
        
        Inputs:
            -
            
        Output:
            None
        '''
              
        # --- Definitions
        nid = self.inputs.getvalue('note')
        eid = self.inputs.getvalue('elm')
        
        # --- Update Note
        db = DB('../Notes/{0}/{1}/Note.db'.format(self.session.user['id'], nid))
        res = db.single('SELECT type FROM Elements WHERE id=?', eid);
        
        # ---------------------------------------
        #   HEADER
        # ---------------------------------------
        
        if res['type'] in ('header'):
        
            key = self.inputs.getvalue('key')
            value = self.inputs.getvalue('value')
            
            if key in ('level'):
            
                db.update(res['type'], key, value, 'id=?', eid)
            
            else:
                
                if not isinstance(value, str):
                    value = ''
                
                db.update(res['type'], 'text', value, 'id=?', eid)
        
        # ---------------------------------------
        #   TEXT
        # ---------------------------------------
        
        if res['type'] in ('text'):
        
            value = self.inputs.getvalue('value')
            if not isinstance(value, str):
                value = ''
            
            db.update(res['type'], 'text', value, 'id=?', eid)
        
        # ---------------------------------------
        #   EQUATION
        # ---------------------------------------
        
        if res['type'] in ('equation'):
            
            # Get value
            value = self.inputs.getvalue('value').strip()
            if not isinstance(value, str):
                value = ''
            
            # Image name
            fname = '../Notes/{0}/{1}/Medias/{2}.svg'.format(self.session.user['id'], nid, eid)
            
            prev = db.single('SELECT text FROM equation WHERE id=?', eid);
            if prev['text']!=value:
            
                # --- Update DB
                db.update(res['type'], 'text', value, 'id=?', eid)
                
                # --- Recompute image
                
                import tempfile
                import matplotlib
                matplotlib.use('Agg')
                import matplotlib.pyplot as plt

                fig = plt.figure()
                F = re.sub("\n+", "\n", value)
                F = '$'+F.replace('\n', '$\n$')+'$'
                text = fig.text(0, 0, F)

                # Saving the figure will render the text
                dpi = 100
                tmp = tempfile.NamedTemporaryFile()
                fig.savefig(tmp.name, dpi=dpi)
                tmp.close()

                # Now we can work with text's bounding box
                bbox = text.get_window_extent()
                width, height = bbox.size / float(dpi) + 0.005

                # Adjust the figure size so it can hold the entire text
                fig.set_size_inches((width, height))

                # Adjust text's vertical position
                dy = (bbox.ymin/float(dpi))/height
                text.set_position((0, -dy))

                # Save the adjusted text
                fig.savefig(fname, transparent=True)
                
            # Get image width
            w = None
            ifile = open(fname, 'r')
            for line in ifile:
                m = re.search('width="([0-9]*)pt"', line)
                if m is not None:
                    w = float(m.group(1))
                    break
                
            print('OK {{"src": "{0}", "width": {1}}}'.format(fname, w*float(self.settings.get('equation_display_factor'))))
       
        # ---------------------------------------
        #   IMAGE, MOVIE
        # ---------------------------------------
        
        if res['type'] in ('media'):
            
            # Upload file
            F = self.inputs['file']
            if not F.filename:
                print('Error during file upload.')
                return
            
            # --- Check file information
            
            # Get name and extension
            name, ext = os.path.splitext(F.filename)
            ext = ext[1:]
            
            # Check extension
            if ext in self.settings.IMAGE:
                type = 'image'
            elif ext in self.settings.VIDEO:
                type = 'video'
            else:
                print("Couldn't recognize the file type during upload.")
                return
            
            # --- Remove previous file
            prev = db.single('SELECT ext FROM {0} WHERE id=?'.format(res['type']), eid);
            path = '../Notes/{0}/{1}/Medias/{2}.{3}'.format(self.session.user['id'], nid, eid, prev['ext'])
            if os.path.isfile(path):
                os.remove(path)
            
            # --- Save new file
            path = 'Notes/{0}/{1}/Medias/{2}.{3}'.format(self.session.user['id'], nid, eid, ext)
            open('../{0}'.format(path), 'wb').write(F.file.read())
        
            db.update(res['type'], 'name', name, 'id=?', eid)
            db.update(res['type'], 'ext', ext, 'id=?', eid)
            db.update(res['type'], 'type', type, 'id=?', eid)
            
            print('OK {{"type": "{0}", "src": "{1}"}}'.format(type, path))
                
        # --- Update last modification timestamp
        now = str(datetime.now())[0:19]
        db.update('Elements', 't_modification', now, 'id=?', eid)